<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="https://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:cf="https://www.futureplc.com/rss/content-flags"
>
    <channel>
                    <atom:link href="https://www.tomsguide.com/feeds/tag/apple-desktops" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Apple-desktops ]]></title>
                <link>https://www.tomsguide.com/computing/desktop-computers/apple-desktops</link>
        <description><![CDATA[ All the latest apple-desktops content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Mon, 27 Jul 2026 10:00:00 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ I've been an Apple user for 30 years and these are my golden rules to never pay full price ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/ive-been-an-apple-user-for-30-years-and-these-are-my-golden-rules-to-never-pay-full-price</link>
                                                                            <description>
                            <![CDATA[ From iPhones to MacBooks, I've used Apple devices all my life. Here's how I've managed to never pay full price and avoid paying the Apple tax. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jUoGcyzjRugJVBebFP7bAE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/yq6C23CRZR3VsDxd67YkLe-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 27 Jul 2026 10:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/yq6C23CRZR3VsDxd67YkLe-1280-80.jpg">
                                                            <media:credit><![CDATA[Amazon edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Collage of Apple devices against yellow background]]></media:description>                                                            <media:text><![CDATA[Collage of Apple devices against yellow background]]></media:text>
                                <media:title type="plain"><![CDATA[Collage of Apple devices against yellow background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/yq6C23CRZR3VsDxd67YkLe-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>My obsession with Apple started in high school when my mom bought me a Performa 637 CD. It was my first personal computer and I was immediately hooked on the icon-driven System 7, which was the name Apple used before making the switch to Mac OS. </p><p>Sure, there were more powerful PCs at the time — and most of my friends were using Windows — but my Mac never crashed and it was powerful enough to run my favorite first-person shooter: the Apple exclusive Bungie Marathon (1994). So I took pride in being part of the Apple minority.</p><p>Fast forward to 2026 and I'm still a loyal Mac user primarily working on an M4 Pro-based Mac mini. Throughout the years I've also owned iPhones, iPads, Apple Watches, and iMacs. Yes, I've dabbled with Windows machines and Android smartphones, but there's something about Apple's closed ecosystem that just makes my life easier and well worth the price of admission. </p><p>My wallet, however, may disagree. Apple devices are renown for being pricier than their Windows and Android based counterparts. Fortunately, there are many ways to save on Apple gear. In fact, I always make it a point to avoid paying full price for my Apple kit and below I'm sharing my favorite tips and tricks.</p><h3 class="article-body__section" id="section-trade-in-that-old-mac"><span>Trade-in that old Mac</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="C3B3avxZEqqeDTz86xozCL" name="MacBook Air M1 review Performance Graphics alt 2.jpg" alt="Apple MacBook Air M1 (late 2020) review" src="https://cdn.mos.cms.futurecdn.net/C3B3avxZEqqeDTz86xozCL.jpg" mos="" align="middle" fullscreen="" width="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>Trading in old devices is hands-down my favorite way to save on new Apple purchases. Whether it's an old iPhone or a gently-used MacBook, if you're willing to part with it —the Apple Store will give you an instant store credit for your device. You can trade-in iPhones, Apple Watches, iPads, Macs, and even Android smartphones. You can trade-in your device in person at your local Apple Store or online. </p><p>Just head over to the <a href="https://www.apple.com/shop/trade-in" target="_blank" rel="nofollow">Apple Trade-In website</a> to start the process. I also recommend the <a href="https://www.bestbuy.com/trade-in" target="_blank" rel="nofollow">Best Buy Trade-In</a> program, which is pretty straightforward and provides quotes on the spot. My only advice is that you shop around for the best offer. For example, sometimes you might get a juicier offer from an Authorized Apple reseller than the Apple Store. </p><h3 class="article-body__section" id="section-don-t-buy-current-gen"><span>Don't buy current-gen</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8dacpVN2gJ33KymM67zxAB" name="TG_apple-watch-8_LIST4.jpg" alt="Apple Watch Series 8 shown on wrist" src="https://cdn.mos.cms.futurecdn.net/8dacpVN2gJ33KymM67zxAB.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I get it. Nothing beats owning a flagship device. The speedier performance, the thinner design, the brighter display — it's enough to make you want to upgrade each time. However, these days you don't need to. My four-year old Apple Watch 8 still runs like new and if my iMac 5K supported the latest macOS updates, I'd still be using it. </p><p>One of the easiest ways to save on Mac purchases is by opting for a previous-generation device. It can easily save you $100 if not more. It's worth noting that the Apple Store doesn't always carry previous-gen tech, so when shopping for older generations I tend to rely on retailers like Amazon and Best Buy. They won't always have stock, but with a little digging around you'll be able to find a cheaper version of Apple's current flagship. </p><h3 class="article-body__section" id="section-go-big-on-your-purchase"><span>Go big on your purchase</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eaiLkhbaJ3LTzQL9PEqtfC" name="Mac mini M4-07-LIST1" alt="The Mac mini M4 upright on a desk showing the Apple logo" src="https://cdn.mos.cms.futurecdn.net/eaiLkhbaJ3LTzQL9PEqtfC.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Apple devices are renown for lasting a long time. (I tend to get at least 5 years from mine). So when it comes time to purchasing a new device, I always recommended spending a little more for the upgraded model. This is more important that ever because today's Macs are no longer user upgradeable. </p><p>So if you want to squeeze the most life out of your device, I recommend buying big. For example, when I purchased my Mac mini, I splurged on the M4 Pro CPU and upgraded both my RAM and SSD. My iMac 5K lasted me nearly a decade before I upgraded, so I'm hoping to get the same or similar lifespan from my current machine. </p><h3 class="article-body__section" id="section-take-advantage-of-student-discounts"><span>Take advantage of student discounts</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bULz3Qsy86ZB7ckrB7j7ES" name="Apple MacBook Air M5" alt="Apple MacBook Air M5." src="https://cdn.mos.cms.futurecdn.net/bULz3Qsy86ZB7ckrB7j7ES.jpg" mos="" align="middle" fullscreen="" width="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's Education Store discount is available year-round. Depending on what you're buying, you can save as much as $100 if you can verify your student status. In the past, I've actually recommended people avoid it because you can usually find better dollar-off discounts at authorized retailers like Amazon or Best Buy. However, since <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's summer price hike</a>, Apple deals have been a little harder to come by. </p><p>Additionally, the Apple Back to School Sale is underway through August 27, so in addition to that student discount you'll also get from a $100 to $150 Apple gift card on select purchases. That sweetens the deal even more. For example, the <a href="https://www.apple.com/us-edu/shop/buy-mac/macbook-air" target="_blank" rel="nofollow">Apple Education Store has the MacBook Air M5 on sale for $1,199</a>. That's $100 off and you also get a <a href="https://www.apple.com/us-edu/shop/buy-mac/macbook-air" target="_blank" rel="nofollow">free $100 Apple gift card</a>. Sure, <a href="https://www.amazon.com/Apple-2026-MacBook-13-inch-Laptop/dp/B0GR19X8DC" target="_blank" rel="nofollow">Amazon offers the same price</a>, but there's no freebie gift card. Likewise, the <a href="https://www.apple.com/us-edu/shop/buy-mac/macbook-neo" target="_blank" rel="nofollow">Apple Education Store has the MacBook Neo on sale for $599</a>, which is $100 off. There's no gift card included with this offer, but I can guarantee you that no retailer is taking $100 off the MacBook Neo anytime soon. </p><h3 class="article-body__section" id="section-don-t-be-afraid-of-refurbished"><span>Don't be afraid of refurbished</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="sneq3FFhxfBE3QJ7AxryJf" name="Apple Gaming (Jul 2024).jpg" alt="iPad Pro M4" src="https://cdn.mos.cms.futurecdn.net/sneq3FFhxfBE3QJ7AxryJf.jpg" mos="" align="middle" fullscreen="" width="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 a germophobe, I used to cringe at the idea of buying used tech. However, buying refurbished Apple gear is a great way to help your bank account and the planet. Apple restores and/or replaces everything during the refurbishing process, so my unfounded fear of getting a device with a random hair or grease stain on it is baseless. </p><p>In fact, the Apple Store is known for the excellent condition of its refurbished products and everything is backed by a 1-year Apple warranty. (That's the same warranty you'd get if you were to purchase a new Apple device). At the time of this writing, you can find <a href="https://www.apple.com/shop/refurbished/mac/macbook-air" target="_blank" rel="nofollow">MacBook Airs from $1,019</a> and <a href="https://www.apple.com/shop/refurbished/mac/macbook-neo" target="_blank" rel="nofollow">MacBook Neos from $599</a>.</p><h3 class="article-body__section" id="section-best-apple-deals-now"><span>Best Apple Deals Now</span></h3><div class="product"><a data-dimension112="1df69ed6-879c-11f1-9c73-8db59ee46abd" data-action="Deal Block" data-label="Apple Watch SE 3 review" data-dimension48="Apple Watch SE 3 review" data-dimension25="$219" href="https://www.amazon.com/dp/B0FQFNRH72" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1250px;"><p class="vanilla-image-block" style="padding-top:120.00%;"><img id="P5u4zYQs5ZvG5TAnrthGhE" name="Apple Watch SE 3 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/P5u4zYQs5ZvG5TAnrthGhE.jpg" mos="" align="middle" fullscreen="" width="1250" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Watch SE 3 sports a lot of new features that redefine Apple's entry-level smartwatch. Among them, you'll find an always-on display, S10 processor, and better health features, such as support for Sleep Score and Workout Buddy. (The latter is powered by Apple Intelligence and requires an iPhone 15 Pro or higher). In our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review" data-dimension112="1df69ed6-879c-11f1-9c73-8db59ee46abd" data-action="Deal Block" data-label="Apple Watch SE 3 review" data-dimension48="Apple Watch SE 3 review" data-dimension25="$219">Apple Watch SE 3 review</a>, we called it the best smartwatch value around. It's available in 40mm and 44mm designs. <a class="view-deal button" href="https://www.amazon.com/dp/B0FQFNRH72" target="_blank" rel="nofollow" data-dimension112="1df69ed6-879c-11f1-9c73-8db59ee46abd" data-action="Deal Block" data-label="Apple Watch SE 3 review" data-dimension48="Apple Watch SE 3 review" data-dimension25="$219">View Deal</a></p></div><div class="product"><a data-dimension112="1df69f44-879c-11f1-8afa-0776af3b4001" data-action="Deal Block" data-label="Apple Watch 11 review" data-dimension48="Apple Watch 11 review" data-dimension25="$299" href="https://www.amazon.com/dp/B0FQF9ZX7P" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1264px;"><p class="vanilla-image-block" style="padding-top:118.67%;"><img id="zpTresKtjPzk37YdCtdZd9" name="Apple Watch 11 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zpTresKtjPzk37YdCtdZd9.jpg" mos="" align="middle" fullscreen="" width="1264" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Watch 11 features an always-on screen that's 2x more scratch resistant than its predecessor. It's powered by Apple's S10 processor and packs an improved 24-hour battery, 5G radio (cellular model only), Sleep Score, and hypertension alerts. In our <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-11-review" data-dimension112="1df69f44-879c-11f1-8afa-0776af3b4001" data-action="Deal Block" data-label="Apple Watch 11 review" data-dimension48="Apple Watch 11 review" data-dimension25="$299">Apple Watch 11 review</a> we said it's the best overall Apple Watch for most people and one of the only smartwatches on the market with hypertension alerts, detecting signs of possible high blood pressure.<a class="view-deal button" href="https://www.amazon.com/dp/B0FQF9ZX7P" target="_blank" rel="nofollow" data-dimension112="1df69f44-879c-11f1-8afa-0776af3b4001" data-action="Deal Block" data-label="Apple Watch 11 review" data-dimension48="Apple Watch 11 review" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="44423074-8791-11f1-8552-71f5c166c217" data-action="Deal Block" data-label="MacBook Neo review" data-dimension48="MacBook Neo review" data-dimension25="$599" href="https://www.apple.com/shop/refurbished/mac/macbook-neo" 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.jpg" mos="" align="middle" fullscreen="" width="1500" height="916" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With the MacBook Neo currently costing $100 more than its debut price, this deal is even more enticing. The Apple Store has refurbished models on sale from $599. The base model includes 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. In our <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review" data-dimension112="44423074-8791-11f1-8552-71f5c166c217" data-action="Deal Block" data-label="MacBook Neo review" data-dimension48="MacBook Neo review" data-dimension25="$599">MacBook Neo review</a>, we said no other laptop comes close to the Neo in terms of bang for your buck value and performance.<a class="view-deal button" href="https://www.apple.com/shop/refurbished/mac/macbook-neo" target="_blank" rel="nofollow" data-dimension112="44423074-8791-11f1-8552-71f5c166c217" data-action="Deal Block" data-label="MacBook Neo review" data-dimension48="MacBook Neo review" data-dimension25="$599">View Deal</a></p></div><div class="product"><a data-dimension112="44422ef8-8791-11f1-a6e8-6b3c876689da" data-action="Deal Block" data-label="MacBook Air M5 review" data-dimension48="MacBook Air M5 review" data-dimension25="$1199" href="https://www.amazon.com/dp/B0GR19X8DC" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:60.73%;"><img id="R5hxVnj9RteJKiej8tQbLH" name="MacBook Air M5 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R5hxVnj9RteJKiej8tQbLH.jpg" mos="" align="middle" fullscreen="" width="1500" height="911" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The base 13-inch MacBook Air M5 now costs $1,299, which is a $200 increase from its debut price. It features a 13.6-inch (2560 x 1664) display, Apple M5 chipset, 16GB of RAM, 512GB SSD, and support for WiFi 7 and Bluetooth 6. In our <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-m5-review" data-dimension112="44422ef8-8791-11f1-a6e8-6b3c876689da" data-action="Deal Block" data-label="MacBook Air M5 review" data-dimension48="MacBook Air M5 review" data-dimension25="$1199">MacBook Air M5 review</a> we said it's the laptop to get for most people and users with an M3 or older chipset will notice a major performance boost. <a class="view-deal button" href="https://www.amazon.com/dp/B0GR19X8DC" target="_blank" rel="nofollow" data-dimension112="44422ef8-8791-11f1-a6e8-6b3c876689da" data-action="Deal Block" data-label="MacBook Air M5 review" data-dimension48="MacBook Air M5 review" data-dimension25="$1199">View Deal</a></p></div><div class="product"><a data-dimension112="4442301a-8791-11f1-8c72-77b3e9f1e67d" data-action="Deal Block" data-label="MacBook Pro M5 review" data-dimension48="MacBook Pro M5 review" data-dimension25="$1849" href="https://www.amazon.com/dp/B0FWD623D1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:60.53%;"><img id="GnpQTG2JTWSenJyfrWydnm" name="MacBook Pro M5 deals" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GnpQTG2JTWSenJyfrWydnm.jpg" mos="" align="middle" fullscreen="" width="1500" height="908" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The new MacBook Pro features Apple's latest M5 chipset, with a 10-core CPU and 10-core GPU. It's designed to deliver a huge boost in AI and graphics performance for everyone from students to creatives. In our <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-review" data-dimension112="4442301a-8791-11f1-8c72-77b3e9f1e67d" data-action="Deal Block" data-label="MacBook Pro M5 review" data-dimension48="MacBook Pro M5 review" data-dimension25="$1849">MacBook Pro M5 review</a> we said the Editor's Choice machine is a fantastic option for power users who demand a powerful and portable notebook with epic (18 hour) battery life. The base model features a 14.2-inch 3024 x 1964 Retina display, Apple M5 CPU, 16GB of RAM, and a 512GB SSD.<br><strong>Price check: </strong><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" target="_blank" rel="nofollow"><strong>$1,999 @ Best Buy</strong></a><a class="view-deal button" href="https://www.amazon.com/dp/B0FWD623D1" target="_blank" rel="nofollow" data-dimension112="4442301a-8791-11f1-8c72-77b3e9f1e67d" data-action="Deal Block" data-label="MacBook Pro M5 review" data-dimension48="MacBook Pro M5 review" data-dimension25="$1849">View Deal</a></p></div><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop more deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&rows=6&view_mode=savings_squad&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function getTimeAgo(dateString) {        if (!dateString) return '';        const date = new Date(dateString);        const now = new Date();        const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);        if (diffInSeconds < 60) return 'Just now';        const diffInMinutes = Math.floor(diffInSeconds / 60);        if (diffInMinutes < 60) return `${diffInMinutes} min${diffInMinutes > 1 ? 's' : ''} ago`;        const diffInHours = Math.floor(diffInMinutes / 60);        if (diffInHours < 24) return `${diffInHours} hr${diffInHours > 1 ? 's' : ''} ago`;        const diffInDays = Math.floor(diffInHours / 24);        if (diffInDays < 30) return `${diffInDays} day${diffInDays > 1 ? 's' : ''} ago`;        const diffInMonths = Math.floor(diffInDays / 30);        if (diffInMonths < 12) return `${diffInMonths} mo${diffInMonths > 1 ? 's' : ''} ago`;        const diffInYears = Math.floor(diffInDays / 365);        return `${diffInYears} yr${diffInYears > 1 ? 's' : ''} ago`;      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;      position: relative;      z-index: 20;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      margin: 0 auto;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {      display: grid;      width: 100%;      grid-template-columns: repeat(4, 1fr);      gap: 12px;      margin: 0 auto;      max-width: 800px;    }                 .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;      width: 100%;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      width: 100%;      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }    @container tg-df (max-width: 768px) {      .tg-df-filters-container {      position: relative;      width: 100%;      max-width: 800px;    }    .tg-df-scroll-btn {      display: none;      position: absolute;      top: 50%;      transform: translateY(-50%);      width: 32px;      height: 32px;      background: white;      border: 1px solid var(--tg-df-border);      border-radius: 50%;      align-items: center;      justify-content: center;      cursor: pointer;      z-index: 10;      box-shadow: 0 2px 8px rgba(0,0,0,0.1);      color: var(--tg-df-text-primary);      padding: 0;    }    .tg-df-scroll-btn svg {      width: 16px;      height: 16px;    }    .tg-df-scroll-btn:hover {      background: #f4f4f4;    }    .tg-df-scroll-btn.left {      left: 0px;    }    .tg-df-scroll-btn.right {      right: 0px;    }    @container tg-df (max-width: 768px) {      .tg-df-scroll-btn {        display: flex;        top: 22px; /* vertically center within the 44px high filter buttons */      }    }    .tg-df-filters {        width: 100%;        margin: 0;        margin-bottom: -320px;        padding: 0 16px 320px 16px;        display: flex;        flex-wrap: nowrap;        gap: 8px;        overflow-x: auto;        overflow-y: hidden;        pointer-events: none;        scrollbar-width: none;        -webkit-overflow-scrolling: touch;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }      .tg-df-sort-wrapper {        pointer-events: auto;        flex: 0 0 auto;        width: 175px;        min-width: 175px;      }    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 120px;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 16px 16px 8px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }                  .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;        width: auto;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;      width: 100vw;      max-width: 1200px;      position: relative;      left: 50%;      transform: translateX(-50%);    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 14px;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    .tg-df-grid-wrapper { position: relative; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn {      display: inline-flex;      align-items: center;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.40);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #1f69ff; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #0056e0; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }    .tg-df-savings-squad-header { margin-bottom: 24px; text-align: center; display: none; }    .tg-df-banner-img-desktop { display: block; width: 100%; height: auto; margin-bottom: 32px; }    .tg-df-banner-img-mobile { display: none; width: 100%; height: auto; margin-bottom: 32px; }    @container tg-df (max-width: 600px) {      .tg-df-banner-img-desktop { display: none; }      .tg-df-banner-img-mobile { display: block; }    }    .tg-df-header-title { font-size: 28px; font-weight: 700; color: var(--tg-df-text); margin: 32px 0 12px 0; line-height: 1.3; }    .tg-df-header-subtitle { font-size: 16px; color: var(--tg-df-text-muted); margin: 0 0 32px 0; line-height: 1.5; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3Cdiv class="tg-df-savings-squad-header" id="tg-df-savings-squad-header">      \x3Cpicture>        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/xkh2og7m3d1778189998.png" alt="Deals Banner" class="tg-df-banner-img-desktop" />        \x3Cimg src="https://cdn.mos.cms.futurecdn.net/flexiimages/gmak6rtdf41778245089.png" alt="Deals Banner Mobile" class="tg-df-banner-img-mobile" />      \x3C/picture>      \x3Cdiv class="tg-df-header-text">        \x3Ch2 class="tg-df-header-title" id="tg-df-header-title">Editor's Choice Deals\x3C/h2>        \x3Cp class="tg-df-header-subtitle" id="tg-df-header-subtitle">Discover the best discounts currently available, curated daily by the Tom's Guide Savings Squad.\x3C/p>      \x3C/div>    \x3C/div>    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Televisions" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/wcMxTsHgqu3roMbAx7RLnT-132-100.png" alt="TVs" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">TVs\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Phones" data-pr="over50">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/G3KGaRGzj24F6PUsw4bWpT-132-100.png" alt="Phones" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Phones\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Computing" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/znNvsLzx8NEgNkD9HSFSnT-132-100.png" alt="Computing" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Computing\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Gaming" data-pr="all">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/Pgew8yaRQeZFHqHjTzvBnT-132-100.png" alt="Gaming" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Gaming\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Mattresses" data-pr="over500">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/cW7xsaLyesxkHFVSiC4kmT-132-100.png" alt="Mattresses" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Mattresses\x3C/span>            \x3C/div>                      \x3Cdiv class="tg-df-roundel tg-df-carousel-cat" data-query="Audio" data-pr="over30">              \x3Cdiv class="tg-df-roundel-img-box">                 \x3Cimg src="https://cdn.mos.cms.futurecdn.net/pCvBVHuhaQVjKt3VgCjbqT-132-100.png" alt="Audio" />              \x3C/div>              \x3Cspan class="tg-df-roundel-label">Audio\x3C/span>            \x3C/div>                  \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E      \x3Cdiv class="tg-df-top-bar" id="tg-df-top-bar" style="position: relative; z-index: 100; margin: 0 auto 20px;">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>      \x3C/div>    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">              \x3Cdiv class="tg-df-filters-container" style="position: relative; width: 100%; max-width: 800px; margin: 0 auto;">          \x3Cbutton class="tg-df-scroll-btn left" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: -200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M15 18l-6-6 6-6"/>\x3C/svg>          \x3C/button>          \x3Cbutton class="tg-df-scroll-btn right" style="display: none;" onclick="this.parentElement.querySelector('.tg-df-filters').scrollBy({left: 200, behavior: 'smooth'})">            \x3Csvg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">\x3Cpath d="M9 18l6-6-6-6"/>\x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-filters">          \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>          \x3C/div>        \x3C/div>        \x3C/div>      \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();        }        getViewMode() {          console.log("DEBUG getViewMode -> override:", this.viewModeOverride, "editorMode:", this.editorMode);          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          console.log("[DEBUG] applyLayoutMode CALLED! mode=", mode);          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          const showHeaderDetails = params.get('show_header_details') !== 'false';          const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          const topBarDiv = this.root.querySelector('#tg-df-top-bar');          const headerElement = this.root.querySelector('#tg-df-savings-squad-header');          if (headerElement) {             headerElement.style.display = (mode === 'savings_squad' && showHeaderDetails) ? 'block' : 'none';          }          if (mode === 'carousel') {             this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (topBarDiv) topBarDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.add('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (topBarDiv) topBarDiv.style.display = 'block';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!this.viewModeOverride && initialViewMode) {            this.viewModeOverride = initialViewMode;          }          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Gaming laptops';          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (this.viewModeSelect && params.has('view_mode')) {            this.viewModeSelect.value = params.get('view_mode');          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'date_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }          const headerTitleEl = this.root.querySelector('#tg-df-header-title');          const headerSubtitleEl = this.root.querySelector('#tg-df-header-subtitle');          if (params.has('widget_title') && headerTitleEl) {             headerTitleEl.textContent = params.get('widget_title');          }          if (params.has('widget_subtitle') && headerSubtitleEl) {             headerSubtitleEl.textContent = params.get('widget_subtitle');          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            if (this.getViewMode() === 'savings_squad') {              this.searchInput.value = '';            } else {              this.searchInput.value = this.currentQuery;            }          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'date_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const handleFiltersScroll = () => {            const filters = this.root.querySelector('.tg-df-filters');            const leftBtn = this.root.querySelector('.tg-df-scroll-btn.left');            const rightBtn = this.root.querySelector('.tg-df-scroll-btn.right');            if (filters && leftBtn && rightBtn) {              const { scrollLeft, scrollWidth, clientWidth } = filters;              leftBtn.style.display = scrollLeft > 0 ? 'flex' : 'none';              rightBtn.style.display = Math.ceil(scrollLeft + clientWidth) < scrollWidth - 5 ? 'flex' : 'none';            }          };          const filters = this.root.querySelector('.tg-df-filters');          if (filters) {            filters.addEventListener('scroll', handleFiltersScroll);            window.addEventListener('resize', handleFiltersScroll);            setTimeout(handleFiltersScroll, 100);                        // Also call after rendering dropdowns            const origRenderCategories = this.renderCategories;            if (origRenderCategories) {               this.renderCategories = (...args) => {                 origRenderCategories.apply(this, args);                 setTimeout(handleFiltersScroll, 50);               };            }          }                const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          const showAutocomplete = () => {             if (this.getViewMode() !== 'savings_squad' || !this.autocompleteDropdown || !this.airedaleTags) return;                          let terms = this.airedaleTags;             if (this.airedaleBrands) {                terms = terms.concat(this.airedaleBrands.map(b => b.formatted_value));             }             terms = [...new Set(terms)];                          const query = this.searchInput.value.trim();             let matches = [];             if (query.length > 0) {                 matches = terms.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase());             } else {                 matches = terms;             }                          if (matches.length > 0) {                 this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                 this.autocompleteDropdown.classList.add('active');             } else {                 this.autocompleteDropdown.classList.remove('active');             }          };          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('focus', showAutocomplete);            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              showAutocomplete();              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  if (this.getViewMode() === 'savings_squad') {                    this.activeDealTag = null;                    this.currentQuery = '';                    if (this.categoryFilter) this.categoryFilter.value = 'all';                    this.fetchDeals('');                  } else {                    this.deals = [];                    this.render();                  }                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                                let isTag = false;                if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;                if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;                this.activeDealTag = isTag ? query : null;                                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   if (query.length === 0 && this.getViewMode() === 'savings_squad') {                       if (this.categoryFilter) this.categoryFilter.value = 'all';                   }                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   if (this.categoryFilter && this.airedaleTags.includes(tag)) {                       this.categoryFilter.value = tag;                   }                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                            let isTag = false;              if (this.airedaleTags && this.airedaleTags.includes(query)) isTag = true;              if (this.airedaleBrands && this.airedaleBrands.some(b => b.formatted_value === query)) isTag = true;              this.activeDealTag = isTag ? query : null;                            this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 if (query.length === 0 && this.getViewMode() === 'savings_squad') {                     if (this.categoryFilter) this.categoryFilter.value = 'all';                 }                 this.fetchDeals(query);              }            });          }          if(this.sortSelect && this.sortSelect.querySelector('option[value="date_desc"]') === null) {              const option = document.createElement('option');              option.value = "date_desc";              option.text = "Newest First";              this.sortSelect.insertBefore(option, this.sortSelect.firstChild);          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               if (val) {                 this.currentQuery = val;               } else {                 if (this.searchInput && this.currentQuery === document.querySelector('#tg-df-brand-trigger')?.getAttribute('data-active-brand')) {                     // don't clear current query if a brand is selected                 } else if (this.searchInput) {                     this.currentQuery = '';                     this.searchInput.value = '';                 }               }               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = 'date_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }        async fetchDeals(query) {          this.showLoading();          this.deals = [];          this.displayLimit = this.getRowsLimit();                    try {            console.log("getViewMode returns:", this.getViewMode());            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad();            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query);               } else {                 await this.fetchHawkDeals(query);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const siteParam = this.website || 'tomsguide';            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=${siteParam}&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (!this.activeDealTag && this.currentQuery) {             const tagMatch = this.airedaleTags.find(t => t.toLowerCase() === this.currentQuery.toLowerCase());             if (tagMatch) {                this.activeDealTag = tagMatch;             }          }          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const siteParam = this.website || 'tomsguide';             const url = `https://airedale.futurecdn.net/feeds/feed_1781000519267.json?site=${siteParam}&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let seenUrls = new Set();                    let overallBrandsCounts = {};                    // First pass: extract ALL brands from topArticles so the dropdown has all options          topArticles.forEach((article) => {             if (!article.articlepage) return;             let pageData = [];             try { pageData = JSON.parse(article.articlepage[0]); } catch(e){ console.warn(e); }             const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');             savingsSquad.forEach((block) => {                const data = block.data || {};                if (data.brand) {                   const cleanBrand = data.brand.replace(/^\d+\.\s*/, '').trim();                   overallBrandsCounts[cleanBrand] = (overallBrandsCounts[cleanBrand] || 0) + 1;                }             });          });          targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                if (externalUrl) {                   if (seenUrls.has(externalUrl)) return;                  seenUrls.add(externalUrl);                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || '',                   authorName: article.articleauthortext ? article.articleauthortext[0] : (article.articleauthor ? article.articleauthor[0] : ''),                   authorRole: article.articleauthorrole ? article.articleauthorrole[0] : '',                   authorImage: article.articleauthormedia ? article.articleauthormedia[0] : '',                   documentUrl: article.documenturl ? article.documenturl[0] : '',                   modifiedDate: article.contentmodifieddate || article.modifieddate || ''                });             });          });                    const airedaleBrandsList = Object.keys(overallBrandsCounts).map(b => ({              formatted_value: b,              count: overallBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : 'date_desc';          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                ${_div}              ${_div}              \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin:0; border-radius:0;">${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)}${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = 'View Deal';              if (isSavingsSquadMode) {                priceGroupHtml = ``;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = isSavingsSquadMode ? `` : `                \x3Cdiv class="tg-df-card-price-group">                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                          \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                          \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                            var c = this.parentNode;                            if (this.dataset.expanded === 'true') {                              var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                              if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                              pd.style.display = '-webkit-box';                              pd.style.webkitLineClamp = '3';                              this.textContent = 'READ MORE';                              this.style.position = 'absolute';                              this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                              this.style.paddingLeft = '16px';                              this.dataset.expanded = 'false';                            } else {                              var pd = this.previousElementSibling;                              pd.style.display = 'inline';                              pd.style.webkitLineClamp = 'unset';                              this.textContent = 'READ LESS';                              this.style.position = 'static';                              this.style.background = 'transparent';                              this.style.paddingLeft = '4px';                              this.dataset.expanded = 'true';                              pd.appendChild(this);                            }                          ">READ MORE${_button}                        \x3C/div>` : ''}                      ${_div}                    ${_div}                    ${deal.authorName ? `                      \x3Cdiv class="tg-df-author-line-mobile" style="padding: 0 0 12px 0; background: transparent;">                         \x3Cdiv style="display: flex; align-items: center; gap: 12px;">                            ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="40" height="40" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 40px; min-height: 40px;">` : ''}                            \x3Cdiv style="display: flex; flex-direction: column;">                               \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">\x3Cspan style="color: #FF6600;">${this.escapeHTML(deal.merchant)}${_span} deal recommended by:${_div}                               \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.3;">                                  \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                  ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                  ${deal.modifiedDate ? `\x3Cdiv style="color: var(--tg-df-text-muted); margin-top: 2px;">${getTimeAgo(deal.modifiedDate)}${_div}` : ''}                               ${_div}                            ${_div}                         ${_div}                      ${_div}                    ` : ''}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>View Deal${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                  \x3Cdiv class="tg-df-card-merchant-wrapper" style="position: absolute; bottom: 0; right: 0; background: transparent; padding: 8px 12px; z-index: 10;">                     \x3Cspan class="tg-df-card-merchant-pill" style="text-align: right; margin-bottom: 0;" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cdiv class="tg-df-card-desc-container" style="margin-bottom: 12px; position: relative;">                    \x3Cp class="tg-df-card-desc-content" style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 0; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;">${this.escapeHTML(deal.description)}${_p}                    \x3Cbutton type="button" class="tg-df-card-desc-btn" style="display: none; appearance: none; border: none; color: #000000; font-size: 11px; font-weight: 700; text-transform: uppercase; cursor: pointer; font-family: inherit; position: absolute; bottom: 2px; right: 0; background: linear-gradient(to right, transparent, #fff 20%, #fff); padding: 0 0 0 16px;" onclick="                      var c = this.parentNode;                      if (this.dataset.expanded === 'true') {                        var pd = (c.tagName === 'P') ? c : this.previousElementSibling;                        if (c.tagName === 'P') { c.parentNode.appendChild(this); pd = c; }                        pd.style.display = '-webkit-box';                        pd.style.webkitLineClamp = '3';                        this.textContent = 'READ MORE';                        this.style.position = 'absolute';                        this.style.background = 'linear-gradient(to right, transparent, #fff 20%, #fff)';                        this.style.paddingLeft = '16px';                        this.dataset.expanded = 'false';                      } else {                        var pd = this.previousElementSibling;                        pd.style.display = 'inline';                        pd.style.webkitLineClamp = 'unset';                        this.textContent = 'READ LESS';                        this.style.position = 'static';                        this.style.background = 'transparent';                        this.style.paddingLeft = '4px';                        this.dataset.expanded = 'true';                        pd.appendChild(this);                      }                    ">READ MORE${_button}                  \x3C/div>` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${deal.authorName ? `                    \x3Cdiv class="tg-df-author-line-desktop" style="padding: 0 0 ${isSavingsSquadMode ? 0 : 12}px 0;">                       \x3Cdiv style="display: flex; align-items: center; gap: 10px;">                          ${deal.authorImage ? `\x3Cimg src="${this.escapeHTML(deal.authorImage)}" alt="${this.escapeHTML(deal.authorName)}" class="tg-df-author-img" width="36" height="36" style="border-radius: 50%; object-fit: cover; flex-shrink: 0; aspect-ratio: 1 / 1; min-width: 36px; min-height: 36px;">` : ''}                          \x3Cdiv style="display: flex; flex-direction: column;">                             \x3Cdiv style="font-size: 10px; color: var(--tg-df-text-muted); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 2px; font-weight: 600;">Recommended by:${_div}                             \x3Cdiv style="font-size: 11px; color: var(--tg-df-text); line-height: 1.2;">                                \x3Cstrong>\x3Ca href="https://www.tomsguide.com/${this.escapeHTML(deal.documentUrl || '').replace(/^\/+/, '')}" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit; border-bottom: 1px dotted var(--tg-df-text-muted);">${this.escapeHTML(deal.authorName)}${_a}${_strong}                                ${deal.authorRole && !['null', 'nul', 'undefined'].includes(String(deal.authorRole).toLowerCase()) ? ` • ${this.escapeHTML(deal.authorRole)}` : ''}                                ${deal.modifiedDate ? `\x3Cspan style="color: var(--tg-df-text-muted);"> • ${getTimeAgo(deal.modifiedDate)}${_span}` : ''}                             ${_div}                          ${_div}                       ${_div}                    ${_div}                    ` : ''}                    ${priceGroupHtml}                  ${_div}                ${_div}                \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta" style="text-decoration: none; border-radius: 0;">${ctaText}${_a}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit) {            dealsHtml += `              \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer;">Load More${_button}              ${_div}            `;          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }          setTimeout(() => {            const contents = this.root.querySelectorAll('.tg-df-card-desc-content');            contents.forEach(p => {              if (p.scrollHeight > p.clientHeight || p.scrollHeight > 60) {                if (p.nextElementSibling) {                  p.nextElementSibling.style.display = 'block';                }              }            });                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));          }, 50);          const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              this.displayLimit += this.getRowsLimit();              this.render();            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ New report details huge Mac overhaul for MacBooks, iMacs and Mac Studio ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/new-report-details-huge-mac-overhaul-for-macbooks-imacs-and-mac-studio</link>
                                                                            <description>
                            <![CDATA[ A new report claims that Apple is giving its entire line of Mac computers a major overhaul. Here's what to potentially expect and when. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Vsxmt9GHGYTHgDzZyVwK28</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/5jsbAXhogUzmnuzcd5jTCR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 22 Jul 2026 18:25:28 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD.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/5jsbAXhogUzmnuzcd5jTCR-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[MacBook Pro 16-inch M5 Pro on a desk]]></media:description>                                                            <media:text><![CDATA[MacBook Pro 16-inch M5 Pro on a desk]]></media:text>
                                <media:title type="plain"><![CDATA[MacBook Pro 16-inch M5 Pro on a desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/5jsbAXhogUzmnuzcd5jTCR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple’s Mac lineup will get a major overhaul starting later this year. That’s according to Bloomberg reporter and Apple tipster <a href="https://www.bloomberg.com/news/articles/2026-07-22/apple-to-launch-new-macbook-air-imac-macbook-pro-neo-mac-mini-mac-studio" target="_blank">Mark Gurman</a>, whose sources gave him a rundown of the upcoming Macs.</p><p>Things will kick off with a refreshed entry-level 14-inch MacBook Pro featuring the new <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-could-get-two-upgrades-this-year-with-apples-m6-chip-arriving-early">M6 chip</a>, along with a new iMac that will also sport the yet-to-be-announced processor. Development of these Macs is reportedly complete, but they aren’t likely to ship until the fall.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3678px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PVynuTDwCUjjRjzbvrwEuU" name="MacBook Neo A18 review-LIST2" alt="MacBook Neo shown on desk" src="https://cdn.mos.cms.futurecdn.net/PVynuTDwCUjjRjzbvrwEuU.jpg" mos="" align="middle" fullscreen="" width="3678" height="2069" attribution="" endorsement="" class="inline"></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 next biggest release should be higher-end 14-inch and 16-inch <a href="https://www.tomsguide.com/news/macbook-pro-oled">MacBooks with OLED panels</a> and a new design. These brand-new editions to the MacBook line will have M5 Pro and M5 Max chips. Apple will reportedly release these MacBooks in late 2026 or early 2027.</p><p>New MacBook Air models are expected early in 2027. These 13- and 15-inch laptops will apparently resemble the current models, though Apple is reportedly developing an OLED model for 2028. There will be another MacBook Pro with a new design and packing an M7 chip sometime in 2027.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bNV9jhCAcApnh37Y5sf5HS" name="TG_Mac-Studio-Display-LIST.jpg" alt="Mac Studio on a desk hooked up to a Studio DIsplay" src="https://cdn.mos.cms.futurecdn.net/bNV9jhCAcApnh37Y5sf5HS.jpg" mos="" align="middle" fullscreen="" width="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>Additionally, Apple is working on a refreshed <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a>. This model reportedly runs on the updated A19 Pro chip and more RAM. The report doesn’t say anything about pricing or when this laptop will launch.</p><p>Gurman’s report also says that a new iMac with an OLED screen is in the works, but won’t be released until later. Apple is also planning new Mac mini and Mac Studio models with refreshed chips. This includes the M5 Pro and M6 for the Mac mini, and the M5 Max and M5 Ultra for the Mac Studio.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XmVyPe"></div>                            </div>                            <script src="https://kwizly.com/embed/XmVyPe.js" async></script><h2 id="outlook">Outlook</h2><p>As always, take this report with a grain of salt, as Apple hasn’t made any official announcements about these Mac models. There’s certainly a lot to look forward to if all of this is accurate, though with the ongoing RAM crisis, it’s anyone’s guess when these computers will actually release and how much they’ll cost. As always, stay tuned for more as we hear further reports.</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/should-you-lease-your-next-iphone-what-you-need-to-know-about-the-rumored-apple-upgrade-program">What you need to know about the rumored 'Apple Upgrade' program</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-finally-threw-android-users-a-bone-with-this-new-ios-27-photo-feature-heres-how">Apple finally threw Android users a bone with this new iOS 27 photo feature</a></li><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></ul><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=laptops&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[ How to download the macOS Golden Gate public beta right now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/macos/how-to-download-the-macos-golden-gate-public-beta-right-now</link>
                                                                            <description>
                            <![CDATA[ Apple's macOS Golden Gate public beta is now available. Here's how you can download it and test out all the new Apple Intelligence features for Macs. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Nqh3m4FZxMAgw4pbpXa4vh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6onBfgc6zZedV7zQBmGFw8-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 14 Jul 2026 23:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[macOS]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Software]]></category>
                                                    <category><![CDATA[Operating Systems]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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.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/6onBfgc6zZedV7zQBmGFw8-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[macOS 27]]></media:description>                                                            <media:text><![CDATA[macOS 27]]></media:text>
                                <media:title type="plain"><![CDATA[macOS 27]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6onBfgc6zZedV7zQBmGFw8-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/computing/macos/macos-27">macOS Golden Gate</a> public beta is now live, giving you a chance to check out all the new features coming to the <a href="https://www.tomsguide.com/best-picks/best-macbook">best MacBooks</a>.</p><p>Expected to launch this Fall, macOS Golden Gate primarily focuses on updating Apple Intelligence and Siri, with the latter now officially called <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>. You don’t get many new features, but improvements to Liquid Glass’s readability, easier customization, and smoother performance make for an overall better experience.</p><p>While Apple’s public betas are generally more stable than the developer builds, it might still be buggy and could cause issues for your Mac. I’ve never experienced serious issues using any of these betas over the years, but it’s worth being cautious. With that said, here’s how to download the macOS Golden Gate public beta.</p><h2 id="how-to-download-the-macos-golden-gate-developer-beta">How to download the macOS Golden Gate developer beta</h2><p>Downloading the macOS Golden Gate public beta is pretty simple. First, enroll your Apple ID in <a href="https://go.redirectingat.com/?id=92X1584493&xcust=tomsguide_us_6501826667653749260&xs=1&url=https%3A%2F%2Fbeta.apple.com%2F&sref=https%3A%2F%2Fwww.tomsguide.com" target="_blank">Apple's Beta Program</a> and make sure your Mac is compatible. Here's the full list of Macs that can install and run macOS Golden Gate:</p><ul><li><strong>MacBook Neo (2026)</strong></li><li><strong>MacBook Air with Apple silicon (2020 and later)</strong></li><li><strong>MacBook Pro with Apple silicon (2020 and later)</strong></li><li><strong>iMac with Apple silicon (2021 and later)</strong></li><li><strong>Mac mini with Apple silicon (2020 and later)</strong></li><li><strong>Mac Studio with Apple silicon (2022 and later)</strong></li><li><strong>Mac Pro with Apple silicon (2023 and later)</strong></li></ul><section class="howto-block">                    <h3>1. Open System Settings</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/VwiWUWktjrNv3uJFyMfMpn.jpg"                                        alt="macOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/VwiWUWktjrNv3uJFyMfMpn.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide / Apple)</div></figure>                    <p><p>To start, <strong>open the System Settings menu</strong> on your Mac by <strong>clicking on the Apple icon in the top-left corner</strong>, then <strong>select "System Settings" from the drop-down menu</strong>. Similarly, <strong>you can also click on the gear icon in the dock</strong>.</p></p>                </section><section class="howto-block">                    <h3>2. Navigate to General > Software Update</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/ASM9wMhQK6Vgae6MPBKatV.jpg"                                        alt="macOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/ASM9wMhQK6Vgae6MPBKatV.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide / Apple)</div></figure>                    <p><p>After that, <strong>navigate to the Software Update section of your General settings menu</strong>. To get there, <strong>click General in the left-hand menu of the System Settings menu</strong>, then <strong>click Software Update</strong>.</p></p>                </section><section class="howto-block">                    <h3>3. Enable Beta Updates and select macOS Golden Gate</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/Pgd6SzoQMj9LQ3GEeqnBgC.jpg"                                        alt="macOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/Pgd6SzoQMj9LQ3GEeqnBgC.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p>Then, make sure the Beta Updates setting is switched to On. If it's switched Off, turn it on by clicking the corresponding button. <strong>When the Beta Updates menu opens, select macOS Golden Gate public Beta from the drop-down menu</strong>. Double-check that your Apple account is enrolled in Apple’s Beta Program if you don’t see the beta listed.</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/vuXcGtL37LYW58XQFZLKmg.jpg"                                        alt="macOS 27"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/vuXcGtL37LYW58XQFZLKmg.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p>Once that's done, <strong>you should see the macOS 27 public Beta appear as available to download</strong>. All you have to do now is <strong>hit the Upgrade Now button to start downloading</strong>, and you're all set!</p></p>                </section><p>That’s all that’s required to download the macOS Golden Gate public beta. Your Mac will restart once the download finishes. After that, you can start trying out all the new features. Depending on your connection speed, the download might take a few minutes, so be patient.</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[ I’ve finally found my forever dock for the Mac mini M4 — and it actually fixes the hidden power button problem ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/i-thought-i-was-done-customizing-my-mac-mini-m4-until-i-tried-the-last-dock-ill-ever-need</link>
                                                                            <description>
                            <![CDATA[ Just when I thought I’d never need another dock for my Mac mini M4, Ugreen’s docking station surprised me with more ports and power than the rest. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">zoC8kjz6smwt65yf3SGjW4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7GR9s7Gz5QhdDA2YULUg8d-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 02 Jul 2026 10:04:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Mini PCs]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/7GR9s7Gz5QhdDA2YULUg8d-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Ugreen Mac Mini M4 Dock &amp; Stand installed underneath a Mac mini M4 mini PC on a desk]]></media:description>                                                            <media:text><![CDATA[The Ugreen Mac Mini M4 Dock &amp; Stand installed underneath a Mac mini M4 mini PC on a desk]]></media:text>
                                <media:title type="plain"><![CDATA[The Ugreen Mac Mini M4 Dock &amp; Stand installed underneath a Mac mini M4 mini PC on a desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7GR9s7Gz5QhdDA2YULUg8d-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Besides the iMac, there’s never been an Apple desktop quite like the <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m4-reasons-to-buy-and-skip">Mac mini</a>. It’s small yet powerful while still being whisper-quiet on your desk — and with the M4 model, you finally get front-facing ports.</p><p>Still, just like they often do with other Apple products, accessory makers were quick to try and fix its biggest flaws: an inaccessible power button and the lack of full-sized ports. While Cupertino wanted you to leave your new machine running full-time and toss out all your USB-A cables, many people like myself just weren’t ready to be that drastic.</p><p>That’s why the first accessory I added to my new desktop was a USB hub that doubled as a stand. I had one on my older <a href="https://www.tomsguide.com/computing/desktop-computers/i-just-broke-the-first-rule-of-buying-apple-products-i-bought-a-new-mac-mini-ahead-of-the-m4-mac-launch">M2 model</a> for the same reason, so when Satechi released an upgraded version for this new completely redesigned Apple mini PC, I was ecstatic.</p><p>After using <a href="https://www.tomsguide.com/computing/peripherals/i-added-satechis-new-usb-c-hub-and-stand-to-my-mac-mini-m4-and-its-the-perfect-upgrade">Satechi’s M4 Hub & Stand</a> for months, I eventually swapped it out for a similar accessory from Orico that transformed my Mac mini into a <a href="https://www.tomsguide.com/computing/peripherals/i-gave-my-mac-mini-m4-the-ultimate-upgrade-with-this-mac-pro-style-case-and-it-fixes-some-of-my-biggest-complaints">miniature Mac Pro</a>. Both devices worked well, but recently, I decided to give one more dock a chance, and I’m glad I did.</p><p>I didn’t expect to like this add-on from a company best known for its chargers and <a href="https://www.tomsguide.com/computing/i-thought-my-first-nas-was-enough-but-this-ai-powered-behemoth-is-the-private-brain-my-home-office-needed">NAS devices</a>, but Ugreen just might have made the most useful one yet. Here’s why.</p><div class="product"><a data-dimension112="6fb25403-b7d2-4625-8721-e07f2e5f3902" data-action="Deal Block" data-label="This versatile 11-in-1 stand and hub for your Mac mini M4 or Mac mini M4 Pro features a sleek silver finish that blends seamlessly with Apple's desktop. It expands your workstation with plenty of front and rear ports, lets you add up to 8TB of high-speed NVMe storage, and uses a clever built-in mechanical pass-through lever to make accessing your Mac mini M4’s power button a breeze." data-dimension48="This versatile 11-in-1 stand and hub for your Mac mini M4 or Mac mini M4 Pro features a sleek silver finish that blends seamlessly with Apple's desktop. It expands your workstation with plenty of front and rear ports, lets you add up to 8TB of high-speed NVMe storage, and uses a clever built-in mechanical pass-through lever to make accessing your Mac mini M4’s power button a breeze." data-dimension25="$55" href="https://www.amazon.com/UGREEN-Stand-Enclosure-10Gbps-Reader/dp/B0GQ4DN6MH" 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="btnU7gvC6epL46ZmRw2KpL" name="Mac Mini M4 Dock & Stand" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/btnU7gvC6epL46ZmRw2KpL.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This versatile 11-in-1 stand and hub for your Mac mini M4 or Mac mini M4 Pro features a sleek silver finish that blends seamlessly with Apple's desktop. It expands your workstation with plenty of front and rear ports, lets you add up to 8TB of high-speed NVMe storage, and uses a clever built-in mechanical pass-through lever to make accessing your Mac mini M4’s power button a breeze. <a class="view-deal button" href="https://www.amazon.com/UGREEN-Stand-Enclosure-10Gbps-Reader/dp/B0GQ4DN6MH" target="_blank" rel="nofollow" data-dimension112="6fb25403-b7d2-4625-8721-e07f2e5f3902" data-action="Deal Block" data-label="This versatile 11-in-1 stand and hub for your Mac mini M4 or Mac mini M4 Pro features a sleek silver finish that blends seamlessly with Apple's desktop. It expands your workstation with plenty of front and rear ports, lets you add up to 8TB of high-speed NVMe storage, and uses a clever built-in mechanical pass-through lever to make accessing your Mac mini M4’s power button a breeze." data-dimension48="This versatile 11-in-1 stand and hub for your Mac mini M4 or Mac mini M4 Pro features a sleek silver finish that blends seamlessly with Apple's desktop. It expands your workstation with plenty of front and rear ports, lets you add up to 8TB of high-speed NVMe storage, and uses a clever built-in mechanical pass-through lever to make accessing your Mac mini M4’s power button a breeze." data-dimension25="$55">View Deal</a></p></div><h2 id="docked-and-fully-loaded">Docked and fully loaded</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EWwi9tx78jjhtaC4Q3Yg9g" name="Ugreen Mac Mini M4 Docking Station-5" alt="The front ports on the Ugreen Mac Mini M4 Dock & Stand" src="https://cdn.mos.cms.futurecdn.net/EWwi9tx78jjhtaC4Q3Yg9g.jpg" mos="" align="middle" fullscreen="" width="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>At first glance, I wouldn’t blame you for mistaking Ugreen’s <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review">Mac mini M4</a> dock for Satechi’s. Both have a similar design and a matching silver finish, but Ugreen trades a third USB-A port up front for a full-sized SD card reader sitting next to a microSD one. It’s also slightly taller, measuring at just over an inch versus Satechi's sleeker, sub-inch height.</p><p>The one thing that really surprised me about Ugreen’s dock, though, is that it isn’t made from aluminum like Satechi’s. Instead, it’s entirely made from plastic with a very convincing paint job. Although this might sound like a downgrade at first, by opting for plastic over anodized aluminum, Ugreen solved one of the biggest issues docks like this have when sitting under your Mac mini: signal interference. From Wi-Fi to Bluetooth, having a big block of metal underneath one of the <a href="https://www.tomsguide.com/us/best-mini-pc.html">best mini PCs</a> can significantly hamper your connections.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JgtGrFR75n9NgJn6anBx7j" name="Ugreen Mac Mini M4 Docking Station-4" alt="The SSD slot on the underside of the Ugreen Mac Mini M4 Dock & Stand" src="https://cdn.mos.cms.futurecdn.net/JgtGrFR75n9NgJn6anBx7j.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>When you flip Ugreen’s dock over, you can easily add more storage to your Mac mini without having to pay the Apple Tax. Unlike Satechi’s hub, which caps out at 4TB, you can add up to an 8TB drive here. Now, I know that’s easier said than done, as we’re currently living through <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a> which has also greatly affected storage prices. However, it’s nice to have the option to add all that extra room, and who knows — maybe once the AI boom dies down, you just might be able to.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XGpo7AxYQ8hqAYCZ3zKXHm" name="Ugreen Mac Mini M4 Docking Station-1-LEDE" alt="The rear ports on the Ugreen Mac Mini M4 Dock & Stand" src="https://cdn.mos.cms.futurecdn.net/XGpo7AxYQ8hqAYCZ3zKXHm.jpg" mos="" align="middle" fullscreen="" width="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>Besides that extra storage potential, it’s the rear ports that convinced me to give Ugreen’s dock a try in the first place. While Satechi keeps all of its connectivity up front and leaves the back bare, Ugreen did the complete opposite. You still get the hardwired USB-C cable that plugs into your Mac mini to get things started, but the back expands into even more ports than you do on the <a href="https://www.tomsguide.com/best-picks/best-macbook">best MacBooks</a>, including three more USB-A ports and two USB-C ones.</p><p>Interestingly, Ugreen also included another USB-C port on the back. Instead of using it to connect more accessories, it’s designed to plug directly into a power adapter, as the “IN 5V” label underneath it suggests. You see, with an 11-in-1 hub like this one, there’s no way you’d be able to reliably run all of those rear connections, the front card readers, and a high-speed SSD off the Mac mini’s bus power alone. By plugging Ugreen’s dock into a power strip underneath your desk, you completely avoid slow data transfer speeds, disconnected peripherals, and worst of all, random SSD disconnects that could corrupt your data.</p><p>If all those rear ports and extra power weren’t enough, Ugreen’s Mac mini M4 dock has one more trick up its sleeve that completely took me by surprise.</p><h2 id="power-with-a-twist">Power with a twist</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x9DNf9WcQjNwNt4vzRWKh5" name="Ugreen Mac Mini M4 Docking Station-6" alt="The Ugreen Mac Mini M4 Dock & Stand underneath a Mac mini M4 mini PC in a desk setup" src="https://cdn.mos.cms.futurecdn.net/x9DNf9WcQjNwNt4vzRWKh5.jpg" mos="" align="middle" fullscreen="" width="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 I’m currently in the process of reviewing MSI’s new <a href="https://www.tomsguide.com/computing/monitors/i-tried-msis-new-pro-max-qd-oled-monitor-and-it-fixes-my-biggest-gripes-with-the-apple-studio-display">Pro Max QD-OLED Mac monitor</a>, I decided to set up my Mac mini M4 with Ugreen’s dock next to it. However, as this is one of the rare Mac monitors you can also play PC games on — unlike Apple’s new <a href="https://www.tomsguide.com/computing/monitors/apple-studio-display-xdr-review">Studio Display XDR</a> — I also have the <a href="https://www.tomsguide.com/computing/mini-pcs/khadas-mind-2s-review">Khadas Mind 2S</a> with the company’s <a href="https://www.tomsguide.com/computing/mini-pcs/i-gave-my-favorite-pocketable-mini-pc-an-instant-upgrade-with-this-docking-station-and-now-its-a-full-fledged-gaming-rig">Mind Graphics 2</a> eGPU next to it.</p><p>In my testing, Ugreen’s dock for the Mac mini M4 worked in a similar way to Satechi’s. It gave me quick access to full-sized ports and an SD card reader without having to use a bulky dongle. One thing I prefer about it, though, is that with Ugreen’s dock, I can hide the 2.4GHz USB dongles for my keyboard and trackball mouse at the rear instead of having them front and center like with Satechi’s dock. Likewise, if you need to run cables from the back of your Mac mini behind your desk, this dock is the better option hands down.</p><p>I didn’t think to test and compare the Wi-Fi speeds on my Mac mini when using these two docks. However, with Ugreen’s, I didn’t notice any interference at all, nor did my speeds dip down. If you want me to put both docks through a Wi-Fi speed showdown, let me know in the comments below.</p><p>Even though I’ve come to terms with the <a href="https://www.tomsguide.com/computing/mini-pcs/i-hated-the-mac-mini-m4s-power-button-until-i-accidentally-proved-apple-was-right">Mac mini’s awkward power button placement</a> after leaving it on for over a month, it’s still nice to be able to easily reach it. While Satechi has a standard cutout to make it more accessible, Ugreen took things a step further.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DvvrsSUrLnhQR2B6qW3Wc8" name="Ugreen Mac Mini M4 Docking Station-2" alt="A person using the Ugreen Mac Mini M4 Dock & Stand to more easily reach the Mac mini M4's power button" src="https://cdn.mos.cms.futurecdn.net/DvvrsSUrLnhQR2B6qW3Wc8.jpg" mos="" align="middle" fullscreen="" width="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>At the top left corner of Ugreen’s dock, there’s a physical plastic pass-through lever that makes pressing the Mac mini’s power button almost effortless. A simple press up and your Mac mini magically springs to life, while holding it down while the device is on brings up Apple’s shutdown menu. It’s a small detail, but in my day-to-day use, it made a noticeable difference.</p><p>Now, if you’re thinking about adding this dock underneath your own Mac mini, you do need to be careful. You see, Ugreen actually makes two docks for this mini PC, not just a single one. The $89 base version doesn’t have an SSD slot on the bottom, nor does it have this lever. Instead, it uses a basic cutout just like Satechi’s.</p><p>For $10 more, though, you can get the dock I have here which supports up to an 8TB SSD. Because it houses that drive, it’s slightly taller, hence the inclusion of that ingenious power button lever at the back.</p><h2 id="a-final-docking-place">A final docking place</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1976px;"><p class="vanilla-image-block" style="padding-top:56.28%;"><img id="wKuFBx5mqqQ7ySR4yiSakD" name="mac-mini-docks-vs" alt="A side by side shot showing Satechi's Mac mini M4 hub and stand and Orico's Mac Pro-style case for the Mac mini M4" src="https://cdn.mos.cms.futurecdn.net/wKuFBx5mqqQ7ySR4yiSakD.jpg" mos="" align="middle" fullscreen="" width="1976" height="1112" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There are only so many times you can redo your Mac mini M4 setup, and after years of experimentation, I think I’ve finally found my forever dock.</p><p>While I love how Satechi’s standard dock is an exact match to the design and materials Apple used, its lack of rear ports and smaller SSD capacity hold it back. Alternatively, you could pair your Mac mini with <a href="https://www.tomsguide.com/computing/peripherals/i-tested-satechis-new-thunderbolt-5-cubedock-and-it-works-great-with-my-macbook-pro-but-i-keep-mistaking-it-for-a-mac-mini-m4">Satechi’s Thunderbolt 5 CubeDock</a> if you want even more power, much higher data bandwidth and support for up to an 8TB SSD. Then again, that professional powerhouse costs $399 on its own, whereas all of these other docks sit comfortably under $100.</p><p>Orico’s dock, on the other hand, is as much of an enclosure for Apple’s mini PC as it is a dock. I’ll admit, it did look really cool on my desk. However, it forces your Mac mini into an awkward sideways position, meaning you lose out on seeing the beauty and compactness of Apple’s redesign. It does support up to an 8TB SSD, but you are ultimately left with fewer ports overall.</p><p>Having tried all three of these options for extended periods, Ugreen’s is my favorite yet, and for good reason. Those extra ports and having them hidden at the back really make a massive difference. At the same time, since it can be independently powered, I know that all of my connected devices won’t be constantly fighting for wattage.</p><p>You really can’t go wrong with any of these docks, but the right one for you will depend entirely on your specific workflow. If you just managed to pick up a new Mac mini or you’re looking to give your current setup a serious upgrade, at least you have plenty of great options.</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/i-brought-a-mini-pc-with-me-on-my-last-trip-and-id-do-it-again-in-a-heartbeat">I’ve reviewed a ton of mini PCs and my favorite Mac mini alternative just got cooler and quieter</a></li><li><a href="https://www.tomsguide.com/computing/monitors/i-went-big-on-a-budget-with-this-40-inch-ultrawide-monitor-and-its-incredibly-immersive-without-breaking-the-bank">I went all-in on this 40-inch ultrawide and it’s incredibly immersive without breaking the bank</a></li><li><a href="https://www.tomsguide.com/computing/peripherals/i-thought-a-vertical-mouse-was-no-match-for-my-trackball-until-i-tried-one-and-now-im-never-going-back">I finally tried a vertical mouse and it was the ergonomic upgrade my desk setup was missing — here’s why</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Tim Cook stepping down as Apple CEO: John Ternus takes over Sept 1 ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/massive-changes-at-apple-john-ternus-takes-over-as-ceo-sept-1-while-tim-cook-moves-to-executive-chairman</link>
                                                                            <description>
                            <![CDATA[ After 15 years at the helm of Apple, Tim Cook is handing over the reins to John Ternus. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">WB8pF6bheQZ827vchtwGYk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XK7W9gHWEgHPdh5kir8n9-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 20 Apr 2026 21:09:41 +0000</pubDate>                                                                                                                                <updated>Tue, 21 Apr 2026 09:36:29 +0000</updated>
                                                                                                                                            <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Computing]]></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.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/XK7W9gHWEgHPdh5kir8n9-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[John Ternus and Tim Cook]]></media:description>                                                            <media:text><![CDATA[John Ternus and Tim Cook]]></media:text>
                                <media:title type="plain"><![CDATA[John Ternus and Tim Cook]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XK7W9gHWEgHPdh5kir8n9-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Today (April 20), <a href="https://www.apple.com/newsroom/2026/04/tim-cook-to-become-apple-executive-chairman-john-ternus-to-become-apple-ceo/" target="_blank">Apple announced</a> that CEO Tim Cook is stepping aside to become the executive chairman of the firm's board of directors. John Ternus, senior vice president of hardware engineering, will become the next steward of Cupertino starting September 1, 2026.</p><p>Cook will help transition Ternus this summer and will likely host <a href="https://www.tomsguide.com/tech-events/apples-wwdc-2026-conference-kicks-off-in-june-heres-what-we-expect-to-see">WWDC 2026,</a> which kicks off in June.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="high" data-lazy-src="https://www.youtube-nocookie.com/embed/kkBudtxgor0" allowfullscreen></iframe></div></div><p>“It has been the greatest privilege of my life to be the CEO of Apple and to have been trusted to lead such an extraordinary company. I love Apple with all of my being" Cook said in a press release.</p><p>Tim Cook has led Apple for the past 14 years since Steve Jobs resigned in 2011. In total, Cook has worked at Apple over 25 years.</p><p>Ternus joined Apple in 2001 as part of the company's product design team and became the VP of hardware engineering in 2013.</p><p>"Having spent almost my entire career at Apple, I have been lucky to have worked under Steve Jobs and to have had Tim Cook as my mentor," Ternus said.  "I am filled with optimism about what we can achieve in the years to come."</p><h2 id="who-is-john-ternus">Who is John Ternus?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TrT3r6fXvJDENQATkwjnxN" name="John Ternus.GettyImages-2264179980" alt="John Ternus in front of the Apple logo" src="https://cdn.mos.cms.futurecdn.net/TrT3r6fXvJDENQATkwjnxN.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p>John Ternus has been a front runner to take over the head seat for awhile now, and currently is the youngest top executive at the company at 50 years old. Assuming things go well, he could have an equally long tenure. </p><p>The rise of Ternus suggests the company is looking for a more hardware and engineering focused future.</p><p>Ternus joined the executive team in 2021 when he became the the senior vice president of Hardware Engineering. He has overseen the production and introduction of a number of product lines including the iPad, AirPods and several generations of the iPhone, Mac and Apple Watch.</p><p>He unveiled the <a href="https://www.tomsguide.com/news/apple-m1-chip-everything-you-need-to-know-about-apple-silicon-macs">M1 chip</a>, Apple's first in-house designed CPU in 2020, and the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review">iPhone Air</a> last year. </p><p>Ternus' most recent impact was with the MacBook Neo, Apple's take on a budget-friendly laptop that quickly made an imprint on that category and has sold out so quickly</p><p>"“We’re always focused on ‘how do we make a given product better,’” said Ternus in an <a href="https://www.tomsguide.com/computing/apples-joz-and-ternus-on-smart-glasses-the-macbook-neo-and-whats-next-for-ai">interview with Tom's Guide</a>. “We’re always pushing. And we never think like, ‘well, what impact if we did something here would have on a product over here?’”</p><h2 id="what-s-next-for-apple">What's next for Apple?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width: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.jpg" mos="" align="middle" fullscreen="" width="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>Ternus will take over at an interesting, and somewhat fraught time for Apple and tech as a whole. </p><p>Tim Cook has already been navigating the tariff situation, and now the ongoing Iran War. There's also 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">RAM crisis</a> which isn't expected to abate until 2028, at the earliest. Apple has seemingly been on top of things but reports have shown that even Apple is eating costs associated with sky high memory prices.</p><p>Meanwhile, the<a href="https://www.tomsguide.com/phones/iphones/iphone-20-leaks-are-here-and-apple-may-be-planning-a-dramatic-redesign-unlike-anything-weve-seen-before"> 20th anniversary of the iPhone</a> is coming next year and rumors suggest it will be a huge change. Plus, Apple is expected to debut its <a href="https://www.tomsguide.com/computing/smart-glasses/pull-the-rug-out-mark-gurman-explains-apples-plan-to-launch-smart-glasses-this-year-to-stop-metas-momentum">first pair of smart glasses</a> later this year and the first<a href="https://www.tomsguide.com/phones/iphones/iphone-fold-leak-may-have-revealed-final-design-and-magsafe-confirmation-what-we-know"> foldable iPhone</a> this September.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/kyz1z2Y5Oe0" allowfullscreen></iframe></div></div><p>Both devices are new categories for Apple that come at a time when price hikes, memory shortages, and AI are the talk of tech. </p><p>It'll be interesting to see how Ternus navigates these choppy waters while trying to bring new enthusiasm to the company.</p><h2 id="johny-srouji-named-apple-s-chief-hardware-officer">Johny Srouji named Apple's Chief Hardware Officer</h2><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:66.67%;"><img id="8Zq3cth7PQEzi2jmV4EHNk" name="Apple-Johny-Srouji" alt="Apple's new Chief of hardware Srouji" src="https://cdn.mos.cms.futurecdn.net/8Zq3cth7PQEzi2jmV4EHNk.jpg" mos="" align="middle" fullscreen="" width="3840" height="2560" 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 Ternus transitions to CEO,<a href="https://www.apple.com/newsroom/2026/04/johny-srouji-named-apples-chief-hardware-officer/" target="_blank"> Apple also announced</a> a new head of hardware in Johny Srouji. </p><p>“Johny has been an incredible partner on the executive team, and is going to be an extraordinary chief hardware officer,” said incoming Apple CEO John Ternus in a press release. “I look forward to continuing to work closely with him in our new roles.”</p><p>Srouji joined Apple in 2008 and led development of the A4 chip, Apple's first in-house iPhone silicon. Since then he has been in charge of hardware engineering teams from silicon and batteries to cameras and sensors.</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/apples-touchscreen-macbook-pro-could-be-pushed-back-heres-what-we-know">Apple's touchscreen MacBook Pro could be 'pushed back' — here's what we know</a></li><li><a href="https://www.tomsguide.com/computing/online-security/scammers-are-weaponizing-apples-own-notifications-in-a-dangerous-new-phishing-attack-dont-fall-for-this">Scammers are weaponizing Apple’s own notifications in a dangerous new phishing attack — don’t fall for this</a></li><li><a href="https://www.tomsguide.com/computing/smart-glasses/pull-the-rug-out-mark-gurman-explains-apples-plan-to-launch-smart-glasses-this-year-to-stop-metas-momentum">'Pull the rug out': Mark Gurman explains Apple’s plan to launch smart glasses and stop Meta’s momentum</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Ticking time bomb bug in macOS disables network connectivity after 49 days — but there’s a fix ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/macbooks/ticking-time-bomb-bug-in-macos-disables-network-connectivity-after-49-days-but-theres-a-fix</link>
                                                                            <description>
                            <![CDATA[ Newly discovered macOS bug completely disables your internet connection if your Mac is left on for 49 days without a reboot. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ggYUwBUvyJAT5BUnLKDBGG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/WNK5Zs69wY5j94beX98P3A-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 09 Apr 2026 17:32:45 +0000</pubDate>                                                                                                                                <updated>Thu, 09 Apr 2026 17:46:11 +0000</updated>
                                                                                                                                            <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/WNK5Zs69wY5j94beX98P3A-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[MacBook Pro M5]]></media:description>                                                            <media:text><![CDATA[MacBook Pro M5]]></media:text>
                                <media:title type="plain"><![CDATA[MacBook Pro M5]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/WNK5Zs69wY5j94beX98P3A-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Although you certainly can <a href="https://www.tomsguide.com/computing/mini-pcs/i-hated-the-mac-mini-m4s-power-button-until-i-accidentally-proved-apple-was-right">leave your Mac on</a> for days at a time without any issues, a newly discovered <a href="https://www.tomsguide.com/news/this-macos-flaw-lets-hackers-install-undeletable-malware-on-your-mac-how-to-stay-safe">macOS bug</a> will certainly make you think twice about doing so.</p><p>As reported by <a href="https://www.tomshardware.com/software/macos/macos-has-a-49-7-day-networking-time-bomb-built-in-that-only-a-reboot-fixes-comparison-operation-on-unreliable-time-value-stops-machines-dead-in-their-tracks" target="_blank">Tom’s Hardware</a>, the AI infrastructure and developer tools startup Photon recently discovered a “ticking time bomb” that affects every Mac. Fortunately, though, this isn’t a security bug that can be exploited by hackers. Instead, it’s the kind of bug that could leave you scratching your head if you use one of the <a href="https://www.tomsguide.com/best-picks/best-macbook">best MacBooks</a> and leave your laptop on for over a month at a time. </p><p>According to a <a href="https://photon.codes/blog/we-found-a-ticking-time-bomb-in-macos-tcp-networking" target="_blank">blog post</a> from Photon, “every Mac has a hidden expiration date.” No, your Mac won’t become unusable, and you won’t have to upgrade to a new machine. However, “after exactly 49 days, 17 hours, 2 minutes and 47 seconds of continuous uptime,” macOS experiences an “integer overflow” that “freezes the internal TCP timestamp clock.”</p><p>But what does this mean for the average Mac user? Well, once your machine has been running for exactly this long, existing TCP network connections won’t expire as they normally should. Essentially, this means that your Mac won’t be able to connect to the internet, which is why many of us get a computer in the first place.</p><p>Photon likely let Apple know once it discovered this issue, and the firm is currently working on its own solution. However, there’s an easy fix that won’t require an update or bringing your Mac to an Apple Store.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Oq8AZW"></div>                            </div>                            <script src="https://kwizly.com/embed/Oq8AZW.js" async></script><h2 id="a-simple-workaround">A simple workaround</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NP9dUKbVoFCw486fAx7Up5" name="Satechi Mac Mini M4 Stand and Hub-4" alt="A picture showing how Satechi's hub and stand for the Mac mini M4 allows you to easily reach its power button" src="https://cdn.mos.cms.futurecdn.net/NP9dUKbVoFCw486fAx7Up5.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If you’re worried about your Mac losing internet connectivity, don’t be. The issue itself stems from integer overflow, where your Mac’s TCP timestamp clock keeps counting until it reaches a max value of 4,294,967,295 seconds or 49.7 days.</p><p>To get around this, all you have to do is <a href="https://www.tomsguide.com/how-to/how-to-troubleshoot-and-reset-bluetooth-on-mac">reboot your Mac</a> before the 49-day mark, and everything will be fine. Just like on one of the <a href="https://www.tomsguide.com/us/best-apple-iphone,review-6348.html">best iPhones</a>, you should reboot your Mac every week. To make things easier, you can even <a href="https://www.tomsguide.com/phones/you-can-schedule-your-mac-to-turn-off-and-on-heres-how">schedule your Mac to turn off and on</a>.</p><p>Besides fixing this specific macOS bug, a reboot also flushes memory leaks, clears system caches and temp files, cools down the machine and resets peripheral controllers, which can help rectify other odd glitches with Bluetooth and USB-C docks.</p><p>Apple isn’t alone here either, as Windows 98 also crashed after 49.7 days of uptime. Likewise, when it comes to running out of digits while counting, this same issue is why we were all so worried about Y2K back in 1999, and it’s also why the <a href="https://www.tomsguide.com/us/2038-bug-bh2017,news-25551.html">year 2038</a> could lead to similar concerns when Unix is no longer able to measure time for the same reason. But that’s a problem for another day.</p><p>I’m sure that Apple is aware of this issue and is taking steps to address it, hopefully in the next big macOS update. In the meantime, though, just remember to give your Mac a reboot every seven days, and you’ll be perfectly fine.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/home/home-office/i-turned-a-bookshelf-into-a-hidden-home-lab-and-it-completely-decluttered-my-office">I built a hidden network hub to declutter my home office but it can do so much more</a></li><li><a href="https://www.tomsguide.com/computing/macos/how-to-view-wi-fi-passwords-on-mac">How to view Wi-Fi passwords on Mac</a></li><li><a href="https://www.tomsguide.com/computing/internet/i-thought-speed-tests-were-the-be-all-and-end-all-way-to-measure-my-internet-connection-until-i-tried-orb">I thought speed tests were the be-all and end-all way to measure my internet connection until I tried Orb</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I'm a diehard Apple user — here are 9 golden discounts on devices and accessories that I'd buy right now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/im-a-diehard-apple-user-here-are-9-golden-discounts-on-devices-and-accessories-that-id-buy-right-now</link>
                                                                            <description>
                            <![CDATA[ In light of its 50th birthday, Apple's just discounted a bunch of products on Amazon — here are the 9 I'd buy right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">uQfRzivodU36tg5bxfBvVD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/RDQ9CYRdhwZTLwJXt2N2tb-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 02 Apr 2026 00:56:47 +0000</pubDate>                                                                                                                                <updated>Thu, 09 Apr 2026 04:33:47 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ lucy.scotting@futurenet.com (Lucy Scotting) ]]></author>                    <dc:creator><![CDATA[ Lucy Scotting ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/UC9ncAYxkmJ5ipHEyX44ri.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Lucy Scotting is a staff writer for Tom’s Guide Australia, primarily covering lifestyle, streaming and internet-related news. Lucy started her career writing for HR and staffing industry publications, with articles covering emerging tech, business and finance.&lt;/p&gt;&lt;p&gt;In her spare time, Lucy can be found watching sci-fi movies, working on her dystopian fiction novel (in progress since 2017) or hanging out with her dog, Fletcher. If she’s not found doing any of the above, she’s likely on her next adventure to a new city, country, or continent. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/RDQ9CYRdhwZTLwJXt2N2tb-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Apple / Edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple products on rainbow gradient background]]></media:description>                                                            <media:text><![CDATA[Apple products on rainbow gradient background]]></media:text>
                                <media:title type="plain"><![CDATA[Apple products on rainbow gradient background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/RDQ9CYRdhwZTLwJXt2N2tb-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you have an Apple ecosystem at home, you probably already know the rarity of finding a good deal from the iPhone maker. With the most affordable Apple products still costing upwards of AU$800, it's safe to say that an Apple purchase is a certified investment. </p><p>That said, any discounts that undercut Apple devices by 10% or more are worth cheering for, and these killer prices I've just found are no exception. </p><p>Now <a href="https://www.tomsguide.com/news/live/apple-50th-anniversary">celebrating its fiftieth year</a>, Apple has cheekily discounted a range of its best-sellers on Amazon. With up to 40% off Apple Watches, MacBooks, iPhones, iPads, and accompanying accessories, <a href="https://www.amazon.com.au/stores/Apple/page/A73CF337-6406-4B4B-822A-C4E9B79BAE52?lp_asin=B0FQF9T68C&ref_=ast_bln" target="_blank">Apple's Amazon storefront has a complete list of discounted items</a>. </p><p>To get you started on finding your next Apple product, I've handpicked my favourite nine deals below. With hot prices across the latest Apple Watch 11, AirPods 4 and iPhone Air, these discounts aren't exclusive to older products, which is a big win in my book.  </p><p>You'll need to act fast to secure an Apple bargain, though — these Amazon prices won't stick around too long!</p>        <div class="featured_product_block featured_block_hero" data-id="0afca23d-8e81-4d5b-9109-72718fe4dfe6">            <a href="https://www.amazon.com.au/Apple-iPhone-Air-eSIM-only/dp/B0FQFYV39D" data-model-name="iPhone Air" 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/mYey7jZYBAXULTeNby3b6V.jpg" alt="Apple product on rainbow gradient"></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">iPhone Air</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="fa5052d9-ffb6-49d5-8e0c-96e5a9f28786">            <a href="https://www.amazon.com.au/Apple-iPad-Air-11-inch-Wi-Fi/dp/B0DZ83Q3S8/ref=ast_sto_dp_puis" data-model-name="iPad Air (M3)" 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/4uDA8e8yBJaGVp4aN5STAV.jpg" alt="Apple product on rainbow gradient"></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 Air (M3)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="af496c9e-3015-45da-a2e3-9ad00b8b6132">            <a href="https://www.amazon.com.au/Apple-MacBook-13-inch-10%E2%80%91core-Unified/dp/B0DZF4FXXN" data-model-name="MacBook 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.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/kMFqaeeshm9BRSmsUKSRAV.jpg" alt="Apple product on rainbow gradient"></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 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="89c49ded-2eff-4ec4-9f59-99f8bee4ebc9">            <a href="https://www.amazon.com.au/Apple-MacBook-15-inch-10%E2%80%91core-Unified/dp/B0DZF1QHWF" data-model-name="MacBook Air 15-inch (M4)" 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/LxMR25dyqyWZmTPFukBmAV.jpg" alt="Apple product on rainbow gradient"></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 Air 15-inch (M4)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="4a54df1d-85f4-443b-8aa6-e0d532634721">            <a href="https://www.amazon.com.au/Apple-Silver-Aluminium-Purple-Always/dp/B0FQG918W3" data-model-name="Watch Series 11" 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/zgEphR25owr5HuQybJvX7V.jpg" alt="Apple product on rainbow gradient"></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">Watch Series 11</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b1201b88-9e32-4d84-82fc-8379187ea59b">            <a href="https://www.amazon.com.au/Apple-Watch-Midnight-Aluminium-Always/dp/B0FQF9T68C" data-model-name="Watch SE (3rd Gen)" 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/DMfAerkk26ktri9AjMD99V.jpg" alt="Apple product on rainbow gradient"></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">Watch SE (3rd Gen)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="966fe711-1be3-4ffe-8505-cc84a6a7a279">            <a href="https://www.amazon.com.au/Apple-MXP63ZA-A-AirPods-4/dp/B0DGJ2X3QV/" data-model-name="AirPods 4" 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/fajjUgfQziAyYhuMxJSAAV.jpg" alt="Apple product on rainbow gradient"></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">AirPods 4</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="599760ef-1396-48b9-b7e5-1a084fb32dd7">            <a href="https://www.amazon.com.au/Apple-Pencil-Pro-Pixel-Perfect-Industry-Leading/dp/B0D3J8K7LN" data-model-name="Pencil Pro" 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/7jA5r7kzdaRDQ52FHPmi6V.jpg" alt="Apple product on rainbow gradient"></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">Pencil Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6223aa33-2587-4a1b-a467-b12e509b9467">            <a href="https://www.amazon.com.au/Apple-Backpack-Replaceable-Battery-Water-Resistant/dp/B097QL9W35" data-model-name="AirTag (4-Pack)" 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/ZNtzreCMQyGDaaiQYKPQAV.jpg" alt="Apple product on rainbow gradient"></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">AirTag (4-Pack)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ RIP cheese grater: Apple has officially discontinued the Mac Pro but I wouldn't buy a Mac Studio yet ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/rip-cheese-grater-apple-has-officially-discontinued-the-mac-pro-but-i-wouldnt-buy-a-mac-studio-yet</link>
                                                                            <description>
                            <![CDATA[ Apple has discontinued the Mac Pro with no plans for a sequel, but I wouldn't rush out and buy a Mac Studio yet. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aEmVMFCovoUBwdpgzoquyW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/jfyGETbHM2xn8oCQ967ivU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 27 Mar 2026 20:53:35 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></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.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/jfyGETbHM2xn8oCQ967ivU-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Mac Pro 2019]]></media:description>                                                            <media:text><![CDATA[Mac Pro 2019]]></media:text>
                                <media:title type="plain"><![CDATA[Mac Pro 2019]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/jfyGETbHM2xn8oCQ967ivU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple has discontinued the infamous cheese grater Mac Pro and its $700 wheels. As of March 26, the iconic Apple Mac Pro is no longer on the Apple website; instead, would-be shoppers are <a href="https://www.apple.com/us/shop/goto/buy_mac/mac_pro" target="_blank">redirected to other Mac computers</a>.</p><p>Apple confirmed to <a href="https://9to5mac.com/2026/03/26/apple-discontinues-the-mac-pro/" target="_blank">9to5Mac </a>that it will no longer be offering the Mac Pro, and that there are no plans to develop new models.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WQKEMX"></div>                            </div>                            <script src="https://kwizly.com/embed/WQKEMX.js" async></script><p>With this week's discontinuation that drops Apple's desktop lineup to three devices: </p><ul><li>24-inch iMac M4</li><li>Mac mini M4 or M4 Pro</li><li>Mac Studio with M4 Max or M3 Ultra</li></ul><p>Plus the three laptops; <a href="https://www.tomsguide.com/computing/macbooks/i-ditched-the-macbook-air-for-a-macbook-neo-for-48-hours-and-i-was-shocked">MacBook Neo</a>, MacBook Air, and MacBook Pro.</p><h2 id="a-short-history">A short history</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:666px;"><p class="vanilla-image-block" style="padding-top:56.01%;"><img id="WFFeuKyNT6KEiXxcJET6Jj" name="Mac-Pro-Wheels_wheels.jpg" alt="Mac Pro wheels" src="https://cdn.mos.cms.futurecdn.net/WFFeuKyNT6KEiXxcJET6Jj.jpg" mos="" align="middle" fullscreen="" width="666" height="373" 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 cheese greater <a href="https://www.tomsguide.com/us/mac-pro-2019-specs-price,news-30241.html">Mac Pro debuted in 2019</a> alongside the Pro Display XDR (also recently discontinued). The original version was powered by an Intel Xeon W chipset, featuring 32GB of ram and 256GB SSD. A $52,000 version had a 28 core Intel Xeon W chip with 1.5TB of RAM and a 4TB SSD.</p><p>The <a href="https://www.tomsguide.com/news/mac-pro-2023">last update</a> it got was in 2023, when Apple refreshed the model with the M2 Ultra chip, and priced it at $6,999. As recently as June 2025 it was rumored that a new <a href="https://www.tomsguide.com/computing/macbooks/apples-entire-mac-lineup-until-2026-revealed-in-leak-heres-every-macbook-mac-pro-and-more-to-expect">M5-powered Mac Pro would arrive</a> this year and a low-end Mac Pro. With a lack of significant updates, the writing has been on the wall for the Mac Pro for a couple of years now.</p><h2 id="perhaps-wait-on-a-mac-studio">Perhaps wait on a Mac Studio</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='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.jpg" mos="" align="middle" fullscreen="" width="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>If you're looking for a high-end Apple desktop, all we have left is the Mac Studio, but you may want to wait on upgrading. Currently, Apple offers the Studio in mismatched M4 Max and M3 Ultra CPU options. </p><p>Bloomberg's Mark Gurman has claimed that an <a href="https://www.tomsguide.com/computing/cpus/next-mac-studio-with-m5-ultra-chip-set-to-be-apples-most-powerful-yet-heres-when-it-may-arrive">M5 Ultra-powered Mac Studio</a> is coming this year. Though, he hedged that it will arrive after Apple announced the M5 Ultra and Max chipsets.</p><p>At the beginning of March, Apple revealed the new <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-pro-and-m5-max-announced-price-release-date-specs-and-more">MacBook Pro M5 Pro and M5 Max</a>, but has yet to announce the M5 Ultra. In previous years, Apple launched its M ultra chips in March for the M1 and M3, with the M2 Ultra debuting in June.</p><p>It's possible that Apple could reveal the M5 Ultra at<a href="https://www.tomsguide.com/tech-events/apples-wwdc-2026-conference-kicks-off-in-june-heres-what-we-expect-to-see"> WWDC 2026</a>, which takes place June 8 - 12.</p><p>If that's the case, Apple may debut the Mac Studio M5 Ultra this October when it typically reveals its new MacBooks and MacBook Pro laptops. This year's versions have been rumored to feature an <a href="https://www.tomsguide.com/computing/macbooks/the-touchscreen-macbook-pro-oled-is-coming-with-a-new-interface-and-it-could-be-the-biggest-upgrade-in-years">M6 chip and OLED display</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/iphone-air-deal-lowest-price-300-pounds-off">I returned my iPhone Air, but now it's on sale for £699, and that's a no-brainer purchase</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-26-4-is-here-13-new-upgrades-for-your-iphone-you-need-to-know">iOS 26.4 is here — 13 new upgrades for your iPhone you need to know</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-ran-a-half-marathon-with-the-apple-watch-ultra-3-vs-garmin-forerunner-970-to-test-the-gps-and-heart-rate-accuracy-heres-the-winner">I ran a half marathon with the Apple Watch Ultra 3 vs Garmin Forerunner 970 to test the GPS and heart rate accuracy — here’s the winner</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ MacBook Neo vs Mac mini M4: Which $599 Mac should you get? ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/macbook-neo-vs-mac-mini-m4</link>
                                                                            <description>
                            <![CDATA[ The MacBook Neo is Apple's most affordable laptop yet, but the $599 Mac mini M4 offers double the RAM and more power if you don't mind staying at your desk. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Kbuy8KkJExzUNis8oNyp7A</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UyWgQeg22LtziE8b3TiC9j-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 22 Mar 2026 05:00:00 +0000</pubDate>                                                                                                                                <updated>Tue, 28 Apr 2026 17:18:31 +0000</updated>
                                                                                                                                            <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/UyWgQeg22LtziE8b3TiC9j-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A side by side shot showing the MacBook Neo on the left and the Mac mini M4 on the right]]></media:description>                                                            <media:text><![CDATA[A side by side shot showing the MacBook Neo on the left and the Mac mini M4 on the right]]></media:text>
                                <media:title type="plain"><![CDATA[A side by side shot showing the MacBook Neo on the left and the Mac mini M4 on the right]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UyWgQeg22LtziE8b3TiC9j-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Whether you’re thinking about upgrading from a Chromebook or ditching Windows for good, there’s never been a better time to switch to Mac, especially with the release of the new <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a>. Starting at $599 (or $499 for education), this is Apple’s most affordable MacBook yet and a great way to get started with macOS. However, it’s not your only option at this price point.</p><p>Released back in 2024, the <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review">Mac mini M4</a> also starts at $599 (with that same education discount available). Sure, you will need a separate monitor along with a keyboard and mouse but chances are, you probably already have a display and your existing peripherals will likely work with macOS. While the MacBook Neo is arguably the <a href="https://www.tomsguide.com/best-picks/best-budget-laptops">best budget laptop</a> you can get right now, the Mac mini M4 is one of the <a href="https://www.tomsguide.com/us/best-mini-pc.html">best mini PCs</a> overall.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/ISmvUpSEG-w" allowfullscreen></iframe></div></div><p>If you don’t plan on bringing the Neo with you and will mostly be using it at home, then the Mac mini M4 becomes a much more compelling option. Then it just comes down to whether or not you prefer to be anchored to a desk or sitting on the couch when using your computer. Although you’re paying $599 for either machine, one comes equipped with a mobile chip while the other uses a full-blow desktop chip that’s significantly more powerful.</p><p>Now that we’ve tested and reviewed the MacBook Neo, we can see how it stacks up against Apple’s smallest Mac mini yet. If you only have $599 to spend on a new Mac, read this first before you rush out and buy the Neo as the Mac mini M4 is an equally impressive machine.</p><h3 class="article-body__section" id="section-macbook-neo-vs-mac-mini-m4-specs"><span>MacBook Neo vs Mac mini M4: Specs</span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>MacBook Neo</strong></p></th><th  ><p><strong>Mac mini M4</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Processor</strong></p></td><td  ><p>A18 Pro (6-core CPU, 6-core GPU)</p></td><td  ><p>M4 (10-core CPU, 10 core GPU)</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>13-inch Liquid Retina (2408 x 1506)</p></td><td  ><p>None (supports up to three displays)</p></td></tr><tr><td class="firstcol " ><p><strong>Memory</strong></p></td><td  ><p>8GB Unified Memory</p></td><td  ><p>16GB Unified Memory</p></td></tr><tr><td class="firstcol " ><p><strong>Storage</strong></p></td><td  ><p>256GB / 512GB SSD</p></td><td  ><p>256 to 2TB SSD</p></td></tr><tr><td class="firstcol " ><p><strong>Ports</strong></p></td><td  ><p>2 x USB-C (1x USB 2.0), 1 x 3.5mm headphone jack</p></td><td  ><p>3 x Thunderbolt 4, 2 x USB-C, 1 x HDMI, 1 x Ethernet</p></td></tr><tr><td class="firstcol " ><p><strong>Battery Life</strong></p></td><td  ><p>Up to 16 hours</p></td><td  ><p>N/A</p></td></tr><tr><td class="firstcol " ><p><strong>Camera</strong></p></td><td  ><p>1080p FaceTime HD</p></td><td  ><p>N/A</p></td></tr><tr><td class="firstcol " ><p><strong>Weight</strong></p></td><td  ><p>2.7 pounds</p></td><td  ><p>1.5 pounds</p></td></tr><tr><td class="firstcol " ><p><strong>Dimensions</strong></p></td><td  ><p>11.71 x 8.12 x 0.50 inches</p></td><td  ><p>5 x 5 x 2 inches</p></td></tr><tr><td class="firstcol " ><p><strong>Connectivity</strong></p></td><td  ><p>Wi-Fi 6E, Bluetooth 6.0</p></td><td  ><p>Wi-Fi 6E, Bluetooth 5.3, Gigabit Ethernet (upgradeable to 10 Gigabit)</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-macbook-neo-vs-mac-mini-m4-design"><span>MacBook Neo vs Mac mini M4: Design</span></h3><p>The design of these two Macs couldn’t be more different. While the MacBook Neo is a 13-inch laptop, the Mac mini M4 is a compact mini PC that Apple redesigned in 2024 to be its smallest Mac ever.</p><p>Despite being the most affordable MacBook yet, the Neo borrows quite a lot from the aesthetic of the <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-m5-review">MacBook Air</a>. It sports a fanless design, an ultra-thin chassis made from aluminum and comes with rounded corners for a more modern look. </p><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="B46r9xiPXUQxjPcQfuZuRB" name="dji_mimo_20260304_112012_20260304082012_1772642705988_photo" alt="Apple MacBook Neo" src="https://cdn.mos.cms.futurecdn.net/B46r9xiPXUQxjPcQfuZuRB.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>In addition to Silver, the Neo is also available in three vibrant shades: Blush (pink), Indigo (deep blue), and Citrus (yellow). Meanwhile, like other desktop Macs, the Mac mini M4 only comes in Silver.</p><p>At 2.7 pounds, the Neo is very light and extremely portable which makes it easy to slip into a backpack. On the other hand, the Mac mini M4 is technically lighter at just 1.5 pounds. However, since you’ll need a monitor along with a keyboard and mouse, it’s not nearly as easy to bring with you.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="233b5N8SkX2J3Nm2HCDymU" name="MacBook Neo A18 review-5" alt="MacBook Neo shown on desk" src="https://cdn.mos.cms.futurecdn.net/233b5N8SkX2J3Nm2HCDymU.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>On the MacBook Neo, you get two USB-C ports and a headphone jack on the left side of the laptop with no ports on the right side at all. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pjuxB5Utc7o6mUUauQTKSU" name="Mac mini M4-10" alt="The front ports of the Mac mini M4" src="https://cdn.mos.cms.futurecdn.net/pjuxB5Utc7o6mUUauQTKSU.jpg" mos="" align="middle" fullscreen="" width="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>Unlike with the previous model, Apple decided to add ports to the front of the Mac mini M4 and just like on the Neo, there are two USB-C ports as well as a headphone jack. Around back though, the Mac mini M4 comes equipped with three <a href="https://www.tomsguide.com/features/thunderbolt-4-vs-usb4-whats-the-difference">Thunderbolt 4</a> ports, an HDMI port, a gigabit Ethernet port and a power port.</p><p>When it comes to power, the Mac mini M4 can only be powered using the AC port at the back and the included power cable. The Neo comes with a compact 20W charger and is capped at a slower charging speed so you can’t use a higher-wattage one to quickly charge it. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3550px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Kqx2uQ42mmaaLu8okRaPqU" name="MacBook Neo A18 review-10" alt="MacBook Neo shown on desk" src="https://cdn.mos.cms.futurecdn.net/Kqx2uQ42mmaaLu8okRaPqU.jpg" mos="" align="middle" fullscreen="" width="3550" height="1997" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>You can use either of the Neo’s USB-C ports for charging. However, the front one is the better option for charging as it’s a slower USB 2.0 port while the one at the rear is USB 3 and can be used to connect to an external display or for an external SSD.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3194px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="225s5zp9wA6US6jA3sNKXU" name="MacBook Neo A18 review-3" alt="MacBook Neo shown on desk" src="https://cdn.mos.cms.futurecdn.net/225s5zp9wA6US6jA3sNKXU.jpg" mos="" align="middle" fullscreen="" width="3194" height="1797" attribution="" endorsement="" class="inline"></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 keyboard on the Neo feels great to type on with 1mm of travel but it isn’t backlit. On the base model, you also don’t get Touch ID like on more expensive MacBooks. </p><p>If you want to use your fingerprint to login or for authentication instead of entering your password, then you’re going to need to spend an extra $100 on a Neo with this functionality and extra storage. Likewise, the Neo has a mechanical trackpad instead of a Force Touch one like on the MacBook Air.</p><h3 class="article-body__section" id="section-macbook-neo-vs-mac-mini-m4-performance"><span>MacBook Neo vs Mac mini M4: Performance</span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>MacBook Neo</strong></p></th><th  ><p><strong>Mac mini M4</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Geekbench (single/multi-core)</strong></p></td><td  ><p>3535/8920</p></td><td  ><p>3838/14838</p></td></tr><tr><td class="firstcol " ><p><strong>Handbrake (min:secs)</strong></p></td><td  ><p>9:57</p></td><td  ><p>4:42</p></td></tr></tbody></table></div><p>Performance varies greatly between the MacBook Neo and the Mac mini M4, as they’re powered by entirely different classes of silicon. While the Mac mini uses the desktop-grade M4 chip, Apple brought the Neo’s price down to $599 by using the A18 Pro — the same mobile processor that powered the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16-pro-review">iPhone 16 Pro</a> back in 2024.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/KPRNKbFasz8" allowfullscreen></iframe></div></div><p>In our lab tests, both chips showed comparable single-core performance. This means for 'burst' tasks like opening apps or loading a heavy webpage, both Macs will feel equally snappy. However, the Mac mini M4 pulls ahead in multi-core workloads, making it the superior choice for video editing or heavy multitasking.</p><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="9WewLFGGuEX6mfwAKBrohk" name="MacBook Neo" alt="MacBook Neo open on a desk" src="https://cdn.mos.cms.futurecdn.net/9WewLFGGuEX6mfwAKBrohk.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The biggest performance divider isn't just the chip, but the memory. The $599 Mac mini M4 ships with 16GB of RAM as standard, whereas the Neo is stuck with 8GB and there’s no way to upgrade. In our real-world stress test, the Neo began to struggle <a href="https://www.tomsguide.com/computing/macbooks/macbook-neo-chrome-tab-test-how-many-tabs-can-8gb-ram-actually-handle">once we hit 20 open browser tabs</a>, leading to sluggishness and tab reloads. The Mac mini, with double the memory, handled twice that load without breaking a sweat.</p><p>Thermals also play a big role when it comes to performance. The Neo’s fanless design makes it completely silent, but it will eventually throttle or slow down during long 4K video exports or heavy gaming sessions to stay cool. The Mac mini M4 features an internal fan that, while near-silent, allows it to maintain peak performance indefinitely.</p><h3 class="article-body__section" id="section-macbook-neo-vs-mac-mini-m4-display"><span>MacBook Neo vs Mac mini M4: Display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zPiRYfMmizQra7ZyByNLtY" name="MacBook Neo Indigo-5" alt="MacBook Neo on a desk" src="https://cdn.mos.cms.futurecdn.net/zPiRYfMmizQra7ZyByNLtY.jpg" mos="" align="middle" fullscreen="" width="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 MacBook Neo has a 13-inch LED-backlit panel with a 2408 x 1506 resolution at 219 pixels per inch (ppi). As such, it meets Apple’s “Retina” standard and it’s also quite bright at 500 nits. Still, even with this extra brightness, you’re better off using it indoors since it has a glossy finish and you can’t upgrade to Apple’s Nano-Texture glass option like you can with more expensive MacBooks.</p><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p>Brightness (nits)</p></th><th  ><p>Color reproduction (sRGB/DCI-P3)</p></th><th  ><p>Accuracy (Delta-E)</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>MacBook Neo</strong></p></td><td  ><p>480 (HDR)</p></td><td  ><p>110%/ 78.6%</p></td><td  ><p>0.22</p></td></tr><tr><td class="firstcol " ><p><strong>Surface Laptop</strong></p></td><td  ><p>322</p></td><td  ><p>95.1% / 67.3%</p></td><td  ><p>0.25</p></td></tr><tr><td class="firstcol " ><p><strong>MacBook Air M5</strong></p></td><td  ><p>474 (HDR)</p></td><td  ><p>117.3% / 83.1%</p></td><td  ><p>0.21</p></td></tr></tbody></table></div><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3836px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="yR9QgkuBLKNQSE3axkhXqU" name="MacBook Neo A18 review-11" alt="MacBook Neo shown on desk" src="https://cdn.mos.cms.futurecdn.net/yR9QgkuBLKNQSE3axkhXqU.jpg" mos="" align="middle" fullscreen="" width="3836" height="2158" attribution="" endorsement="" class="inline"></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 only one high-speed USB-C port, you’re limited to connecting the Neo to a single external display. Likewise, you’re also stuck at 60Hz which means you won’t be able to take full advantage of high refresh rate monitors that go up to 120Hz — like Apple’s new <a href="https://www.tomsguide.com/computing/monitors/apple-studio-display-xdr-review">Studio Display XDR</a> — or even higher.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PcZt6XgJ2YPtQmgMvT3whe" name="Mac mini M4-03" alt="A triple monitor setup powered by the Mac mini M4" src="https://cdn.mos.cms.futurecdn.net/PcZt6XgJ2YPtQmgMvT3whe.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>You don’t get a display with the Mac mini but thanks to the power of the M4 chip driving it, you can connect up to three external displays at the same time. When it comes to their resolution, you can run two displays at 6K at 60Hz and a third at 5K at 60Hz over Thunderbolt 4. There’s also an HDMI port around back that can output at 4K at 60Hz. Likewise, if you only want to run a single monitor, the Mac mini M4 can actually drive an 8K display at 60Hz or a 4K display at 240Hz.</p><p>Using the Neo with a single, large external display will likely be enough for most people. However, if you want to run a dual or even a triple-monitor setup for maximum productivity, then the Mac mini M4 is the better option.</p><h3 class="article-body__section" id="section-macbook-neo-vs-mac-mini-m4-graphics"><span>MacBook Neo vs Mac mini M4: Graphics</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3793px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="riebsVzhWhheaB5sjGhBza" name="MacBook Neo gaming LIST-1" alt="MacBook Neo on a desk" src="https://cdn.mos.cms.futurecdn.net/riebsVzhWhheaB5sjGhBza.jpg" mos="" align="middle" fullscreen="" width="3793" height="2134" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Both the MacBook Neo and the Mac mini M4 are surprisingly capable gaming machines for $599, thanks to their support for hardware-accelerated ray tracing and mesh shading. However, while the Neo often relies on <a href="https://www.tomsguide.com/computing/macbooks/a-youtuber-tested-10-games-on-the-macbook-neo-and-the-results-are-surprising">MetalFX</a> upscaling to hit playable framerates, the Mac mini M4 has the raw horsepower to push higher settings natively.</p><div ><table><caption>MacBook Neo Gaming Benchmarks</caption><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Resolution</strong></p></th><th  ><p><strong>Settings</strong></p></th><th  ><p><strong>FPS (Avg)</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Hollow Knight: Silksong</strong></p></td><td  ><p>2816 x 1762</p></td><td  ><p>Native / High</p></td><td  ><p>60 (Locked)</p></td></tr><tr><td class="firstcol " ><p><strong>Sneaky Sasquatch</strong></p></td><td  ><p>2816 x 1762</p></td><td  ><p>Native / Arcade</p></td><td  ><p>60 (Locked)</p></td></tr><tr><td class="firstcol " ><p><strong>Resident Evil 4 Remake</strong></p></td><td  ><p>1080p</p></td><td  ><p>Low / MetalFX</p></td><td  ><p>40–45</p></td></tr><tr><td class="firstcol " ><p><strong>Oceanhorn 3</strong></p></td><td  ><p>1408 x 881</p></td><td  ><p>Default</p></td><td  ><p>45–60</p></td></tr><tr><td class="firstcol " ><p><strong>Cyberpunk 2077</strong></p></td><td  ><p>720p</p></td><td  ><p>Low / MetalFX</p></td><td  ><p>30–45</p></td></tr></tbody></table></div><p>Since the Neo uses the A18 Pro, it handles AAA titles that have been ported to iOS remarkably well. In our testing, <a href="https://www.tomsguide.com/reviews/resident-evil-4">Resident Evil 4</a> and the long-awaited <a href="https://www.tomsguide.com/gaming/i-bought-silksong-just-because-of-the-hype-heres-my-impressions-after-the-opening-hours">Hollow Knight: Silksong</a> played surprisingly well on the Neo's 13-inch screen. You can also tap into the entire Apple Arcade library, including the newly released Oceanhorn 3: Legend of the Shadow Sea, which looks beautiful on the Neo's glossy Retina display.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/CPokHk09I5s" allowfullscreen></iframe></div></div><p>However, Cyberpunk 2077 pushed this budget MacBook to its absolute limits. Since the Neo is fanless, it began to thermally throttle after about 20 minutes of gameplay, causing the framerate to dip into the low 20s. The 8GB of RAM also led to occasional stutters in open-world sections.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2UjXeoVBQodZJYw5QJmRvj" name="Mac mini M4-01" alt="Playing Bioshock Remastered on the Mac mini M4 with a trackball mouse and keyboard" src="https://cdn.mos.cms.futurecdn.net/2UjXeoVBQodZJYw5QJmRvj.jpg" mos="" align="middle" fullscreen="" width="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 Mac mini M4 is a much better option for extended play sessions. With 10 GPU cores and 16GB of RAM as standard, it didn’t slow down at all during our hour-long Cyberpunk stress test. Its internal fan kept the temperature stable, allowing the M4 to maintain its clock speeds indefinitely. If you’re a casual gamer who wants to play indie hits or mobile ports on the go, the Neo is a delight. However, if you want a machine that can actually act as a budget gaming PC at your desk, the Mac mini M4 is the clear winner.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEDMAX"></div>                            </div>                            <script src="https://kwizly.com/embed/eEDMAX.js" async></script><h3 class="article-body__section" id="section-macbook-neo-vs-mac-mini-m4-outlook"><span>MacBook Neo vs Mac mini M4: Outlook</span></h3><p>Switching to Mac has never been easier with two excellent options for the same $599 price. However, choosing between the two isn’t necessarily about which one is better, but rather where you plan on working.</p><p>The MacBook Neo is the most affordable MacBook yet and as such, it’s the perfect laptop for students, writers and travelers that need a machine they can go from a backpack to open on a table in seconds. You are giving up raw power for portability but in return, you’re getting a beautifully designed laptop with a 13-inch retina display that blows most <a href="https://www.tomsguide.com/computing/laptops/is-the-macbook-neo-as-good-as-a-budget-windows-laptop-here-are-our-lab-tested-results">budget Windows laptops</a> and especially <a href="https://www.tomsguide.com/best-picks/best-chromebooks">Chromebooks</a> out of the water.</p><p>Now if you want a desktop workstation on a budget and already have a monitor and the necessary peripherals, then the Mac mini M4 is a more powerful though stationary computer. With double the RAM and a desktop-class chip, it’s ideal for multitasking and more demanding workloads. Plus, thanks to its internal fan, it won’t throttle under pressure.</p><p>Ultimately, the choice between the newer MacBook Neo or the slightly older Mac mini M4 comes down to whether you value portability or power more. If you need a computer you can bring with you or even move from room to room easily, then the Neo is the better choice. However, if you don’t mind working at a desk and paying a bit more for a monitor and peripherals (if you don’t have them already), then the Mac mini M4 is still an excellent option.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/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/mini-pcs/i-hated-the-mac-mini-m4s-power-button-until-i-accidentally-proved-apple-was-right">I hated the Mac mini M4’s power button until I accidentally proved Apple was right</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/i-played-5-games-on-the-macbook-neo-heres-my-report-card">I played 5 games on the MacBook Neo — here's my report card</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple just discontinued 15 products including one that's only six months old ]]></title>
                                                                                                                                                                                                <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.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.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[ 11 new Apple products tipped for 2026 — iPhone 17e, cheap MacBook, iOS 26.4 with new Siri and more ]]></title>
                                                                                                                                                                                                <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.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.jpg" mos="" align="middle" fullscreen="" width="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.jpg" mos="" align="middle" fullscreen="" width="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.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.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[ I hated the Mac mini M4’s power button until I accidentally proved Apple was right ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/mini-pcs/i-hated-the-mac-mini-m4s-power-button-until-i-accidentally-proved-apple-was-right</link>
                                                                            <description>
                            <![CDATA[ The Mac mini M4’s oddly placed power button got a lot of heat at launch but I’ve come around to the idea of always leaving it on. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DdMWuTiPbLb27USWhnhmfB</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TUpMErrBpjcZASartetyE8-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 17 Jan 2026 06:30:00 +0000</pubDate>                                                                                                                                <updated>Sat, 21 Mar 2026 23:24:13 +0000</updated>
                                                                                                                                            <category><![CDATA[Mini PCs]]></category>
                                                    <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/TUpMErrBpjcZASartetyE8-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Lifting the Mac mini M4 up in order to press its power button]]></media:description>                                                            <media:text><![CDATA[Lifting the Mac mini M4 up in order to press its power button]]></media:text>
                                <media:title type="plain"><![CDATA[Lifting the Mac mini M4 up in order to press its power button]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TUpMErrBpjcZASartetyE8-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I was over the moon at the idea of a completely redesigned Mac mini in a much smaller case with a more powerful M4 chip. That was until Apple finally showed off its new design, revealing that, this time around, the power button on the <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review">Mac mini M4</a> would be on the bottom instead of on the back of the device.</p><p>The Apple Magic Mouse with its <a href="https://www.tomsguide.com/computing/apple-desktops/apple-just-repeated-its-worst-design-mistake-in-the-last-20-years-the-m4-mac-mini-got-magic-moused">oddly placed charging port</a> immediately sprung to mind. At least with a wireless mouse though, you don’t have to plug it in all that often. Now with one of the <a href="https://www.tomsguide.com/us/best-mini-pc.html">best mini PCs</a>, a power button is integral to their daily use. Apple on the other hand saw things quite differently.</p><p>Shortly after the Mac mini M4’s launch, Apple’s SVP of Worldwide Marketing Greg Joswiak and SVP of Hardware Engineering John Ternus explained in an interview with <a href="https://www.ithome.com/0/809/112.htm">IThome</a> that the underside of the Mac mini M4 was the “optimal spot” for its power button due to the redesign. At the same time, they also noted that most Mac users never actually <a href="https://www.tomsguide.com/phones/you-can-schedule-your-mac-to-turn-off-and-on-heres-how">turn their devices off</a>.</p><p>Although I used a Mac growing up and while in college, back when I reviewed the Mac mini M4, I had mostly been using Windows-based mini PCs. As such, I initially scoffed at the idea of never shutting down my computer and how Apple had practically made the device’s power button unreachable.</p><p>Now though, after using the Mac mini M4 for over a year I realized Apple just might have been right.</p><div class="product"><a data-dimension112="4bfb1d5e-7a2e-42b9-92bb-6aeda4146e14" data-action="Deal Block" data-label="Apple Mac mini M4 review" data-dimension48="Apple Mac mini M4 review" data-dimension25="$499" href="https://www.amazon.com/dp/B0DLBTPDCS" 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:39.87%;"><img id="GDTQJVDRrZzfsV3SQkfZB8" name="Apple Mac Mini M4 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GDTQJVDRrZzfsV3SQkfZB8.jpg" mos="" align="middle" fullscreen="" width="1500" height="598" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The base model Mac mini M4 is a big step up from its predecessor and provide more than enough power for most people. It comes with Apple’s powerful M4 chip, 16GB of RAM, and 256GB of storage. You also get plenty of ports in a tiny package with three Thunderbolt 4 ports, two USB-C ports, HDMI, and Ethernet.In our <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review" data-dimension112="4bfb1d5e-7a2e-42b9-92bb-6aeda4146e14" data-action="Deal Block" data-label="Apple Mac mini M4 review" data-dimension48="Apple Mac mini M4 review" data-dimension25="$499">Apple Mac mini M4 review</a> we said the Editor's Choice machine is as close to perfect as it gets. <a class="view-deal button" href="https://www.amazon.com/dp/B0DLBTPDCS" target="_blank" rel="nofollow" data-dimension112="4bfb1d5e-7a2e-42b9-92bb-6aeda4146e14" data-action="Deal Block" data-label="Apple Mac mini M4 review" data-dimension48="Apple Mac mini M4 review" data-dimension25="$499">View Deal</a></p></div><h2 id="a-non-optional-accessory">A non-optional accessory</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xfj3p75rb3ziTy8EuGVNpj" name="Satechi Mac Mini M4 Stand and Hub-6" alt="Inserting an SD card into Satechi's hub and stand for the Mac mini M4" src="https://cdn.mos.cms.futurecdn.net/xfj3p75rb3ziTy8EuGVNpj.jpg" mos="" align="middle" fullscreen="" width="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>Just like when <a href="https://www.tomsguide.com/computing/desktop-computers/i-just-broke-the-first-rule-of-buying-apple-products-i-bought-a-new-mac-mini-ahead-of-the-m4-mac-launch">I spent a week testing out the Mac mini M2</a> ahead of the release of this updated model, the first accessory I added to the Mac mini M4 was a USB-C powered dock and stand. </p><p>I know most people are fine using Bluetooth accessories these days but since I’m constantly switching between computers, I actually prefer one of the <a href="https://www.tomsguide.com/best-picks/best-mechanical-keyboards">best mechanical keyboards</a> and a <a href="https://www.tomsguide.com/reference/what-is-a-trackball-mouse">trackball mouse</a> with 2.4 GHz USB receivers. With three USB-A ports on the front, I even have one left over to plug in a flash drive. Likewise, with an SD card reader on the left, it’s easy to quickly take photos off my camera.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8AZQt4Ky5MbJJCAc6VaR2n" name="Satechi Mac Mini M4 Stand and Hub-5" alt="The underside of the Satechi's hub and stand for the Mac mini M4 showing its braided USB-C cable and NVMe SSD slot" src="https://cdn.mos.cms.futurecdn.net/8AZQt4Ky5MbJJCAc6VaR2n.jpg" mos="" align="middle" fullscreen="" width="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 <a href="https://www.tomsguide.com/computing/peripherals/i-added-satechis-new-usb-c-hub-and-stand-to-my-mac-mini-m4-and-its-the-perfect-upgrade">Satechi Mac Mini M4 Stand & Hub </a>also has another trick up its sleeve. When you flip it over, there’s a free slot where you can install up to a 4TB M.2 SSD. Doing so lets you get around paying the Apple Tax for extra storage. Also, thanks to the fact that the Mac mini M4 comes with 16GB of RAM as the new standard, you likely won’t have to jump up to an upgraded model since this accessory easily lets you add more storage space.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NP9dUKbVoFCw486fAx7Up5" name="Satechi Mac Mini M4 Stand and Hub-4" alt="A picture showing how Satechi's hub and stand for the Mac mini M4 allows you to easily reach its power button" src="https://cdn.mos.cms.futurecdn.net/NP9dUKbVoFCw486fAx7Up5.jpg" mos="" align="middle" fullscreen="" width="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 other big problem the Satechi Stand & Hub solves is that you can now easily reach the Mac mini M4’s power button. Without it, you’d have to awkwardly tilt the device over on your desk anytime you wanted to power it back on after a shutdown.</p><p>Although I haven’t stopped using this accessory with my Mac mini M4 for over a year now, the cutout at the back isn’t the killer feature I initially thought it would be.</p><div class="product"><a data-dimension112="f46dd48b-2ffa-4f2f-a3df-c6ebd4195a2e" data-action="Deal Block" data-label="Designed to perfectly match your Mac mini M4, this aluminum hub and stand adds three USB-A ports, an SD card reader and there’s even a slot on the bottom for a M.2 NVMe drive to boost your Mac’s storage. There’s a braided USB-C cable on the back to plug it into your computer and a cutout on the back left that lets you easily reach your Mac mini M4’s power button." data-dimension48="Designed to perfectly match your Mac mini M4, this aluminum hub and stand adds three USB-A ports, an SD card reader and there’s even a slot on the bottom for a M.2 NVMe drive to boost your Mac’s storage. There’s a braided USB-C cable on the back to plug it into your computer and a cutout on the back left that lets you easily reach your Mac mini M4’s power button." data-dimension25="$99" href="https://www.amazon.com/Satechi-Stand-Enclosure-10Gbps-Reader/dp/B0DV6WJ88D" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ZbxVvnQynCoQHyKRPhBaEW" name="satechi-mac-mini-hub-and-stand-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZbxVvnQynCoQHyKRPhBaEW.jpg" mos="" align="middle" fullscreen="" width="3000" height="3000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Designed to perfectly match your Mac mini M4, this aluminum hub and stand adds three USB-A ports, an SD card reader and there’s even a slot on the bottom for a M.2 NVMe drive to boost your Mac’s storage. There’s a braided USB-C cable on the back to plug it into your computer and a cutout on the back left that lets you easily reach your Mac mini M4’s power button. <a class="view-deal button" href="https://www.amazon.com/Satechi-Stand-Enclosure-10Gbps-Reader/dp/B0DV6WJ88D" target="_blank" rel="nofollow" data-dimension112="f46dd48b-2ffa-4f2f-a3df-c6ebd4195a2e" data-action="Deal Block" data-label="Designed to perfectly match your Mac mini M4, this aluminum hub and stand adds three USB-A ports, an SD card reader and there’s even a slot on the bottom for a M.2 NVMe drive to boost your Mac’s storage. There’s a braided USB-C cable on the back to plug it into your computer and a cutout on the back left that lets you easily reach your Mac mini M4’s power button." data-dimension48="Designed to perfectly match your Mac mini M4, this aluminum hub and stand adds three USB-A ports, an SD card reader and there’s even a slot on the bottom for a M.2 NVMe drive to boost your Mac’s storage. There’s a braided USB-C cable on the back to plug it into your computer and a cutout on the back left that lets you easily reach your Mac mini M4’s power button." data-dimension25="$99">View Deal</a></p></div><h2 id="powered-on-and-forgotten">Powered on and forgotten</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QmjZCJY7EmTEVJPLPFiCn3" name="Mac mini M4--1-LEDE" alt="A desk setup built around the Mac mini M4 with an Apple Studio Display on an all wooden desk" src="https://cdn.mos.cms.futurecdn.net/QmjZCJY7EmTEVJPLPFiCn3.jpg" mos="" align="middle" fullscreen="" width="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>Even though I still think the Mac mini M4 is the best mini PC for most people and especially for Apple users, I’ve been using it less lately so that I can spend my time testing and reviewing other, Windows-based mini PCs. </p><p>When OpenAI rolled out its <a href="https://www.tomsguide.com/computing/browsers/i-just-tried-chatgpt-atlas-as-a-long-time-chrome-user-heres-what-i-love-and-hate">ChatGPT Atlas</a> browser back in October of last year though, I was tasked with installing it and doing a hands-on. Since it was Mac-only at that time, I got it up and running on my Mac mini M4. Now if I had one of the <a href="https://www.tomsguide.com/best-picks/best-macbook">best MacBooks </a>on hand, it would have been a lot easier taking pictures of this new AI-powered browser running on a Mac. Instead, I ended up putting a new <a href="https://www.tomsguide.com/computing/i-revamped-my-desk-setup-using-the-worlds-most-expensive-cable-management-accessory-this-changes-everything">desk setup</a> together just to do so.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LRPq82kxbdSLaLVTUEQo99" name="Mac mini M4--2" alt="The Mac mini M4 with Satechi's Hub & Stand installed underneath it on a wooden desk" src="https://cdn.mos.cms.futurecdn.net/LRPq82kxbdSLaLVTUEQo99.jpg" mos="" align="middle" fullscreen="" width="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>To Apple’s credit, when I was done, I didn’t shut down the Mac mini M4. Instead, I let it go into sleep mode and that was that. Much to my surprise though, when I returned from <a href="https://www.tomsguide.com/tech-events/weirdest-gadgets-of-ces-2026">CES 2026</a> last week, I saw its status light was still on. After a few taps on my keyboard, it instantly sprung back to life, completely oblivious to the fact that I had left it powered on for almost three months.</p><p>It was at that moment that it dawned on me, maybe Apple was right. With a new puppy in our game room sleeping where I previously worked, I’ve found myself working from the Mac mini M4 in the next room and letting it fall asleep on its own each night for the past week. </p><p>I think what surprised me the most though is that besides that small white indicator light, I wouldn’t have known Apple’s mini PC was sleeping as it’s completely quiet when doing so and it isn't a light sleeper like some of the Windows-based mini PCs I’ve tested and reviewed. It doesn’t “wake up” for updates or from overly sensitive peripherals. </p><p>Even when my son would bump into my desk when running over to check on the puppy, the Mac mini M4 never stirred. That was until I started typing on the keyboard in front of it.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMwQ6O"></div>                            </div>                            <script src="https://kwizly.com/embed/eMwQ6O.js" async></script><h2 id="from-hidden-to-essential">From hidden to essential</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3886px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bgV8MxVxvAZTpiRJahz6X8" name="Orico Mini Pro-1" alt="Accessing the Mac mini M4's power button with the computer inside the Orico MiniPro Dock Case" src="https://cdn.mos.cms.futurecdn.net/bgV8MxVxvAZTpiRJahz6X8.jpg" mos="" align="middle" fullscreen="" width="3886" height="2186" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Now that I fully understand Apple’s reasoning with the Mac mini M4’s power button placement, I’d still like to see some changes with the <a href="https://www.tomsguide.com/computing/mini-pcs/mac-mini-with-m5-and-m5-pro-just-tipped-to-launch-this-year-heres-what-we-know">Mac mini M5</a> or whatever comes next. Instead of tucking it away on the underside of the device, what if Apple actually made it useful?</p><p>After reviewing the <a href="https://www.tomsguide.com/computing/mini-pcs/i-tried-this-ai-powered-mini-pc-for-a-week-and-this-unique-feature-earned-it-a-permanent-spot-on-my-desk">MSI Cubi NUC AI+ 2MG</a> and loving the fingerprint scanner integrated into its power button, I’d love to see Apple do something similar with the next Mac mini. Right now, if you want to use Touch ID to do things like log in, use Apple Pay, install new software or buy apps from the Mac App Store, your only option is to purchase a <a href="https://www.tomsguide.com/news/apple-just-made-its-best-mac-keyboard-available-to-buy-separately">Magic Keyboard with Touch ID</a> separately. But imagine how much more useful this functionality would be if it was built right into your Mac?</p><p>Even if Apple doesn’t want to give up the biggest selling point of its most expensive keyboard, there are other ways the Mac mini’s power button could be useful. Given that we’re getting an upgraded and more intelligent <a href="https://www.tomsguide.com/ai/apple-intelligence/apples-big-siri-overhaul-looks-set-for-spring-2026-heres-what-itll-be-able-to-do">Siri</a> soon, imagine if a short press of the power button could bring that up while a long press could be used to shutdown your computer. The possibilities are really almost endless once you bring short, long and even double presses into the mix.</p><p>It might have taken me over a year, but now, I finally understand why Apple compromised with the placement of the Mac mini M4’s power button. I’d say I was going to shut down my computer now but given that it’s been on for months, I guess I’ll just step away from my keyboard and let it drift off to sleep.</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/peripherals/i-tried-satechis-new-mechanical-keyboard-with-the-mac-mini-m4-and-it-puts-apples-magic-keyboard-to-shame">I tried this new mechanical keyboard with the Mac mini M4 and it puts Apple’s Magic Keyboard to shame</a></li><li><a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m4-reasons-to-buy-and-skip">Mac mini M4 — 4 reasons to buy and 3 reasons to skip</a></li><li><a href="https://www.tomsguide.com/computing/peripherals/i-gave-my-mac-mini-m4-the-ultimate-upgrade-with-this-mac-pro-style-case-and-it-fixes-some-of-my-biggest-complaints">I gave my Mac mini M4 the ultimate upgrade with this Mac Pro-style case and it fixes some of my biggest complaints</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple is reportedly developing a 24-inch OLED iMac — what we know so far ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apple-is-reportedly-developing-a-24-inch-oled-imac-what-we-know-so-far</link>
                                                                            <description>
                            <![CDATA[ The move to OLED could come for Apple's all-in-one desktop, based on a new report. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ubTAWmaaw7WMrgvoEX3ZdZ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/mCWPabfQWpMcYuHtwGDNJL-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Thu, 18 Dec 2025 18:39:22 +0000</pubDate>                                                                                                                                <updated>Thu, 18 Dec 2025 18:40:31 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Senior 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/png" url="https://cdn.mos.cms.futurecdn.net/mCWPabfQWpMcYuHtwGDNJL-1280-80.png">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[macOS Tahoe running on an iMac]]></media:description>                                                            <media:text><![CDATA[macOS Tahoe running on an iMac]]></media:text>
                                <media:title type="plain"><![CDATA[macOS Tahoe running on an iMac]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/mCWPabfQWpMcYuHtwGDNJL-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There's been no shortage of rumors regarding Apple's next iMac. Shortly after a leak suggested that <a href="https://www.tomsguide.com/computing/apple-desktops/apple-is-reportedly-developing-an-imac-pro-powered-by-an-m5-max-chip">Apple would launch an all-in-one desktop with an M5 Max processor</a>, a new leak has emerged suggesting that Apple will switch to an OLED panel for the upcoming iMac.</p><p>Korean publisher <a href="https://www.thelec.kr/news/articleView.html?idxno=45518" target="_blank">The Elec</a> reports that Apple is planning an OLED iMac, which would be a significant departure from the IPS LCD panels currently used in iMac devices. Though if you've ever used the <a href="https://www.tomsguide.com/computing/apple-desktops/apple-imac-m4-review">latest iMac</a>, you know that Apple has made the most of that screen tech to create a solid-looking display, and I expect the company will do the same with its first OLED iMac.  </p><h3 class="article-body__section" id="section-what-we-know-about-the-new-imac-oled"><span>What we know about the new iMac OLED</span></h3><p>Apple is apparently asking Samsung and LG, companies it typically partners with to make displays for its devices, for information on meeting the specs Apple has put forth. </p><p>Presumably, the display makers will be able to handle what Apple wants, and then it'll be a matter of Apple getting quotes to determine which company can meet the demands for a better price.</p><p>And what are those specs? Fortunately, the leak from The Elec contains the specs Apple has requested: "The iMac OLED specifications recently requested by Apple are known to be 24 inches, 600 nits of brightness, and 218PPI (Pixels Per Inch) in pixels," reads the request reported by the Korean publication. </p><p>If the iMac with an OLED display comes out, it would improve the all-in-one computer's brightness. In fact, based on the specs Apple is looking for in the report, the screen could be up to 20% brighter than the existing 24-inch iMac.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4837px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="B7LXyPDHqBjD2zE973qXX4" name="IMG_2461.JPG" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/B7LXyPDHqBjD2zE973qXX4.jpg" mos="" align="middle" fullscreen="" width="4837" height="2721" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Before you get too excited, the report also suggests that because this is in the early stages, Apple won't finish the OLED iMac until 2027 or 2028, with a release window sometime after that. </p><p>The other bit of bad news is the 24-inch size mentioned in the specs. Apparently, Apple isn't looking into larger OLED displays for the iMac, as the OLED tech it's considering doesn’t support panels larger than 30 inches. If you've been holding out for a large iMac with an OLED, you might need to keep the hope burning for a while longer.</p><h3 class="article-body__section" id="section-macbook-pro-oled-up-first"><span>MacBook Pro OLED up first </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6BAyYqjGxwaoY3PmXj2CoL" name="MacBook Pro 14 2024 M4-6.jpg" alt="MacBook Pro 14-inch (2024, M4) shown open on a table" src="https://cdn.mos.cms.futurecdn.net/6BAyYqjGxwaoY3PmXj2CoL.jpg" mos="" align="middle" fullscreen="" width="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 has gradually started switching its devices to OLED, but it hasn't gone all-in yet. First, the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-3-announced">Apple Watch got the newer screen technology</a>. From there, Apple started adding OLED to its beloved iPhone and <a href="https://www.tomsguide.com/tablets/ipads/ill-only-read-comics-on-an-ipad-pro-oled-from-now-on-heres-why">iPad models</a>. </p><p>On the back of its smartphones, the Cupertino company is expected to put <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m6-oled-rumors-everything-we-know-so-far">OLED screens on the MacBook Pro M6</a>. And it could also be the first MacBook with a touch screen display.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/apples-iphone-roadmap-for-the-next-two-years-just-leaked-everything-you-need-to-know">Apple's iPhone roadmap for the next two years just leaked — everything you need to know</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-26-3-has-a-pleasant-surprise-in-the-form-of-an-updated-iphone-wallpaper-gallery-heres-whats-new">iOS 26.3 has a pleasant surprise in the form of an updated iPhone wallpaper gallery — here's what's new</a></li><li><a href="https://www.tomsguide.com/computing/massive-apple-leak-reveals-over-30-coming-products-iphone-fold-cheap-macbook-smart-glasses-airtag-2-and-more">Massive Apple leak reveals over 30 upcoming products — iPhone Fold, cheap MacBook, smart glasses, AirTag 2 and more</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple is reportedly developing an iMac Pro powered by an M5 Max chip ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apple-is-reportedly-developing-an-imac-pro-powered-by-an-m5-max-chip</link>
                                                                            <description>
                            <![CDATA[ A new code leak has reportedly revealed that Apple is working on an iMac Pro powered by an unannounced M5 Max chipset. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">JjoKaxbJoaBgKQKFyUrgzU</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/tRhqCUeeXxnaJM4Nt8kdHd-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 17 Dec 2025 00:23:25 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></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.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/tRhqCUeeXxnaJM4Nt8kdHd-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iMac Pro discontinued]]></media:description>                                                            <media:text><![CDATA[iMac Pro discontinued]]></media:text>
                                <media:title type="plain"><![CDATA[iMac Pro discontinued]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/tRhqCUeeXxnaJM4Nt8kdHd-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This week, a massive code leak revealed <a href="https://www.tomsguide.com/computing/massive-apple-leak-reveals-over-30-coming-products-iphone-fold-cheap-macbook-smart-glasses-airtag-2-and-more"><u>more than 30 Apple devices</u></a> could debut in the next couple of years. Surprisingly, though, a separate code leak emerged shortly afterwards, revealing at least one more Apple product on the horizon. </p><p>Apple is reportedly developing a new iMac Pro featuring its M5 Max chipset, according to leaked internal software seen by <a href="https://www.macrumors.com/2025/12/16/apple-developing-imac-with-m5-max/"><u>MacRumors</u></a>. The massive leak was the result of a prototype of iOS 26 that was accidentally sold, which contained a “ kernel debug kit” used by Apple’s engineers. </p><p>Typically, these systems label unreleased Apple devices using codenames or platform names. Sometimes they also include secondary references to chipsets or marketing names. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.20%;"><img id="n6wNQetob6YAa5F5sEibEC" name="Apple-M5-logo" alt="Apple M5 chip render" src="https://cdn.mos.cms.futurecdn.net/n6wNQetob6YAa5F5sEibEC.jpg" mos="" align="middle" fullscreen="" width="2000" height="1124" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Apple)</span></figcaption></figure><p>According to MacRumors, the software references an iMac codenamed J833c running platform H17C. H17C is a label associated with Sotra C, an alleged codename for the M5 Max chip. This line suggests that Apple is actively testing an iMac featuring the M5 Max.</p><p>There are other devices in the code like iPad minis running tvOS that are probably just used for internal Apple testing. However, the J833c codename <a href="https://www.tomsguide.com/computing/macbooks/apples-entire-mac-lineup-until-2026-revealed-in-leak-heres-every-macbook-mac-pro-and-more-to-expect"><u>appeared earlier this year</u></a> in a different leak.</p><p>That July leak revealed every Mac product that could launch in 2026, including a variety of MacBooks and Mac Studios. However, that leak only showed the iMac featuring a standard M5 chip.</p><p>The M5 Pro and Max chips are expected to debut in 2026, and there have been rumors of Apple developing a high-end “Pro” iMac <a href="https://www.tomsguide.com/news/imac-pro-2022-with-a-mini-led-display-could-arrive-in-june"><u>going all the way back to 2022</u></a>. Bloomberg’s Mark Gurman has reported a few times that Apple is working on an iMac with a bigger screen. </p><h2 id="other-macs">Other Macs</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AQuqnVrwnhZNhA8m3shFqb" name="M5 MacBook Pro" alt="M5 MacBook Pro" src="https://cdn.mos.cms.futurecdn.net/AQuqnVrwnhZNhA8m3shFqb.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>Apparently, the leaked kit also confirmed a few other Mac devices that were highlighted in the July leak. It lists 14 and 16-inch MacBook Pros with M5 Pro and M5 Max chips, a 14-inch MacBook Pro featuring an M6 chip, and 14 and 16-inch MacBook Pro models with  M6 Pro and M6 Max chips. </p><p>Additionally, it also lists <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"><u>13 and 15-inch M5 MacBook Air models</u></a>, an M5 and M5 Pro Mac mini, and new <a href="https://www.tomsguide.com/computing/cpus/next-mac-studio-with-m5-ultra-chip-set-to-be-apples-most-powerful-yet-heres-when-it-may-arrive"><u>Mac Studio models,</u></a> which could feature the M5 Ultra chip. The rumored <a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far"><u>budget-friendly MacBook</u></a> featuring an A18 Pro chip is also listed.</p><p>We’ll have to wait until next year to find out if some of these leaked Macs turn out to be real products, but for now, take all this info with a grain of salt. If you’re planning to upgrade to one of the <a href="https://www.tomsguide.com/best-picks/best-macbook"><u>best MacBooks,</u></a> though, it might be worth waiting until next year if you want a new laptop with a more powerful M5 Max or Ultra chip inside.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/apples-iphone-roadmap-for-the-next-two-years-just-leaked-everything-you-need-to-know">Apple's iPhone roadmap for the next two years just leaked — everything you need to know</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-26-3-has-a-pleasant-surprise-in-the-form-of-an-updated-iphone-wallpaper-gallery-heres-whats-new">iOS 26.3 has a pleasant surprise in the form of an updated iPhone wallpaper gallery — here's what's new</a></li><li><a href="https://www.tomsguide.com/computing/massive-apple-leak-reveals-over-30-coming-products-iphone-fold-cheap-macbook-smart-glasses-airtag-2-and-more">Massive Apple leak reveals over 30 upcoming products — iPhone Fold, cheap MacBook, smart glasses, AirTag 2 and more</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple's infamous trash can Mac is now classified as 'vintage' ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apples-infamous-trash-can-mac-is-now-classified-as-vintage</link>
                                                                            <description>
                            <![CDATA[ Apple has added more devices to its list of vintage and obsolete products including the infamous 'trash can ' Mac Pro ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VRPvCV9TWm78LmqWpdfMf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/vy3hbu64E4uPnsDkSEXPmR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 14 Jul 2025 17:58:57 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></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.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/vy3hbu64E4uPnsDkSEXPmR-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[2013 &quot;Trash can&quot; Mac Pro]]></media:description>                                                            <media:text><![CDATA[2013 &quot;Trash can&quot; Mac Pro]]></media:text>
                                <media:title type="plain"><![CDATA[2013 &quot;Trash can&quot; Mac Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/vy3hbu64E4uPnsDkSEXPmR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's ongoing vintage and obsoletes <a href="https://support.apple.com/en-us/102772" target="_blank">products list</a> got a recent update, and the latest update adds some unique Apple products, including the infamous "trash can" 2013 Mac Pro, considered retro 12 years after it's introduction.</p><p>In general, products added to the list are actually more recent than the trash can desktop, but Apple sold that version of the Mac Pro for years. To be added to the vintage list a device has to be five years is produced and distributed for sale.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5000px;"><p class="vanilla-image-block" style="padding-top:66.74%;"><img id="kaUMp3apnLBQJXafQMsZ9e" name="Mac Pro 2013 (2).jpg" alt="Apple Mac Pro (2013)" src="https://cdn.mos.cms.futurecdn.net/kaUMp3apnLBQJXafQMsZ9e.jpg" mos="" align="middle" fullscreen="" width="5000" height="3337" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Apple sold the trash can Mac Pro until December of 2019 when it was replaced with the equally unique <a href="https://www.tomsguide.com/news/mac-pro-2023">"cheesegrater" Mac Pro</a>, a design that has largely stuck around since then.</p><p>At the time, the Mac Pro's cylindrical design was smaller than than the previous tower Mac Pro. However, the design was flawed with a lack of space to upgrade components like GPUs and RAM. </p><p>As <a href="https://www.macrumors.com/2017/04/04/apple-updates-mac-pro-and-more/" target="_blank">MacRumors reported in 2017</a>, even Apple had to admit that the design was a failure when it came to updating the system, even for Apple engineers.</p><p>"I think we designed ourselves into a bit of a thermal corner, if you will," said Craig Federighi said, who was then software engineering chief.</p><p>Beyond the turbine-looking Mac Pro, a few other Apple devices are now vintage:</p><ul><li>2019 13-inch MacBook Air</li><li>2019 iMac</li><li>2018 11-inch iPad Pro</li><li>2018 third-generation 12.9-inch ‌iPad Pro‌</li><li>iPhone 8 128GB</li></ul><p>Additionally, a number of devices are now considered obsolete. The transition occurs when a product has been considered vintage for two years. More accurately, devices are obsolete seven years after Apple discontinued them.</p><p>Most of this list includes Apple's <a href="https://www.tomsguide.com/us/apple-kills-airport-routers,news-27074.html">long-dead AirPort routers</a>.</p><ul><li>AirPort Express second generation, 2TB and 3TB</li><li>AirPort Time Capsule 2TB</li><li>AirPort Time Capsule 3TB</li><li>802.11ac AirPort Extreme</li></ul><p>Apple will support vintage products with repairs if parts are available. However, once parts supplies are gone, repairs will no longer be offered. Obsolete devices won't be repaired by Apple Stores or Apple Authorized Service Providers.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-just-leaked-in-a-surprising-new-color-get-ready-for-orange">iPhone 17 Pro Max just leaked in a surprising new color — get ready for orange</a></li><li><a href="https://www.tomsguide.com/home/smart-home/apple-smart-home-hub-we-just-got-bad-news-about-the-release-window">Apple Smart Home Hub — we just got bad news about the release window</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-17-air-heres-what-apple-could-learn-from-samsungs-thin-phone-releases">iPhone 17 Air — here’s what Apple could learn from Samsung’s thin phone releases</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple reveals critical Mac mini power flaw — here's how to get your free repair ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/is-your-mac-mini-dead-apple-confirms-power-issue-affecting-some-models-offers-free-fix</link>
                                                                            <description>
                            <![CDATA[ Apple just launched a new service program to repair Mac mini M2 units that no longer power on. Here's how to tell if you need to get yours fixed for free. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3BincahyhhaBYS2QoJLwNY</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/dBusYYEZyaW6cp4seqLxz7-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 17 Jun 2025 11:01:00 +0000</pubDate>                                                                                                                                <updated>Tue, 17 Jun 2025 13:57:42 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                                    <dc:creator><![CDATA[ James Frew ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/FDeVfL6tPoyzJeVMCC7rt3.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;James is Tom’s Guide’s Buying Guide Editor, overseeing the site&#039;s buying advice, from tech products like smartwatches, fitness trackers and phones, through to home essentials like washing machines, garden accessories and smart home devices. &lt;/p&gt;&lt;p&gt;At his first job at as a sales assistant in a department store, James learned how important it is to help people make purchasing decisions that are right for their needs, initially advising people on the different styles of fountain pens to give as gifts, before moving to the electrical department to help customers choose a new fridge, washing machine, cooker, or small appliance. &lt;/p&gt;&lt;p&gt;This skill stayed with him as he developed a career in journalism as a freelance technology writer and, later, as Buying Guide Editor for &lt;a href=&quot;https://www.makeuseof.com/author/jamesfrew/&quot; target=&quot;_blank&quot;&gt;MakeUseOf&lt;/a&gt;, where his interest in fitness combined with his commitment to impartial buying advice. &lt;/p&gt;&lt;p&gt;James is an advocate for sustainability and reparability, and focuses his reviews and advice through that lens to offer objective insights as to whether a specific product or service will be right for your needs, and if it is actually good value for money and designed to last. &lt;/p&gt;&lt;p&gt;Before joining the team at Tom’s Guide, James was the Fitness Editor at &lt;a href=&quot;https://www.fitandwell.com/author/james-frew&quot;&gt;Fit&amp;amp;Well&lt;/a&gt;, where he covered beginner-friendly exercise routines, affordable ways to boost your wellbeing, and reviewed weights, rowing machines, and workout headphones.&lt;/p&gt;&lt;p&gt;He was previously Tom&#039;s Guide&#039;s Fitness Editor, covering strength training workouts, cardio exercise, and accessible ways to improve your health and wellbeing. His interest in fitness started over 10 years ago after being diagnosed with a chronic illness.&lt;br&gt;&lt;br&gt;To help manage the symptoms, he began focusing on strengthening his core, taking regular walks around the city, and practicing meditation. He also invested in fitness trackers, home workout equipment, and yoga mats to find accessible ways to train without the gym.&lt;br&gt;&lt;br&gt;He believes that exercise should be something you enjoy doing, so appreciates the challenge of finding ways to incorporate it into everyday life through short muscle-building sessions, regular meditation, and early morning walks.&lt;br&gt;&lt;br&gt;James’ work has appeared in &lt;a href=&quot;https://www.livescience.com/author/james-frew&quot; target=&quot;_blank&quot;&gt;Live Science&lt;/a&gt;, Happiness, and consumer technology sites like &lt;a href=&quot;https://www.makeuseof.com/author/jamesfrew/&quot; target=&quot;_blank&quot;&gt;MakeUseOf&lt;/a&gt;, &lt;a href=&quot;https://www.lifewire.com/james-frew-4177147&quot; target=&quot;_blank&quot;&gt;Lifewire&lt;/a&gt;, and Blocks Decoded.  He has reviewed headphones, fitness trackers, and smartwatches, covered events like the Consumer Electronics Show (CES), IFA, and Black Hat Europe, and was named Muck Rack’s Featured Journalist in February 2021.&lt;br&gt;&lt;br&gt;He was a regular contributor to the Really Useful Podcast and a co-host for the Blocks Decoded podcast, and spent five years as a Listening Volunteer for the UK-based mental health charity Samaritans. Outside of work, you’ll find him out on long dog walks, listening to podcasts, and excitedly checking out each week&#039;s New Music Friday releases.&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/dBusYYEZyaW6cp4seqLxz7-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Mac mini M2 on a desk]]></media:description>                                                            <media:text><![CDATA[Mac mini M2 on a desk]]></media:text>
                                <media:title type="plain"><![CDATA[Mac mini M2 on a desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/dBusYYEZyaW6cp4seqLxz7-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If your Mac mini has decided it won't power up anymore, you're not alone. Apple just launched a new repair program for the M2 Mac mini (2023) as a "very small percentage" may no longer power on. </p><p>The problem affects devices manufactured between June 16, 2024 to November 23, 2024, but that's not an easy way to work out if yours is included. Instead, head over to <a href="https://support.apple.com/mac-mini-2023-service-program-for-no-power-issue" target="_blank">Apple's Mac mini Service Program</a> page and enter your serial number. </p><p>If your <a href="https://www.tomsguide.com/reviews/mac-mini-m2">Apple Mac mini M2 (2023)</a> has the problem that leads to a lot of nothing going on, then you'll be offered a free repair either with Apple direct or an authorized service partner — just fill in your details and go to an Apple Store or partner repair store. </p><p>Given the type of repair needed, it's likely that you'll be without your Mac mini for at least a couple of days, so it might be a good idea to keep a <a href="https://www.tomsguide.com/news/best-cheap-laptop-deals">cheap laptop</a> handy. Even if it's a Windows machine, you can still access a lot of your Apple data on <a href="https://www.icloud.com/" target="_blank">iCloud.com</a>. </p><h3 class="article-body__section" id="section-what-happened-to-the-mac-mini-m2-2023"><span>What happened to the Mac mini M2 (2023)?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yrSP8pXJX8k5phDdCZ5PFS" name="Mac mini M2 2023-1.jpg" alt="Mac mini M2 on a desk, viewed top-down" src="https://cdn.mos.cms.futurecdn.net/yrSP8pXJX8k5phDdCZ5PFS.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>According to Apple's service program, the hardware issue was only introduced to the Mac mini M2 a year ago, with models manufactured between June and November 2024. So it's only just getting an 'official' problem status now. </p><p>However, Reddit user <a href="https://www.reddit.com/r/macmini/comments/1fxi33b/brand_new_m2_mini_power_supply_likely_bad_apple/" target="_blank">hkfan451</a> took to r/macmini in October 2024 to report that their brand new Mac mini M2 had a power issue and Apple wouldn't allow them to mail it in for repair (although you can now that the official service program is in operation). </p><p>It's not clear if that is the same issue that Apple has now acknowledged, but the timeline would match up. Though, some Mac minis have run into power issues that are unrelated to this manufacturing issue. </p><p>In late 2023, there were discussions on the <a href="https://discussions.apple.com/thread/255269890" target="_blank">Apple Community forums</a> about Mac mini M2 units losing power. And it's a tricky one to troubleshoot since you don't have a built-in display, so you also need to check that the unit doesn't just appear dead, but actually isn't powering on at all. </p><p>If there doesn't seem to be any activity from the Mac mini at all — so no beeps, and the status indicator light on the front stays off instead of turning white — then it's time for a service. </p><p>Fortunately, some power-related issues may also be covered under warranty. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/home/home-appliances/midea-recalls-1-7-million-u-shaped-air-conditioners-over-mold-concerns-what-to-do">Midea recalls 1.7 million U-shaped air conditioners over mold concerns - what to do</a></li><li><a href="https://www.tomsguide.com/home/kitchen-dining/ikea-just-issued-urgent-product-recall-over-this-kitchen-gadget-danger-of-parts-being-ingested-with-food">IKEA just issued product recall over this kitchen gadget — danger of parts being ingested with food</a></li><li><a href="https://www.tomsguide.com/computing/peripherals/anker-recalls-over-a-million-power-banks-due-to-fire-hazard-find-out-if-yours-is-affected">Anker recalls over 1 million power banks due to fire hazard — see if you're affected</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple's next Studio Display tipped to arrive in 2026 — and it'll be brighter than ever ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apples-next-studio-display-tipped-to-arrive-in-2026-and-itll-be-brighter-than-ever</link>
                                                                            <description>
                            <![CDATA[ Apple's new Studio Display is gearing up to arrive by 2026, boasting a Mini LED upgrade in a similar design. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">zTT8QyvE2LqsVoxYjrpQX8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/kXoB3pdWs2eFCH7Z62JmPN-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 17 Feb 2025 13:49:49 +0000</pubDate>                                                                                                                                <updated>Mon, 17 Feb 2025 14:03:53 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                                    <dc:creator><![CDATA[ Darragh Murphy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5QiaTSWf9FcVB7STxcdo4M.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/kXoB3pdWs2eFCH7Z62JmPN-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Studio Display shown side on with Wheel of Time playing]]></media:description>                                                            <media:text><![CDATA[Apple Studio Display shown side on with Wheel of Time playing]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Studio Display shown side on with Wheel of Time playing]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/kXoB3pdWs2eFCH7Z62JmPN-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple is reportedly "ramping up" production on its new Studio Display, with rumors indicating it will <a href="https://www.tomsguide.com/computing/apple-desktops/apples-studio-display-may-be-getting-a-welcome-mini-led-upgrade">boast a Mini-LED upgrade</a> — and it's set to arrive as soon as next year.</p><p>According to Bloomberg's <a href="https://www.bloomberg.com/news/newsletters/2025-02-16/apple-and-meta-are-set-to-battle-over-new-area-humanoid-robots-m77mwid3" target="_blank">Mark Gurman</a> (via <a href="https://www.macrumors.com/2025/02/16/new-studio-display-per-mark-gurman/" target="_blank">MacRumors</a>), the next <a href="https://www.tomsguide.com/reviews/apple-studio-display">Apple Studio Display</a> "should arrive by 2026," offering a similar 27-inch display size and design of the current model. Interestingly, it's set to arrive alongside <a href="https://www.tomsguide.com/computing/macbook-pro-tipped-for-m5-upgrade-ahead-of-ipad-pro-what-we-know">MacBook Pro and iPad Pro models with M5 chips</a>. </p><p>While no further details are mentioned, display analyst Ross Young believes the upcoming Studio Display will feature Mini-LED backlighting. If accurate, this means we could see and improved overall brightness of the display, along with better contrast and black levels, compared the 2022 Apple Studio Display. </p><p>We've seen Apple use Mini-LEDs before, most notably in the $4,999 <a href="https://www.tomsguide.com/opinion/i-used-apples-dollar5000-pro-display-xdr-monitor-for-a-month-heres-what-happened">Apple Pro Display XDR</a>. We noted that this display is bigger, brighter and better optimized for professional content creators, but it comes with a steep price tag. With Mini-LED technology in a more affordable Studio Display ($1,499), Mac users can look forward to a far better screen for cheaper. </p><h2 id="upgraded-resolution-too">Upgraded resolution, too?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wmbvrwm4jZ84QZrejV87ZE" name="Mac mini M4-02" alt="A desk setup built around the Mac mini M4 with a Studio Display, mechanical keyboard, trackball mouse and other accessories" src="https://cdn.mos.cms.futurecdn.net/wmbvrwm4jZ84QZrejV87ZE.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Paired with an upgraded <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review">Mac mini M4</a>, which comes with a Thunderbolt 4 port and support for up to three external displays, the Apple Studio Display makes for a fine display for Mac users. However, considering Apple's latest mini PC can run two 6K displays at a 60Hz refresh rate, it could be a sign of what's to come. </p><p>The current Apple Studio Display offers 5K (5,120 x 2,880) resolution in a 27-inch screen, with bright, gorgeous colors. Now, with the Mac mini M4, and a possible M5 model coming down the pipeline since the next-gen chip is slated to come late this year or in 2026, Apple could match this resolution with a 6K monitor in the new Studio Display.</p><p>There's still a lot to learn about a new Apple Studio Display, but we're looking forward to seeing it in Mini-LED backlighting glory if rumors are to be believed. We've noted that <a href="https://www.tomsguide.com/tvs/goodbye-full-array-leds-why-mini-led-tvs-are-here-to-stay">full-array LEDs on TVs are on their way out</a> in favor of Mini-LEDs, so we could be seeing the same for monitors. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/iphone-se-4-my-love-affair-with-apples-budget-phones-might-be-over" target="_blank">I've used every iPhone SE but I don't see myself upgrading to the new iPhone SE 4</a></li><li><a href="https://www.tomsguide.com/computing/macbook-pro-tipped-for-m5-upgrade-ahead-of-ipad-pro-what-we-know">MacBook Pro tipped for M5 upgrade ahead of iPad Pro — what we know</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-just-tipped-for-very-welcome-design-upgrade">iPhone 17 Pro Max just tipped for very welcome design upgrade</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple's Studio Display may be getting a welcome Mini LED upgrade ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apples-studio-display-may-be-getting-a-welcome-mini-led-upgrade</link>
                                                                            <description>
                            <![CDATA[ The next Apple Studio Display may be getting a welcome upgrade according to a new leak. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">eHYLZjXQRvH4fDev9zA3VR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TJW6XntruxNCDjxnkD2sYg-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 13 Feb 2025 21:47:26 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></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.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.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&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.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&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.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&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.&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/TJW6XntruxNCDjxnkD2sYg-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Mac Studio on a desk plugged into a Studio Display]]></media:description>                                                            <media:text><![CDATA[Mac Studio on a desk plugged into a Studio Display]]></media:text>
                                <media:title type="plain"><![CDATA[Mac Studio on a desk plugged into a Studio Display]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TJW6XntruxNCDjxnkD2sYg-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Mini LED backlighting is coming to Apple's next 27-inch Studio Displays, according to well-regarded display <a href="https://x.com/DSCCRoss/status/1890099697811091590" target="_blank">analyst Ross Young</a> (via <a href="https://www.macrumors.com/2025/02/13/apple-mini-led-studio-display/" target="_blank">MacRumors</a>).</p><p>These new displays would be next iteration of the <a href="https://www.tomsguide.com/reviews/apple-studio-display">Studio Display</a> that hasn't been updated since Apple introduced the 27-inch monitor back in 2022. According to Young's subscribers-only post, the upcoming version will stay the same size but feature Mini LED backlighting, which could improve the contrast, black levels, and the overall brightness of the display.</p><p>Young's report says that the display will use Mini LEDs from Epistar, while LG Display will supply the panels. Together, these new display specs should hopefully make the Studio Display far less glossy or susceptible to glare. But it's worth noting that this wouldn't be a first for Apple – Mini LED tech in the <a href="https://www.tomsguide.com/opinion/i-used-apples-dollar5000-pro-display-xdr-monitor-for-a-month-heres-what-happened">Pro Display XDR</a>, but that hasn't seen an upgrade since 2020.</p><p>The currently-available 2022 version features a 5K LED panel and starts at $1,499. Although we don't know yet if switching to Mini LED technology will reflect in the cost of a next-generation version, there are other ways Apple could improve the Studio Display. For example, we're hoping the company upgrades the terrible webcam in the display, and potentially upgrading the speakers would be a good improvement as well. </p><p>On a personal level, making the power cable removable would be very welcome. Similarly, Tom's Guide security editor, Anthony Spadafora, longs for more ports as it currently only has one Thunderbolt port and three USB-C ones.</p><p>Several other currently available Apple devices already use Mini LED or have switched over to OLED like the <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-16-inch-m4-pro-2024-review">MacBook Pro M4</a> and the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">iPad Pro M4</a>, respectively. </p><p>It's not clear when this upgrade Studio Display would arrive though MacRumors suggests 2026 or late 2025.</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/i-tried-the-red-hot-apple-watch-ankle-trend-heres-what-happened">I tried the Apple Watch ankle trend — here’s why I’d never do it again</a></li><li><a href="https://www.tomsguide.com/phones/apple-just-teased-newest-member-of-the-family-for-launch-feb-19-heres-what-we-know">Apple event set for Feb. 19 — and it looks like the iPhone SE 4 is coming</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-just-tipped-for-very-welcome-design-upgrade">iPhone 17 Pro Max just tipped for very welcome design upgrade</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ This brilliant Mac mini M4 accessory fixes the weirdest thing about Apple's tiny computer — and it costs less than $100 ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/this-brilliant-mac-mini-m4-accessory-fixes-the-weirdest-thing-about-apples-tiny-computer-and-it-costs-less-than-usd100</link>
                                                                            <description>
                            <![CDATA[ Satechi’s new  hub for the Mac mini M4 adds full-sized ports, an SSD enclosure that supports up to 4TB of storage and an easy way to reach its oddly placed power button. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">FgXc93gJBBrvEKeNPDsibW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ToBN5aJCirziCKQX7fqC6Z-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 06 Jan 2025 17:00:00 +0000</pubDate>                                                                                                                                <updated>Tue, 07 Jan 2025 08:19:47 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ToBN5aJCirziCKQX7fqC6Z-1280-80.jpg">
                                                            <media:credit><![CDATA[Satechi]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Mac mini M4 on top of Satechi&#039;s new Mac Mini Hub on a desk underneath an Apple Studio Display with a mechanical keyboard on a desk]]></media:description>                                                            <media:text><![CDATA[The Mac mini M4 on top of Satechi&#039;s new Mac Mini Hub on a desk underneath an Apple Studio Display with a mechanical keyboard on a desk]]></media:text>
                                <media:title type="plain"><![CDATA[The Mac mini M4 on top of Satechi&#039;s new Mac Mini Hub on a desk underneath an Apple Studio Display with a mechanical keyboard on a desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ToBN5aJCirziCKQX7fqC6Z-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>After testing out the <a href="https://www.tomsguide.com/computing/desktop-computers/i-just-broke-the-first-rule-of-buying-apple-products-i-bought-a-new-mac-mini-ahead-of-the-m4-mac-launch">Mac mini M2 for a few weeks</a> last year, it was clear that Apple’s mini PC was in need of an upgrade. While it did well enough with web browsing and basic tasks, it was easier than I thought to utilize all 8GB of RAM on the base model.</p><p>Fortunately, back in November of last year, Apple unveiled the new <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review">Mac mini M4</a> which unlike its predecessor, came with 16GB of RAM instead of 8GB on the base model. Alongside Cupertino’s more powerful <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">M4 chip</a>, this extra memory made a huge difference when it came to multitasking and with heavier workloads like video editing. </p><p>There was only one small problem for me, instead of two USB-A ports and two <a href="https://www.tomsguide.com/features/thunderbolt-4-vs-usb4-whats-the-difference">Thunderbolt 4</a> ports, the Mac mini M4 doesn’t have any full-size USB ports. Instead, it has two USB-C ports on the front and three Thunderbolt 4 ports on the back. If you’re using Apple’s Magic Keyboard alongside a Magic Mouse or even a Magic Trackpad, this likely won’t be a problem since all of the company’s accessories are wireless and connect to your Mac via Bluetooth. </p><p>Personally, I’m not quite ready to completely move to USB-C as I still have some older devices with USB-A ports. Likewise, while Apple upped the Mac mini M4’s RAM from 8GB to 16GB, the same can’t be said for the device’s storage as moving up from 256GB to 512GB or even a 1TB of internal storage still carries a premium.</p><p>This is where accessories like Satechi’s new Mac Mini M4 Stand & Hub with SSD Enclosure can be quite useful. Not only do you get more ports, but you also get the option to outfit your Mac Mini M4 with additional storage without having to pay the <a href="https://www.tomsguide.com/us/apple-q4-2018-earnings,news-28438.html">Apple Tax</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:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="8pJgpDsixJQcs74hC8p27T" name="MACMINIHUB_E_3000x3000" alt="The Mac mini M4 on top of Satechi's Mac Mini Hub" src="https://cdn.mos.cms.futurecdn.net/8pJgpDsixJQcs74hC8p27T.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Satechi)</span></figcaption></figure><p>On the front, there are two USB-A 3.2 ports, a single USB-A 2.0 port and an SD card reader. Meanwhile, on the back, there’s a single, hard-wired USB-C cable that you plug into one of the rear ports on your Mac mini M4. </p><p>Just like with Satechi’s similar stand and hub for the Mac mini M2, this one also allows you to add your own M.2 SSD for additional storage space. In fact, the company says you can add up to 4TB of NVMe storage. You just have to make sure that your M.2 SSD is the right size to fit inside this new accessory.</p><p>If you think about it, giving up one Thunderbolt 4 connection at the back of the Mac mini M4 is totally worth it for all of these extra USB-A ports along with the option to upgrade your computer’s storage even after you purchased it from Apple. The Satechi Mac mini M4 Stand and Hub has one more trick up its sleeve though.</p><h2 id="pressed-for-power">Pressed for power</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TUpMErrBpjcZASartetyE8" name="Mac mini M4-06" alt="Lifting the Mac mini M4 up in order to press its power button" src="https://cdn.mos.cms.futurecdn.net/TUpMErrBpjcZASartetyE8.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Back when the Mac mini M4 was first revealed, myself and many others were shocked by Apple’s decision to move the device’s power button from the back side to underneath its new computer. Sure, the cooling fan at the bottom does raise up its chassis slightly, but this isn’t nearly enough space to slide your finger underneath it to press the Mac mini M4’s power button.</p><p>Just like with the <a href="https://www.tomsguide.com/computing/apple-desktops/apple-just-repeated-its-worst-design-mistake-in-the-last-20-years-the-m4-mac-mini-got-magic-moused">Magic Mouse</a> which needs to be flipped over to charge, this design decision baffled both Apple’s fans and critics alike. Instead of justifying the decision, the company doubled down by explaining that the Mac mini M4 doesn't need to be turned off or restarted all that often. Surprisingly, most Mac mini users just let their computer go to sleep instead of turning it off each night.</p><p>During my time spent testing and reviewing the Mac mini M4, I did the exact same thing but it did take some getting used to. Letting one of the <a href="https://www.tomsguide.com/us/best-mini-pc.html">best mini PCs</a> go to sleep instead of just shutting it down didn’t make any sense to me then and it still doesn’t either. Sometimes, you just want to turn off your computer and walk away, like when you’re done for the day or don’t plan on using it for a long period of time. On its own, the Mac mini M4 needs to be completely flipped over to press its power button.</p><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="7nqFPZM4ozLSfGLuKgsmcL" name="MACMINIHUB_B_3000x3000" alt="Pressing the Mac mini M4's power button with the Satechi Mac Mini Hub underneath it" src="https://cdn.mos.cms.futurecdn.net/7nqFPZM4ozLSfGLuKgsmcL.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Satechi)</span></figcaption></figure><p>In the picture above, you can see a cutout on Satechi’s stand and hub which makes it much easier to press the device’s power button. No more fumbling around, flipping your computer over or just leaving it in sleep mode so that you never have to push the power button again.</p><p>The Satechi Mac mini M4 Stand & Hub will be available to purchase in limited quantities for just $99 at the beginning of February. However, in March, the company plans to make it generally available to the wider public. </p><p>The right accessory can make all the difference and if you want even more ports, the ability to add extra storage and an easy way to reach the Mac mini M4’s power button, Satechi’s new hub is a great investment. Just keep in mind that you will need to provide your own M.2 SSD.</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/ive-waited-years-for-apple-to-give-a-damn-about-gaming-with-cyberpunk-2077-coming-to-the-mac-its-finally-happening">I’ve waited years for Apple to give a damn about Mac gaming — and it’s finally happening</a></li><li><a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m4-reasons-to-buy-and-skip">Mac mini M4 — 4 reasons to buy and 3 reasons to skip</a></li><li><a href="https://www.tomsguide.com/home/home-office/i-added-this-underrated-accessory-to-my-desk-setup-and-its-a-game-changer-for-ergonomics">This accessory fixes the biggest downside with the iMac M4 and Apple Studio Display</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ This Mac mini M4 Cyber Monday deal is almost too good to be true — grab yours before it's too late  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/this-mac-mini-m4-cyber-monday-deal-is-almost-too-good-to-be-true-why-i-recommend-buying-before-its-too-late</link>
                                                                            <description>
                            <![CDATA[ Cyber Monday could be your last chance to pick up a discounted Mac mini M4 ahead of the holidays. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">rPDgufKdb5D9TYeRgxTtWD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/bi5GxrzeE8Mcp7KhEfxAWW-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 02 Dec 2024 11:00:00 +0000</pubDate>                                                                                                                                <updated>Mon, 02 Dec 2024 11:39:40 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/bi5GxrzeE8Mcp7KhEfxAWW-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Mac mini M4 with a Tom&#039;s Guide Cyber Monday deals badge]]></media:description>                                                            <media:text><![CDATA[Mac mini M4 with a Tom&#039;s Guide Cyber Monday deals badge]]></media:text>
                                <media:title type="plain"><![CDATA[Mac mini M4 with a Tom&#039;s Guide Cyber Monday deals badge]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/bi5GxrzeE8Mcp7KhEfxAWW-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Whether you’re tired of having a bulky desktop on your desk or just don’t want to be bothered with plugging in your laptop each night, one of the <a href="https://www.tomsguide.com/us/best-mini-pc.html">best mini PCs</a> could be the answer. If you prefer macOS to Windows, then the <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m4-reasons-to-buy-and-skip">Mac mini M4</a> just might be the perfect little computer for you and thanks to <a href="https://www.tomsguide.com/live/news/best-cyber-monday-deals-id-buy-2024">Cyber Monday</a> sales, you can still pick up this brand new mini PC at a discount.</p><p>That’s right, <a href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBTPDCS" target="_blank" rel="nofollow">Amazon still has the Mac mini M4 for $559</a>. That’s $40 off its normal price but which is still quite good for a brand new Apple device that launched back in October. If you want to save even more on a more powerful device, then you’re in luck as the <a href="https://www.bhphotovideo.com/c/product/1859256-REG/apple_mcx44ll_a_mac_mini_m4_pro_12c.html" target="_blank" rel="nofollow">Mac mini M4 Pro is $1,299 at B&H Photo</a> right now. This is 100 off its normal price and a good discount on a faster device with double the storage.</p><div class="product"><a data-dimension112="1c3aef8a-be75-4f26-909a-65d1b477d794" data-action="Deal Block" data-label="Apple Mac mini (M4 2024)" data-dimension48="The base model Mac mini M4 is a big step up from its predecessor and fast enough for most people without any expensive upgrades. It comes with Apple’s awesome M4 chip, double the memory with 16GB of RAM and a 256GB SSD. You also get plenty of ports in a tiny package with three Thunderbolt 4 ports, two USB-C ports, HDMI and Ethernet." data-dimension25="$559" href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBTPDCS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="vH8E77h2um9yc8sZzXnx3H" name="mac mini square" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vH8E77h2um9yc8sZzXnx3H.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The base model Mac mini M4 is a big step up from its predecessor and fast enough for most people without any expensive upgrades. It comes with Apple’s awesome M4 chip, double the memory with 16GB of RAM and a 256GB SSD. You also get plenty of ports in a tiny package with three Thunderbolt 4 ports, two USB-C ports, HDMI and Ethernet.<a class="view-deal button" href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBTPDCS" target="_blank" rel="nofollow" data-dimension112="1c3aef8a-be75-4f26-909a-65d1b477d794" data-action="Deal Block" data-label="Apple Mac mini (M4 2024)" data-dimension48="The base model Mac mini M4 is a big step up from its predecessor and fast enough for most people without any expensive upgrades. It comes with Apple’s awesome M4 chip, double the memory with 16GB of RAM and a 256GB SSD. You also get plenty of ports in a tiny package with three Thunderbolt 4 ports, two USB-C ports, HDMI and Ethernet." data-dimension25="$559">View Deal</a></p></div><div class="product"><a data-dimension112="7e5e2aee-a99b-4da9-bf0b-7e4b6ea6ff0d" data-action="Deal Block" data-label="Apple Mac Mini M4 Pro" data-dimension48="The pro model of the smallest Mac yet takes things up a notch with more power and storage. It comes with Apple’s M4 Pro chip, 24GB of RAM and a 512GB SSD. Likewise, instead of Thunderbolt 4 ports, this upgraded model comes with even faster Thunderbolt 5 ports." data-dimension25="$1299" href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBVHSLD?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="vH8E77h2um9yc8sZzXnx3H" name="mac mini square" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vH8E77h2um9yc8sZzXnx3H.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The pro model of the smallest Mac yet takes things up a notch with more power and storage. It comes with Apple’s M4 Pro chip, 24GB of RAM and a 512GB SSD. Likewise, instead of Thunderbolt 4 ports, this upgraded model comes with even faster Thunderbolt 5 ports. <a class="view-deal button" href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBVHSLD?th=1" target="_blank" rel="nofollow" data-dimension112="7e5e2aee-a99b-4da9-bf0b-7e4b6ea6ff0d" data-action="Deal Block" data-label="Apple Mac Mini M4 Pro" data-dimension48="The pro model of the smallest Mac yet takes things up a notch with more power and storage. It comes with Apple’s M4 Pro chip, 24GB of RAM and a 512GB SSD. Likewise, instead of Thunderbolt 4 ports, this upgraded model comes with even faster Thunderbolt 5 ports." data-dimension25="$1299">View Deal</a></p></div><p>After testing out the <a href="https://www.tomsguide.com/computing/desktop-computers/i-just-broke-the-first-rule-of-buying-apple-products-i-bought-a-new-mac-mini-ahead-of-the-m4-mac-launch"><u>Mac mini M2 for a week</u></a> ahead of the launch of this new model, I can easily say the Mac mini M4 is a huge upgrade as it fixes many of our gripes with its predecessor. For instance, you now get 16GB of RAM on the base model which is double what you got with the Mac mini M2. Likewise, the Mac mini M4 is a lot faster thanks to the inclusion of Apple’s <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip"><u>M4</u></a> chip.</p><p>In my <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review"><u>Mac mini M4 review</u></a>, I loved its absolutely tiny design and all of the other changes Apple made to its chassis to make this mini PC even better. However, you’ll probably need one of the best external hard drives to go with it as you still get just 256GB of storage with the base model.</p><h2 id="a-tiny-powerhouse">A tiny powerhouse</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pjuxB5Utc7o6mUUauQTKSU" name="Mac mini M4-10" alt="The front ports of the Mac mini M4" src="https://cdn.mos.cms.futurecdn.net/pjuxB5Utc7o6mUUauQTKSU.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The biggest and most significant change besides its smaller size is the fact that Apple finally put front ports on the Mac mini M4. Up until now, only the <a href="https://www.tomsguide.com/reviews/mac-studio">Mac Studio</a> came equipped with front ports but with this new Mac mini, you get two USB-C ports and a headphone jack up front where you can actually reach them.</p><p>Personally, I have my Mac mini M4 review unit <a href="https://www.tomsguide.com/home/home-office/i-added-this-underrated-accessory-to-my-desk-setup-and-its-a-game-changer-for-ergonomics">tucked under a desk shelf</a> with the <a href="https://www.tomsguide.com/reviews/apple-studio-display">Studio Display</a> on top. If I need to charge one of my devices or move some files off of one of them, these two USB-ports really come in handy. The same goes for that 3.5mm audio jack which is great when your wireless headphones run out of battery.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PcZt6XgJ2YPtQmgMvT3whe" name="Mac mini M4-03" alt="A triple monitor setup powered by the Mac mini M4" src="https://cdn.mos.cms.futurecdn.net/PcZt6XgJ2YPtQmgMvT3whe.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Even though it’s much smaller, you can actually power even more displays using the Mac mini M4. While the base model of the <a href="https://www.tomsguide.com/reviews/mac-mini-m2">Mac mini M2</a> limited you to two, this one can drive three displays simultaneously which is great for multitasking.</p><p>While I have Apple’s Studio Display as my main display, I also have a <a href="https://www.tomsguide.com/computing/hardware/i-upgraded-my-desk-setup-with-a-touchscreen-display-and-its-made-multitasking-so-much-easier">touchscreen portable monitor</a> underneath it which I use to stay on top of what’s going on in our work chat. To truly push the Mac mini M4 to the limit though, I added a <a href="https://www.tomsguide.com/computing/monitors/this-dual-screen-portable-monitor-changed-how-i-use-my-laptop-and-now-i-cant-imagine-traveling-without-it">dual-screen portable monitor</a> next to it. After downloading a  driver, I now have four instead of three external displays hooked up to and powered by just the Mac mini M4.</p><p>If you’re using an older Mac mini or even if you’re thinking about finally ditching Windows for macOS, the Mac mini M4 is one of the best mini PCs I’ve tested yet and it’s a great computer for both work and play.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The M4 iMac is already on sale for Black Friday — save $150 on this speedy all-in-one right now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/the-m4-imac-is-already-on-sale-save-usd150-on-this-speedy-all-in-one-right-now</link>
                                                                            <description>
                            <![CDATA[ You can save a ton of money on the newly-released M4 iMac — this is a huge deal. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">98BcsGiPAm5Ngy22bL4EzL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/odGpbmbdcLgfoaEmGqSuRj-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 22 Nov 2024 22:17:04 +0000</pubDate>                                                                                                                                <updated>Fri, 22 Nov 2024 22:17:17 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Senior 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/odGpbmbdcLgfoaEmGqSuRj-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iMac M4]]></media:description>                                                            <media:text><![CDATA[Apple iMac M4]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iMac M4]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/odGpbmbdcLgfoaEmGqSuRj-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It doesn't feel like Black Friday until the crazy <a href="https://www.tomsguide.com/live/news/black-friday-apple-deals-live">Apple deals</a> start rolling in. And it's time to save when the brand new Apple products go on sale. </p><p>We already saw a $100 discount on the M4 Mac mini hit Amazon, and now the <a href="https://www.amazon.com/Apple-2024-Desktop-Computer-10-core/dp/B0DL6ZXBBP" target="_blank" rel="nofollow">M4 iMac is discounted by $150 on Amazon</a> with an early Black Friday deal. You need to clip the coupon to save the full amount, so don't forget that important step.</p><p>If you're in the market for an all-in-one computer with a high-end processor, don't wait on this deal because these could sell out.</p><div class="product"><a data-dimension112="53449f24-bbe9-407c-be2d-6802e3f1b4bb" data-action="Deal Block" data-label="The M4 iMac just came to rave reviews, and now you can already save a big chink of change on it. Amazon is offering $150 off the high-end all-in-one computer, which is a steal. Click on the $20 coupon to get the full discount. The M4 is a powerful processor that will make it easy to do whatever you want with your newly purchased computer." data-dimension48="The M4 iMac just came to rave reviews, and now you can already save a big chink of change on it. Amazon is offering $150 off the high-end all-in-one computer, which is a steal. Click on the $20 coupon to get the full discount. The M4 is a powerful processor that will make it easy to do whatever you want with your newly purchased computer." data-dimension25="$1549" href="https://www.amazon.com/Apple-2024-Desktop-Computer-10-core/dp/B0DL6ZXBBP" 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:90.53%;"><img id="kxsjX6KNkjPC7EdtKXHLKF" name="Apple 2024 iMac.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kxsjX6KNkjPC7EdtKXHLKF.jpg" mos="" align="middle" fullscreen="" width="1500" height="1358" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The M4 iMac just came to rave reviews, and now you can already save a big chink of change on it. Amazon is offering $150 off the high-end all-in-one computer, which is a steal. Click on the $20 coupon to get the full discount. The M4 is a powerful processor that will make it easy to do whatever you want with your newly purchased computer.<a class="view-deal button" href="https://www.amazon.com/Apple-2024-Desktop-Computer-10-core/dp/B0DL6ZXBBP" target="_blank" rel="nofollow" data-dimension112="53449f24-bbe9-407c-be2d-6802e3f1b4bb" data-action="Deal Block" data-label="The M4 iMac just came to rave reviews, and now you can already save a big chink of change on it. Amazon is offering $150 off the high-end all-in-one computer, which is a steal. Click on the $20 coupon to get the full discount. The M4 is a powerful processor that will make it easy to do whatever you want with your newly purchased computer." data-dimension48="The M4 iMac just came to rave reviews, and now you can already save a big chink of change on it. Amazon is offering $150 off the high-end all-in-one computer, which is a steal. Click on the $20 coupon to get the full discount. The M4 is a powerful processor that will make it easy to do whatever you want with your newly purchased computer." data-dimension25="$1549">View Deal</a></p></div><p>We gave the <a href="https://www.tomsguide.com/computing/apple-desktops/apple-imac-m4-review">M4 iMac a 4-star rating in our review</a>, with our Senior Computing Editor Alex Wawro saying, "A faster chip and a better camera make this a good iMac upgrade." </p><p>Not only is the laptop powerful with the <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">M4 chip</a>, but it also comes with a 4.5K display that looks stunning. "Apple's iMac M4 is dominated by its 24-inch (4480 x 2520 pixels) display, so it's a good thing that it's so nice to look at," reads our review.</p><p>The discounted model comes with 16GB of unified memory and a 512GB SSD, which should be more than enough to get you through any multitasking or other work you want to accomplish. You also get full support for Apple Intelligence features. With Apple <a href="https://www.tomsguide.com/computing/macbooks/dont-look-now-but-macs-are-finally-getting-good-for-gaming">pushing further into gaming on Mac</a>, you can run graphically intense games, too.</p><p>With this deal, all of the M4 iMac colors are on sale, so you can get the one that best fits your office. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The new Mac mini M4 is $100 off with this surprise Amazon Black Friday deal ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/act-fast-grab-a-brand-new-mac-mini-m4-for-usd100-off-at-amazon-right-now</link>
                                                                            <description>
                            <![CDATA[ Right now, you can get up to $50 off the M4 Mac mini at Amazon. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">hpqxGEPP8Qnjwvtq7nsGJa</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ux4LV7kUK625iKXmYB23xb-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 21 Nov 2024 18:33:58 +0000</pubDate>                                                                                                                                <updated>Thu, 10 Apr 2025 14:03:02 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ux4LV7kUK625iKXmYB23xb-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[M4 Mac Mini with a Black Friday deals badge]]></media:description>                                                            <media:text><![CDATA[M4 Mac Mini with a Black Friday deals badge]]></media:text>
                                <media:title type="plain"><![CDATA[M4 Mac Mini with a Black Friday deals badge]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ux4LV7kUK625iKXmYB23xb-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review">Mac mini M4</a> is one of the <a href="https://www.tomsguide.com/us/best-mini-pc.html">best mini PCs</a> I’ve tested yet thanks to the inclusion of Apple’s powerful <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">M4 chips</a> and the fact that the base model is no longer saddled with a measly 8GB of RAM. Not only are you getting 16GB of RAM as the new standard and a faster chip, this new model is the smallest Mac yet which makes it perfect for any desk setup or even for traveling.</p><p>Even though the Mac mini M4 just launched earlier this month, thanks to <a href="https://www.tomsguide.com/black-friday-deals-and-sales">Black Friday</a> deals you can already pick up the latest and greatest tiny desktop from Apple for a steep discount. Right now, you can get the <a href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBTPDCS?th=1" target="_blank" rel="nofollow">Mac mini M4 for just $499 at Amazon</a>. That’s $100 off its normal price but the <a href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBVHSLD?th=1" target="_blank" rel="nofollow">Mac mini M4 Pro is also $100 off</a> if you need even more power and storage space. Make sure to click the on-page digital coupon for each Mac to get these prices. </p><div class="product"><a data-dimension112="1c3aef8a-be75-4f26-909a-65d1b477d794" data-action="Deal Block" data-label="Apple Mac mini (M4 2024)" data-dimension48="The base model Mac mini M4 is a big step up from its predecessor and likely enough for most people without any expensive upgrades. It comes with Apple’s awesome M4 chip, double the memory with 16GB of RAM and a 256GB SSD. You also get plenty of ports in a tiny package with three Thunderbolt 4 ports, two USB-C ports, HDMI and Ethernet. Note: Click the on-page digital coupon to get this price." data-dimension25="$499" href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBTPDCS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="vH8E77h2um9yc8sZzXnx3H" name="mac mini square" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vH8E77h2um9yc8sZzXnx3H.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The base model Mac mini M4 is a big step up from its predecessor and likely enough for most people without any expensive upgrades. It comes with Apple’s awesome M4 chip, double the memory with 16GB of RAM and a 256GB SSD. You also get plenty of ports in a tiny package with three Thunderbolt 4 ports, two USB-C ports, HDMI and Ethernet. <strong>Note:</strong> Click the on-page digital coupon to get this price. <a class="view-deal button" href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBTPDCS" target="_blank" rel="nofollow" data-dimension112="1c3aef8a-be75-4f26-909a-65d1b477d794" data-action="Deal Block" data-label="Apple Mac mini (M4 2024)" data-dimension48="The base model Mac mini M4 is a big step up from its predecessor and likely enough for most people without any expensive upgrades. It comes with Apple’s awesome M4 chip, double the memory with 16GB of RAM and a 256GB SSD. You also get plenty of ports in a tiny package with three Thunderbolt 4 ports, two USB-C ports, HDMI and Ethernet. Note: Click the on-page digital coupon to get this price." data-dimension25="$499">View Deal</a></p></div><div class="product"><a data-dimension112="7e5e2aee-a99b-4da9-bf0b-7e4b6ea6ff0d" data-action="Deal Block" data-label="Apple Mac Mini M4 Pro" data-dimension48="The pro model of the smallest Mac yet takes things up a notch with more power and storage. It comes with Apple’s M4 Pro chip, 24GB of RAM and a 512GB SSD. Likewise, instead of Thunderbolt 4 ports, this upgraded model comes with faster Thunderbolt 5 ports. Note: Click the on-page digital coupon to get this price." data-dimension25="$1269" href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBVHSLD?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="vH8E77h2um9yc8sZzXnx3H" name="mac mini square" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vH8E77h2um9yc8sZzXnx3H.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The pro model of the smallest Mac yet takes things up a notch with more power and storage. It comes with Apple’s M4 Pro chip, 24GB of RAM and a 512GB SSD. Likewise, instead of Thunderbolt 4 ports, this upgraded model comes with faster Thunderbolt 5 ports. <strong>Note:</strong> Click the on-page digital coupon to get this price. <a class="view-deal button" href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBVHSLD?th=1" target="_blank" rel="nofollow" data-dimension112="7e5e2aee-a99b-4da9-bf0b-7e4b6ea6ff0d" data-action="Deal Block" data-label="Apple Mac Mini M4 Pro" data-dimension48="The pro model of the smallest Mac yet takes things up a notch with more power and storage. It comes with Apple’s M4 Pro chip, 24GB of RAM and a 512GB SSD. Likewise, instead of Thunderbolt 4 ports, this upgraded model comes with faster Thunderbolt 5 ports. Note: Click the on-page digital coupon to get this price." data-dimension25="$1269">View Deal</a></p></div><p>In my <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review">Mac mini M4 review</a>, not only was I impressed by the performance of Apple’s M4 chip in a desktop form factor but I also loved the new redesign. At just 5 x 5 x 2 inches, this is Cupertino’s smallest Mac yet but it also features some other notable upgrades. For instance, it’s the first Mac mini to feature front ports and now, you have two USB-C ports and a headphone jack right where you’ll actually use them.</p><p>Unlike with the <a href="https://www.tomsguide.com/reviews/mac-mini-m2">Mac mini M2 and Mac mini M2 Pro</a>, both of these new M4 models have the same rear ports. You get three Thunderbolt ports (<a href="https://www.tomsguide.com/features/thunderbolt-4-vs-usb4-whats-the-difference">Thunderbolt 4</a> on the base model, <a href="https://www.tomsguide.com/computing/thunderbolt-5-vs-thunderbolt-4">Thunderbolt 5</a> on the pro model), an HDMI port and a gigabit Ethernet port which can be upgraded to a 10 gigabit one if you have one of the <a href="https://www.tomsguide.com/best-picks/best-Wi-fi-7-routers">best Wi-Fi 7 routers</a> and a fast internet connection. <br><br>One thing I really like about the Mac mini M4 compared to the other mini PCs I’ve reviewed is that it has an internal power supply. This means that you won’t have to lug around a bulky power adapter with you and incorporating this mini PC into your desk setup is easier too.</p><p>The Mac mini M4 is a fantastic little computer and one that I wholeheartedly recommend but if you’re still on the fence, check out my <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m4-reasons-to-buy-and-skip">reasons to buy or skip</a>. Likewise, if you’re in the market for a new mini PC but don’t want to switch to macOS, I’ve rounded up the <a href="https://www.tomsguide.com/computing/desktop-computers/i-review-mini-pcs-and-id-jump-on-these-7-early-black-friday-mini-pc-deals">best Black Friday mini PC deals</a>.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple execs reveal why the redesigned Mac mini M4 features a hidden power button ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apple-execs-reveal-why-the-redesigned-mac-mini-m4-features-a-hidden-power-button</link>
                                                                            <description>
                            <![CDATA[ In an interview, two Apple execs discussed why the power button on the Mac mini M4 is hidden on the bottom. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">b6UZ7gy8cQDbp5LtGD6u9C</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JgC9LgpSRZNhs7aKuNscq3-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 12 Nov 2024 18:52:10 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></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.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/JgC9LgpSRZNhs7aKuNscq3-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Mac mini M4 upright on a desk showing its underside and power button]]></media:description>                                                            <media:text><![CDATA[The Mac mini M4 upright on a desk showing its underside and power button]]></media:text>
                                <media:title type="plain"><![CDATA[The Mac mini M4 upright on a desk showing its underside and power button]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JgC9LgpSRZNhs7aKuNscq3-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's newest <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review">Mac mini M4</a> is a tiny powerhouse that is nearly flawless save for a few annoying shortcomings. One is the awkward placement of the power button, which has <a href="https://www.tomsguide.com/computing/apple-desktops/apple-just-repeated-its-worst-design-mistake-in-the-last-20-years-the-m4-mac-mini-got-magic-moused">been controversial</a>. It's one reason we suggested you <a href="https://www.tomsguide.com/computing/apple-desktops/mac-mini-m4-reasons-to-buy-and-skip#section-mac-mini-m4-reasons-to-skip">skip the Mac mini M4</a>.</p><p>Designers at Apple managed to make the latest mini desktop computer half the size of the previous model while giving the device more accessible ports. You can see where engineers would be challenged in laying out external features on the casing.</p><p>Two Apple executives were interviewed by the Bilibili channel "<a href="https://space.bilibili.com/946974" target="_blank">Movie Hurricane</a>" (via <a href="https://www.ithome.com/0/809/112.htm" target="_blank">IThome</a>), and they broke down why the power button is on the bottom of the computer. Bilibili is China's version of YouTube.</p><p>Greg Joswiak, Apple's Senior VP of Worldwide Marketing, and John Ternus, the Senior VP of Hardware Engineering, made sure to emphasize that the button is easily accessible by "tucking" a finger under the mini to press it.</p><p>In the interview, they claim that because the Mac Mini M4 is much more compact, the new placement is "the optimal spot for a power button."</p><p>Previous iterations featured the button on the device's rear next to the ports.</p><p>"Honestly, most people almost never use the power button on a Mac," one of the execs added.</p><p>We couldn't find any hard numbers, though some smaller surveys suggested that most people don't turn off their computers or put them in sleep mode at the end of the day. So, for most, hitting the power button isn't going to be a daily or weekly moment.</p><p>Still, it's inconvenient, and if you have to put the mini in a tight space, it could be hard to access.</p><p>This hasn't stopped people from 3D-printing clever hacks. A personal favorite is one created by <a href="https://makerworld.com/en/models/756063?fbclid=IwZXh0bgNhZW0CMTAAAR2ppxYcfTifEswERXZmJel5-VvclOKiXhi0VvEKrxD59jzUSUnKrufWcbk_aem_kxhU5U6slF0GdRNygsTlbQ#profileId-704491" target="_blank">Jerrod H on Maker World</a> (via <a href="https://www.pcgamer.com/hardware/3D-printed-case-makes-Mac-mini-power-button-way-more-accessible/">PC Gamer</a>) that looks like an old PowerMac G5. Others have created simple extensions that you can tap without lifting the mini.</p><p>Despite the awkward placement of the power button, the Mac mini M4 is a great computer and easily one of the <a href="https://www.tomsguide.com/us/best-mini-pc.html">best mini PCs</a>. In <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review">our review</a>, we said, "The Mac mini M4 is an excellent mini PC, and besides being the smallest, it’s also the most powerful one Apple has released yet."</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/live/news/black-friday-apple-deals-live">Apple Black Friday deals live — I've found the best sales on iPhones, MacBooks, iPads and more</a></li><li><a href="https://www.tomsguide.com/home/smart-home/apple-airpods-could-start-monitoring-your-health-from-2026-what-we-know">Apple AirPods could start monitoring your health from 2026 — what we know</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-18-2-beta-3-is-here-heres-the-new-upgrades-for-your-iphone">iOS 18.2 beta 3 is here — here’s the new upgrades for your iPhone</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ You can already get $50 off Mac mini M4 — this is an unprecedented Black Friday deal ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/m4-mac-mini-black-friday-deal</link>
                                                                            <description>
                            <![CDATA[ Right now, you can get up to $50 off the M4 Mac mini at Amazon. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">V7x7XthCULDRbCu2qd8UVo</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wzdYM9Z46zgFVtw8BjXrRa-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 11 Nov 2024 10:45:15 +0000</pubDate>                                                                                                                                <updated>Mon, 11 Nov 2024 15:10:21 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/wzdYM9Z46zgFVtw8BjXrRa-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Mac mini M4]]></media:description>                                                            <media:text><![CDATA[Apple Mac mini M4]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Mac mini M4]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wzdYM9Z46zgFVtw8BjXrRa-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/computing/desktop-computers/mac-mini-m4-review">M4 Mac mini</a> models launched last Friday — as you can probably tell by our reviews, we love them. From the clean aesthetic of this tiny redesign to the port array and pure performance of M4, each of these pack a whole lot of power and capability into beautiful hardware.</p><p>We very much expected Apple to keep these at full price through to the end of the year, but it looks as if the Cupertino crew did not get the memo. That’s because right now, you can get up to <a href="https://www.amazon.com/dp/B0DLBTPDCS" target="_blank" rel="nofollow">$50 off the M4 Mac mini</a> at Amazon. And yes, this even includes the <a href="https://www.amazon.com/dp/B0DLBVHSLD" target="_blank" rel="nofollow">M4 Pro model</a> too.</p><div class="product"><a data-dimension112="1c3aef8a-be75-4f26-909a-65d1b477d794" data-action="Deal Block" data-label="Apple Mac mini (M4 2024)" data-dimension48="No more running away from Apple’s base model Macs. The M4 Mac mini packs that awesome M4 chip, along with a doubling of RAM to 16GB and that 256GB SSD. Port array continues to be impressive with Thunderbolt 4, HDMI, Ethernet and more." data-dimension25="$549" href="https://www.amazon.com/dp/B0DLBTPDCS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="vH8E77h2um9yc8sZzXnx3H" name="mac mini square" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vH8E77h2um9yc8sZzXnx3H.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>No more running away from Apple’s base model Macs. The M4 Mac mini packs that awesome M4 chip, along with a doubling of RAM to 16GB and that 256GB SSD. Port array continues to be impressive with Thunderbolt 4, HDMI, Ethernet and more.<a class="view-deal button" href="https://www.amazon.com/dp/B0DLBTPDCS" target="_blank" rel="nofollow" data-dimension112="1c3aef8a-be75-4f26-909a-65d1b477d794" data-action="Deal Block" data-label="Apple Mac mini (M4 2024)" data-dimension48="No more running away from Apple’s base model Macs. The M4 Mac mini packs that awesome M4 chip, along with a doubling of RAM to 16GB and that 256GB SSD. Port array continues to be impressive with Thunderbolt 4, HDMI, Ethernet and more." data-dimension25="$549">View Deal</a></p></div><div class="product"><a data-dimension112="7e5e2aee-a99b-4da9-bf0b-7e4b6ea6ff0d" data-action="Deal Block" data-label="Apple Mac Mini M4 Pro" data-dimension48="Need a little more bang for your buck? Upgrade that chip to the, frankly, monstrous M4 Pro. This also brings upgrades to Thunderbolt 5 ports, along with a 512GB SSD and 24GB of RAM. Plus, to highlight how “monstrous” this chip truly is, it’s faster than M3 Max in some areas… Let that sink in!" data-dimension25="$1349" href="https://www.amazon.com/dp/B0DLBVHSLD" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="vH8E77h2um9yc8sZzXnx3H" name="mac mini square" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vH8E77h2um9yc8sZzXnx3H.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Need a little more bang for your buck? Upgrade that chip to the, frankly, monstrous M4 Pro. This also brings upgrades to Thunderbolt 5 ports, along with a 512GB SSD and 24GB of RAM. Plus, to highlight how “monstrous” this chip truly is, it’s faster than M3 Max in some areas… Let that sink in!<a class="view-deal button" href="https://www.amazon.com/dp/B0DLBVHSLD" target="_blank" rel="nofollow" data-dimension112="7e5e2aee-a99b-4da9-bf0b-7e4b6ea6ff0d" data-action="Deal Block" data-label="Apple Mac Mini M4 Pro" data-dimension48="Need a little more bang for your buck? Upgrade that chip to the, frankly, monstrous M4 Pro. This also brings upgrades to Thunderbolt 5 ports, along with a 512GB SSD and 24GB of RAM. Plus, to highlight how “monstrous” this chip truly is, it’s faster than M3 Max in some areas… Let that sink in!" data-dimension25="$1349">View Deal</a></p></div><p>As my colleague Anthony Spadafora wrote in his review of the M4 Mac mini, this is a “beautifully designed mini PC” that will make for a welcome addition on most desks. Apple has kept a lot of the DNA that made the previous minis so good — a diverse array of ports for connectivity and a sleek construction to be hidden into any setup.</p><p>However this time, with a 5x5-inch square build, that compact-ness has been taken to a whole new level — especially when you consider what is in here. The M4 chip is a mighty performance option for your day to day and even prosumer tasks. Meanwhile, if you need a true face-melter, the M4 Pro can handle AAA gaming impressively and rip through the more intense multi-layered 4K edits without breaking a sweat.</p><p>It’s not all perfect, though, as that power button placement is a little annoying. On top of that, repairability and upgradeability are next-to impossible. I say next-to because some people have figured it out, but you will need a heat gun to melt the SSD NAND chips off the silicon and add your own… Definitely not something I’d recommend you try.</p><p>But make no mistake about it — this is arguably the best mini PC you can buy today, and it’s now $50 off just days after its launch. You’d be mad to miss out!</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple iMac M4 review: The best all-in-one just got better  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apple-imac-m4-review</link>
                                                                            <description>
                            <![CDATA[ The iMac M4 is even faster, comes with an upgraded 12MP camera and a new nano-texture glass display option, but I can't help but feel Apple didn't go far enough. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">7iDcML5CJsN2hosiU7pwxW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/A29f6fhY7tMqsjRGdxYU6f-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 07 Nov 2024 14:00:51 +0000</pubDate>                                                                                                                                <updated>Fri, 08 Nov 2024 15:11:08 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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.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/A29f6fhY7tMqsjRGdxYU6f-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iMac M4 review unit on desk]]></media:description>                                                            <media:text><![CDATA[Apple iMac M4 review unit on desk]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iMac M4 review unit on desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/A29f6fhY7tMqsjRGdxYU6f-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Apple iMac M4 ($1,299 to start) has arrived, and it looks an awful lot like its predecessors.</p><p>Don't be fooled by the tried-and-true exterior though: inside this Apple all-in-one is a brand-new <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">Apple M4 chip </a>that takes this iMac to new performance heights while supporting all of the new Apple Intelligence features.</p><p>And there are other small but welcome improvements over the old iMac M3, including a doubling of the starting RAM, a better webcam and an upgrade to USB-C for accessories.</p><p>After spending some time testing and reviewing our own iMac M4 review unit running a developer beta of macOS Sequoia, I think these upgrades are great and help make an already great PC even better, cementing its place among the <a href="https://www.tomsguide.com/us/best-all-in-one-pc,review-2159.html">best all-in-ones</a> and making it one of the <a href="https://www.tomsguide.com/best-picks/best-computers">best computers</a> you can buy for families.</p><p>But I have to admit that I'm a little underwhelmed by how much of an upgrade this offers over the iMac M3. While anyone who wants a new Mac desktop will be well-served by this machine, I think folks on the fence about upgrading from an older iMac should read my iMac M4 review before pulling the trigger on a new one.</p><h2 class="article-body__section" id="section-apple-imac-m4-review-cheat-sheet"><span>Apple iMac M4 review: Cheat sheet</span></h2><ul><li><strong>What is it?</strong> Apple's all-in-one PC, updated for 2024 with a few small upgrades and a new M4 chip inside.</li><li><strong>What does it cost?</strong> The 2024 iMac M4 is available for purchase from Apple's <a href="https://www.apple.com/shop/buy-mac/imac" target="_blank" rel="nofollow">website</a> at a starting price of $1,299, and you can pay more for additional RAM, storage or extras like a Magic Touchpad or nano-texture glass on the display.</li><li><strong>Who is it for?</strong> Families, students and anyone who needs a capable desktop PC for getting things done, browsing the web and watching videos.</li><li><strong>What do we like?</strong> The elegant design, the lovely 4.5K display, its speakers and the built-in webcam. Plus, the power of M4 helps this machine speed through basic tasks and affords it full access to incoming Apple Intelligence features.</li><li><strong>What don’t we like?</strong> No HDR support, no touchscreen option and no height adjustment option on the stand feel criminal given the price and luxurious design of this desktop.</li></ul><h2 class="article-body__section" id="section-apple-imac-m4-review-specs"><span>Apple iMac M4 review: Specs</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><strong>Apple iMac M4</strong></td></tr><tr><td class="firstcol " ><strong>Starting price</strong></td><td  >$1,299</td></tr><tr><td class="firstcol " ><strong>Colors</strong></td><td  >Blue, Green, Pink, Silver, Yellow, Orange, Purple</td></tr><tr><td class="firstcol " ><strong>CPU</strong></td><td  >8-core CPU (up to 10-core)</td></tr><tr><td class="firstcol " ><strong>GPU</strong></td><td  >8-core GPU (up to 10-core)</td></tr><tr><td class="firstcol " ><strong>Display</strong></td><td  >24 inches (4480 x 2520)</td></tr><tr><td class="firstcol " ><strong>Memory</strong></td><td  >16GB (configurable to 24GB or 32GB)</td></tr><tr><td class="firstcol " ><strong>Storage</strong></td><td  >256GB (configurable up to 2TB)</td></tr><tr><td class="firstcol " ><strong>Ports</strong></td><td  >2x Thunderbolt 4 (upgradable to 4x), 3.5mm headphone jack, Gigabit Ethernet (optional)</td></tr><tr><td class="firstcol " ><strong>Webcam</strong></td><td  >12MP w/ Desk View support</td></tr><tr><td class="firstcol " ><strong>Size</strong></td><td  >21.5 x 18.1 x 5.8 inches</td></tr><tr><td class="firstcol " ><strong>Weight</strong></td><td  >9.75 - 9.87 pounds</td></tr></tbody></table></div><h2 class="article-body__section" id="section-apple-imac-m4-review-the-ups"><span>Apple iMac M4 review: The ups</span></h2><p>The iMac has been one of my favorite Macs for some time, and the 2024 M4 model has a few strengths that continue to impress me. While it's a good all-in-one in general, these strengths really set the iMac M4 apart from the pack.</p><h2 id="lovely-4-5k-display">Lovely 4.5K 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="WZKppZw8QS4ActHUWzfSEW" name="iMac M4 (2024)-2.jpg" alt="Apple iMac M4 review unit on desk playing Twin Peaks" src="https://cdn.mos.cms.futurecdn.net/WZKppZw8QS4ActHUWzfSEW.jpg" mos="" align="middle" fullscreen="1" width="2000" height="1125" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/WZKppZw8QS4ActHUWzfSEW.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>Apple's iMac M4 is dominated by its 24-inch (4480 x 2520 pixels) display, so it's a good thing that it's so nice to look at.</p><p>While I wish it offered HDR support or (dare to dream) came in a touchscreen or OLED option, I can't complain about the brightness or image quality of the iMac M4's display.</p><p>One of the reasons I feel good recommending this PC to families is how attractive the display is and how wide its viewing angles are. During my review I watched some of my favorite shows and movies on this screen, and the colors and details on even streaming versions of older content appeared sharp and vivid.</p><div ><table><caption>Display testing results</caption><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M4</strong></td><td  ><strong>iMac M3</strong></td><td  ><strong>Apple Studio Display</strong></td></tr><tr><td class="firstcol " ><strong>Average brightness (nits)</strong></td><td  >450</td><td  >479.8</td><td  >518.4</td></tr><tr><td class="firstcol " ><strong>Peak brightness (nits)</strong></td><td  >513 (center)</td><td  >508 (center)</td><td  >563 (center)</td></tr><tr><td class="firstcol " ><strong>sRGB color gamut</strong></td><td  >111.8%</td><td  >108.2%</td><td  >114.1%</td></tr><tr><td class="firstcol " ><strong>DCI-P3 color gamut</strong></td><td  >79.2%</td><td  >76.6%</td><td  >80.8%</td></tr><tr><td class="firstcol " ><strong>Delta-E</strong></td><td  >0.22</td><td  >0.2</td><td  >0.21</td></tr></tbody></table></div><p>When we got the iMac into our testing lab and pointed our colorimeter at it, we discovered that the display performs nearly identically to its predecessor. As you can see from the chart above, the iMac M4 achieved a peak brightness of 513 nits, which is better than Apple's promised 500 nits and better than the iMac M3's 508 nits.</p><p>The iMac M4 also appears to be slightly more colorful than its predecessor, based on the fact that it achieves slightly better coverage of the sRGB and DCI-P3 color gamuts.</p><p>However, the iMac M4's screen is actually slightly dimmer, on average, than its predecessor once you average everything out. It's not something you'd notice just looking at the two side-by-side, but in the rarified conditions of our testing lab the truth comes out.</p><p>Not that it matters, really — the iMac M4's display looks lovely, and as you can see from our test results it gets nearly as bright and colorful as the <a href="https://www.tomsguide.com/reviews/apple-studio-display">Apple Studio Display</a>, a fancier screen that costs more than the entire iMac M4 ($1,599 vs $1,299).</p><p>New to the iMac M4 is the option to order one with nano-texture glass coating on the display for an additional $200 fee. Apple sent us a review unit with the new nano-texture coating, and it does indeed seem to throw off less glare (from nearby windows and our photography lights) than most displays I review. If you click on the photo above to zoom in, for example, you can clearly see a bit of glare in the top-right corner of the display that's visible on the dark areas of the screen but doesn't appear to obscure the image.</p><h2 id="m4-powered-performance">M4-powered 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="fQNCEV2wSpy2jP86VTX6oa" name="iMac M4 (2024)-5.jpg" alt="Apple iMac M4 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/fQNCEV2wSpy2jP86VTX6oa.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple's iMacs have felt speedy and fast to react ever since they started coming with Apple silicon onboard, and the iMac M4 is the fastest yet.</p><p>As you can see from our charted test results below, the iMac M4 speeds past its predecessors in our performance tests. In Geekbench 6, which scores how effectively the computer's CPU performs in tests of single-core and multi-core performance, the iMac M4 handily improves on its M3- and M1-equipped predecessors.</p><p><br></p><div ><table><caption>CPU performance tests</caption><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M4</strong></td><td  ><strong>iMac M3</strong></td><td  ><strong>iMac M1</strong></td></tr><tr><td class="firstcol " ><strong>Geekbench 6 (single-core)</strong></td><td  >3,646</td><td  >2,235</td><td  >1,739</td></tr><tr><td class="firstcol " ><strong>Geekbench 6 (multi-core)</strong></td><td  >14,724</td><td  >10,745</td><td  >7,684</td></tr></tbody></table></div><p>That's not a huge surprise given that we saw similarly strong Geekbench 6 performance from the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">iPad Pro 2024</a>, which was the first Apple device to ship with the M4 chip. In fact, the iMac M4 scored within 200 points of the iPad Pro M4 on both tests, beating the iPad in multi-core performance but falling a few points <em>behind </em>the iPad in single-core performance.</p><p>So in short, this iMac has as much power as an iPad Pro—and these days, that's more than enough for basic tasks, homework, office work and even some light gaming. </p><p>It's also capable of supporting all the current and upcoming features of Apple Intelligence, including Writing Tools that help you summarize or rewrite text, image generation via Image Playground, Genmoji custom emoji and more. However, during our review period I couldn't access most of these, so I can't tell you much about how well they work on the iMac M4. </p><p>I can say that the upgraded Siri with optional ChatGPT integration is a welcome improvement over the old version, which is well in line with the story of the iMac M4 in general: more of the same, but better than ever.</p><div ><table><caption>Mac performance tests</caption><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M4</strong></td><td  ><strong>iMac M3</strong></td><td  ><strong>iMac M1</strong></td></tr><tr><td class="firstcol " ><strong>Handbrake (minutes:seconds)</strong></td><td  >5:03</td><td  >6:46</td><td  >13:38</td></tr><tr><td class="firstcol " ><strong>BlackMagic Disk Speed (read)</strong></td><td  >2,895.2</td><td  >3,008</td><td  >DNR (did not run)</td></tr><tr><td class="firstcol " ><strong>BlackMagic Disk Speed (write)</strong></td><td  >3,045.6</td><td  >3,289</td><td  >DNR</td></tr></tbody></table></div><p>It's a similar story when it comes to speed-related tasks. In our testing, the iMac M4 was able to edit videos faster than its predecessors, completing our Handbrake video editing test (which times how long it takes the PC to transcode a 4K video file down to 1080p) nearly two minutes faster than the iMac M3.</p><p>However, the older iMac M3 turned out to perform slightly faster in the BlackMagic disk speed tests, which rate how quickly a Mac's SSD reads and writes data. Again, not a big discrepancy that almost anyone would notice when upgrading from an iMac M3 to iMac M4, but it's worth noting.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3jiaorRpuyMEz8FroVKD5R" name="iMac M4 (2024)-4.jpg" alt="Apple iMac M4 review unit on desk running Baldur's Gate 3" src="https://cdn.mos.cms.futurecdn.net/3jiaorRpuyMEz8FroVKD5R.jpg" mos="" align="middle" fullscreen="1" width="2000" height="1125" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/3jiaorRpuyMEz8FroVKD5R.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>Finally, gaming is a little better on the iMac M4 than on its predecessors, but a gaming PC this ain't.</p><p>As you can see from our game tests, the iMac M4 delivers slightly better performance in games like Shadow of the Tomb Raider and Total War: Warhammer 3. And in my own experience, you can have a good amount of fun playing Mac-optimized games (like No Man's Sky or Resident Evil 8) at decent framerates.</p><div ><table><caption>Gaming tests @ 1080p in frames per second</caption><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M4</strong></td><td  ><strong>iMac M3</strong></td><td  ><strong>iMac M1</strong></td></tr><tr><td class="firstcol " ><strong>Civilization VI: Gathering Storm</strong></td><td  >49.6</td><td  >35.9</td><td  >28.7</td></tr><tr><td class="firstcol " ><strong>Shadow of the Tomb Raider</strong></td><td  >39</td><td  >34</td><td  >DNR</td></tr><tr><td class="firstcol " ><strong>Borderlands 3</strong></td><td  >23.6</td><td  >21.4</td><td  >DNR</td></tr><tr><td class="firstcol " ><strong>Total War: Warhammer 3</strong></td><td  >22.9</td><td  >20</td><td  >DNR</td></tr></tbody></table></div><p>If you care about games and performance you'll almost certainly be frustrated, because even with the 10-core GPU model of M4 chip and 24GB of RAM, our iMac M4 review unit struggled to hit 60 frames per second in any major game released in the last decade. </p><p>As you can see from our test results, even when you knock a 5-year-old game like Sid Meier's Civilization VI: Gathering Storm down to 1080p the iMac M4 struggles to run it well at 60 FPS. Games like <a href="https://www.tomsguide.com/opinion/baldurs-gate-3-is-a-love-letter-to-dungeons-and-dragons-and-its-all-i-want-to-play-right-now">Baldur's Gate 3</a> can run and play decently well (I saw 20-30 frames per second when playing BG3 on our review unit), but you'll often have to seriously downgrade the resolution and knock the graphical settings down to get buttery-smooth performance.</p><p>That's about the level of gaming performance you'd expect from an all-in-one, so I can't really fault Apple on this count. But it was a low point in my review process, and with the marketing hype around Apple silicon and the power of M4 it would be nice to see that pay off in significantly better gaming performance.</p><h2 id="great-speakers">Great speakers</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SZsBfBkGd2CLBgMWMPWH9h" name="iMac M4 (2024)-09.jpg" alt="Apple iMac M4 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/SZsBfBkGd2CLBgMWMPWH9h.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iMac has a reputation for better-than-expected sound quality from a desktop, and the iMac M4 upholds that reputation with ease. I've had a blast listening to my favorite tracks on this all-in-one, and that's not something I say very often.</p><p>The six speakers built into the iMac do a great job of enrobing you in sound when you're sitting in front of it, doubly so when you're listening to anything with Dolby Atmos or Spatial Audio support. I have to say I buy into the gimmick of Spatial Audio, and when listening to supported tracks in front of the iMac, I did really feel like some of the sound was playing around and behind me instead of just in front of me.</p><p>While these noisemakers likely won't impress audiophiles or outperform a nice set of the <a href="https://www.tomsguide.com/us/best-computer-speakers,review-6355.html">best computer speakers</a>, they're great for movies or music and one of the high points of the iMac M4.</p><h2 id="upgraded-camera-is-nice-to-have">Upgraded camera is nice to have</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2240px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pm8TuyNpNzm7oAyXjbJdNN" name="imacm4testshot1.jpg" alt="Apple iMac M4 review test shot" src="https://cdn.mos.cms.futurecdn.net/pm8TuyNpNzm7oAyXjbJdNN.jpg" mos="" align="middle" fullscreen="1" width="2240" height="1260" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/pm8TuyNpNzm7oAyXjbJdNN.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Click to zoom in on this test shot, captured in FaceTime on the iMac M4, and note how you can see the individual cat hairs on the shoulder of my sweater. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple swapped out the 1080p camera that crowned the iMac M3 for a 12MP shooter on the M4 model, and the upgrade is a welcome one.</p><p>The iMac M4's webcam does a great job of capturing little details during video calls, and when FaceTiming it supports Desk View. This is a new mode you can enable which lets you transmit a video feed of what's on the desk in front of the iMac, and while it takes some fine-tuning to get working well it's a neat feature to have.</p><p>It works by showing you a view of what the ultrawide camera sees and giving you a slider you can drag to control how much of the shot is included in your Desk View. </p><p>While testing this feature I found it neat, but ultimately not very useful because I had to push the bottom lip of the iMac as far back as possible in order to get the webcam into a position where it could clearly capture what was directly in front of the iMac on the desk. If I used Desk View when I had the iMac tilted in a way that was comfortable for me to use, it couldn't see my desk at all and instead was pointed squarely at my groin.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4269px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="XchAGo3zX8Z6jZcKwrN5vU" name="deskviewtestshot1.jpg" alt="iMac M4 review test shot of desk view" src="https://cdn.mos.cms.futurecdn.net/XchAGo3zX8Z6jZcKwrN5vU.jpg" mos="" align="middle" fullscreen="1" width="4269" height="2401" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/XchAGo3zX8Z6jZcKwrN5vU.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>Others may not have as much of an issue, but for me that's a problem because my height forces me to angle the iMac as far back as it will go in order to minimize neck strain. That effectively means I can't use Desk View and have my face on camera at the same time, because angling the iMac to see my desk means it can't see my face.</p><p>However, I did find one useful workaround: using my iPhone as the Desk View camera. This feature takes advantage of Apple's <a href="https://www.tomsguide.com/how-to/continuity-camera-how-to-use-your-iphone-as-a-webcam-in-macos-ventura">Continuity Camera</a> tech to let you use your iPhone instead of the iMac's webcam, and it means you can angle and reposition the camera as needed in order to get the best shot of whatever's on your desk.</p><p>Since I own an iPhone 13 that supports this feature, the iMac M4's Desk View feature is actually useful. If I didn't, it wouldn't be. Bear that in mind when considering whether this feature is worth upgrading for.</p><h2 class="article-body__section" id="section-apple-imac-m4-review-the-downs"><span>Apple iMac M4 review: The downs</span></h2><p>The iMac M4 is the best iMac yet, in my opinion, but there's still some things I don't like about it.</p><h2 id="no-adjustable-height-sucks">No adjustable height sucks</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6v48qLfdt8cP7pmMrSVC4n" name="iMac M4 (2024)-8.jpg" alt="Apple iMac M4 review unit on desk, rear facing camera" src="https://cdn.mos.cms.futurecdn.net/6v48qLfdt8cP7pmMrSVC4n.jpg" mos="" align="middle" fullscreen="1" width="2000" height="1125" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/6v48qLfdt8cP7pmMrSVC4n.jpg' target='_blank' class='expand-button icon-expand-image icon' ></a></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">The back of the iMac M4 is as simple and easy to navigate as ever, right down to the utter lack of any adjustable height. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Is it just me, or is there often one weird design choice that throws you through a loop on most Apple products?</p><p>Whether it's the charging port on the bottom of the Magic Mouse, the power button on the bottom of the mac Mini M4 or the lack of options for height adjustment on the iMac, there's usually one aspect of these oh-so-carefully-over-designed products that seems like no designer noticed or cared.</p><p>For me, the painful one is the lack of height adjustment on the iMac. I've been griping about this since I reviewed the <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">iMac M1</a> back in 2021 because I'm 6'4", and whether sitting or standing the iMac is just too short for me to comfortably use.</p><p>Sure, you could shell out more money for a stand to put your iMac on, or just live like me and pile books beneath the stand to get it closer to a healthy, ergonomic height. But that looks ridiculous and leaves my $1,300+ Apple computer awkwardly teetering on my desk, just waiting for one over-ambitious cheek rub from the cat to send it clattering to the floor.</p><p>I appreciate many aspects of the iMac's clever design, from the cutout hole in the stand for easy power cable routing to the Thunderbolt 4 ports resting in an easy-to-find-without-looking row on the back rear left corner of the display. That's why it's so frustrating to have to unbox new models of this computer and, every year, be disappointed again to find that Apple didn't think someone shaped like me should feel comfortable in front of this PC.</p><h2 id="lack-of-touchscreen-option-hurts">Lack of touchscreen option hurts</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="oDjJMzuW4PS5kL9V72TCfL" name="iMac M4 (2024)-6.jpg" alt="Apple iMac M4 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/oDjJMzuW4PS5kL9V72TCfL.jpg" mos="" align="middle" fullscreen="1" width="2000" height="1125" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/oDjJMzuW4PS5kL9V72TCfL.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>I know it's bad form to complain about something not being what it isn't, so I'm not going to waste too much time telling you how this $1,299 all-in-one sucks because it doesn't have a touchscreen or an OLED display option.</p><p>What I do want to say is that the move to Apple silicon has really made me feel the lack of a touchscreen option on the iMac <em>because </em>of how well it supports iOS and iPadOS apps. I love how the fact that you're running an M-series chip means you get to natively run all your iOS and iPadOS apps on your Mac, and now that <a href="https://www.tomsguide.com/computing/macos/macos-sequoia">macOS Sequoia</a> brought us <a href="https://www.tomsguide.com/computing/macos/how-to-set-up-iphone-mirroring-in-macos-sequoia">iPhone Mirroring</a> you can even control and interact with your phone right on your Mac desktop.</p><p>That's why it's so frustrating that you have to use a mouse and keyboard to do it. It's great that Apple lets you run mobile apps on your Mac, but those apps were built for touch input, and having them running on this big, beautiful 24-inch screen makes it so painful to have to reach down and try to click and type my way through them.</p><p>I want to be able to reach out and tap on the Dock to launch apps. I want to be able to swipe my way through my iPhone notifications and play my iPad games on my Mac without feeling like it's the worst place to play them.</p><p>Apple has yet to ship a PC with a touchscreen, and it feels so silly when competitors like Dell and HP sell touchscreen-equipped all-in-ones for a fraction of the iMac's price. The iMac M4 is fundamentally an <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">iPad Pro M4</a> with more RAM and storage inside a 24-inch display, and it would be a significantly better computer if you could get it with a touchscreen, but you can't.</p><h3 class="article-body__section" id="section-apple-imac-m4-review-verdict"><span>Apple iMac M4 review: Verdict</span></h3><p>While I wish Apple had done more to make the iMac M4 the ideal family PC I know it can be, it's hard to complain about an updated version of one of the best all-in-ones on the market.</p><p>The upgrade to an M4 chip doesn't hugely improve the iMac M4 over the old M3 model or change what it's capable of, but it does deliver great performance. The bump up to 16GB RAM minimum is a good one for customers, as 8GB just doesn't cut it for most work in 2024. </p><p>And while you'd be hard-pressed to tell the difference between the 12MP webcam on this model and the 1080p webcam on the old iMac M3, it's nice to get access to the Desk View feature.</p><p>Ultimately, I can't help feeling like Apple didn't go far enough when improving the iMac for 2024. I'm grateful for the under-the-hood upgrades and the improved camera, but overall it feels like a shuffling half step forward when I was hoping for a giant leap.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple tipped to bring 90Hz displays to iMac, iPad Air and Studio Display — why it’s a big deal ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apple-tipped-to-bring-90hz-displays-to-imac-ipad-air-and-studio-display-why-its-a-big-deal</link>
                                                                            <description>
                            <![CDATA[ A new leak claims Apple is developing 90Hz displays for future iPad Air, iMac and Studio Display models. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">X4PnuyB7Xd4CZoikQymoR5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qvvDPBJGHDKPnAyz3FEFQF-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 05 Nov 2024 19:18:32 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></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.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/qvvDPBJGHDKPnAyz3FEFQF-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Studio Display on desk hooked up to Apple Mac Studio]]></media:description>                                                            <media:text><![CDATA[Apple Studio Display on desk hooked up to Apple Mac Studio]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Studio Display on desk hooked up to Apple Mac Studio]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qvvDPBJGHDKPnAyz3FEFQF-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>An unnamed source reached out to a popular Upgrade podcast (overheard by <a href="https://9to5mac.com/2024/11/04/rumor-90hz-display-imac-studio-display-ipad-air/" target="_blank">9to5Mac</a>), hosted by Myke Hurley and Jason Snell, claiming that Apple is working on a 90Hz display that might show up on future M3-powered iPad Air, the 24-inch iMac and Studio Display models.</p><p>The current <a href="https://www.tomsguide.com/reviews/apple-imac-m3">Apple iMac M3</a>, <a href="https://www.tomsguide.com/tablets/ipads/ipad-air-2024-review">13-inch iPad Air 2024</a>, and 5K <a href="https://www.tomsguide.com/reviews/apple-studio-display">Studio Displays</a> are locked at 60Hz refresh rates on the available displays. According to the source, the first 90Hz display will be on a future M3-powered iPad Air. From there, it will move to the 24-inch iMac and Studio Display.</p><p>This would match recent outputs from Apple, were the newest iPad gets upgraded first, and the Apple desktops or laptops see upgrades later.</p><p>The anonymous source told Upgrade, "I have news on screen improvements for the next generation of the M3 iPad Air. Apple is working on a higher refresh rate LCD display with a new liquid motion panel fixed at around 90Hz. They’re also working on expanding it to other models or products like a 24-inch iMac and a next-gen studio display."</p><p>Apple just <a href="https://www.tomsguide.com/computing/apple-desktops/imac-m4-announced-with-apple-intelligence-nano-texture-display-and-thunderbolt-4-specs-release-date-and-price">announced a new M4-powered iMac</a> at the end of October, launching on November 8. That device appears to feature a locked 60Hz refresh rate but is more powerful. Check back with Tom's Guide for our full review of the iMac M4 later this week.</p><p>An upgraded Studio Display hasn't seen many rumors, and with the new iMac launching this month, we probably won't see the next-generation monitor until late 2025, when Apple is expected to <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-tipped-to-arrive-in-2025-with-new-compact-camera-module">launch M5-powered MacBook</a>s.</p><p>Meanwhile, it has been dinged by device purists because their devices haven't caught up to the variable 120Hz rate available on Android and PCs available now. That said, next year's iPhone 17 series will reportedly feature a <a href="https://www.tomsguide.com/phones/iphones/iphone-17-could-finally-get-this-pro-feature-and-that-could-convince-me-to-downgrade">"ProMotion" display</a> that supports 120Hz refresh rates.</p><p>The full Upgrade episode can be found <a href="https://www.relay.fm/upgrade/536" target="_blank">here</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-intelligence/apple-intelligence-is-the-most-staggered-launch-in-apple-history-is-that-a-good-thing">Apple Intelligence is the most staggered launch in Apple's history — is that a good thing?</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-18-2-has-a-big-find-my-upgrade-and-we-cant-believe-apple-didnt-think-of-this-before">iOS 18.2 has a big Find My upgrade — and we can't believe Apple didn't think of this before</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/tubi-just-added-quentin-tarantinos-best-movie-for-free-stream-reservoir-dogs-now">Tubi just added 'Reservoir Dogs' for free — stream Quentin Tarantino's best movie now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ M4 Mac mini vs M2 Mac mini — here's all the biggest upgrades  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/m4-mac-mini-vs-m2-mac-mini-heres-all-the-biggest-upgrades</link>
                                                                            <description>
                            <![CDATA[ The M4 iMac is here. How does it compare to the M3 model, and is it worth the upgrade? Let's break down every difference and find out. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">sSCkenkABuv2EEzKyVigu5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NajgDEwq3yCM3pM9gCQizJ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 30 Oct 2024 05:01:10 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NajgDEwq3yCM3pM9gCQizJ-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Mac Mini M4 vs Mac Mini M2]]></media:description>                                                            <media:text><![CDATA[Mac Mini M4 vs Mac Mini M2]]></media:text>
                                <media:title type="plain"><![CDATA[Mac Mini M4 vs Mac Mini M2]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NajgDEwq3yCM3pM9gCQizJ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Now it’s time for Apple’s big guns, and by “big” we mean incredibly tiny. The rumors were true on a redesigned <a href="https://www.tomsguide.com/computing/desktop-computers/m4-mac-mini-unveiled-with-stunningly-compact-design-over-50-percent-smaller-thunderbolt-5-support-and-up-to-64gb-of-unified-memory">M4 Mac mini</a>, and the size is shocking — announced during <a href="https://www.tomsguide.com/computing/all-the-m4-mac-news-this-week-imac-confirmed-macbook-pro-and-mac-mini-rumors">Apple's Mac Week</a>. A 5-inch square packs either <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">M4</a> or M4 Pro power, and makes one of my personal favorite mini PCs even smaller and better than ever.</p><p>Now, Apple is quick to tell you just how this system compares to M1 and Intel Mac minis, or to “AI PCs” (read: <a href="https://www.tomsguide.com/news/snapdragon-x-elite">Snapdragon X Elite</a>, AMD and Intel-based <a href="https://www.tomsguide.com/computing/laptops/copilot-pcs-are-here-11-snapdragon-x-elite-laptops-you-can-buy-right-now">Copilot+ PCs</a>). But if you have the <a href="https://www.tomsguide.com/reviews/mac-mini-m2">M2 Mac Mini</a> already, is this worth the upgrade? I think this is worth a closer look. Here's all the biggest differences you need to know between the M4 Mac mini vs M2 Mac mini. </p><h3 class="article-body__section" id="section-m4"><span>M4 </span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><strong>Mac mini M4</strong></td><td  ><strong>Mac mini M4 Pro</strong></td></tr><tr><td class="firstcol " ><strong>Price</strong></td><td  >From $599</td><td  >From $599</td></tr><tr><td class="firstcol " ><strong>CPU</strong></td><td  >Apple M4 (up to 10-core GPU and 10-core GPU), or M4 Pro (up to 12-core CPU and up to 16-core GPU)</td><td  >Apple M2 (8-core GPU and 10-core GPU), or M4 Pro (up to 12-core CPU and up to 19-core GPU)</td></tr><tr><td class="firstcol " ><strong>Memory</strong></td><td  >16-64GB</td><td  >8-32GB</td></tr><tr><td class="firstcol " ><strong>Storage</strong></td><td  >256GB-8TB</td><td  >256GB-8TB</td></tr><tr><td class="firstcol " ><strong>Ports</strong></td><td  >2x USB-C (10Gb/s) & 3.5mm headphone jack on front, 3x Thunderbolt 4 (or Thunderbolt 5 with M4 Pro), HDMI 2.1, Gigabit Ethernet (configurable to 10 Gigabit) on back</td><td  >Up to 4x Thunderbolt 4, 2x USB-C ports, HDMI port, Gigabit Ethernet (configurable to 10 Gigabit), 3.5mm headphone jack</td></tr><tr><td class="firstcol " ><strong>Size</strong></td><td  >5 x 5 x 2 inches</td><td  >7.8 x 7.8 x 1.4 inches</td></tr><tr><td class="firstcol " ><strong>Weight</strong></td><td  >Up to 1.6 pounds</td><td  >Up to 2.8 pounds</td></tr></tbody></table></div><h3 class="article-body__section" id="section-m4-mac-mini-vs-m2-mac-mini-price-and-availability"><span>M4 Mac mini vs M2 Mac mini: Price and availability</span></h3><p>Just like <a href="https://www.tomsguide.com/computing/apple-desktops/imac-m4-announced-with-apple-intelligence-nano-texture-display-and-thunderbolt-4-specs-release-date-and-price">iMac M4</a>, the pricing is staying the same. The standard M4 Mac mini will set you back $599, whereas the M4 Pro variant will come in at a starting price of $1,399. <a href="https://www.apple.com/shop/buy-mac/mac-mini"><u>Pre-orders are available now, with a launch date of November 8</u></a>.</p><p>Now, when we get into Pro chip territory, I like to play a game called “how many times will I have to remortgage the house to afford the maxed out spec.” This year, it’s a doozy. If I was to get the M4 Pro Mac mini with 14-core CPU, 20-core GPU, 64GB of Unified Memory (RAM), an 8TB SSD and 10 Gigabit Ethernet, you’re looking at a bill of $4,699.</p><h3 class="article-body__section" id="section-m4-mac-mini-vs-m2-mac-mini-design"><span>M4 Mac mini vs M2 Mac mini: Design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hPQ7n97j4FkErWdzGz225h" name="Apple-Mac-mini-LIST.jpg" alt="Mac mini M4 in hand" src="https://cdn.mos.cms.futurecdn.net/hPQ7n97j4FkErWdzGz225h.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>I’ll be honest. I saw the rumors on the Mac mini, but I still didn’t expect the new Mac mini to be <em>this</em> small. </p><div ><table><tbody><tr><td class="firstcol " ><strong>System</strong></td><td  ><strong>Dimensions</strong></td><td  ><strong>Weight</strong></td></tr><tr><td class="firstcol " >Mac mini M4</td><td  >5 x 5 x 2 inches</td><td  >Up to 1.6 pounds</td></tr><tr><td class="firstcol " >Mac mini M2</td><td  >7.8 x 7.8 x 1.4 inches</td><td  >Up to 2.8 pounds</td></tr></tbody></table></div><p>In terms of aesthetics, the Mac mini M4 is still that solid block of aluminum adorned with ports on the front and rear. But, as you can see, it’s smaller and impressively lighter — in fact, that means it is Apple’s first ever carbon neutral Mac. Manufacturing, transporting and using this machine emits over 80% less greenhouse gases than before.</p><p>However, there is one point of potential frustration that I’d like to bring up with the M4 Mac mini. If you’ve seen me write about the iMac already, you’ll know that I’m more than a little annoyed that Apple has continued to put the USB-C port on the underside of the Magic Mouse. Hiding important things on the underside of devices just seems a bit silly to me.</p><p>So why oh why is the power button on the bottom of the Mac mini? I get the clean aesthetic, but we’re talking about probably the most important part of any desktop computer — the power switch — and that’s now in an awkward position!</p><h3 class="article-body__section" id="section-m4-mac-mini-vs-m2-mac-mini-performance"><span>M4 Mac mini vs M2 Mac mini: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mBG2BLb2nByp25qbZsfocP" name="Apple-Mac-mini-lifestyle-music-studio-min" alt="Mac Mini M4" src="https://cdn.mos.cms.futurecdn.net/mBG2BLb2nByp25qbZsfocP.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>This is where it gets juicy. The new Mac mini comes either with the M4 or M4 Pro chipsets, which both collectively deliver some bonkers performance potential through their 3-nanometer transistors.</p><p>As we’ve already seen from M4 iPad Pro benchmarks, the standard M4 is capable of some zippy performance — packing 1.8x faster CPU performance and 2.2x faster GPU performance than the M1 Mac mini.</p><div ><table><thead><tr><th class="firstcol " >Device</th><th  >Geekbench 6 single-core</th><th  >Geekbench 6 multicore</th></tr></thead><tbody><tr><td class="firstcol " >M4 iPad Pro</td><td  >3,700</td><td  >14,523</td></tr><tr><td class="firstcol " >Mac mini M2 Pro</td><td  >1,957</td><td  >15,038</td></tr></tbody></table></div><p>But the real intrigue (and the one I’m more curious to sink my teeth into) is M4 Pro. The Neural Engine is now 2x faster than the previous generation chip; the GPU’s improved architecture is capable of 2x faster ray-tracing; and Apple is touting the industry’s best single-threaded performance in its performance cores.</p><p>Not only that, but M4 Pro gives you Thunderbolt 5 support for super fast data transfer speeds, and the memory bandwidth for its RAM runs at a spicy 273 GB/s. That’s ludicrous bandwidth for loading and running apps fast under heaving multitasking — twice as much as any AI PC chip according to Apple.</p><p>And this will all contribute to some breakneck speeds in AI workloads, alongside lightning quick Apple Intelligence.</p><h3 class="article-body__section" id="section-m4-mac-mini-vs-m2-mac-mini-should-you-upgrade"><span>M4 Mac mini vs M2 Mac mini: Should you upgrade?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QLTNfvDWEcD2uc7BKPD8ek" name="Apple-Mac-mini-back-facing-ports.jpg" alt="The rear ports of the Mac mini M4" src="https://cdn.mos.cms.futurecdn.net/QLTNfvDWEcD2uc7BKPD8ek.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>With the M4 iMac, the answer to this was simple. If you already have the M3 iMac, the spec bump may not be worth it. But with this being a drastic redesign, the answer is a little unclear.</p><ul><li><strong>For those with an Intel or M1 Mac mini:</strong> Absolutely yes! What are you still doing looking at this? Go and pre-order one!</li><li><strong>For those with an M2 Mac mini:</strong> If you can wait just a while longer for M4 Mac mini review, then I definitely would. However, I don’t think you’d feel any buyer’s remorse in pre-ordering this new mini monster.</li></ul><p>And what a mini monster it is. Apple has truly upped its game here and we can’t wait to get our hands on one to review. 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/computing/apple-desktops/imac-m4-vs-imac-m3-biggest-upgrades-explained">iMac M4 vs iMac M3 — biggest upgrades explained</a></li><li><a href="https://www.tomsguide.com/computing/windows-11-24h2-update-disaster-its-now-crashing-intel-motherboards">Windows 11 24H2 update disaster — it’s now crashing Intel motherboards</a></li><li><a href="https://www.tomsguide.com/computing/thunderbolt-5-vs-thunderbolt-4">Thunderbolt 5 vs Thunderbolt 4: Everything you need to know</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iMac M4 vs iMac M3 — biggest upgrades explained ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/imac-m4-vs-imac-m3-biggest-upgrades-explained</link>
                                                                            <description>
                            <![CDATA[ The M4 iMac is here. How does it compare to the M3 model, and is it worth the upgrade? Let's break down every difference and find out. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">BMVJWhAi6uZjqjeD5MHCtF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/RfL4XDnFgHMfMoZCJkFETK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 29 Oct 2024 06:44:57 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/RfL4XDnFgHMfMoZCJkFETK-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iMac M4]]></media:description>                                                            <media:text><![CDATA[iMac M4]]></media:text>
                                <media:title type="plain"><![CDATA[iMac M4]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/RfL4XDnFgHMfMoZCJkFETK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Kicking off the week of big M4 Mac announcements, Apple has just debuted the <a href="https://www.tomsguide.com/computing/apple-desktops/imac-m4-announced-with-apple-intelligence-nano-texture-display-and-thunderbolt-4-specs-release-date-and-price">M4 iMac</a> with some tasty upgrades to the design and its performance. It may look identical (with the exception of the new colors), but there’s a lot more going on when you take a closer look at the updated <a href="https://www.tomsguide.com/us/best-all-in-one-pc,review-2159.html"><u>best all-in-one computer</u></a>.</p><p>And that’s why I’m here — to break down every single difference here, and help you figure out whether the M4 iMac is the one for you. As you’ll see (spoiler alert) the updates in performance are kind of a minor spec bump, which is why Apple was careful to compare this to the M1 and Intel iMacs for that shock value.</p><p>But there will still be some reasons why an upgrade so soon could be worth it to certain power users. Let me explain, and show you how the iMac M4 vs <a href="https://www.tomsguide.com/reviews/apple-imac-m3">iMac M3</a> stack up against one another.</p><h3 class="article-body__section" id="section-imac-m4-vs-imac-m3-specs"><span>iMac M4 vs iMac M3: Specs</span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  >iMac M4</th><th  >iMac M3</th></tr></thead><tbody><tr><td class="firstcol " ><strong>Price</strong></td><td  >$1,299 to start</td><td  >$1,299 to start</td></tr><tr><td class="firstcol " ><strong>Display</strong></td><td  >24-inch Retina display, 4480 x 2520 w/ 218 ppi (configurable with Nano-texture glass)</td><td  >24-inch Retina display, 4480 x 2520 w/ 218 ppi</td></tr><tr><td class="firstcol " ><strong>CPU</strong></td><td  >Apple M4 (up to 10-core CPU and 10-core GPU)</td><td  >Apple M3 (8-core w 8-core GPU)</td></tr><tr><td class="firstcol " ><strong>Memory</strong></td><td  >16-32GB</td><td  >8-24GB</td></tr><tr><td class="firstcol " ><strong>Storage</strong></td><td  >256GB / 512GB / 1TB / 2TB SSD</td><td  >256GB / 512GB / 1TB / 2TB SSD</td></tr><tr><td class="firstcol " ><strong>Ports</strong></td><td  >Up to 4 Thunderbolt 4 ports, headphone jack, configurable with Gigabit Ethernet</td><td  >2 Thunderbolt 4 ports, headphone jack, configurable Gigabit Ethernet port ($1,299 model); 2 additional USB-C ports (other models)</td></tr><tr><td class="firstcol " ><strong>Webcam</strong></td><td  >12MP webcam</td><td  >1080p FHD webcam</td></tr><tr><td class="firstcol " ><strong>Dimensions</strong></td><td  >21.5 x 18.1 x 5.8 inches</td><td  >21.5 x 18.1 x 5.8 inches</td></tr><tr><td class="firstcol " ><strong>Weight</strong></td><td  >9.74 - 9.79 pounds</td><td  >9.83 - 9.88 pounds</td></tr></tbody></table></div><h3 class="article-body__section" id="section-imac-m4-vs-imac-m3-price-and-availability"><span>iMac M4 vs iMac M3: Price and availability</span></h3><p>Pricing is staying the same — you can pre-order the <a href="https://www.apple.com/shop/buy-mac/imac"><u>iMac M4 for $1,299</u></a> with prices going up to $2,899 if you go for the fully maxed out spec. The big launch date is set for November 8.</p><p>That base configuration, though, comes with one important upgrade over the M3. Instead of 8GB RAM being the base option, you now get 16GB. That’s going to be critical for Apple Intelligence and multitasking.</p><h3 class="article-body__section" id="section-imac-m4-vs-imac-m3-design"><span>iMac M4 vs iMac M3: Design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="numSppFftT6Lyxe7q4S6B6" name="green-imac-m4" alt="The rear ports and the camera on the back of the iMac M4" src="https://cdn.mos.cms.futurecdn.net/numSppFftT6Lyxe7q4S6B6.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>The more things change, the more they stay the same. The all-in-one construction of the 24-inch iMac remains the same with its flat rectangular chassis that comes in at an impressively thin 0.45 inches. </p><p>On top of that, the stand’s hinge continues to give you a roughly 40-degree angle of tilt, with a hole in the back for cable management. Thunderbolt 4 ports remain on the bottom right corner of the system, and the option Ethernet can be found on the power brick you connect the iMac to.</p><p>One new thing (make that seven) is the new vibrant colors you can pick this up in: green, yellow, orange, pink, purple, blue and silver. The power cord and accessories are color-matched to the system for a tasteful all-in-one match up.</p><p>Oh, and the webcam has been vastly improved too from a 1080p cam to a full-blown 12MP Center Stage snapper. This is sure to guarantee a vastly improved picture quality on FaceTime.</p><h3 class="article-body__section" id="section-imac-m4-vs-imac-m3-display"><span>iMac M4 vs iMac M3: Display</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TuBDexrUnuYdbrbkhM4ofX" name="iMac-2023_M3-1.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/TuBDexrUnuYdbrbkhM4ofX.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>This is one of the bigger differences and upgrades — depending on how you feel about display technology. You see, you are still getting that same gorgeous 24-inch 4.5K Retina Display. But now, you can opt for an optional $200 nano-texture glass option.</p><p>With this alternative glass cover atop your display, reflections and glare should be drastically reduced. So if you have this next to a window with sunlight pouring in, you shouldn’t face any issues.</p><p>Plus, display support has now seen a drastic improvement too, with up to two external displays at 6K 60Hz, or a single 8K 120Hz panel.</p><h3 class="article-body__section" id="section-imac-m4-vs-imac-m3-performance"><span>iMac M4 vs iMac M3: Performance</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3925px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NtidZCudtriQyN5uGPjBmU" name="iMac-2023_M3-4.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/NtidZCudtriQyN5uGPjBmU.jpg" mos="" align="middle" fullscreen="" width="3925" height="2208" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Now for the internal components — Apple is finally taking the M4 found in iPad Pro and stuffing it into the iMac. As for speed boosts, this means 2.1x faster photo and video editing performance than M1, and up to 6x faster general performance than the most popular Intel-based iMac.</p><p>You‘ll notice that Apple’s been particular in choosing to compare the M4 iMac to older models. However, we can take M4 iPad Pro numbers and compare them to the M3 iMac, to get a general idea of what we can get.</p><div ><table><thead><tr><th class="firstcol " >Device</th><th  >Geekbench 6 single-core</th><th  >Geekbench 6 multicore</th></tr></thead><tbody><tr><td class="firstcol " >M4 iPad Pro</td><td  >3,700</td><td  >14,523</td></tr><tr><td class="firstcol " >iMac M3</td><td  >2,235</td><td  >10,745</td></tr></tbody></table></div><p>As you can see, the performance differences here are a lot smaller. But you should still see a noticeable improvement in gaming performance (particularly with faster hardware-accelerated ray tracing) and Apple Intelligence capabilities with a vastly larger Neural Engine.</p><h3 class="article-body__section" id="section-imac-m4-vs-imac-m3-keyboard-and-mouse"><span>iMac M4 vs iMac M3: Keyboard and mouse</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4030px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x2D5ZweT77yAN4HppZXCWk" name="iMac-2023_M3-2-2.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/x2D5ZweT77yAN4HppZXCWk.jpg" mos="" align="middle" fullscreen="" width="4030" height="2267" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>USB-C. That’s it. That’s the update. In one way, this makes me rather happy — these were the final accessories to cling onto the Lightning port, and it’s great to see Apple kill this socket once and for all.</p><p>The included Magic Keyboard and Magic Mouse do feel good to use, with plenty of depth on the chiclet keys and a smooth multi-touch surface atop the mouse. For an extra $80, you can grab a keyboard with a number pad too, and an additional $50 will get you the Magic Trackpad.</p><p>But the Cupertino crew had one job: move that port from underneath the Magic Mouse to the side, so you don’t have to just outright stop using it. Unfortunately, Apple has not done that, and one of the more annoying design decisions we’ve seen continues for yet another year.</p><h3 class="article-body__section" id="section-imac-m4-vs-imac-m3-should-you-upgrade"><span>iMac M4 vs iMac M3: Should you upgrade?</span></h3><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="tcvRB6wTKKKGCfNXNNGi3K" name="m4 imac.jpg" alt="iMac M4" src="https://cdn.mos.cms.futurecdn.net/tcvRB6wTKKKGCfNXNNGi3K.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Much like last year, the M4 iMac is a spec bump with the same aesthetics. So when asking the question about if you should upgrade, there are multiple answers:</p><ul><li><strong>For those with an Intel or M1 iMac:</strong> This is a definite “yes.” The performance gains are similar to those users felt when first seeing M1 chips in late 2020!</li><li><strong>For those with an M3 iMac:</strong> I’d wait for our review to see how significant that change is in the iMac realm.</li></ul><p>There are certain situations where I anticipate that M4 performance will be appreciated over M3, such as faster video editing and high-end gaming. But stay tuned for our full review for a fuller understanding of what the new iMac brings in terms of performance and value. </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/desktop-computers/i-just-broke-the-first-rule-of-buying-apple-products-i-bought-a-new-mac-mini-ahead-of-the-m4-mac-launch">I ditched my Windows PC for a Mac for the first time in almost 20 years — here’s why</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/black-friday-macbook-deals-2024">Forget M4 MacBooks — save up to $500 on these early Black Friday MacBook deals</a></li><li><a href="https://www.tomsguide.com/computing/browsers/this-new-tab-upgrade-in-google-chrome-has-made-my-day-so-much-easier-heres-why">This new Google Chrome upgrade made me say 'whoa' out loud — and it's a game changer</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iMac M4 announced with Apple intelligence, nano-texture display and Thunderbolt 4 — specs, release date and price ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/imac-m4-announced-with-apple-intelligence-nano-texture-display-and-thunderbolt-4-specs-release-date-and-price</link>
                                                                            <description>
                            <![CDATA[ Apple has just announced a new M4-driven iMac — here's what's new and when the all-in-one computer will arrive. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">EztjzEJ8Br9uBac9C3p3bU</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/hneLPwoeuPY26e57XwVncS-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 28 Oct 2024 16:21:27 +0000</pubDate>                                                                                                                                <updated>Tue, 29 Oct 2024 11:28:53 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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.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/hneLPwoeuPY26e57XwVncS-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iMac M4]]></media:description>                                                            <media:text><![CDATA[iMac M4]]></media:text>
                                <media:title type="plain"><![CDATA[iMac M4]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/hneLPwoeuPY26e57XwVncS-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple promised <a href="https://www.tomsguide.com/computing/macbooks/apple-m4-mac-launch-date-just-leaked-heres-when-to-expect-the-annoucement">a week of Mac announcements</a> starting today, and the company has just now unveiled the new iMac. Featuring the<a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip"> M4 chip</a>, Apple’s all-in-one computer sports seven colors, a new 12MP Center Stage camera, a new nano-texture glass option, up to four USB-C ports and starts with 16GB of RAM. As with all recent Apple devices, <a href="https://www.tomsguide.com/ai/apple-intelligence-release-date-heres-when-all-the-ai-features-are-coming">Apple Intelligence</a> is another prominent feature.</p><p>In a <a href="https://www.tomsguide.com/ai/apple-intelligence-release-date-heres-when-all-the-ai-features-are-coming" target="_blank">blog post</a>, Apple’s senior vice president of Hardware Engineering, John Ternus, said: “It’s a whole new era for iMac.” For those keeping track, the iMac is the first Apple computer to sport an M4 chip, which debuted in the latest <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">iPad Pro</a>. Apple claims the new iMac is up to 1.7x faster than the <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">M1 iMac</a>, and that the processor is more capable of handling advanced graphics and intense workloads. The chip’s Neural Engine (for AI) is also over 3x faster than on iMac M1, says Apple.</p><p>The new iMac retains the same svelte design of predecessors like the <a href="https://www.tomsguide.com/reviews/apple-imac-m3">iMac M3</a> we reviewed. However, it packs some new features such as the aforementioned 12MP front camera either two or four USB-C ports. New colors include green, yellow, orange, pink, purple, blue and silver. The iMac also comes with a color-matched Magic Keyboard and Magic Mouse — all of which now feature a USB-C port for charging.</p><h3 class="article-body__section" id="section-imac-m4-specs"><span>iMac M4: Specs</span></h3><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M4 2024 (starting)</strong></td></tr><tr><td class="firstcol " ><strong>Price</strong></td><td  >$1,299</td></tr><tr><td class="firstcol " ><strong>Colors</strong></td><td  >Green, yellow, orange, pink, purple, blue, silver</td></tr><tr><td class="firstcol " ><strong>CPU</strong></td><td  >8-core CPU (up to 10-core)</td></tr><tr><td class="firstcol " ><strong>GPU</strong></td><td  >8-core GPU (up to 10-core)</td></tr><tr><td class="firstcol " ><strong>Display</strong></td><td  >24 inches (4480 x 2520)</td></tr><tr><td class="firstcol " ><strong>Memory</strong></td><td  >16GB (configurable up to 24GB)</td></tr><tr><td class="firstcol " ><strong>Storage</strong></td><td  >256GB (configurable up to 2TB)</td></tr><tr><td class="firstcol " ><strong>Ports</strong></td><td  >4x Thunderbolt / USB-4, 3.5mm headphone jack, Gigabit Ethernet (optional)</td></tr><tr><td class="firstcol " ><strong>Webcam</strong></td><td  >12MP</td></tr><tr><td class="firstcol " ><strong>Size</strong></td><td  >21.5 x 18.1 x 5.8 inches</td></tr><tr><td class="firstcol " ><strong>Weight</strong></td><td  >9.74 - 9.79 pounds</td></tr></tbody></table></div><p>You can now configure the iMac’s 24-inch display with a new nano-texture glass option meant to reduce reflections and glare without sacrificing image quality. This should make it easier to use the new iMac in areas of your home (or business) that receive a lot of sunlight.</p><p>The iMac M4 comes with <a href="https://www.tomsguide.com/computing/macos/macos-sequoia">macOS Sequoia</a> out of the box, so you can try features like <a href="https://www.tomsguide.com/computing/macos/how-to-set-up-iphone-mirroring-in-macos-sequoia">iPhone mirroring</a> and the updated Safari. Apple Intelligence is also another prominent macOS Sequoia feature. You’ll get access to features like <a href="https://www.tomsguide.com/ai/i-tried-apple-intelligence-on-macos-sequoia-heres-my-take-on-the-new-ai-features">Writing Tools</a>, which acts as a personal editor by rewriting, proofreading and summarizing text on almost any app you use for writing. Speaking with the updated Siri will also feel more natural. Apple Intelligence could become even more useful when <a href="https://www.tomsguide.com/news/chatgpt">ChatGPT</a> is integrated into both Siri and Writing Tools in December.</p><p>The new iMac M4 is now available to pre-order from <a href="https://www.apple.com/shop/buy-mac/imac" target="_blank" rel="nofollow">Apple’s website</a> with a starting price of $1,299 and begins shipping on November 8. This model is available in the aforementioned colors, and packs an M4 chip with an 8-core CPU and 8-core GPU, 16GB of RAM and 256GB of storage—with the latter two configurable up to 24GB and up to 1TB, respectively.</p><p>You can also get an iMac with a 10-core CPU and 10-core GPU starting at $1,499. This model also starts with 16GB of RAM and 256GB of storage, but you can upgrade to up to 32GB and 2TB, respectively. All configurations come with a color-matching Magic Keyboard and Magic Mouse or Magic Trackpad.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-intelligence-is-ready-to-launch-does-that-mean-its-time-to-get-an-iphone-16">Apple Intelligence is ready to launch — does that mean it's time to get an iPhone 16?</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-se-4-screen-sizes-and-design-changes-grab-the-attention-but-only-one-rumored-change-matters">iPhone SE 4 screen sizes and design changes grab the attention, but only one rumored change matters</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/massive-google-pixel-10-and-pixel-11-leak-just-revealed-the-biggest-ai-upgrades">Massive Google Pixel 10 and Pixel 11 leak just revealed the biggest AI upgrades</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ M4 Mac mini just leaked by Apple — and it comes with 5 USB-C ports ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/m4-mac-mini-just-leaked-by-apple-and-it-comes-with-5-usb-c-ports</link>
                                                                            <description>
                            <![CDATA[ Apple may have just leaked the upcoming M4 Mac mini, and it looks like there's going to be 5 USB-C ports this time. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">hDrFxSYKWSNzh27FfcrHc8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ECo2xv8aQRx4Aq8ZcnXMsR-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 17 Sep 2024 09:37:18 +0000</pubDate>                                                                                                                                <updated>Sat, 19 Oct 2024 00:33:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ECo2xv8aQRx4Aq8ZcnXMsR-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Mac mini with M1 review]]></media:description>                                                            <media:text><![CDATA[Apple Mac mini with M1 review]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Mac mini with M1 review]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ECo2xv8aQRx4Aq8ZcnXMsR-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We’ve heard rumors that Apple may have an upgraded M4 Mac mini on the way, which may be announced at a <a href="https://www.tomsguide.com/computing/macbooks/apple-could-have-another-event-planned-for-october-focussing-on-macs-and-ipadshttps://www.tomsguide.com/computing/apple-october-event-2024-rumors-leaks">special Apple event next month</a>. But it seems Apple may have accidentally leaked the new machine a little early, and this one may come with five USB-C ports.</p><p>The machine was seemingly revealed thanks to a change of code in Apple software (likely <a href="https://www.tomsguide.com/computing/macos/macos-sequoia">macOS Sequoia</a>) — as spotted by <a href="https://x.com/aaronp613/status/1835739463751782807" target="_blank"><u>Aaron Rogers at MacRumors</u></a>. This snippet reveals that the Mac mini will run on Apple Silicon (probably M4), and will pack five USB-C ports.   </p><p>The last model we saw, the <a href="https://www.tomsguide.com/reviews/mac-mini-m2">Mac Mini M2</a>, had two USB-C ports and an extra two USB-A ports. Alongside HDMI, a headphone jack and Gigabit ethernet. Five USB-C ports seems like a major upgrade , but rumor has it that <a href="https://www.tomsguide.com/computing/macbooks/apple-insider-teases-dramatic-new-redesign-for-m4-mac-mini-that-could-ditch-usb-a-ports">Apple will be removing the USB-A ports</a>. That means you'll be unable to use your existing USB-A accessories without some sort of adapter. </p><p>It’s unclear what’s going to happen about the additional ports. Apple of the past might have tried to roll them into USB-C, as it did with MacBook Pro, but that proved to be very unpopular. So much so that basic ports like HDMI and card readers were reintroduced on <a href="https://www.tomsguide.com/reviews/macbook-pro-2021-14-inch">MacBook Pros a few years ago</a>.</p><p>Mark Gurman at Bloomberg also believes that the Mac mini will be <a href="https://www.tomsguide.com/computing/apple-desktops/apple-tipped-to-launch-the-smallest-mac-mini-ever-with-m4-pro">getting a major redesign this year</a> — something that hasn’t happened since 2010. Apparently this new model could be as small as an Apple TV, with M4 and M4 Pro chip options. Meaning the Mac mini has completely skipped over the M3 series.</p><p>We’ll no doubt find out more next month at the final Apple event of the year. The Mac mini is <a href="https://www.tomsguide.com/computing/m4-macs-and-new-ipads-expected-at-october-apple-event-what-we-know">expected to be joined</a> by the M4 MacBooks, a new iMac, as well as the M4 Pro and M4 Max chips. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/apple-october-event-2024-rumors-leaks">What to expect at Apple's October event: M4 MacBook Pro, a new iPad Mini and more</a></li><li><a href="https://www.tomsguide.com/computing/operating-systems/ipados-18-hands-on-review">iPadOS 18 review: The best iPadOS update yet</a></li><li><a href="https://www.tomsguide.com/computing/macos/macos-sequoia-launches-today-how-to-download-and-5-features-to-try-first">macOS Sequoia is live now — how to download and 5 features to try first</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Act fast! Our favorite mini PC is $150 off for a limited time ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/act-fast-our-favorite-mini-pc-is-dollar150-off-for-a-limited-time</link>
                                                                            <description>
                            <![CDATA[ The Mac mini M2 Pro is, pound for pound, one of the fastest desktop PCs you can buy and it's now on sale ahead of Labor Day. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mQNUCwJtaK46A2cBq8vWRD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/g3jaH54y4yPwExNQdQpyte-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 27 Aug 2024 17:45:49 +0000</pubDate>                                                                                                                                <updated>Tue, 27 Aug 2024 17:46:21 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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.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/g3jaH54y4yPwExNQdQpyte-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Mac Mini M2]]></media:description>                                                            <media:text><![CDATA[Mac Mini M2]]></media:text>
                                <media:title type="plain"><![CDATA[Mac Mini M2]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/g3jaH54y4yPwExNQdQpyte-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When I reviewed the Apple Mac mini M2 I was taken aback by how much power is packed inside this pint-sized PC. It&apos;s a great desktop PC for folks who need a capable Mac because it packs so much power and value into a tiny box you can easily fit on your desk. </p><p>The upgraded M2 Pro version is even more powerful, and right now is a great time to get one because the <a href="https://www.amazon.com/dp/B0BSHFS6XX" target="_blank" rel="nofollow">Mac mini M2 Pro is $1,149 @ Amazon</a>, which is $150 off the usual $1,299 asking price. (Click the on-page digital coupon to get this final price at checkout). It&apos;s one of the <a href="https://www.tomsguide.com/deals/best-labor-day-sales">best Labor Day sales</a> we&apos;ve seen so far.</p><div class="product"><a data-dimension112="d86ec064-d3b0-43e0-84b0-392671ddebfc" data-action="Deal Block" data-label="Apple Mac mini M2 Pro: was $1,299 now $1,149 @ Amazon" data-dimension48="Apple Mac mini M2 Pro: was $1,299 now $1,149 @ Amazon" href="https://www.amazon.com/dp/B0BSHFS6XX" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="CBtjTmHi4mPTXaFWSV4vNU" name="1605029423_IMG_1444249.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/CBtjTmHi4mPTXaFWSV4vNU.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Apple Mac mini M2 Pro: </strong><a href="https://www.amazon.com/dp/B0BSHFS6XX" target="_blank" rel="nofollow" data-dimension112="d86ec064-d3b0-43e0-84b0-392671ddebfc" data-action="Deal Block" data-label="Apple Mac mini M2 Pro: was $1,299 now $1,149 @ Amazon" data-dimension48="Apple Mac mini M2 Pro: was $1,299 now $1,149 @ Amazon"><strong>was $1,299 now $1,149 @ Amazon</strong></a><strong><br></strong>The Mac mini M2 is one of our favorite mini PCs because it packs so much power and functionality into a small box, and this upgraded M2 Pro model is even beefier. This model ships with a 10-core CPU, 16-core GPU, 16GB of RAM and a 512GB SSD for storage. It supports up to 3 displays simultaneously via Thunderbolt 4 or HDMI, and it has a gigabit Ethernet port for high-speed Internet access. <strong>Note: </strong>Click the on-page digital coupon to get this final price at checkout.<a class="view-deal button" href="https://www.amazon.com/dp/B0BSHFS6XX" target="_blank" rel="nofollow" data-dimension112="d86ec064-d3b0-43e0-84b0-392671ddebfc" data-action="Deal Block" data-label="Apple Mac mini M2 Pro: was $1,299 now $1,149 @ Amazon" data-dimension48="Apple Mac mini M2 Pro: was $1,299 now $1,149 @ Amazon">View Deal</a></p></div><p>You need to cash in the optional $50 off coupon on Amazon to get the full discount, and while it&apos;s not the biggest price cut it&apos;s one of the <a href="https://www.tomsguide.com/us/best-apple-deals,news-29273.html">best Apple deals</a> I&apos;ve seen this month—and definitely worth it if you&apos;re in the market for a powerful desktop that doesn&apos;t take up much space.</p><p>This specific model if Mac mini M2 Pro is almost identical to the model I reviewed, and if you read my <a href="https://www.tomsguide.com/reviews/mac-mini-m2"><u>Mac mini M2 review</u></a>T you can see how much I enjoyed using this pint-sized PC despite not being a regular Mac user.</p><p>If you&apos;re in the same boat, trust me: macOS is easier than ever to get to grips with, and when you do you&apos;ll be impressed at how speedy and quiet this little Mac mini can be. Browsing the web and running applications feels lightning-quick, and even demanding work like photo/video editing doesn&apos;t faze this little PC thanks to the power of the <a href="https://www.tomsguide.com/news/apple-m2-pro">Apple M2 Pro</a> chip inside.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1780px;"><p class="vanilla-image-block" style="padding-top:61.97%;"><img id="G2RoZZyoGXfh6ehaETxKfg" name="CPU performance scores in Geekbench 5 (1).png" alt="Mac mini M2 Pro performance charted against other Macs and PCs" src="https://cdn.mos.cms.futurecdn.net/G2RoZZyoGXfh6ehaETxKfg.png" mos="" align="middle" fullscreen="1" width="1780" height="1103" attribution="" endorsement="" class="expandable"><a href='https://cdn.mos.cms.futurecdn.net/G2RoZZyoGXfh6ehaETxKfg.png' 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>You can see what I mean by looking at the chart of our CPU benchmark test results above, where you can see that the Mac mini M2 Pro is comparable in raw CPU speeds to a maxed-out MacBook Pro with the more powerful <a href="https://www.tomsguide.com/news/m2-max">Apple M2 Max</a> chip. </p><p>Game fans should know that while the Mac mini M2 Pro isn&apos;t optimized for gaming, I still had lots of fun playing games like like Counter-Strike: Global Offensive and Metro Exodus. I was able to get both running at 4K on the Mac mini M2 Pro, and while Metro definitely struggles to hit 30 frames per second, it&apos;s playable and enjoyable. Older games like Rise of the Tomb Raider or Sid Meier&apos;s Civilization VI run even better, as do Mac-optimized games like Resident Evil 8, so you can have lots of fun with this pint-sized PC.</p><p>And since it measures roughly 7.7 x 7.7 x 1.4 inches and weighs about 3 pounds, the Mac mini M2 is easy to fit into your existing desk or entertainment center. You get plenty of ports (2x Thunderbolt 4, 2x USB-A, HDMI out, Ethernet, 3.5mm) and support for up to three external displays on this model, too, which is great for multi-taskers. </p><p>For these reasons and more I think the Mac mini M2 is one of the <a href="https://www.tomsguide.com/us/best-mini-pc.html">best mini PCs</a> you can get right now. So if you could use new desktop Mac with plenty of power and not much in the way of drawbacks, I recommend taking advantage of this deal and snagging the Mac mini M2 Pro while it&apos;s on sale! Make sure to click the button on Amazon to take advantage of the $50 off coupon as well, to get the full $150 savings!</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple reportedly working on a new 27-inch iMac — here's what we know so far ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apple-reportedly-working-on-a-new-27-inch-imac-heres-what-we-know-so-far</link>
                                                                            <description>
                            <![CDATA[ Apple is allegedly working on bringing back an iMac with a larger display, but we don't know if it will come this year or next. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jhmH2ZJQDNa2UGhmq9U79R</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TuBDexrUnuYdbrbkhM4ofX-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 15 Aug 2024 19:11:58 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></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.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/TuBDexrUnuYdbrbkhM4ofX-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iMac M3 review unit on desk]]></media:description>                                                            <media:text><![CDATA[Apple iMac M3 review unit on desk]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iMac M3 review unit on desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TuBDexrUnuYdbrbkhM4ofX-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple hasn&apos;t sold a 27-inch iMac for just about two years, but a new rumor suggests that Cupertino hasn&apos;t abandoned the larger iMac variant. The rumor comes to us courtesy of Apple-whisperer Mark Gurman in his most recent <a href="https://www.bloomberg.com/news/newsletters/2024-08-11/iphone-16-preview-bigger-screens-new-colors-camera-button-ai-and-a18-chip-lzpk5495?sref=HrWXCALa" target="_blank">Power On newsletter</a> for Bloomberg. </p><p>In his post, Gurman alleges that a larger display iMac "remains something Apple is exploring." However, he does note that it is "unclear" whether or not this potential iMac will feature the M4 chip or if perhaps Apple is waiting for next year&apos;s <a href="https://www.tomsguide.com/computing/hardware/forget-m3-apples-likely-already-working-on-2nm-chipsets-for-iphone-17-pro-and-m5-macbooks">M5 chip</a>.</p><p>Apple is already preparing to launch <a href="https://www.tomsguide.com/computing/macbooks/apple-just-tipped-to-launch-m4-macbook-pro-imac-and-mac-mini-this-year">M4-powered MacBooks</a> and potentially an M4 iMac, though that is most likely a refreshed version of the current 24-inch iMac.</p><p>The 27-inch version was officially <a href="https://www.tomsguide.com/news/its-official-apple-just-confirmed-the-27-inch-imac-is-dead">killed off by Apple in 2023</a>, though it had been <a href="https://www.tomsguide.com/news/apple-kills-27-inch-imac-as-apple-silicon-takes-over">retired since March of 2022</a>. However, it wasn&apos;t a priority even before its retirement as Apple hadn&apos;t made a new version since the <a href="https://www.tomsguide.com/reviews/apple-imac-27-inch-2020">2020 iteration</a>.</p><p>While we haven&apos;t seen the 27-inch iMac in some time, the rumors surrounding a larger iMac haven&apos;t died down. Last year, it was rumored that Apple was working on <a href="https://www.tomsguide.com/news/apple-reportedly-working-on-a-new-32-inch-imac-heres-what-we-know">a 32-inch version</a> with Pro and Max processors. Perhaps that gigantic iMac is what Gurman is hinting that Apple is developing.</p><p>Of course, when Apple killed off the 27-inch iMac the company turned around and launched a <a href="https://www.tomsguide.com/reviews/apple-studio-display">27-inch Studio Display</a>, a monitor our review called fantastic. Paired with a new <a href="https://www.tomsguide.com/reviews/mac-studio-m2">M2-powered Mac Studio</a> and you&apos;ve essentially replaced the iMac, though at a much higher price.</p><p>Some kind of M4 laptop and desktop computer is coming later this fall, but it<a href="https://www.tomsguide.com/computing/apple-desktops/dont-expect-a-new-m4-mac-pro-or-mac-studio-this-year-heres-why"> might not be an improved Studio Display</a> or Mac Studio. Apple has had a staggered rollout of the M4 chip with the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">new iPad Pro</a> but it&apos;s not clear how that powerful chip will filter into its computers or if Apple Intelligence is altering Apple&apos;s plans. </p><p>We could also be <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-tipped-to-arrive-in-2025-with-new-compact-camera-module">waiting for next year&apos;s M5 chip</a> to really take Apple&apos;s next lineup of MacBooks, iMacs and Mac Minis to the next level.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-will-let-iphone-apps-access-nfc-soon-heres-what-that-means-for-you">Apple will let iPhone apps access NFC soon — what that means for you</a></li><li><a href="https://www.tomsguide.com/phones/iphones/how-to-use-apple-intelligence-writing-tools">Writing Tools is one of Apple Intelligence's most useful features </a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-16-pro-dedicated-camera-button-detailed-in-new-report-heres-how-it-works">iPhone 16 Pro dedicated camera button detailed in new report — here's how it works</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple tipped to launch the smallest Mac mini ever with M4 Pro ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apple-tipped-to-launch-the-smallest-mac-mini-ever-with-m4-pro</link>
                                                                            <description>
                            <![CDATA[ Apple is working on a new Mac mini M4 that's due out at the end of 2024, and if what we're hearing is true, it will be smaller than ever before and powered by the new M4 Pro chip. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">GEqQU95QEwE9U94U4ebuBS</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/dBusYYEZyaW6cp4seqLxz7-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 08 Aug 2024 18:29:20 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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.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/dBusYYEZyaW6cp4seqLxz7-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Mac mini M2 on a desk]]></media:description>                                                            <media:text><![CDATA[Mac mini M2 on a desk]]></media:text>
                                <media:title type="plain"><![CDATA[Mac mini M2 on a desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/dBusYYEZyaW6cp4seqLxz7-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Word out of Apple is that the next Mac mini will be the smallest and most powerful yet—and it&apos;s due out at the end of 2024.</p><p>According to Bloomberg journalist Mark Gurman&apos;s <a href="https://www.bloomberg.com/news/articles/2024-08-08/mac-mini-m4-apple-plans-to-release-smallest-desktop-computer-yet?embedded-checkout=true&sref=HrWXCALa" target="_blank">report</a>, Apple is planning a major redesign for the new Mac mini M4 that will arrive on store shelves later this year. </p><p>If that&apos;s true, it&apos;s notable because Apple hasn&apos;t significantly changed the design of the Mac mini in over a decade. Any change now would be a big one, but according to Gurman, Apple&apos;s working to make its smallest Mac even smaller. </p><p>He claims that while the new Mac mini M4 may end up slightly taller than the current <a href="https://www.tomsguide.com/reviews/mac-mini-m2">Mac mini M2</a>, Apple&apos;s working to make it significantly smaller overall — closer to the size of an <a href="https://www.tomsguide.com/reviews/apple-tv-4k-2022">Apple TV</a> box.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-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="utaCzwP2N8SwZdfc4QAKL7" name="TG_Apple-TV-4K-2022-34.jpg" alt="(L to R) AirPods Max rest against a PS5, next to the Apple TV 4K (2022)" src="https://cdn.mos.cms.futurecdn.net/utaCzwP2N8SwZdfc4QAKL7.jpg" mos="" align="middle" fullscreen="" width="2000" height="1126" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">According to Mark Gurman, Apple is working to shave the Mac mini down until it's closer to the size of an Apple TV, pictured here next to a pair of headphones for scale. </span><span class="credit" itemprop="copyrightHolder">(Image credit: Henry T. Casey / Tom's Guide)</span></figcaption></figure><p>According to the report, Apple has people working on a base M4 version of this slimmed-down Mac mini and a version packing an M4 Pro chip, which (if true) would be our first word about M4 Pro&apos;s existence. </p><p>We&apos;ve as yet only been introduced to the <a href="https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip">Apple M4 chip</a> in the new <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">iPad Pro 2024</a>, so it&apos;s perhaps not surprising that this new Mac mini M4 would be described by Gurman as "essentially an iPad Pro in a small box," according to people involved in its development.</p><p>Gurman reports that the base M4 version of the new Mac mini should be available later this year; perhaps the more powerful M4 Pro model is expected to arrive in October 2024.</p><h2 id="outlook-2">Outlook</h2><p>While reports of a new Mac mini M4 are exciting, they aren&apos;t the first we&apos;ve heard about Apple&apos;s plans for an M4 2024. We already knew <a href="https://www.tomsguide.com/computing/macbooks/apple-just-tipped-to-launch-m4-macbook-pro-imac-and-mac-mini-this-year">Apple&apos;s tipped to launch the M4 MacBook Pro, iMac and Mac mini this year</a>, which means this could be the first year in which you can get Apple&apos;s hottest chip in all its major computers.</p><p>But this is the first I&apos;ve heard about a Mac mini redesign, and it&apos;s hard to know how much of a difference it could make for customers. The Mac mini is already one of the <a href="https://www.tomsguide.com/us/best-mini-pc.html">best mini PCs</a> on the market precisely because it&apos;s so small, powerful and capable for such an affordable price.</p><p>Upgrading it with M4 power is certainly a good thing, but I&apos;m not sure making it smaller would make a big difference. It would be lovely to have an even tinier powerhouse of a PC that you could slip into an entertainment center or family desk PC, but if the size decrease comes at a higher price, it might end up not worth the 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/phones/iphones/5-apple-intelligence-features-to-try-first-on-your-iphone">5 Apple Intelligence features to try in iOS 18 — here’s what you can do</a></li><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-preorder-perks-just-leaked-heres-what-you-get">Google Pixel 9 preorder perks just leaked — here’s what you get</a></li><li><a href="https://www.tomsguide.com/phones/iphones/launch-day-leaked-for-apples-iphone-16-series-and-it-could-be-sooner-than-last-years-announcement">Launch day leaked for Apple's iPhone 16 series — and it could be sooner than last year's announcement</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Don’t expect a new M4 Mac Pro or Mac Studio this year — here’s why ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/dont-expect-a-new-m4-mac-pro-or-mac-studio-this-year-heres-why</link>
                                                                            <description>
                            <![CDATA[ The Apple M4 chip may not be coming to Mac Pro or Mac Studio until mid-2025 — but other machines may be luckier. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oBjHub3fuNLgmG8iWsf44d</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TX2HdDuiA7kcozbTEZCi6h-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 20 May 2024 11:32:39 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/TX2HdDuiA7kcozbTEZCi6h-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Mac Studio M2 on desk, running No Man&#039;s Sky]]></media:description>                                                            <media:text><![CDATA[Apple Mac Studio M2 on desk, running No Man&#039;s Sky]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Mac Studio M2 on desk, running No Man&#039;s Sky]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TX2HdDuiA7kcozbTEZCi6h-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The launch of the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">M4 iPad Pro</a> is a big deal for Apple. The launch of a new chip is exciting enough, but the M4 promises to revolutionize the way Apple products work. Not only does the chip offer <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024-and-ipad-air-2024-tested-heres-how-apples-m4-silicon-performs">incredible performance</a> and unbelievable battery life, it also represents Apple’s biggest push into AI processing so far.</p><p>Naturally, some of you will be waiting for these chips to appear in Macs, rather than iPads. While we expect that <a href="https://www.tomsguide.com/computing/macbooks/forget-m3-m4-macs-look-set-to-launch-sooner-than-you-may-think">select devices will get the M4 chip later this year</a>, like the <a href="https://www.tomsguide.com/computing/macbooks/macbook-m4">MacBook Pro</a> or Mac mini, you may not want to hold your breath for an M4 version of the <a href="https://www.tomsguide.com/reviews/mac-studio">Mac Studio</a> or <a href="https://www.tomsguide.com/news/mac-pro-2023">Mac Pro</a>.</p><p>According to Mark Gurman at <a href="https://www.bloomberg.com/news/newsletters/2024-05-19/what-is-apple-doing-in-ai-summaries-cloud-and-on-device-llms-openai-deal-lwdj5pkz?srnd=undefined&sref=HrWXCALa">Bloomberg</a>, Apple isn’t likely to release a new version of either desktop machine this year. We may see them from mid-2025, assuming everything goes according to plan, but no earlier than that. That means that the M2-powered machines, which debuted at <a href="https://www.tomsguide.com/news/live/wwdc-2023-live-blog-apple-headset-new-macs-ios-17-and-more">WWDC in 2023</a>, will be going at least two years without a refresh, </p><p>The good news is that Gurman believes that the only other Mac that won’t get an M4 upgrade this year is the <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-13-inch-m3-review">MacBook Air</a>. That&apos;s no huge surprise since the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-air-15-inch-m3-review">MacBook Air M3 </a>has only been available for a few months, and plenty of people would be upset if Apple upgraded it too quickly.</p><p>But this does mean means the likes of the MacBook Pro, Mac Mini and possibly even the iMac may be available with an M4 chip before the end of the year. When they’ll be released isn’t clear, but Gurman added that we shouldn’t see any new Mac hardware at <a href="https://www.tomsguide.com/computing/software/wwdc-2024-possible-dates-ios-18-and-apples-big-ai-push">WWDC 2024</a>.</p><p>That isn’t hugely surprising, seeing as how WWDC is a software-centric event for developers. While there have been hardware announcements during the keynote in the past, they’re typically quite rare. This year should be no exception and at most we should expect that hardware talk will be focused on the <a href="https://www.tomsguide.com/computing/smart-glasses/apple-vision-pro-review">Apple Vision Pro</a> headset. Any appearance would presumably hype up the rumored international release, as opposed to new hardware announcements.</p><p>The rest of the conference will be focused on the upcoming upgrades for Apple devices. <a href="https://www.tomsguide.com/news/ios-18">iOS 18</a> will be the biggest announcement given Apple&apos;s focus on AI, and we&apos;ll also hear about iPadOS 18, macOS 15, watchOS 11 and visionOS 2. We&apos;ll bring you all the biggest news during the WWDC 2024 keynote address on June 10.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/google-pixel-phones/i-took-over-200-photos-with-the-pixel-8a-vs-iphone-se-heres-the-winner">I shot over 200 photos with the Pixel 8a vs iPhone SE — here’s the winner</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-16-colors-could-include-these-two-new-options-and-bring-back-an-old-favorite">iPhone 16 colors could include these two new options — and bring back an old favorite</a></li><li><a href="https://www.tomsguide.com/ai/ios-18-rumored-to-give-siri-a-massive-ai-boost-heres-what-it-means-for-you">iOS 18 rumored to give Siri a massive AI boost — here's what it means for you</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple M4 chip — everything you need to know ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/apple-m4-chip</link>
                                                                            <description>
                            <![CDATA[ Apple is allegedly going to release the first M4 computers as soon as this year, according to new reports. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ALszQ6JjHKdwsJoBoM8BRN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/76BX7qw85vqQucCvUnTHHQ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 11 Apr 2024 20:18:25 +0000</pubDate>                                                                                                                                <updated>Wed, 30 Oct 2024 15:01:16 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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.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/76BX7qw85vqQucCvUnTHHQ-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[MacBook Pro 2021 (16-inch) on a patio table]]></media:description>                                                            <media:text><![CDATA[MacBook Pro 2021 (16-inch) on a patio table]]></media:text>
                                <media:title type="plain"><![CDATA[MacBook Pro 2021 (16-inch) on a patio table]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/76BX7qw85vqQucCvUnTHHQ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple has launched a new suite of Macs sporting the M4 chip — continuing its expansion beyond powering just the <a href="https://www.tomsguide.com/tablets/ipads/ipad-pro-2024">iPad Pro</a>.</p><p>Over the past few days, we’ve seen the <a href="https://www.tomsguide.com/computing/apple-desktops/imac-m4-announced-with-apple-intelligence-nano-texture-display-and-thunderbolt-4-specs-release-date-and-price">M4 iMac</a>, a redesigned <a href="https://www.tomsguide.com/computing/apple-desktops/m4-mac-mini-vs-m2-mac-mini-heres-all-the-biggest-upgrades">M4 Mac mini</a> and a turbo-boosted <a href="https://www.tomsguide.com/computing/macbooks/apple-shows-off-new-m4-macbook-pro-heres-whats-new">M4 MacBook Pro</a>. As for the M4 MacBook Air, you’ll have to wait until early 2025 for that, with the Mac Studio and Mac Pro reportedly approaching at the end of next year.</p><p>But let’s focus on the here and now. Qualcomm’s Snapdragon X Elite, Intel Core Ultra 200 series and AMD’s Ryzen AI 9 HX 370 may have ruled the roost in the AI PC space for a little while there, but Apple’s fighting back hard.</p><p>Here’s what we know about the M4 chip so far. And for the specific hardware announcements, check out our <a href="https://www.tomsguide.com/computing/all-the-m4-mac-news-this-week-imac-confirmed-macbook-pro-and-mac-mini-rumors"><u>hub of everything Apple announced this week</u></a>.</p><h3 class="article-body__section" id="section-apple-m4-chip-release-date-and-price"><span>Apple M4 chip: Release date and price </span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WtJzpUQgJopFFLnC94SDYF" name="MacBook Pro 14 M2 Pro-12.jpg" alt="MacBook Pro 14-inch 2023" src="https://cdn.mos.cms.futurecdn.net/WtJzpUQgJopFFLnC94SDYF.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>November 8 is a great date for Apple. All the M4 Macs will drop at this time, and pre-orders are open. </p><p>Right now, you can pre-order the <a href="https://www.apple.com/shop/buy-mac/imac" target="_blank" rel="nofollow">M4 iMac from $1,299</a>, the <a href="https://www.apple.com/shop/buy-mac/mac-mini" target="_blank" rel="nofollow">M4 Mac Mini from $599, the M4 Pro Mac Mini from $1,399</a>, and the <a href="https://www.apple.com/shop/buy-mac/macbook-pro" target="_blank" rel="nofollow">M4 MacBook Pro from $1,599</a>.</p><h3 class="article-body__section" id="section-apple-m4-chip-different-chip-models"><span>Apple M4 chip: Different chip 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:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TuBDexrUnuYdbrbkhM4ofX" name="iMac-2023_M3-1.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/TuBDexrUnuYdbrbkhM4ofX.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>We’ve seen the M4 chip in three flavors: the standard M4 with either 8 or 10 CPU cores, the M4 Pro with up to 20 GPU cores and the M4 Max. All of these bring significant gains to graphics performance with up to 2x faster ray tracing performance, and a massively beefed-up Neural Engine (or NPU to those who are used to the Copilot+ PC lingo). </p><p>In the M4 MacBook Pro leaks, we got a look at some benchmarks, and the results are clearly rather impressive!</p><div ><table><thead><tr><th class="firstcol " >Laptop</th><th  >Geekbench 6 single-core</th><th  >Geekbench 6 multicore</th></tr></thead><tbody><tr><td class="firstcol " >M4 MacBook Pro</td><td  >3864</td><td  >15288</td></tr><tr><td class="firstcol " >M3 MacBook Pro</td><td  >3138</td><td  >12018</td></tr><tr><td class="firstcol " >M3 Pro MacBook Pro</td><td  >3154</td><td  >14357</td></tr></tbody></table></div><p>Two other key things we’re seeing about M4 in these Mac announcements is the support for multiple displays on standard M4, and the Pro variant getting Thunderbolt 5 capabilities. That is seriously turbo boosting data transfer speeds, which alongside the RAM packing 273GB/s of memory bandwidth (twice as much as any AI PC chip), this is going to be a multitasking monster.</p><p>Only one that is left for us to find out about is the M4 Ultra. It’ll be interesting to see what happens when Apple stitches two M4 Maxes together in a new Mac Studio.</p><h3 class="article-body__section" id="section-apple-m4-ai-features"><span>Apple M4: AI features</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WSB77C8Cpe4b5eusL9gLPH" name="MacBook Pro 14 M2 Pro.jpg" alt="MacBook Pro 14-inch 2023 open on a desk" src="https://cdn.mos.cms.futurecdn.net/WSB77C8Cpe4b5eusL9gLPH.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p><a href="https://www.tomsguide.com/ai/apple-intelligence-unveiled-all-the-new-ai-features-coming-to-ios-18-ipados-18-and-macos-sequoia">Apple Intelligence has launched in iPadOS 18.1 and MacOS Sequoia 15.1</a> — albeit in a bit of a restricted sense. This phased roll-out means users can currently use it to Rewrite and Proofread text, transcribe and summarize audio recordings, search for pics in Photos with natural language, and make use of a more intelligent, conversational Siri.</p><p>With version 18.2 and 15.2 respectively in December, you can expect more features like Visual Intelligence, ChatGPT integration, and creating Genmoji.</p><h3 class="article-body__section" id="section-apple-m4-chip-outlook"><span>Apple M4 chip: Outlook</span></h3><p>With new hardware, M4 is really starting to hit its stride. The speeds are impressive, and the big AI upgrades unlock a lot of performant Apple Intelligence operation.</p><p>We’ll update this post with all the M4-related news we come across, so stay tuned for more!</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/desktop-computers/i-just-broke-the-first-rule-of-buying-apple-products-i-bought-a-new-mac-mini-ahead-of-the-m4-mac-launch"> I ditched my Windows PC for a Mac for the first time in almost 20 years — here’s why </a></li><li><a href="https://www.tomsguide.com/computing/macbooks/black-friday-macbook-deals-2024"> Forget M4 MacBooks — save up to $500 on these early Black Friday MacBook deals </a></li><li><a href="https://www.tomsguide.com/computing/macbooks/m4-macbook-air-launch-timing-just-tipped-in-new-report"> M4 MacBook Air launch timing just tipped in new report </a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ MacBook Air M3 just got its first price drop — and it's a big one ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/huge-apple-sale-just-went-live-macs-and-imacs-from-dollar849</link>
                                                                            <description>
                            <![CDATA[ Now is the time to upgrade your Mac. Retailers have multiple previous- and current-gen Macs on sale for as low as $849. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mDj88Ahfjr8jj2ByL5VB7P</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/HHBzM6VhUtG2jKvi5EuuZn-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 27 Mar 2024 19:13:13 +0000</pubDate>                                                                                                                                <updated>Fri, 29 Mar 2024 18:25:41 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/HHBzM6VhUtG2jKvi5EuuZn-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[15-inch and 13-inch MacBook Air laptops shown side by side on a table]]></media:description>                                                            <media:text><![CDATA[15-inch and 13-inch MacBook Air laptops shown side by side on a table]]></media:text>
                                <media:title type="plain"><![CDATA[15-inch and 13-inch MacBook Air laptops shown side by side on a table]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/HHBzM6VhUtG2jKvi5EuuZn-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As deals editor-in-chief at Tom&apos;s Guide, I closely track the <a href="https://www.tomsguide.com/us/best-apple-deals,news-29273.html">best Apple deals</a> every day. As an Apple user, I&apos;m also constantly looking for the best Apple bargains for myself and right now is an excellent time to upgrade your Mac. I&apos;m seeing amazing deals on both previous-gen and current-gen Apple gear. </p><p>The best deal right now is the current-gen <a href="https://www.amazon.com/Apple-2024-MacBook-13-inch-Laptop/dp/B0CX23V2ZK" target="_blank" rel="nofollow">MacBook Air 13-inch M3 on sale for just $999 at Amazon</a>. That&apos;s $100 off and the lowest price ever for this newly released machine. (Note that it&apos;s selling out fast, so be sure to check all colors for this price). Additionally, you can get the <a href="https://www.bhphotovideo.com/c/product/1793636-REG/apple_mqrc3ll_a_24_imac_with_m3.html" target="_blank" rel="nofollow">iMac 24-inch (M3/256GB) on sale for $1,199 at B&H Photo</a>. That&apos;s $100 off and the lowest price I&apos;ve seen on Apple&apos;s new Mac. The Amazon page says it&apos;s out of stock, but you can still place your order at this price and Amazon will deliver it when stock is replenished. </p><p>That&apos;s not the only amazing deal though. Below are the best Apple sales right now, along with a deal on the MacBook I purchased last year. Also don&apos;t miss this <a href="https://www.tomsguide.com/sales-events/hurry-apple-vision-pro-just-got-its-first-discount-save-dollar200">Apple Vision Pro deal</a>.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick links</span></h3><ul><li><strong>MacBook Air 13 (M1/256GB): </strong><a href="https://www.bhphotovideo.com/c/product/1604829-REG/apple_mgnd3ll_a_13_3_macbook_air_with.html" target="_blank" rel="nofollow"><strong>was $999 now $699 @ B&H Photo</strong></a></li><li><strong>MacBook Air 13 (M2/256GB): </strong><a href="https://www.bhphotovideo.com/c/product/1710305-REG/apple_mly33ll_a_13_6_macbook_air_m2.html" target="_blank" rel="nofollow"><strong>was $1,099 now $849 @ B&H Photo</strong></a></li><li><strong>Apple iMac (M1/256GB): </strong><a href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-256gb-ssd-blue/6450916.p?skuId=6450916" target="_blank" rel="nofollow"><strong>was $1,299 now $849 @ Best Buy</strong></a></li><li><strong>MacBook Air M3: </strong><a href="https://www.amazon.com/Apple-2024-MacBook-13-inch-Laptop/dp/B0CX23V2ZK" target="_blank" rel="nofollow"><strong>was $1,099 now $999 @ Amazon</strong></a><strong> </strong></li><li><strong>MacBook Air 15 (M2/256GB): </strong><a href="https://www.bestbuy.com/site/apple-macbook-air-15-laptop-m2-chip-8gb-memory-256gb-ssd-latest-model-midnight/6534606.p?skuId=6534606" target="_blank" rel="nofollow"><strong>was $1,299 now $999 @ Best Buy</strong></a></li><li><strong>MacBook Air 15 (M2/16GB/1TB): </strong><a href="https://www.bestbuy.com/site/apple-macbook-air-15-laptop-m2-chip-16gb-memory-1tb-ssd-latest-model-midnight/6382794.p?skuId=6382794" target="_blank" rel="nofollow"><strong>was $1,899 now $1,499 @ Best Buy</strong></a></li><li><strong>Apple iMac (M3/256GB): </strong><a href="https://www.bhphotovideo.com/c/product/1793636-REG/apple_mqrc3ll_a_24_imac_with_m3.html" target="_blank" rel="nofollow"><strong>was $1,299 now $1,199 @ B&H Photo</strong></a></li></ul><h3 class="article-body__section" id="section-best-apple-deals"><span>Best Apple deals</span></h3><div class="product"><a data-dimension112="d42b6be7-75ca-4833-90c2-94cb3f72bf9f" data-action="Deal Block" data-label="MacBook Air M3: was $1,099 now $999 @ Amazon" data-dimension48="MacBook Air M3: was $1,099 now $999 @ Amazon" href="https://www.amazon.com/Apple-2024-MacBook-13-inch-Laptop/dp/B0CX23V2ZK" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:550px;"><p class="vanilla-image-block" style="padding-top:60.73%;"><img id="KEsCodgNYJrV4yFtDSqAdk" name="6534606_sd.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KEsCodgNYJrV4yFtDSqAdk.jpg" mos="" align="middle" fullscreen="" width="550" height="334" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>MacBook Air M3: </strong><a href="https://www.amazon.com/Apple-2024-MacBook-13-inch-Laptop/dp/B0CX23V2ZK" target="_blank" rel="nofollow" data-dimension112="d42b6be7-75ca-4833-90c2-94cb3f72bf9f" data-action="Deal Block" data-label="MacBook Air M3: was $1,099 now $999 @ Amazon" data-dimension48="MacBook Air M3: was $1,099 now $999 @ Amazon"><strong>was $1,099 now $999 @ Amazon</strong></a><strong><br>Editor's Choice! </strong>The new MacBook Air is powered by Apple's latest M3 silicon. The laptop can support up to two external displays (when the laptop lid is closed) and Apple also claims its 60% faster than the M1-based MacBook Air. It boasts up to 18 hours of battery life. In our <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-13-inch-m3-review">MacBook Air 13-inch M3 review</a>, we called the Editor's Choice laptop a small wonder. It packs a Liquid Retina display (2560 x 1664), Apple's M3 CPU w/ 8-core GPU, 8GB of RAM, 256GB SSD<br><strong>Price check: </strong><a href="https://www.bestbuy.com/site/macbook-air-13-inch-laptop-apple-m3-chip-8gb-memory-256gb-ssd-latest-model-midnight/6565837.p?skuId=6565837" target="_blank" rel="nofollow"><strong>$1,099 @ Best Buy</strong></a><a class="view-deal button" href="https://www.amazon.com/Apple-2024-MacBook-13-inch-Laptop/dp/B0CX23V2ZK" target="_blank" rel="nofollow" data-dimension112="d42b6be7-75ca-4833-90c2-94cb3f72bf9f" data-action="Deal Block" data-label="MacBook Air M3: was $1,099 now $999 @ Amazon" data-dimension48="MacBook Air M3: was $1,099 now $999 @ Amazon">View Deal</a></p></div><div class="product"><a data-dimension112="ca12446c-6840-4d79-959e-02e5db5f3fc2" data-action="Deal Block" data-label="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo" data-dimension48="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo" href="https://www.bhphotovideo.com/c/product/1793636-REG/apple_mqrc3ll_a_24_imac_with_m3.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1219px;"><p class="vanilla-image-block" style="padding-top:123.05%;"><img id="rFGx5tvJYyzMsd4TrxVLU5" name="Apple iMac M3 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rFGx5tvJYyzMsd4TrxVLU5.jpg" mos="" align="middle" fullscreen="" width="1219" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Apple iMac (M3/256GB): </strong><a href="https://www.bhphotovideo.com/c/product/1793636-REG/apple_mqrc3ll_a_24_imac_with_m3.html" target="_blank" rel="nofollow" data-dimension112="ca12446c-6840-4d79-959e-02e5db5f3fc2" data-action="Deal Block" data-label="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo" data-dimension48="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo"><strong>was $1,299 now $1,199 @ B&H Photo</strong></a><br>The new iMac (M3) sports Apple's latest M3 processor and is 2x faster than its predecessor. In our <a href="https://www.tomsguide.com/reviews/apple-imac-m3">iMac M3 review</a> we said the new chip makes this iMac more capable of multi-tasking, gaming and getting things done than any iMac before it. The base configuration sports a 24-inch 4.5K display, M3 CPU with 8-core GPU, 8GB of RAM, and a 256GB SSD.<br><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0CM5BFRND" target="_blank" rel="nofollow"><strong>sold out @ Amazon</strong></a><strong> | </strong><a href="https://www.bestbuy.com/site/apple-imac-24-all-in-one-m3-chip-8gb-memory-256gb-latest-model-silver/6534276.p?skuId=6534276" target="_blank" rel="nofollow"><strong>$1,299 @ Best Buy</strong></a><a class="view-deal button" href="https://www.bhphotovideo.com/c/product/1793636-REG/apple_mqrc3ll_a_24_imac_with_m3.html" target="_blank" rel="nofollow" data-dimension112="ca12446c-6840-4d79-959e-02e5db5f3fc2" data-action="Deal Block" data-label="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo" data-dimension48="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo">View Deal</a></p></div><div class="product"><a data-dimension112="e476d3c8-d4df-40ea-88e1-c465f11590b6" data-action="Deal Block" data-label="MacBook Air 15 (M2/256GB): was $1,299 now $999 @ Best Buy" data-dimension48="MacBook Air 15 (M2/256GB): was $1,299 now $999 @ Best Buy" href="https://www.bestbuy.com/site/apple-macbook-air-15-laptop-m2-chip-8gb-memory-256gb-ssd-latest-model-midnight/6534606.p?skuId=6534606" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:550px;"><p class="vanilla-image-block" style="padding-top:60.73%;"><img id="KEsCodgNYJrV4yFtDSqAdk" name="6534606_sd.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KEsCodgNYJrV4yFtDSqAdk.jpg" mos="" align="middle" fullscreen="" width="550" height="334" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>MacBook Air 15 (M2/256GB): </strong><a href="https://www.bestbuy.com/site/apple-macbook-air-15-laptop-m2-chip-8gb-memory-256gb-ssd-latest-model-midnight/6534606.p?skuId=6534606" target="_blank" rel="nofollow" data-dimension112="e476d3c8-d4df-40ea-88e1-c465f11590b6" data-action="Deal Block" data-label="MacBook Air 15 (M2/256GB): was $1,299 now $999 @ Best Buy" data-dimension48="MacBook Air 15 (M2/256GB): was $1,299 now $999 @ Best Buy"><strong>was $1,299 now $999 @ Best Buy</strong></a><strong><br></strong>This is the Mac I currently own and I love it. The 15-inch MacBook Air M2 is arguably the best 15-inch laptop on the market. It packs a gorgeous Liquid Retina display (2880 x 1864), Apple's M2 CPU w/ 8-core GPU, 8GB of RAM, 256GB SSD, and a better six-speaker sound system than you'll find on the 13-inch model. In our <a href="https://www.tomsguide.com/reviews/macbook-air-15-inch-m2">MacBook Air M2 review</a>, we called the Editor's Choice laptop an unbeatable combo of stellar performance, long-lasting battery life, and sleek design.<br><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0C7686169" target="_blank" rel="nofollow"><strong>sold out @ Amazon</strong></a><strong> | </strong><a href="https://www.bhphotovideo.com/c/product/1770934-REG/apple_mqkp3ll_a_15_macbook_air_space.html" target="_blank" rel="nofollow"><strong>$999 @ B&H</strong></a><a class="view-deal button" href="https://www.bestbuy.com/site/apple-macbook-air-15-laptop-m2-chip-8gb-memory-256gb-ssd-latest-model-midnight/6534606.p?skuId=6534606" target="_blank" rel="nofollow" data-dimension112="e476d3c8-d4df-40ea-88e1-c465f11590b6" data-action="Deal Block" data-label="MacBook Air 15 (M2/256GB): was $1,299 now $999 @ Best Buy" data-dimension48="MacBook Air 15 (M2/256GB): was $1,299 now $999 @ Best Buy">View Deal</a></p></div><div class="product"><a data-dimension112="8055f0bc-6054-4477-bfb1-e216486448e3" data-action="Deal Block" data-label="MacBook Air 15 (M2/16GB/1TB): was $1,899 now $1,499 @ Best Buy" data-dimension48="MacBook Air 15 (M2/16GB/1TB): was $1,899 now $1,499 @ Best Buy" href="https://www.bestbuy.com/site/apple-macbook-air-15-laptop-m2-chip-16gb-memory-1tb-ssd-latest-model-midnight/6382794.p?skuId=6382794" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:550px;"><p class="vanilla-image-block" style="padding-top:60.73%;"><img id="KEsCodgNYJrV4yFtDSqAdk" name="6534606_sd.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KEsCodgNYJrV4yFtDSqAdk.jpg" mos="" align="middle" fullscreen="" width="550" height="334" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>MacBook Air 15 (M2/16GB/1TB): </strong><a href="https://www.bestbuy.com/site/apple-macbook-air-15-laptop-m2-chip-16gb-memory-1tb-ssd-latest-model-midnight/6382794.p?skuId=6382794" target="_blank" rel="nofollow" data-dimension112="8055f0bc-6054-4477-bfb1-e216486448e3" data-action="Deal Block" data-label="MacBook Air 15 (M2/16GB/1TB): was $1,899 now $1,499 @ Best Buy" data-dimension48="MacBook Air 15 (M2/16GB/1TB): was $1,899 now $1,499 @ Best Buy"><strong>was $1,899 now $1,499 @ Best Buy</strong></a><strong><br>$400 off! </strong>If you want to future-proof your laptop, I highly recommend upgrading to 16GB of RAM. This upgraded model also bumps your storage to 1TB. It's one of the very few times I've seen the 16GB RAM model on sale.<br><strong>Price check: </strong><a href="https://www.amazon.com/Apple-2023-MacBook-Laptop-chip/dp/B0CDJRL5RZ" target="_blank" rel="nofollow"><strong>sold out @ Amazon</strong></a><strong> | </strong><a href="https://www.bhphotovideo.com/c/product/1770982-REG/apple_mba15m2sg_06_15_macbook_air_space.html" target="_blank" rel="nofollow"><strong>$1,899 @ B&H Photo</strong></a><a class="view-deal button" href="https://www.bestbuy.com/site/apple-macbook-air-15-laptop-m2-chip-16gb-memory-1tb-ssd-latest-model-midnight/6382794.p?skuId=6382794" target="_blank" rel="nofollow" data-dimension112="8055f0bc-6054-4477-bfb1-e216486448e3" data-action="Deal Block" data-label="MacBook Air 15 (M2/16GB/1TB): was $1,899 now $1,499 @ Best Buy" data-dimension48="MacBook Air 15 (M2/16GB/1TB): was $1,899 now $1,499 @ Best Buy">View Deal</a></p></div><div class="product"><a data-dimension112="2a5341f5-982f-455d-99ed-52860587edcb" data-action="Deal Block" data-label="MacBook Air 13 (M1/256GB): was $999 now $699 @ B&amp;H Photo" data-dimension48="MacBook Air M1" href="https://www.bhphotovideo.com/c/product/1604829-REG/apple_mgnd3ll_a_13_3_macbook_air_with.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1258px;"><p class="vanilla-image-block" style="padding-top:74.56%;"><img id="As6HTGJBxVB2okwofc7fhM" name="Screen Shot 2020-11-30 at 11.43.55 AM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/As6HTGJBxVB2okwofc7fhM.png" mos="" align="middle" fullscreen="" width="1258" height="938" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>MacBook Air 13 (M1/256GB): </strong><a href="https://www.bhphotovideo.com/c/product/1604829-REG/apple_mgnd3ll_a_13_3_macbook_air_with.html" target="_blank" rel="nofollow" data-dimension112="2a5341f5-982f-455d-99ed-52860587edcb" data-action="Deal Block" data-label="MacBook Air 13 (M1/256GB): was $999 now $699 @ B&amp;H Photo" data-dimension48="MacBook Air M1"><strong>was $999 now $699 @ B&H Photo</strong></a><br><strong>Lowest price!</strong> It's no longer Apple's flagship, but the MacBook Air M1 offers fantastic performance and value. The M1 CPU never stuttered in our tests and also helped it reach over 14 hours of battery life. It features a 13.3-inch Retina display, Apple M1 CPU, 8GB of RAM, and a 256GB SSD. In our <a href="https://www.tomsguide.com/reviews/macbook-air-2020-m1">MacBook Air M1 review</a>, we said it offers amazing endurance and shockingly good speed. <br><strong>Price check: </strong><a href="https://www.bestbuy.com/site/macbook-air-13-3-laptop-apple-m1-chip-8gb-memory-256gb-ssd-space-gray-space-gray/5721600.p?skuId=5721600" target="_blank" rel="nofollow"><strong>$999 @ Best Buy</strong></a><strong> | </strong><a href="https://www.amazon.com/dp/B08N5LNQCX" target="_blank" rel="nofollow"><strong>$749 @ Amazon</strong></a><a class="view-deal button" href="https://www.bhphotovideo.com/c/product/1604829-REG/apple_mgnd3ll_a_13_3_macbook_air_with.html" target="_blank" rel="nofollow" data-dimension112="2a5341f5-982f-455d-99ed-52860587edcb" data-action="Deal Block" data-label="MacBook Air 13 (M1/256GB): was $999 now $699 @ B&amp;H Photo" data-dimension48="MacBook Air M1">View Deal</a></p></div><div class="product"><a data-dimension112="007a3b0c-e2fa-4a4f-81f0-f28175f4b207" data-action="Deal Block" data-label="MacBook Air 13 (M2/256GB): was $1,099 now $849 @ B&amp;H Photo" data-dimension48="MacBook Air 13 (M2/256GB): was $1,099 now $849 @ B&amp;H Photo" href="https://www.bhphotovideo.com/c/product/1710305-REG/apple_mly33ll_a_13_6_macbook_air_m2.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3130px;"><p class="vanilla-image-block" style="padding-top:60.54%;"><img id="DD4dykbxfMEAFqqWeMC7hN" name="MacBook Air 2022 deal block.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DD4dykbxfMEAFqqWeMC7hN.jpeg" mos="" align="middle" fullscreen="" width="3130" height="1895" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>MacBook Air 13 (M2/256GB): </strong><a href="https://www.bhphotovideo.com/c/product/1710305-REG/apple_mly33ll_a_13_6_macbook_air_m2.html" target="_blank" rel="nofollow" data-dimension112="007a3b0c-e2fa-4a4f-81f0-f28175f4b207" data-action="Deal Block" data-label="MacBook Air 13 (M2/256GB): was $1,099 now $849 @ B&amp;H Photo" data-dimension48="MacBook Air 13 (M2/256GB): was $1,099 now $849 @ B&amp;H Photo"><strong>was $1,099 now $849 @ B&H Photo</strong></a><br>The MacBook Air M2 is one of our most recommended laptops because it's remarkably light and thin, yet it sports a 13.6-inch Liquid Retina display, a speedy Apple M2 CPU w/ 8-core GPU, 8GB of RAM, 256GB SSD, and a great 1080p FaceTime camera. In our <a href="https://www.tomsguide.com/reviews/macbook-air-2022-m2">MacBook Air M2 review</a> we lauded this Editor's Choice laptop for its versatility and battery life, so don't miss your chance to get one at its lowest price ever. Note: You can also get the <a href="https://www.bhphotovideo.com/c/product/1710330-REG/apple_mbam2mn_04_13_6_macbook_air_m2.html" target="_blank" rel="nofollow">16GB RAM model for $1,149 at B&H</a>. <br><strong>Price check: </strong><a href="https://www.bestbuy.com/site/macbook-air-13-6-laptop-apple-m2-chip-8gb-memory-256gb-ssd-starlight-starlight/6509648.p" target="_blank" rel="nofollow"><strong>$899 @ Best Buy</strong></a><a class="view-deal button" href="https://www.bhphotovideo.com/c/product/1710305-REG/apple_mly33ll_a_13_6_macbook_air_m2.html" target="_blank" rel="nofollow" data-dimension112="007a3b0c-e2fa-4a4f-81f0-f28175f4b207" data-action="Deal Block" data-label="MacBook Air 13 (M2/256GB): was $1,099 now $849 @ B&amp;H Photo" data-dimension48="MacBook Air 13 (M2/256GB): was $1,099 now $849 @ B&amp;H Photo">View Deal</a></p></div><div class="product"><a data-dimension112="312a48b9-a405-4ea0-9350-ae935c642608" data-action="Deal Block" data-label="Apple iMac M1 (7-Core GPU): was $1,299 now $849 @ Best Buy" data-dimension48="Apple iMac M1 (7-Core GPU): was $1,299 now $849 @ Best Buy" href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-256gb-ssd-blue/6450916.p?skuId=6450916" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:84.47%;"><img id="F92pZzCoWXYWAc2hx8Guqk" name="Apple iMac M1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/F92pZzCoWXYWAc2hx8Guqk.jpg" mos="" align="middle" fullscreen="" width="1500" height="1267" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Apple iMac M1 (7-Core GPU): </strong><a href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-256gb-ssd-blue/6450916.p?skuId=6450916" target="_blank" rel="nofollow" data-dimension112="312a48b9-a405-4ea0-9350-ae935c642608" data-action="Deal Block" data-label="Apple iMac M1 (7-Core GPU): was $1,299 now $849 @ Best Buy" data-dimension48="Apple iMac M1 (7-Core GPU): was $1,299 now $849 @ Best Buy"><strong>was $1,299 now $849 @ Best Buy</strong></a><br>Best Buy has the iMac M1 (with 7-core GPU) on sale. It features Apple's M1 CPU, a 24-inch 4.5K screen, 7-core GPU, 1080p FaceTime camera, and 256GB SSD. In our <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">iMac 2021 review</a>, we said it delivers speed, beauty, and great sound in a slim new design. <br><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0932FPBV8" target="_blank" rel="nofollow"><strong>sold out @ Amazon</strong></a><a class="view-deal button" href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-256gb-ssd-blue/6450916.p?skuId=6450916" target="_blank" rel="nofollow" data-dimension112="312a48b9-a405-4ea0-9350-ae935c642608" data-action="Deal Block" data-label="Apple iMac M1 (7-Core GPU): was $1,299 now $849 @ Best Buy" data-dimension48="Apple iMac M1 (7-Core GPU): was $1,299 now $849 @ Best Buy">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Act fast! Best Buy just slashed $600 off iMac M1 in huge spring sale  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apple-desktops/forget-amazon-big-spring-sale-best-buy-just-slashed-dollar600-off-imac-m1</link>
                                                                            <description>
                            <![CDATA[ Best Buy is slashing up to $600 off the price of the 24-inch iMac M1. Hurry before these deals are gone. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">RngEFyZXiU6gVz5dgWTxK8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/gKqvFWcCPTwhjtVmbK6pTU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 19 Mar 2024 16:46:14 +0000</pubDate>                                                                                                                                <updated>Tue, 19 Mar 2024 18:09:21 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ millie.daviswilliams@futurenet.com (Millie Davis-Williams) ]]></author>                    <dc:creator><![CDATA[ Millie Davis-Williams ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/WU6pa7hKuxs5ScCoqcXYWA.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Millie is a Deals Editor at Tom&#039;s Guide specializing in tech deals content. Based in London, Millie has spent a lifetime stubbornly refusing to pay full price on any possible purchase. She has years of searching for the best discounts on the latest and greatest phones, TVs and gadgets under her belt, and knows how to sort the best deals from the rest. Helping readers save on the products they want is her mission, whether it’s an Apple Watch or a new tablet.&lt;/p&gt;&lt;p&gt;Since working at Tom’s Guide, Millie has covered retail events like Prime Day, Black Friday and Cyber Monday extensively, meaning she knows the products readers are looking for and the best times of year to hit “purchase.”&lt;/p&gt;&lt;p&gt;When she’s not looking for discounts, Millie covers news and writes how-to articles about everything from phones, streaming devices, and headphones to apps and video games.&lt;/p&gt;&lt;p&gt;In her spare time, Millie enjoys reading, gaming on her Nintendo Switch and creating digital art. She’s also a fan of watching Disney movies and collecting plush (the latter having totally taken over her bedroom.)&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/gKqvFWcCPTwhjtVmbK6pTU-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iMac M1 deal]]></media:description>                                                            <media:text><![CDATA[iMac M1 deal]]></media:text>
                                <media:title type="plain"><![CDATA[iMac M1 deal]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/gKqvFWcCPTwhjtVmbK6pTU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Best Buy is giving the <a href="https://www.tomsguide.com/sales-events/amazon-big-spring-sale-2024">Amazon Big Spring Sale</a> a run for its money with this amazing <a href="https://www.bestbuy.com/site/promo/select-imac-m1" target="_blank" rel="nofollow">iMac sale</a>. Apple&apos;s all-in-one desktop computer is on sale for up to $600 off for a limited time — hurry if you want this deal, as I expect stock to go fast.</p><p>Right now the <a href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-256gb-ssd-blue/6450916.p?skuId=6450916" target="_blank" rel="nofollow">24-inch iMac (M1/256GB) is $849 at Best Buy</a>. It&apos;s now $400 off and one of the lowest prices I&apos;ve seen for an iMac, period. This model comes with Apple&apos;s M1 Chip, a 7-core CPU and 256GB storage. If you want faster performance and more storage, the <a href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-512gb-ssd-w-touch-id-pink/6450928.p" target="_blank" rel="nofollow">24-inch iMac (M1/512GB) is $1,049 at Best Buy</a>. This model has the M1 Chip, an 8-core CPU and 512GB storage. It&apos;s on sale for a huge $600 discount.</p><p>It&apos;s worth noting that the <a href="https://www.tomsguide.com/reviews/apple-imac-m3">iMac M3</a> has since released, and it offers faster performance due to it having Apple&apos;s <a href="https://www.tomsguide.com/news/apple-m3-chip">M3</a> Chip. Still, the iMac M1 handles most everyday computing tasks with ease, and it&apos;s extremely rare to see an iMac go for under $900. It&apos;s one of the <a href="https://www.tomsguide.com/us/best-apple-deals,news-29273.html">best Apple deals</a> I&apos;ve seen in ages.</p><div class="product"><a data-dimension112="a3cdaf1d-0be6-4799-83a1-2d262549e12c" data-action="Deal Block" data-label="Apple iMac 24" (M1/256GB): was $1,299 now $849 @ Best Buy" data-dimension48="Apple iMac 24" (M1/256GB): was $1,299 now $849 @ Best Buy" href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-256gb-ssd-blue/6450916.p" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:84.33%;"><img id="gJwzWhwaccEWxnUqtDVkEB" name="2021 imac silver.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gJwzWhwaccEWxnUqtDVkEB.jpg" mos="" align="middle" fullscreen="" width="1500" height="1265" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Apple iMac 24" (M1/256GB): </strong><a href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-256gb-ssd-blue/6450916.p" target="_blank" rel="nofollow" data-dimension112="a3cdaf1d-0be6-4799-83a1-2d262549e12c" data-action="Deal Block" data-label='Apple iMac 24" (M1/256GB): was $1,299 now $849 @ Best Buy' data-dimension48='Apple iMac 24" (M1/256GB): was $1,299 now $849 @ Best Buy'><u><strong>was $1,299 now $849 @ Best Buy</strong></u></a><br>Like many Apple products, good discounts on iMacs don’t show up often — so when one does, it’s big news. Right now, you can save a massive $400 on the iMac M1, and take full advantage of its beautiful display, 1080p webcam, rich audio, and the impressive performance of its M1 Chip. Our <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">iMac M1 review</a> said this device "delivers speed, beauty, and great sound in a slim new design." This deal is for the model with the M1 Chip, a 7-core CPU and 256GB storage. Note that the newer <a href="https://www.tomsguide.com/reviews/apple-imac-m3">iMac M3</a> is now available.<br><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0932HVSYM" target="_blank" rel="nofollow"><strong>$1,239 @ Amazon</strong></a><a class="view-deal button" href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-256gb-ssd-blue/6450916.p" target="_blank" rel="nofollow" data-dimension112="a3cdaf1d-0be6-4799-83a1-2d262549e12c" data-action="Deal Block" data-label="Apple iMac 24" (M1/256GB): was $1,299 now $849 @ Best Buy" data-dimension48="Apple iMac 24" (M1/256GB): was $1,299 now $849 @ Best Buy">View Deal</a></p></div><div class="product"><a data-dimension112="7a0c2c78-58fc-4344-afe6-cdf451fa06b3" data-action="Deal Block" data-label="Apple iMac 24" (M1/512GB): was $1,649 now $1,049 @ Best Buy" data-dimension48="Apple iMac 24" (M1/512GB): was $1,649 now $1,049 @ Best Buy" href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-512gb-ssd-w-touch-id-pink/6450928.p" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3107px;"><p class="vanilla-image-block" style="padding-top:84.29%;"><img id="jzrvGfgenCUPVEfgQa5jCE" name="imac_m1_24_2021.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jzrvGfgenCUPVEfgQa5jCE.jpg" mos="" align="middle" fullscreen="" width="3107" height="2619" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Apple iMac 24" (M1/512GB): </strong><a href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-512gb-ssd-w-touch-id-pink/6450928.p" target="_blank" rel="nofollow" data-dimension112="7a0c2c78-58fc-4344-afe6-cdf451fa06b3" data-action="Deal Block" data-label='Apple iMac 24" (M1/512GB): was $1,649 now $1,049 @ Best Buy' data-dimension48='Apple iMac 24" (M1/512GB): was $1,649 now $1,049 @ Best Buy'><u><strong>was $1,649 now $1,049 @ Best Buy</strong></u></a><br>If you want faster performance and more storage, the 24-inch iMac with the M1 Chip, 8-core CPU and 512GB storage is on sale for a huge $600 discount.<br><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0931SPLDD" target="_blank" rel="nofollow"><strong>$1,449 @ Amazon</strong></a><a class="view-deal button" href="https://www.bestbuy.com/site/imac-24-with-retina-4-5k-display-all-in-one-apple-m1-8gb-memory-512gb-ssd-w-touch-id-pink/6450928.p" target="_blank" rel="nofollow" data-dimension112="7a0c2c78-58fc-4344-afe6-cdf451fa06b3" data-action="Deal Block" data-label="Apple iMac 24" (M1/512GB): was $1,649 now $1,049 @ Best Buy" data-dimension48="Apple iMac 24" (M1/512GB): was $1,649 now $1,049 @ Best Buy">View Deal</a></p></div><p>The iMac M1 is a couple of years old now, but check out our <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">iMac M1 review</a> and you&apos;ll see it&apos;s still a great choice for an all-in-one computer. The M1 Chip speeds through everyday tasks like browsing the web and streaming videos, and the 24-inch 4.5K Retina display makes doing so a joy. We were able to open dozens of tabs and multiple applications in our tests without seeing any slowdown.</p><p>Plus, the iMac is a great device for entertainment. The previously mentioned Retina display makes movies look gorgeous, and the iMac&apos;s speaker setup consisting of two pairs of low-frequency woofers and one pair of high-frequency tweeters produce powerful sound. And while you probably won&apos;t want to use the iMac M1 as your main gaming machine, simple games like Stardew Valley and Sid Meier’s Civilization 6 ran well on this all-in-one.</p><p>Editing photos and videos on the iMac M1 also ran smoothly. If you&apos;re a career photo or video editor, though, it&apos;s probably worth investing in the newer <a href="https://www.tomsguide.com/reviews/apple-imac-m3">iMac M3</a> or <a href="https://www.tomsguide.com/reviews/macbook-pro-16-inch-m3-max-2023">MacBook Pro M3 Max</a>. They&apos;re more expensive, but also offer a significant performance boost that will aid your productivity.</p><p>This is one of the best iMac deals I&apos;ve ever seen, so make sure to grab one before it sells out. Also, don&apos;t miss the rest of our <a href="https://www.tomsguide.com/sales-events/amazon-big-spring-sale-2024">Amazon Big Spring Sale</a> coverage.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ This iMac M3 deal won't last long — save $100 now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/deals/this-imac-m3-deal-wont-last-long-save-dollar100-now</link>
                                                                            <description>
                            <![CDATA[ The iMac M3 is one of the best all-in-one computers on the market. Amazon is knocking $100 off for a limited time. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">WBZ8V7p8GZy99pCAxcnp24</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/SczM5yyDLvTmXy7dU87wqf-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 19 Jan 2024 17:38:19 +0000</pubDate>                                                                                                                                <updated>Fri, 19 Jan 2024 18:36:31 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/SczM5yyDLvTmXy7dU87wqf-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iMac M3 on desk with Xbox controller]]></media:description>                                                            <media:text><![CDATA[Apple iMac M3 on desk with Xbox controller]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iMac M3 on desk with Xbox controller]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/SczM5yyDLvTmXy7dU87wqf-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>My trustworthy iMac 5K is staring to show signs of aging. If you&apos;re in the same boat as I am, you&apos;ll want to listen up. </p><p>Right now you can get the <a href="https://www.amazon.com/dp/B0CM5BFRND" target="_blank" rel="nofollow">2023 iMac 24-inch (M3/256GB) on sale for $1,199 at Amazon</a>. That&apos;s $100 off and the lowest price I&apos;ve seen on Apple&apos;s new Mac. It&apos;s also one of the <a href="https://www.tomsguide.com/us/best-apple-deals,news-29273.html">best Apple deals</a> you can get. </p><div class="product"><a data-dimension112="59653e97-a20b-49c8-b828-dbc4a9240d3d" data-action="Deal Block" data-label="Apple iMac (M3/256GB): was $1,299 now $1,199 @ Amazon" data-dimension48="Apple iMac (M3/256GB): was $1,299 now $1,199 @ Amazon" href="https://www.amazon.com/dp/B0CM5BFRND" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1219px;"><p class="vanilla-image-block" style="padding-top:123.05%;"><img id="rFGx5tvJYyzMsd4TrxVLU5" name="Apple iMac M3 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rFGx5tvJYyzMsd4TrxVLU5.jpg" mos="" align="middle" fullscreen="" width="1219" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Apple iMac (M3/256GB): </strong><a href="https://www.amazon.com/dp/B0CM5BFRND" target="_blank" rel="nofollow" data-dimension112="59653e97-a20b-49c8-b828-dbc4a9240d3d" data-action="Deal Block" data-label="Apple iMac (M3/256GB): was $1,299 now $1,199 @ Amazon" data-dimension48="Apple iMac (M3/256GB): was $1,299 now $1,199 @ Amazon"><strong>was $1,299 now $1,199 @ Amazon</strong></a><br>The new iMac (M3) sports Apple's latest M3 processor and is 2x faster than its predecessor. In our <a href="https://www.tomsguide.com/reviews/apple-imac-m3">iMac M3 review</a> we said the new chip makes this iMac more capable of multi-tasking, gaming and getting things done than any iMac before it. The base configuration sports a 24-inch 4.5K display, M3 CPU with 8-core GPU, 8GB of RAM, and a 256GB SSD.<br><strong>Price check: </strong><a href="https://www.bhphotovideo.com/c/product/1793636-REG/apple_mqrc3ll_a_24_imac_with_m3.html" target="_blank" rel="nofollow"><strong>$1,199 @ B&H Photo</strong></a><strong> | </strong><a href="https://www.bestbuy.com/site/apple-imac-24-all-in-one-m3-chip-8gb-memory-256gb-latest-model-silver/6534276.p?skuId=6534276" target="_blank" rel="nofollow"><strong>$1,299 @ Best Buy</strong></a><a class="view-deal button" href="https://www.amazon.com/dp/B0CM5BFRND" target="_blank" rel="nofollow" data-dimension112="59653e97-a20b-49c8-b828-dbc4a9240d3d" data-action="Deal Block" data-label="Apple iMac (M3/256GB): was $1,299 now $1,199 @ Amazon" data-dimension48="Apple iMac (M3/256GB): was $1,299 now $1,199 @ Amazon">View Deal</a></p></div><p>The new M3-based iMac is the <a href="https://www.tomsguide.com/us/best-all-in-one-pc,review-2159.html">best all-in-one computer</a> on the market. In our <a href="https://www.tomsguide.com/reviews/apple-imac-m3">iMac M3 review</a> we called it the best iMac yet and the best all-in-one for families. The new <a href="https://www.tomsguide.com/news/apple-m3-chip">Apple M3 chip</a> makes this iMac more capable of multi-tasking, gaming and getting things done than any iMac before it. </p><p>In our testing, we never felt limited or bogged down by the system&apos;s lack of resources, and we were able to seamlessly go from task to task while keeping 20+ tabs open in Chrome and streaming music from iTunes with absolutely zero slowdown. In our Geekbench 5 (single-core) test, the new iMac hit a 2,235 score. By comparison, the <a href="https://www.tomsguide.com/reviews/hp-envy-34-all-in-one-review-a-true-imac-challenger">HP Envy 34</a> (2022) scored 1,621 and the <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">iMac M1</a> scored 1,739. </p><p>If you&apos;re deciding between the Mac mini M2 ($499 at Amazon) or the iMac M3, it&apos;s worth mentioning that the performance differences are small in a few areas. While the M3 chip outperforms the M2 in basically every test, the difference was pretty meager in terms of raw CPU performance and disk read/write speeds. </p><p>Even in our video editing test, which times how long it takes a PC to transcode a 4K video file down to 1080p using Handbrake, the M2 Mac mini is just as fast as the new iMac M3 and capable of converting our test file in 6 minutes and 46 seconds. Likewise, if you have an iMac M1, there&apos;s no massive performance upgrade in the new iMac M3, despite the fact that it skips over the M2 processor. </p><p>That&apos;s not to say you shouldn&apos;t get the iMac M3. It&apos;s a solid machine and rarely on sale. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Mac Studio with M3 Ultra could be on the way — but the Mac Pro could miss out ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/news/mac-studio-with-m3-ultra-could-be-on-the-way-but-the-mac-pro-could-miss-out</link>
                                                                            <description>
                            <![CDATA[ Report suggests WWDC launch for souped-up mini-computer, but there’s no mention of the Mac Pro getting the same upgrade. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">cvgh3fXugEULR2HBQ4qvJP</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UT9WZPjgYk3cXPHLC9Ftbk-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 06 Jan 2024 13:38:07 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alan Martin  ]]></dc:creator>                                                                                    <dc:source><![CDATA[ http://cdn.mos.cms.futurecdn.net/xMmhmPSssqZHHFWveDgSs7.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/UT9WZPjgYk3cXPHLC9Ftbk-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Mac Studio on a desk]]></media:description>                                                            <media:text><![CDATA[Mac Studio on a desk]]></media:text>
                                <media:title type="plain"><![CDATA[Mac Studio on a desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UT9WZPjgYk3cXPHLC9Ftbk-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>So far, Apple’s M3 chipset has only appeared in the iMac and <a href="https://www.tomsguide.com/reviews/macbook-pro-14-inch-m3">MacBook Pro</a>. With the latter, you can configure a model with <a href="https://www.tomsguide.com/news/apple-m3-vs-m3-pro-vs-m3-max-vs-m3-ultra-the-specs-you-need-to-know">M3 Pro or M3 Max</a> if you wish, but these won’t be the fastest Apple chips for too much longer if a new report from <a href="https://www.trendforce.com/news/2024/01/04/news-tsmc-reportedly-attracts-influx-of-3nm-customers-predicts-production-capacity-utilization-to-surge-to-80-by-year-end/" target="_blank">TrendForce</a> is to be believed.</p><p>Referencing the Chinese outlet <a href="https://www-icsmart-cn.translate.goog/72181/?_x_tr_sl=auto&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp" target="_blank">ICsmart</a>, which in turn cites “a Korean agency,” the report suggests that the M3 Ultra “might make its debut in the upgraded Mac Studio around mid-year.”</p><p>If that’s correct, then reading between the lines, that’s almost certain to be WWDC 2024. Apple’s developer-focused annual event has previously seen hardware launches including the <a href="https://www.tomsguide.com/reviews/apple-homepod-2nd-generation">HomePod</a>, first <a href="https://www.tomsguide.com/reviews/iphone-se-2022">iPhone SE</a> and, crucially, the <a href="https://www.tomsguide.com/news/apple-reveals-mac-studio-2023-with-huge-m2-ultra-chip-power">M2 Ultra Mac Studio</a> <a href="https://www.tomsguide.com/news/apple-reveals-mac-studio-2023-with-huge-m2-ultra-chip-power">last year</a>. While it could be scheduled for any point in 2024, it hasn’t fallen outside of June since 2006.</p><p>The chips will apparently be the first to be made via the more cost-effective N3E process. But for the consumer, the main thing to note is that these are set to be seriously powerful. How powerful? Back in November, Bloomberg’s Mark Gurman crunched the numbers, floating the idea of an “outrageous” amount of speed. </p><p>“If the company continues to double both the CPU and graphics configurations with the Ultra, we’re looking at a Mac chip that tops out at an outrageous 32 CPU cores and 80 graphics cores,” he <a href="https://www.bloomberg.com/news/newsletters/2023-11-12/apple-aapl-plans-ambitious-ios-18-and-macos-15-updates-seeks-to-squash-bugs-lovjlsf6?sref=HrWXCALa" target="_blank">wrote</a>. “And as Apple steps up the memory, you could imagine an option with 256 gigabytes.”</p><p>To put that in perspective, the most powerful configuration of M3 Max MacBook Pro you can buy has 16 CPU cores and 40 graphics cores with 128GB of RAM. Of course, that would set you back at least $4,999 (and more if you wanted to add to the 1TB of storage included by default). </p><p>While both TrendForce and ICsmart’s reports are light on details, one interesting omission from both is any mention of the Mac Pro, the other Apple desktop currently configurable with M2 Ultra chips. </p><p>That could be an oversight, or it could be a sign that Apple is losing interest in its priciest desktop. After all, before it got the M2 Ultra chip last year, it hadn’t been updated since 2019 and was the only computer Apple sold that still used Intel CPUs. It’s possible Apple won’t update it for a bit longer — or maybe at all if the Mac Studio works well enough for power users and the company decides to phase it out.</p><p>We should find out more in the next few months, as we expect pre-WWDC leaks to pick up steam. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I cover deals for a living and here's why I'd buy the iMac M3 right now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/deals/i-cover-deals-for-a-living-and-heres-why-id-buy-the-imac-m3-right-now</link>
                                                                            <description>
                            <![CDATA[ The excellent Apple iMac M3 just got its first price cut thanks to this epic Black Friday deal. Here's how to get it before it sells out. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">fRS83xLxkWhmCYEe57tsAg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/vfQcAxMLGFMF8YQA3hvKDW-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 15 Nov 2023 19:27:48 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/vfQcAxMLGFMF8YQA3hvKDW-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iMac M3 displaying multiple windows and apps]]></media:description>                                                            <media:text><![CDATA[iMac M3 displaying multiple windows and apps]]></media:text>
                                <media:title type="plain"><![CDATA[iMac M3 displaying multiple windows and apps]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/vfQcAxMLGFMF8YQA3hvKDW-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I need a new iMac. As much as I love my iMac 5K, it&apos;s slowly starting to show its age. If you&apos;re in the same boat as I am, you&apos;ll want to listen up. </p><p>Right now you can get the <a href="https://www.bhphotovideo.com/c/product/1793634-REG/apple_mqr93ll_a_24_imac_with_m3.html" target="_blank" rel="nofollow">2023 iMac 24-inch (M3/256GB) on sale for $1,199 at B&H Photo</a>. That&apos;s $100 off and the first price drop I&apos;ve seen on Apple&apos;s new Mac. And trust me, I&apos;ve been actively looking for deals on this iMac. </p><div class="product"><a data-dimension112="8494fc43-c6bd-48f4-a217-f6251f5c65f8" data-action="Deal Block" data-label="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo" data-dimension48="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo" href="https://www.bhphotovideo.com/c/product/1793634-REG/apple_mqr93ll_a_24_imac_with_m3.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1219px;"><p class="vanilla-image-block" style="padding-top:123.05%;"><img id="rFGx5tvJYyzMsd4TrxVLU5" name="Apple iMac M3 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rFGx5tvJYyzMsd4TrxVLU5.jpg" mos="" align="middle" fullscreen="" width="1219" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Apple iMac (M3/256GB): </strong><a href="https://www.bhphotovideo.com/c/product/1793634-REG/apple_mqr93ll_a_24_imac_with_m3.html" target="_blank" rel="nofollow" data-dimension112="8494fc43-c6bd-48f4-a217-f6251f5c65f8" data-action="Deal Block" data-label="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo" data-dimension48="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo"><strong>was $1,299 now $1,199 @ B&H Photo</strong></a><br><strong>First price cut!</strong> The new iMac (M3) sports Apple's latest M3 processor and is 2x faster than its predecessor. In our <a href="https://www.tomsguide.com/reviews/apple-imac-m3">iMac M3 review</a> we said the new chip makes this iMac more capable of multi-tasking, gaming and getting things done than any iMac before it. The base configuration sports a 24-inch 4.5K display, M3 CPU with 8-core GPU, 8GB of RAM, and a 256GB SSD. It's $100 off for the first time.<br><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0CM5BFRND" target="_blank" rel="nofollow"><strong>$1,299 @ Amazon</strong></a><strong> | </strong><a href="https://www.bestbuy.com/site/apple-imac-24-all-in-one-m3-chip-8gb-memory-256gb-latest-model-silver/6534276.p?skuId=6534276" target="_blank" rel="nofollow"><strong>$1,299 @ Best Buy</strong></a><a class="view-deal button" href="https://www.bhphotovideo.com/c/product/1793634-REG/apple_mqr93ll_a_24_imac_with_m3.html" target="_blank" rel="nofollow" data-dimension112="8494fc43-c6bd-48f4-a217-f6251f5c65f8" data-action="Deal Block" data-label="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo" data-dimension48="Apple iMac (M3/256GB): was $1,299 now $1,199 @ B&amp;H Photo">View Deal</a></p></div><p>The new M3-based iMac is the <a href="https://www.tomsguide.com/us/best-all-in-one-pc,review-2159.html">best all-in-one computer</a> on the market. In our <a href="https://www.tomsguide.com/reviews/apple-imac-m3">iMac M3 review</a> we called it the best iMac yet and the best all-in-one for families. The new <a href="https://www.tomsguide.com/news/apple-m3-chip">Apple M3 chip</a> makes this iMac more capable of multi-tasking, gaming and getting things done than any iMac before it. </p><p>In our testing, we never felt limited or bogged down by the system&apos;s lack of resources, and we were able to seamlessly go from task to task while keeping 20+ tabs open in Chrome and streaming music from iTunes with absolutely zero slowdown. In our Geekbench 5 (single-core) test, the new iMac hit a 2,235 score. By comparison, the <a href="https://www.tomsguide.com/reviews/hp-envy-34-all-in-one-review-a-true-imac-challenger">HP Envy 34</a> (2022) scored 1,621 and the <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">iMac M1</a> scored 1,739. </p><p>If you&apos;re deciding between the Mac mini M2 or the iMac M3, it&apos;s worth mentioning that the performance differences are small in a few areas. While the M3 chip outperforms the M2 in basically every test, the difference was pretty meager in terms of raw CPU performance and disk read/write speeds. Even in our video editing test, which times how long it takes a PC to transcode a 4K video file down to 1080p using Handbrake, the M2 Mac mini is just as fast as the new iMac M3 able to convert the file in 6 minutes and 46 seconds. Likewise, if you have an iMac M1, there&apos;s no massive performance upgrade in the new iMac M3, despite that it skips over the M2 processor. </p><h2 id="buy-now-or-wait-for-black-friday-imac-m3">Buy now or wait for Black Friday? iMac M3</h2><p>The iMac M3 is an awesome machine and a solid buy if you want an all-in-one. Could it get cheaper on Black Friday proper? I doubt it. iMac deals are fairly hard to come by and not a single retailer is price matching B&H&apos;s deal right now. (I&apos;m looking at you Amazon and Best Buy). Yes, the Apple Store will announce its annual Black Friday sale in a few days, but instead of a dollar-off discount, Apple will likely bundle an Apple gift card with your purchase. Additionally, because the iMac M3 is new, it&apos;s likely it won&apos;t even qualify for Apple&apos;s gift card deal. My advice — get this deal before it expires on November 18.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ It's official — Apple just confirmed the 27-inch iMac is dead ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/news/its-official-apple-just-confirmed-the-27-inch-imac-is-dead</link>
                                                                            <description>
                            <![CDATA[ The 27-inch iMac is officially dead, according to Apple, so it's time to decide on a different machine. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6u9ntFKbgQrKUemwXtzcB9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/x3togztChKVkHbdnPnCx2g-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 07 Nov 2023 12:23:47 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ http://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/x3togztChKVkHbdnPnCx2g-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iMac 27-inch 2020 ]]></media:description>                                                            <media:text><![CDATA[iMac 27-inch 2020 ]]></media:text>
                                <media:title type="plain"><![CDATA[iMac 27-inch 2020 ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/x3togztChKVkHbdnPnCx2g-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There have been rumors about a new 27-inch iMac for some time now, even the possibility that it may launch this year as the <a href="https://www.tomsguide.com/news/imac-2023https://www.tomsguide.com/news/imac-pro-2022-release-date-rumors-leaks-and-what-we-know-so-far">iMac Pro 2023</a>. Unfortunately, it seems like this machine may never see the light of day, either powered by Apple Silicon or otherwise.</p><p>Apple has confirmed to <a href="https://www.theverge.com/2023/11/6/23947196/apple-no-27-inch-apple-silicon-imac" target="_blank">The Verge</a> that it has no plans to build a 27-inch iMac. Instead the company has said anyone holding out for such a larger-screened machine will have to pick up a Studio display with either a <a href="https://www.tomsguide.com/reviews/mac-studio">Mac Studio</a> or <a href="https://www.tomsguide.com/reviews/mac-mini-m2">Mac Mini.</a> The Studio Display measures 27-inches and offers 5K resolution but also costs $1,599 by itself. </p><p>There’s also the new <a href="https://www.tomsguide.com/reviews/apple-imac-m3">24-inch iMac M3</a>, which starts at $1,299 and comes powered by the new M3 chip. It may be a smaller 4.5K screen, but it means you don’t need to buy a separate computer to get stuff done.</p><p>The last version <a href="https://www.tomsguide.com/news/apple-kills-27-inch-imac-as-apple-silicon-takes-over"><u>27-inch iMac was officially retired in March 2022</u></a>, but despite rumors there has been no sign of an M series chip replacement. Which is strange, because the machine was one of Apple’s flagship products — popular with consumers and professionals alike. That happens when you combine a large hi-res screen with a solid set of speakers and powerful graphical and computational performance.</p><p>Take all that and run it on Apple Silicon, and you have the recipe for something truly great. But as all other Apple machines, including desktops and iPads, have gradually moved to M-series chips, the 27-inch iMac lies forgotten. Clearly Apple would like customers to opt for other things, like the Studio Display.</p><p>But as powerful as a Studio Display would be when paired with a Mac mini or Mac Studio, it doesn’t have the same neatness you’d get from one of the <a href="https://www.tomsguide.com/us/best-all-in-one-pc,review-2159.html">best all-in-one computers</a>. As for the 24-inch iMac, well, it’s a great machine and by far the best iMac Apple has created. But the loss of the extra screen space isn’t going to do it any favors.</p><p>Maybe we’ll see a larger iMac, possibly even an <a href="https://www.tomsguide.com/news/imac-pro-2022-release-date-rumors-leaks-and-what-we-know-so-far"><u>iMac Pro</u></a>, at some point in the future. But for now, it looks like you’ll all have to give up waiting and pick up a different product in Apple’s lineup.</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/macbook-pro-m3-and-m3-max-battery-life-tested-heres-how-long-they-last">MacBook Pro M3 and M3 Max battery life tested — here’s how long they last</a></li><li><a href="https://www.tomsguide.com/reviews/macbook-pro-16-inch-m3-max-2023">MacBook Pro 16-inch (M3 Max, 2023) review: The most powerful MacBook ever</a></li><li><a href="https://www.tomsguide.com/deals/black-friday-macbook-deals-2022">Black Friday MacBook deals 2023 — best early sales now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple iMac M3 review: The best iMac yet ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/reviews/apple-imac-m3</link>
                                                                            <description>
                            <![CDATA[ The Apple iMac M3 is the best 24-inch iMac yet, offering better performance than its predecessor with all the same weaknesses. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oXcxhLykV65vqZUVfVKheY</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TuBDexrUnuYdbrbkhM4ofX-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 06 Nov 2023 14:00:47 +0000</pubDate>                                                                                                                                <updated>Mon, 19 Aug 2024 12:48:28 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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.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/TuBDexrUnuYdbrbkhM4ofX-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iMac M3 review unit on desk]]></media:description>                                                            <media:text><![CDATA[Apple iMac M3 review unit on desk]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iMac M3 review unit on desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TuBDexrUnuYdbrbkhM4ofX-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The new Apple iMac M3 ($1,299 to start) looks an awful lot like its 2021 predecessor, but under the hood this all-in-one is powered by the all-new <a href="https://www.tomsguide.com/news/apple-m3-chip">Apple M3 chip</a>.</p><p>That cutting-edge slice of Apple silicon gives the 24-inch iMac a much-needed shot in the arm, since the previous model was powered by 2020&apos;s <a href="https://www.tomsguide.com/news/apple-m1-chip-everything-you-need-to-know-about-apple-silicon-macs">Apple M1 chip</a>. That model&apos;s still fine for basic work, but the M3 upgrade gives the 2023 iMac more power and more features than before, including upgraded wireless connectivity, better image processing and support for modern graphics tech like hardware-accelerated ray tracing. </p><p>From looks alone you&apos;d be hard-pressed to tell the two models apart. Apple&apos;s new iMac M3 comes in the same seven colors as its predecessor, has basically the same price and the same flaws as the 2021 model — which despite its foibles was one of the <a href="https://www.tomsguide.com/best-picks/best-computers">best computers</a> of the year. </p><p>Does this all-new M3 edition of Apple&apos;s all-in-one still deserve to make that list in 2023? I think it does, and in this iMac M3 review, I&apos;ll walk you through why.</p><h2 class="article-body__section" id="section-apple-imac-m3-review-specs"><span>Apple iMac M3 review: Specs</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M3 2023</strong></td></tr><tr><td class="firstcol " ><strong>Starting price</strong></td><td  >$1,299</td></tr><tr><td class="firstcol " ><strong>Colors</strong></td><td  >Blue, Green, Pink, Silver, Yellow, Orange, Purple</td></tr><tr><td class="firstcol " ><strong>CPU</strong></td><td  >8-core CPU</td></tr><tr><td class="firstcol " ><strong>GPU</strong></td><td  >8-core GPU (up to 10-core)</td></tr><tr><td class="firstcol " ><strong>Display</strong></td><td  >24 inches (4480 x 2520)</td></tr><tr><td class="firstcol " ><strong>Memory</strong></td><td  >8GB (configurable to 16GB or 24GB)</td></tr><tr><td class="firstcol " ><strong>Storage</strong></td><td  >256GB (configurable up to 2TB)</td></tr><tr><td class="firstcol " ><strong>Ports</strong></td><td  >2x Thunderbolt / USB-4, 3.5mm headphone jack, Gigabit Ethernet (optional)</td></tr><tr><td class="firstcol " ><strong>Webcam</strong></td><td  >1080p</td></tr><tr><td class="firstcol " ><strong>Size</strong></td><td  >21.5 x 18.1 x 5.8 inches</td></tr><tr><td class="firstcol " ><strong>Weight</strong></td><td  >9.75 - 9.87 pounds</td></tr></tbody></table></div><h2 class="article-body__section" id="section-apple-imac-m3-review-price-and-availability"><span>Apple iMac M3 review: Price and availability</span></h2><ul><li><strong>$1,299 to start, $1,499 minimum to get all 7 colors and full port array</strong></li><li><strong>Tops out at close to $3k for a fully maxed-out iMac M3</strong></li></ul><p>The new M3-powered 24-inch iMac is available to order on Apple’s <a href="https://go.redirectingat.com/?id=92X1584493&xcust=tomsguide_us_2477407612390165500&xs=1&url=https%3A%2F%2Fwww.apple.com%2Fimac-24%2F&sref=https%3A%2F%2Fwww.tomsguide.com%2Freviews%2Fapple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package" target="_blank">website</a> at a starting price of $1,299, with units slated to start arriving to customers and stores Tuesday, November 7. If you&apos;d like one with a VESA mount adapter on the back for mounting it to a wall or monitor arm, you have to buy a <a href="https://www.apple.com/shop/buy-mac/imac-vesa" target="_blank" rel="nofollow">iMac M3 with a VESA adapter</a> instead of a stand.</p><p>The entry-level $1,299 iMac M3 comes  with 2 Thunderbolt 4 ports, 256GB of storage, 8GB of RAM, and an Apple M3 chip with an 8-core CPU and 8-core GPU. That&apos;s a more powerful chip with an extra GPU core than you got for the same price on the 2021 iMac, which is nice to see. </p><p>However, these entry-level iMacs once again ship with a Magic Keyboard that doesn’t support Touch ID, and they still only come in 4 colors rather than the 7 available on higher-end iMacs. I hated this sales strategy when Apple employed it on the 2021 iMac, so it&apos;s once again distressing and confusing to see that customers are basically strong-armed into paying more for the more expensive models of iMac if they want one in orange, yellow or purple. Are these colors somehow incompatible with the entry-level iMac?</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3395px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="7XS4jE8sycU5mt4EiRkHeg" name="iMac-2023_M3-11.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/7XS4jE8sycU5mt4EiRkHeg.jpg" mos="" align="middle" fullscreen="" width="3395" height="1910" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apple sure seems to think so, because for $1,499 you can get an upgraded iMac M3 with an 8-core CPU, 10-core GPU, and your choice of seven colors: blue, green, pink, silver, yellow, orange or purple. On this model and all of the more expensive models, you also get a Gigabit Ethernet port and two additional USB-C ports on the back, for a total of two Thunderbolt 4 ports and two USB-C ports.</p><p>You can&apos;t upgrade the M3 chip in the iMac M3 past an 8-core CPU and 10-core GPU, but you can pay more to upgrade the RAM and storage if you want more memory. You can get a maxed-out iMac M3 with as much as 24GB of RAM and 2TB of SSD storage — that model will cost you $2,699.</p><p>And while every iMac M3 comes with an Apple Magic Mouse and Magic Keyboard included (though again, the $1,299 models come with keyboards lacking Touch ID support unless you pay $50 to upgrade), you&apos;ll need to pay an extra $50 if you want a Magic Trackpad. I have hand and wrist issues and find the Magic Mouse basically unusable, so I&apos;m grateful Apple included a Trackpad with our review unit.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4030px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="x2D5ZweT77yAN4HppZXCWk" name="iMac-2023_M3-2-2.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/x2D5ZweT77yAN4HppZXCWk.jpg" mos="" align="middle" fullscreen="" width="4030" height="2267" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The pink iMac M3 Apple sent us for review purposes arrived with a fully upgraded M3 chip (8-core CPU, 10-core GPU), 24GB of RAM and 2TB of SSD storage, as well as a full complement of Magic Keyboard, Trackpad and Mouse. To buy the same package directly from Apple would cost you upgrades worth $2,700.</p><h2 class="article-body__section" id="section-apple-imac-m3-review-design"><span>Apple iMac M3 review: Design</span></h2><ul><li><strong>Same design as the preceding iMac M1, but it still looks great</strong></li><li><strong>The lack of height adjustment is still a crime against the tall</strong></li></ul><p>The new iMac M3 is effectively identical to its predecessor in terms of design, which isn&apos;t the worst thing since I quite liked the look of the 24-inch <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">iMac M1</a>. </p><p>It hasn&apos;t been that long since every iMac sported the same "big monitor wrapped in silver aluminum" aesthetic, so it&apos;s still a novel, welcome experience to walk into my living room in the morning and see a colorful pink computer sitting on my desk. And just like its predecessor, I&apos;m a little surprised at how the paint job on the iMac M3 looks in person. The front of our review unit is quite a pale and understated pink, while the rear is so saturated it may as well be red. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3769px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="q5iGuAcTsUuWpiorFi2CsN" name="iMac-2023_M3-2.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/q5iGuAcTsUuWpiorFi2CsN.jpg" mos="" align="middle" fullscreen="" width="3769" height="2120" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>And the rear is where you&apos;ll find everything you&apos;ll need to interact with the iMac M3. The power button and ports are all mounted on the back of the display within (relatively) easy reach, and while you will have to blindly grope around to find a port if you don&apos;t want to spin the display around, the fact that you&apos;re limited to just a few Thunderbolt/USB-C ports helps cut down on that frustration since all the ports are basically the same and lined up together in one row along the rear left side.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3354px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="kxtCjahkGpJWiPiwBHpBAN" name="iMac-2023_M3-10.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/kxtCjahkGpJWiPiwBHpBAN.jpg" mos="" align="middle" fullscreen="" width="3354" height="1887" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Unfortunately, the iMac M3 is still supported by the same aluminum stand that frustrated me on its predecessor. I find it frustrating because while there is a mechanism that lets you tilt the screen backward or forward by a slight amount, you can&apos;t adjust the height or rotation at all.</p><p>Having the ability to rotate the display a bit would have been a nice touch, but the lack of height adjustment just seems cruel to people outside a certain limited height range. </p><p>Okay, maybe "cruel" is a strong word for industrial design but look, I&apos;m 6&apos;4" and there&apos;s no way I could ever use the 24-inch iMac comfortably if I placed it on a desk with the mouse and keyboard in front of me. To use this Mac effectively I basically have to either construct an improvised tiered desk arrangement with the iMac balanced precariously on the thickest, sturdiest books I can find, or buy one with a VESA mount adapter and mount it on an arm or wall instead.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2871px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HDHUfxN3kDErQ6WCYVUFb8" name="iMac-2023_M3-9.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/HDHUfxN3kDErQ6WCYVUFb8.jpg" mos="" align="middle" fullscreen="" width="2871" height="1615" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>By comparison, the $400 1080p Dell touchscreen monitor I&apos;m testing at the moment has both adjustable height and tilt. In fact, most monitors I&apos;ve reviewed here at Tom&apos;s Guide offer some amount of height adjustment and rotation adjustment, so it kind of feels hurtful for Apple to not include an ergonomic feature that&apos;s so common.</p><h2 class="article-body__section" id="section-apple-imac-m3-review-display"><span>Apple iMac M3 review: Display</span></h2><ul><li><strong>4.5K display looks nice and bright, and our testing backs up Apple's claims</strong></li><li><strong>Lack of HDR support is starting to feel painful in 2023</strong></li></ul><p>The 24-inch 4.5K (4,480 x 2,520 pixels) Retina display dominates the iMac M3, and it&apos;s just as eye-catching and attractive as it was on the 2021 model. I enjoyed my time playing games and streaming movies and TV shows on the iMac M3 because it&apos;s bright and colorful, and I never once noticed any graphical performance issues or screen problems.</p><p>However, the iMac&apos;s screen still doesn&apos;t support HDR (high dynamic range) or associated technologies like Dolby Vision, which is a little disappointing since it&apos;s now 2023 and those are becoming more common in movies, shows and games. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3441px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="HMqwtP8wfDQXWkoqzojiaJ" name="iMac-2023_M3-3.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/HMqwtP8wfDQXWkoqzojiaJ.jpg" mos="" align="middle" fullscreen="" width="3441" height="1936" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>That&apos;s not to say the quality of those experiences is lacking on the iMac M3—far from it. I really enjoyed the way even streaming versions of films like The Green Knight looked on our review unit, and the viewing angles are so wide I feel like you could be watching this thing from the far corner of a living room and still see (and hear) what&apos;s happening on-screen.</p><p>Games also look great on it, and I wasn&apos;t stressing too much about HDR levels while playing through a few levels of <a href="https://www.tomsguide.com/reviews/hades">Hades</a>, though I did think some of the colors of space looked strangely sharp and bright while playing <a href="https://www.tomsguide.com/news/no-mans-sky-launches-on-macos-today-this-is-huge-for-mac-gaming">No Man&apos;s Sky</a>. </p><div ><table><caption>Display testing results</caption><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M3</strong></td><td  ><strong>Apple Studio Display</strong></td><td  ><strong>HP Envy 34</strong></td></tr><tr><td class="firstcol " ><strong>Average brightness (nits)</strong></td><td  >479.8</td><td  >518.4</td><td  >417</td></tr><tr><td class="firstcol " ><strong>Peak brightness (nits)</strong></td><td  >508 (center)</td><td  >563 (center)</td><td  >492 (center)</td></tr><tr><td class="firstcol " ><strong>sRGB color gamut</strong></td><td  >108.2%</td><td  >114.1%</td><td  >159.1%</td></tr><tr><td class="firstcol " ><strong>DCI-P3 color gamut</strong></td><td  >76.6%</td><td  >80.8%</td><td  >112.7%</td></tr><tr><td class="firstcol " ><strong>Delta-E</strong></td><td  >0.2</td><td  >0.21</td><td  >0.26</td></tr></tbody></table></div><p>Apple claims the display can achieve brightness levels of up to 500 nits, and a few rounds of testing in our lab proved the company isn&apos;t lying. When we pointed our Klein K10-A colorimeter at the screen, we found our iMac M3 review unit achieved an average brightness of 479 nits that peaked at 508 nits right smack dab in the center of the screen.</p><p>That&apos;s quite bright for a monitor, and right in line with Apple&apos;s marketing. The iMac M3&apos;s display is also pretty color-accurate, achieving 108.2% of the sRGB color gamut and 78.6% of the more demanding DCI-P3 color gamut with a Delta-E score of 0.2 (a score of 0 is best). </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2940px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="ZxYXBjdFjKnfViyQJc56ib" name="iMac-2023_M3-7.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/ZxYXBjdFjKnfViyQJc56ib.jpg" mos="" align="middle" fullscreen="" width="2940" height="1654" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Regrettably, due to time constraints on the review, we didn&apos;t test the iMac 2021 as thoroughly as we&apos;ve tested this 2023 M3 model, so I can&apos;t say for sure how much better or worse it is than the iMac M1&apos;s display. What I can tell you, though, is that this iMac M3 you can get for as little as $1,299 is brighter and more color-accurate than the <a href="https://www.tomsguide.com/reviews/hp-envy-34-all-in-one-review-a-true-imac-challenger">HP Envy 34 all-in-one</a> we tested last year, though the HP PC gets nearly as bright and can display more of the DCI-P3 color gamut.</p><p>I can also tell you that the new iMac is nearly as bright and color-accurate as the 27-inch <a href="https://www.tomsguide.com/reviews/apple-studio-display">Apple Studio Display</a> ($1,599), which is worth knowing if you&apos;re thinking about how to buy the best desktop Mac setup for your needs. While Apple&apos;s standalone 5K display is still brighter and more vivid than the cheaper iMac M3, the gulf isn&apos;t huge.</p><h3 class="article-body__section" id="section-apple-imac-m3-review-ports-and-connectivity"><span>Apple iMac M3 review: Ports and connectivity</span></h3><ul><li><strong>Still lacking in ports, especially on the $1,299 entry-level model</strong></li><li><strong>Added support for Wi-Fi 6E and Bluetooth 5.3 is nice to have</strong></li></ul><p>As noted earlier, the port array on the iMac M3 is effectively identical to its predecessor. When I reviewed the iMac M1 in 2021 I said "the port selection is pretty anemic," and that remains true on the entry-level iMac M3, which sports just a pair of Thunderbolt 4 ports on the rear plus a headphone jack on the left-hand edge of the display.</p><p>Pay $200 or more to upgrade from the entry-level model and you&apos;ll get an additional pair of USB 3.0 Type-C added to the rear next to the Thunderbolt 4/USB 4 ports, as well as a Gigabit Ethernet port on the power adapter.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3451px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="V9pU49K8mUfNXPrtDifnt3" name="iMac-2023_M3-5.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/V9pU49K8mUfNXPrtDifnt3.jpg" mos="" align="middle" fullscreen="" width="3451" height="1941" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>If you prefer to connect to the web wirelessly, you should know that the iMac M3 also supports up to Wi-Fi 6E and Bluetooth 5.3, an upgrade over the Wi-Fi 6 and Bluetooth 5 support available on the old iMac M1s from 2021.</p><p>While I wish the entry-level iMac offered a bit more for your money, I can&apos;t get too upset about the simplicity of the ports you get. While even the expanded four-port array you get on the more expensive models feels a bit lacking for power users, this is an all-in-one computer designed to sit on a desk—so you can make up for anything you really miss (like USB-A ports or an SD card reader) pretty easily by just buying an adapter, dongle or hub to also sit on said desk.</p><h3 class="article-body__section" id="section-apple-imac-m3-review-performance"><span>Apple iMac M3 review: Performance</span></h3><ul><li><strong>M3 chip is plenty fast for basic tasks, work and some light gaming</strong></li><li><strong>Not as much of an improvement over the M2 as you might expect</strong></li></ul><p>The iMac has never been a beastly performance machine, and the addition of the new M3 chip hasn&apos;t changed that. But what it has done is improve an already speedy all-in-one, making it more capable of multi-tasking, gaming and getting things done than any iMac before it.</p><div><blockquote><p>This new 2023 iMac M3 definitely blows its predecessor out of the water in terms of performance."</p></blockquote></div><p>That said, let me set your expectations accordingly for what you get from this new iMac. In my time with our review unit and its maxed-out M3 chip (8-core CPU, 10-core GPU, 24GB RAM), I never felt limited or bogged down by the system&apos;s lack of resources, and I was able to seamlessly flit from task to task while keeping 20+ tabs open in Chrome and streaming music from iTunes with absolutely zero slowdown. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3925px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NtidZCudtriQyN5uGPjBmU" name="iMac-2023_M3-4.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/NtidZCudtriQyN5uGPjBmU.jpg" mos="" align="middle" fullscreen="" width="3925" height="2208" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I had a pretty good time streaming movies and playing games, too, including modern releases like <a href="https://www.tomsguide.com/opinion/lies-of-p-is-my-biggest-gaming-surprise-of-the-year-and-the-bloodborne-sequel-we-deserve">Lies of P</a> and <a href="https://www.tomsguide.com/news/total-war-warhammer-3-is-cleaner-meaner-and-embraces-chaos">Total War: Warhammer III</a> as well as classics like <a href="https://www.tomsguide.com/news/no-mans-sky-launches-on-macos-today-this-is-huge-for-mac-gaming">No Man&apos;s Sky</a>. But while I enjoyed my time with those games well enough, they didn&apos;t look nearly as good on the iMac M3 as they do on the <a href="https://www.tomsguide.com/us/best-gaming-pc,review-2219.html">best gaming PCs</a>.</p><p>Partly that&apos;s because the iMac doesn&apos;t support a lot of advanced graphics technologies, like variable refresh rate and HDR, that are commonly supported by modern game consoles and gaming PCs. Partly it&apos;s because the vanilla M3 chip just doesn&apos;t have the power to run many games well at the iMac&apos;s native 4.5K resolution. </p><p>So while the iMac M3 is clearly faster and more capable than its predecessor thanks to the newfound power and capabilities of the M3 chip, it&apos;s still not a PC I could recommend to someone who loves games and wants to enjoy them.</p><p>But as an all-purpose all-in-one, it&apos;s easy to recommend this iMac for families and students, because it&apos;s more than capable of handling tasks like browsing the web, doing homework, basic coding or photo/video editing, and light gaming. </p><div ><table><caption>Performance tests</caption><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M3 (2023)</strong></td><td  ><strong>HP Envy 34 (2022)</strong></td><td  ><strong>iMac M1 (2021)</strong></td></tr><tr><td class="firstcol " ><strong>Geekbench 5 (single-core)</strong></td><td  >2,235</td><td  >1,621</td><td  >1,739</td></tr><tr><td class="firstcol " ><strong>Geekbench 5 (multi-core)</strong></td><td  >10,745</td><td  >7,856</td><td  >7,684</td></tr><tr><td class="firstcol " ><strong>Handbrake (minutes:seconds)</strong></td><td  >6:46</td><td  >8:23</td><td  >13:38</td></tr></tbody></table></div><p>I&apos;m basing that not just on my own experience using the iMac M3 but also on the results of our performance testing. Since we had a bit more time with this iMac than with the M1 model I reviewed in 2021, we were able to run the new version through our performance testing lab and bring you a fuller report on how well this Mac performs under pressure.</p><p>And since I ran a few of these tests on the old 2021 iMac M1 myself, I can also tell you that this new 2023 iMac M3 definitely blows its predecessor out of the water in terms of performance. The M3 chip in our iMac 2023 review unit helped it earn 10,745 in the Geekbench 5 multi-core CPU benchmark, a solid score that&apos;s significantly higher than what the iMac M1 (7,684) was able to achieve. </p><p>It&apos;s also better than what the HP Envy 34 all-in-one ($1,999 to start, $2,639 as reviewed) we tested last year earned, though that <a href="https://www.tomsguide.com/reviews/windows-11">Windows 11</a> PC had an older 11th Gen Intel Core i7 CPU compared to the newer 12th Gen <a href="https://www.tomsguide.com/news/intel-alder-lake">Intel Alder Lake</a> chips it now comes with.</p><p>But you know what&apos;s interesting? According to our testing, this iMac M3 scored very close to the Mac mini M2 Apple released at the start of the year. I&apos;m not talking about the amped-up M2 Pro model we tested for our <a href="https://www.tomsguide.com/reviews/mac-mini-m2">Mac mini M2 review</a>, either—I&apos;m saying that the $799 Mac mini M2 we also tested earlier this year, with its vanilla M2 chip, performed nearly as well in many of our tests as the newer and more expensive iMac M3 did.</p><p>To show you what I mean, here&apos;s a breakdown of some key performance tests we ran on the last three generations of desktop Macs packing Apple silicon.</p><div ><table><caption>Mac performance tests</caption><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M3 (2023)</strong></td><td  ><strong>Mac mini M2 (2023)</strong></td><td  ><strong>iMac M1 (2021)</strong></td></tr><tr><td class="firstcol " ><strong>Geekbench 5 (single-core)</strong></td><td  >2,235</td><td  >1,959</td><td  >1,739</td></tr><tr><td class="firstcol " ><strong>Geekbench 5 (multi-core)</strong></td><td  >10,745</td><td  >9,048</td><td  >7,684</td></tr><tr><td class="firstcol " ><strong>Handbrake (minutes:seconds)</strong></td><td  >6:46</td><td  >6:46</td><td  >13:38</td></tr><tr><td class="firstcol " ><strong>BlackMagic Disk Speed (read)</strong></td><td  >3,008</td><td  >2,933</td><td  >DNR (did not run)</td></tr><tr><td class="firstcol " ><strong>BlackMagic Disk Speed (write)</strong></td><td  >3,289</td><td  >3,220</td><td  >DNR</td></tr><tr><td class="firstcol " ><strong>PugetBench for Adobe CC: Photoshop</strong></td><td  >1,082</td><td  >963</td><td  >DNR</td></tr><tr><td class="firstcol " >3DMark Wild Life Extreme Unlimited</td><td  >8,180</td><td  >6,887</td><td  >DNR</td></tr></tbody></table></div><p>As you can see from the results it&apos;s a story of slow and steady increases from M1 to M3, but the leap from the Mac mini M2 to iMac M3 is small in a few areas. Notably, while the M3 chip in our iMac M3 review unit does outperform the M2 in basically every test, the difference was pretty meager in terms of raw CPU performance and disk read/write speeds. Heck, in our video editing test, which times how long it takes a PC to transcode a 4K video file down to 1080p using Handbrake, the M2 Mac mini is just as fast as the new iMac M3.</p><p>I also had time to run a few gaming benchmarks on the iMac M3 during the review process, and the results back up my hands-on experience of this all-in-one as a Mac that&apos;s capable of playing games but not great at it.</p><p>Unfortunately, it&apos;s challenging for us to fully compare Mac gaming performance vs. the gaming performance of competing Windows machines because many of the games we use don&apos;t run natively on macOS. And since we haven&apos;t typically run many game tests on Mac desktops (as few can run them) I don&apos;t have a lot of old data to compare against the results of our iMac M3 game tests.</p><div ><table><caption>Gaming tests @ 1080p in frames per second</caption><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M3 (2023)</strong></td><td  ><strong>Mac mini M2 (2023)</strong></td><td  ><strong>iMac M1 (2021)</strong></td></tr><tr><td class="firstcol " ><strong>Civilization VI: Gathering Storm</strong></td><td  >35.9</td><td  >44.8</td><td  >28.7</td></tr><tr><td class="firstcol " ><strong>Shadow of the Tomb Raider</strong></td><td  >34</td><td  >DNR</td><td  >DNR</td></tr><tr><td class="firstcol " ><strong>Borderlands 3</strong></td><td  >21.4</td><td  >DNR</td><td  >DNR</td></tr><tr><td class="firstcol " >Total War: Warhammer 3 [Low/Ultra]</td><td  >49/20</td><td  >DNR</td><td  >DNR</td></tr></tbody></table></div><p>Still, I hope what I can share is of some use to you. As you can see, even when you knock a game down to 1080p (1,920 x 1,080 pixels) instead of playing it at the iMac&apos;s native 4.5K resolution, Apple&apos;s machine still has a hard time running modern games at decent framerates. </p><p>We were able to achieve a peak framerate of 35.9 frames per second when running Sid Meier&apos;s Civilization VI: Gathering Storm graphical benchmark at 1080p, for example, but if you play the same game at native resolution the result drops down to 20 FPS.</p><p>That&apos;s a bit disappointing because in my experience you need at least a solid 30 frames per second to feel good playing a game, and the iMac M3 struggles to achieve that in most games unless you knock the game settings way down. Heck, as you can see from the chart of results above, the new iMac actually ran Civ VI <em>worse </em>than the older, weaker Mac mini M2 we tested at the start of the year.</p><p>However, I would be remiss not to point out that the older M2 chip doesn&apos;t support the advanced gaming features the M3 does, like hardware-accelerated ray tracing and mesh caching. But if you really want a Mac for playing games, you might be better off investing in one of the new <a href="https://www.tomsguide.com/news/macbook-pro-m3">MacBook Pro M3</a> laptops with their beefier M3 Pro and M3 Max chips.</p><h3 class="article-body__section" id="section-apple-imac-m3-review-audio"><span>Apple iMac M3 review: Audio</span></h3><ul><li><strong>Six-speaker setup gets loud and sounds good, with decent bass</strong></li><li><strong>Support for Dolby Atmos/Spatial Audio is nice</strong></li></ul><p>The six-speaker sound system (4 woofers, 2 tweeters) on the iMac M3 sounds great, delivering remarkably clear sound quality and some decent bass for your buck. The speakers also support Dolby Atmos and Apple&apos;s Spatial Audio tech, which uses directional filters and other tricks to make it seem like sound coming from the iMac is actually happening in 3D space around you. To my humble ears, it sounds like a louder, lusher, deeper soundscape, and I appreciated the extra bit of aural oomph on tracks from the likes of Huey Lewis & The News, Megan Thee Stallion and Rage Against the Machine.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3208px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="Pw4iFqk4PV6CzEdvpnAXPk" name="iMac-2023_M3-12.jpg" alt="Apple iMac M3 review unit on desk" src="https://cdn.mos.cms.futurecdn.net/Pw4iFqk4PV6CzEdvpnAXPk.jpg" mos="" align="middle" fullscreen="" width="3208" height="1804" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>But even when listening to music and movies without Spatial Audio or Dolby Atmos support things sound clear and crisp. I&apos;m too cheap to pay for the really high-quality stuff, but my favorite Spotify playlists also sounded great coming through the iMac&apos;s speakers. They get plenty loud, too, so you&apos;ll want to take care when leaning on the volume up key if you&apos;ve got neighbors.</p><p>You can get better sound quality from a separate set of speakers or home speaker system, but sound this good from speakers built into an all-in-one is a rare treat. While there are some all-in-one PCs out there that do come with decent built-in speakers, like the HP Envy 34, few can match the sound quality of the iMac.</p><h3 class="article-body__section" id="section-apple-imac-m3-review-camera"><span>Apple iMac M3 review: Camera</span></h3><ul><li><strong>1080p FaceTime camera works well</strong></li><li><strong>Great sound quality on calls</strong></li></ul><p>The 1080p FaceTime camera mounted in the center of the top bezel on the iMac M3 is great for selfies and video calls, so you should have no trouble looking your best on Facetime, Zoom and other videoconferencing apps.</p><p>The triple-mic array built into the iMac seems to work quite well, and while I don&apos;t know that I&apos;d recommend using it for tasks where audio quality really matters (like recording a podcast), it&apos;s more than good enough for basic tasks like FaceTiming with family, as I had no complaints about sound quality while doing just that.</p><p>The M3 chip also does all the same tricks as the old M1 did with even more power behind it, so in addition to the work it does to improve audio and picture quality you can count on access to features like the gesture-triggered video reactions which debuted with macOS Sonoma. (Here&apos;s <a href="https://www.tomsguide.com/how-to/use-reactions-in-video-calls-on-macos-sonoma">how to use reactions in video calls on macOS Sonoma</a> if you haven&apos;t yet.) </p><h3 class="article-body__section" id="section-apple-imac-m3-review-verdict"><span>Apple iMac M3 review: Verdict</span></h3><p>The 2023 iMac M3 is a great all-in-one PC that&apos;s easy to recommend if you&apos;re in the market for a new Mac, but less so if you&apos;re an iMac M1 owner looking to upgrade.</p><p>The 2023 model offers all the same benefits of its predecessor, from the elegant, colorful design to the eye-catching, remarkably thin display and great speakers. It was easy for me to recommend the 2021 M1 iMac to families, students, teachers and anyone who wanted a deskbound Mac for basic work and play because it offers so much in one compact package.</p><p>The iMac M3 is an even better deal because it still starts at $1,299 and now you&apos;re getting the extra features and added power of the M3 chip. That pays off in better performance when doing things like gaming or editing video, as well as better video quality on calls. If you&apos;re in the market for a new desktop Mac and you like the idea of an all-in-one, the iMac M3 is easy to recommend because you get decent performance at pretty much everything but serious gaming and creative work in a package that costs under $2,000. </p><p>That&apos;s a better deal than paying over $2,000 to pair a Mac mini M2 ($799) with an Apple Studio Display ($1,599), which would be another way to build a desktop Mac setup that, as you can see from our testing, would deliver similar performance to the iMac M3.  </p><p>And that&apos;s why it&apos;s hard to heartily recommend existing iMac M1 users upgrade to this new M3 model: It&apos;s not that much faster or better, and it still has all the same weaknesses. It&apos;s disappointing that there&apos;s so little room to move the display on the stand, especially when so many competing Windows all-in-ones come with VESA mount brackets built in and offer more options to adjust display height, angle and tilt. And it just feels silly that you effectively have to pay Apple a $200 upcharge if you want one in purple.</p><p>But the extra ports and other amenities that come with it are worth it, and you do get what you pay for: a speedy Mac all-in-one that looks and sounds great, making it one of the <a href="https://www.tomsguide.com/us/best-all-in-one-printers,review-2026.htmlhttps://www.tomsguide.com/us/best-all-in-one-pc,review-2159.html">best all-in-one computers</a> of the year.</p><p><br></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iMac M3 vs iMac M1: Should you upgrade? ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/face-off/imac-m3-vs-imac-m1-should-you-upgrade</link>
                                                                            <description>
                            <![CDATA[ Now that Apple has announced the iMac M3, we compare it to the iMac M1 and determine whether or not you should upgrade. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">uCsuFZP7kScMsgrdkotLmX</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sokjZXzC7jZFyYcuUK6VaL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Nov 2023 09:30:52 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ http://cdn.mos.cms.futurecdn.net/XSDE2dchSuQdFVYcpTmqHi.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/sokjZXzC7jZFyYcuUK6VaL-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iMac M3 vs iMac M1]]></media:description>                                                            <media:text><![CDATA[iMac M3 vs iMac M1]]></media:text>
                                <media:title type="plain"><![CDATA[iMac M3 vs iMac M1]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sokjZXzC7jZFyYcuUK6VaL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>After missing the <a href="https://www.tomsguide.com/news/apple-m2-chip">Apple M2</a> party, the iMac is finally getting updated with the latest Apple silicon — in this case, the new <a href="https://www.tomsguide.com/news/apple-m3-chip">Apple M3 chip</a>. </p><p>While it looks identical to the <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">iMac 2021 (24-inch)</a> on the outside, the new processor on the inside should make it one of the <a href="https://www.tomsguide.com/us/best-all-in-one-pc,review-2159.html">best all-in-one computers</a>. But is that enough to justify upgrading?</p><p>With <a href="https://www.tomsguide.com/deals/where-to-buy-m3-imac">iMac M3 pre-orders now live</a>, we wanted to do an early comparison of the two iMacs to help you decide whether to upgrade. This is an interesting face-off considering how the only major difference is the devices’ respective internals. If you’ve thought about getting an iMac, the new model is an easy choice. However, if you’re content with the <a href="https://www.tomsguide.com/news/apple-m1-chip-everything-you-need-to-know-about-apple-silicon-macs">Apple M1</a> model from 2021, you might not need the new one.</p><p>We’ll update this story once we’ve reviewed the iMac M3, though you can check out our <a href="https://www.tomsguide.com/reviews/imac-m3-2023">iMac M3 2023 hands-on impressions</a> to hear our initial thoughts about the new all-in-one. For now, here’s how the iMac M3 and iMac M1 stack up against one another. Should you upgrade? Read on to find out.</p><h2 id="imac-m3-vs-imac-m1-specs">iMac M3 vs iMac M1: Specs</h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  >iMac M3</th><th  >iMac M1</th></tr></thead><tbody><tr><td class="firstcol " ><strong>Price</strong></td><td  >$1,299 to start</td><td  >$1,299 to start</td></tr><tr><td class="firstcol " ><strong>Display</strong></td><td  >24-inch Retina display, 4480 x 2520 w/ 218 ppi</td><td  >24-inch Retina display, 4480 x 2520 w/ 218 ppi</td></tr><tr><td class="firstcol " ><strong>CPU</strong></td><td  >Apple M3 (8-core w 8-core GPU)</td><td  >Apple M1 (8-core w/ 7-core GPU on $1,299 model, 8-core GPU otherwise)</td></tr><tr><td class="firstcol " ><strong>Memory</strong></td><td  >8GB / 24GB</td><td  >8GB / 16GB</td></tr><tr><td class="firstcol " ><strong>Storage</strong></td><td  >256GB / 512GB / 1TB / 2TB SSD</td><td  >256GB / 512GB / 1TB / 2TB SSD</td></tr><tr><td class="firstcol " ><strong>Ports</strong></td><td  >2 Thunderbolt 4 ports, headphone jack, configurable Gigabit Ethernet port ($1,299 model); 2 additional USB-C ports (other models)</td><td  >2 Thunderbolt 4 ports, headphone jack, configurable Gigabit Ethernet port ($1,299 model); 2 additional USB-C ports (other models)</td></tr><tr><td class="firstcol " ><strong>Dimensions</strong></td><td  >21.5 x 18.1 x 5.8 inches</td><td  >21.5 x 18.1 x 5.8 inches</td></tr><tr><td class="firstcol " ><strong>Weight</strong></td><td  >9.83 - 9.88 pounds</td><td  >9.83 - 9.88 pounds</td></tr></tbody></table></div><h2 id="imac-m3-vs-imac-m1-price-and-availability-xa0">iMac M3 vs iMac M1: Price and availability </h2><p>The iMac M3 is now available to pre-order for $1,299 from the online <a href="https://www.apple.com/us-edu/shop/buy-mac/imac" target="_blank" rel="nofollow">Apple Store</a>. For those keeping track, this price is identical to the iMac M1 when it launched. Shipments for the iMac M3 begin on November 7.</p><p>The base configuration of the iMac M3 sports a 24-inch 4.5K display, an 8-core GPU, 8GB RAM and a 256GB SSD. An upgraded model with a 10-core GPU, 8GB RAM and a 256GB SSD will also be available for $1,499. For $1,599, you can upgrade to a 512GB SSD. There are a generous selection of 7 color options to choose from.</p><h2 id="imac-m3-vs-imac-m1-design-xa0">iMac M3 vs iMac M1: Design </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4721px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="vPzx2WK5V4aJm3igi8ysY7" name="IMG_2447.jpg" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/vPzx2WK5V4aJm3igi8ysY7.jpg" mos="" align="middle" fullscreen="" width="4721" height="2656" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The new 24-inch iMac looks the same as its predecessor. As before, this all-in-one comes in 7 color options: Blue, Green, Pink, Silver, Yellow, Orange, Purple, though the latter three colors aren&apos;t available on the entry-level model. You can get color-matched accessories as well.</p><p>The flat rectangular chassis measures 0.45 inches thin and 14.75 inches tall from top edge to bottom lip. The iMac 2023 stands 18.1 inches tall with a hinge that lets you tilt the display slightly backward. There’s a hole in the stand to route the power cable through.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4289px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="3JDiYXbgFQ5ZFUrjPgAo7m" name="IMG_2611.JPG" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/3JDiYXbgFQ5ZFUrjPgAo7m.jpg" mos="" align="middle" fullscreen="" width="4289" height="2413" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Unfortunately, there is no vertical height adjustment. This won’t be an issue if you’re short like me. If you’re tall, you might have to place the iMac M3 on top of something to get it to ergonomic eye level. You were able to purchase the previous iMac with a built-in VESA mount adapter instead of a stand. At time of writing, we couldn’t find this option in the Apple store.</p><p>As before, the new iMac’s ports are almost all located along the bottom right-hand corner on the back of the display. Sure, this design choice keeps your cables hidden from view, but it might force you to turn the computer over to access the ports — unless you’re able to do so by touch alone.</p><p>The entry-level iMac only has two Thunderbolt 4 ports and a headphone jack, but higher-end models pack two Thunderbolt 4 ports and two USB 3 ports on the back, along with a headphone jack along the lower-left edge of the display and a Gigabit Ethernet port built into the power adapter.</p><h2 id="imac-m3-vs-imac-m1-display-xa0">iMac M3 vs iMac M1: 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:5362px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HiCVJF6VJyBa35UfvebrLf" name="IMG_2555.JPG" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/HiCVJF6VJyBa35UfvebrLf.jpg" mos="" align="middle" fullscreen="" width="5362" height="3016" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>If you guessed that the new iMac’s display was identical to the old model’s, you’d be correct.</p><p>The iMac M3’s 24-inch display delivers a sharp 4,480 x 2,520 resolution with 218 pixels per inch. It also supports the P3 wide color space and TrueTone — which adjusts the display’s color temperature based on the quality of ambient light.</p><p>A light gray bezel less than 0.75 inches thick surrounds the screen, along with a thicker 2.38-inch lip along the bottom that matches the iMac’s color. The display features the same anti-reflective coating applied to Apple’s Pro Display XDR monitor.</p><p>I got to check out the iMac M3 and found its display bright and colorful. Of course, we’ll need to run lab tests on Apple’s all-in-one to get objective metrics of what its display can do. That said, I don’t expect any major changes (or any at all) in our test results.</p><h2 id="imac-m3-vs-imac-m1-performance-xa0">iMac M3 vs iMac M1: 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:3430px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="rVQmGQTfWFfAzexujN3zYC" name="IMG_2607.JPG" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/rVQmGQTfWFfAzexujN3zYC.jpg" mos="" align="middle" fullscreen="" width="3430" height="1930" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Now let’s get to what’s different: internal components — namely the new M3 chip. Since we’ve yet to conduct our tests, we have to go by Apple’s numbers. But if what the company says about its latest M-series processor is accurate, there should be a noticeable difference between the iMac M3 and iMac M1 in terms of performance.</p><p>The iMac packs the same base M3 chip as the new <a href="https://www.tomsguide.com/news/macbook-pro-m3">MacBook Pro 14-inch M3</a>. Apple says the performance cores are up to 30% faster than on M1, while efficiency cores are up to 50% faster. The M3 line will have the same multi-core performance as M1 but use as little as half the power — up to 35% more performance at peak power, according to Apple.</p><p>The entry-level M3 chip features 25 billion transistors. This chip has a 10-core GPU that’s 65% faster than M1 for graphics performance, claims Apple. It also features an 8-core CPU (4 performance, 4 efficiency) that’s 35% faster than M1 for computing performance. The base M3 supports up to 24GB of unified memory.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2400px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Vps64VThyRSMReh8pAEMrC" name="Apple-M3-chip-series_screen.png" alt="Apple M3" src="https://cdn.mos.cms.futurecdn.net/Vps64VThyRSMReh8pAEMrC.png" mos="" align="middle" fullscreen="" width="2400" height="1350" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Apple is boasting about the M3 lineup’s enhanced GPU which has a new feature called Dynamic Caching. This allocates the use of local memory in hardware in real time and only uses the exact amount of memory needed for specific tasks. According to Apple, this feature is an industry first and will increase the performance of demanding applications and video games.</p><p>Hardware-accelerated ray tracing makes its debut on Mac thanks to the new M3 chips. The new GPU also brings hardware-accelerated mesh shading to Mac. This should all result in higher-quality graphics with more accurate lighting and detailed environments. Apple says the M3 GPU delivers the same performance as M1 at half the power — up to 65% more performance at its peak.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4837px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="B7LXyPDHqBjD2zE973qXX4" name="IMG_2461.JPG" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/B7LXyPDHqBjD2zE973qXX4.jpg" mos="" align="middle" fullscreen="" width="4837" height="2721" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I played <a href="https://www.tomsguide.com/opinion/baldurs-gate-3-is-a-love-letter-to-dungeons-and-dragons-and-its-all-i-want-to-play-right-now">Baldur’s Gate 3</a> on the iMac M3 and was impressed by the vibrant graphical detail — especially during cutscenes. Raytracing also made the fantastical environments appear realistic. I should also note that load times were reasonably fast. Games optimized for Apple silicon should run smoothly on the iMac M3.</p><p>In our iMac M1 review, we said the 24-inch all-in-one wasn’t built to deliver great performance in graphically demanding games. For example, Rise of the Tomb Raider, which was old even in 2021, ran at a pitiful 18.9 frames per second at 1080p and Very High settings on the iMac M1.</p><p>Again, we need to run the iMac M3 through our performance tests, but we expect a big leap from its M1 counterpart.</p><h2 id="imac-m3-vs-imac-m1-keyboard-and-mouse-xa0">iMac M3 vs iMac M1: Keyboard and mouse </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3868px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xUmY2agyGkSXvKt5Zxj7RN" name="IMG_2621.JPG" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/xUmY2agyGkSXvKt5Zxj7RN.jpg" mos="" align="middle" fullscreen="" width="3868" height="2176" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Lastly, we have the keyboard and mouse which, surprise surprise, are no different than before. This could be a negative or a positive, depending on your feelings for these peripherals.</p><p>The 24-inch iMac ships with Apple’s Magic Keyboard and a Magic Mouse. You’ll have to pay $50 if you’d prefer a Magic Touchpad over the mouse, or pay $129 to get both. The iMac M3 also comes with a TouchID-less Magic Keyboard, but you can pay an extra $50 to get the keyboard with TouchID support. For $80, you’ll get a keyboard with TouchID support and a number pad.</p><p>Both devices work well enough, though if you have big hands like me, you might find the keyboard a tad too cramped to comfortably type on for long periods. And since this is the same Magic Mouse, you’ll have to flip it over to charge it — making it useless when plugged in. But I’m not the first to complain about this design choice, so I&apos;ll stop ranting.</p><h2 id="imac-m3-vs-imac-m1-should-you-upgrade">iMac M3 vs iMac M1: Should you upgrade?</h2><p>It’s good to see the iMac receive an M3 spec bump. Though it’s still effectively the same product aesthetically, the performance boost M3 promises should still make it very enticing for those looking for a dependable all-in-one computer. If you’re new to Macs or own a pre-2021 iMac, upgrading to the iMac M3 is a no-brainer.</p><p>But the question remains: should you upgrade to an iMac M3 if you already own an iMac M1? If you mostly use computers for work and watching streaming videos, then the iMac M1 is still a capable machine that will probably last you for a few more years. However, if you need a beefier machine for video editing or high-end gaming, the iMac M3 would be a smart upgrade.</p><p>Again, we’ll update this post after we’ve reviewed the iMac M3 to give you a fuller understanding of what each machine has to offer. 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/reviews/macbook-pro-16-inch-m3-2023">MacBook Pro 16-inch (M3 Pro, 2023) hands-on</a></li><li><a href="https://www.tomsguide.com/news/macbook-pro-m3">New MacBook Pro M3 unveiled — here's what you get for $1,599</a></li><li><a href="https://www.tomsguide.com/opinion/m2-pro-macbook-pro-owners-dont-waste-your-money-on-m3-pro">Don’t waste your money on M3 Pro — here’s why</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ iMac M3 2023 hands-on: Early impressions of Apple's new all-in-one ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/reviews/imac-m3-2023</link>
                                                                            <description>
                            <![CDATA[ The refreshed iMac with the new M3 chip promises up to twice the performance of its predecessor in the same colorful package. Here are our first impressions of Apple's latest all-in-one. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">AHiJGEMXrup4GDGdnuNGGk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/xUmY2agyGkSXvKt5Zxj7RN-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 31 Oct 2023 17:24:41 +0000</pubDate>                                                                                                                                <updated>Tue, 31 Oct 2023 17:25:53 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                                    <dc:creator><![CDATA[ Kate Kozuch ]]></dc:creator>                                                                                    <dc:source><![CDATA[ http://cdn.mos.cms.futurecdn.net/xAVUdx6Qtp3SzugnnfNYsL.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Kate Kozuch is an editor at Tom’s Guide covering smartwatches and wearables. She also reviews TVs, tests fitness accessories and works on building the &lt;a href=&quot;https://www.tomsguide.com/reference/smart-home-guide&quot;&gt;ultimate DIY smart home&lt;/a&gt;. She has conducted over 100 different product reviews across these categories, turning her findings into buying guides and face-offs.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Kate has a strong on-camera presence as well. She has appeared on Cheddar and Fox 5 NY to talk trending tech news. She is also regularly featured on the Tom&#039;s Guide YouTube channel, runs the&amp;nbsp;&lt;a href=&quot;https://www.tiktok.com/@tomsguide?lang=en&quot;&gt;Tom&#039;s Guide TikTok account&lt;/a&gt; with over 150,000 followers, and features all the tech she&#039;s testing &lt;a href=&quot;https://www.instagram.com/katekozuch/&quot;&gt;on her Instagram&lt;/a&gt;. Yes, you should become one of them. When she’s not filming tech videos, you can find her on an exercise bike, mastering the NYT Crossword or channeling her inner celebrity chef.&amp;nbsp;Speaking of, be sure to ask her about the time Guy Fieri made her a margarita at CES.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
Kate joined Tom&#039;s Guide as an intern in 2019. She graduated from the S.I. Newhouse School of Public Communications at Syracuse University with a degree in magazine journalism and minor in information technology. There, she was editor-in-chief of the leading campus magazine, managing both digital and print teams. She&#039;s been blogging ever since she got her first iMac.&lt;/p&gt;
&lt;p&gt;&lt;br&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/xUmY2agyGkSXvKt5Zxj7RN-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iMac 2023]]></media:description>                                                            <media:text><![CDATA[iMac 2023]]></media:text>
                                <media:title type="plain"><![CDATA[iMac 2023]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/xUmY2agyGkSXvKt5Zxj7RN-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>You&apos;d be hard-pressed to tell the new 24-inch iMac 2023 apart from its 2021 predecessor, but rest assured, there are some big improvements under the hood.</p><p>The iMac 2023, announced during <a href="https://www.tomsguide.com/news/live/apple-october-event-live-m3-macbook-pro-m3-imac-and-more">Apple&apos;s Scary Fast October event</a>, packs the next-generation <a href="https://www.tomsguide.com/news/apple-m3-chip">Apple M3 chip</a>. Compared to the previous iMac&apos;s M1 processor, the iMac with M3 promises up to twice the speed and better performance across a variety of tasks. Apple claims this new iMac M3 is the best yet for gaming, too.</p><p>That said, the machine comes in a familiar package. It&apos;s once again available in a rainbow of color options, and you&apos;ll still find all the ports on the back. The starting $1,299 / AUS $2,199 also still has its limitations, but overall, the iMac 2023 is already positioned to be one of the <a href="https://www.tomsguide.com/us/best-all-in-one-printers,review-2026.htmlhttps://www.tomsguide.com/us/best-all-in-one-pc,review-2159.html">best all-in-one computers</a> of the year. </p><p>We&apos;ll need to conduct a full review before coming to our conclusions, so for now, here are our first impressions from going hands-on with the M3-powered iMac.</p><h2 class="article-body__section" id="section-imac-m3-2023-specs"><span>iMac M3 2023 specs</span></h2><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><strong>iMac M3 2023</strong></td></tr><tr><td class="firstcol " ><strong>Starting price</strong></td><td  >$1,299</td></tr><tr><td class="firstcol " ><strong>Colors</strong></td><td  >Blue, Green, Pink, Silver, Yellow, Orange, Purple</td></tr><tr><td class="firstcol " ><strong>CPU</strong></td><td  >8-core CPU</td></tr><tr><td class="firstcol " ><strong>GPU</strong></td><td  >8-core GPU (up to 10-core)</td></tr><tr><td class="firstcol " ><strong>Display</strong></td><td  >24 inches (4480 x 2520)</td></tr><tr><td class="firstcol " ><strong>Memory</strong></td><td  >8GB (configurable to 16GB or 24GB)</td></tr><tr><td class="firstcol " ><strong>Storage</strong></td><td  >256GB (configurable up to 2TB)</td></tr><tr><td class="firstcol " ><strong>Ports</strong></td><td  >2x Thunderbolt / USB-4, 3.5mm headphone jack, Gigabit Ethernet (optional)</td></tr><tr><td class="firstcol " ><strong>Webcam</strong></td><td  >1080p</td></tr><tr><td class="firstcol " ><strong>Size</strong></td><td  >21.5 x 18.1 x 5.8 inches</td></tr><tr><td class="firstcol " ><strong>Weight</strong></td><td  >9.75 - 9.87 pounds</td></tr></tbody></table></div><h2 class="article-body__section" id="section-imac-m3-2023-price-and-availability"><span>iMac M3 2023 price and availability</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4721px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="vPzx2WK5V4aJm3igi8ysY7" name="IMG_2447.jpg" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/vPzx2WK5V4aJm3igi8ysY7.jpg" mos="" align="middle" fullscreen="" width="4721" height="2656" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The iMac M3 2023 is available for pre-order now, with full availability on Tuesday, November 7. <a href="https://www.tomsguide.com/deals/where-to-buy-m3-imac">Here’s where you can buy it now</a>.</p><p>You&apos;ll pay the same price as you did for the iMac with M1. For the $1,299 / AU$2,199 starting price, you&apos;ll get the base model with 8-core GPU, 8GB RAM and a 256GB SSD. For $1,499 / AU$2,499, you can get the model with a 10-core GPU. You can pay an additional premium a machine with 512GB SSD, too. </p><h2 class="article-body__section" id="section-imac-m3-2023-design-and-display"><span>iMac M3 2023 design and display</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5362px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HiCVJF6VJyBa35UfvebrLf" name="IMG_2555.JPG" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/HiCVJF6VJyBa35UfvebrLf.jpg" mos="" align="middle" fullscreen="" width="5362" height="3016" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Whereas the previous-gen iMac received a major redesign, this 24-inch iMac looks the same — it even comes with the same coats of paint. The machine comes in 7 color options: Blue, Green, Pink, Silver, Yellow, Orange, Purple, though once again the latter three colors aren&apos;t available on the entry-level model. You&apos;re still able to pick up color-matched accessories, too. </p><p>The flat rectangular chassis measures about 0.45 inches thin and 14.75 inches tall from top edge to bottom lip. Lacking any vertical height adjustment, the iMac 2023 stands 18.1 inches tall with a hinge that lets you tilt the display slightly backwards if needed.</p><p><br></p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4289px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="3JDiYXbgFQ5ZFUrjPgAo7m" name="IMG_2611.JPG" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/3JDiYXbgFQ5ZFUrjPgAo7m.jpg" mos="" align="middle" fullscreen="" width="4289" height="2413" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Speaking of the display, you&apos;ll find the same 24-inch 4.5K Retina panel with 500-nits of brightness. It also has the same 1080p FaceTime camera up top, the same port selection, and the same power cord that feeds through the machine&apos;s stand. Are you seeing the theme here?</p><h2 class="article-body__section" id="section-imac-m3-2023-performance"><span>iMac M3 2023 performance</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4837px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="B7LXyPDHqBjD2zE973qXX4" name="IMG_2461.JPG" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/B7LXyPDHqBjD2zE973qXX4.jpg" mos="" align="middle" fullscreen="" width="4837" height="2721" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>While the iMac 2023 might not look like anything new, performance should feel entirely fresh thanks to the M3 chip and 8-core CPU/10-core GPU. Unlike the MacBook Pro family, the iMac skipped over the M2 chip. As a result, the iMac 2023 should feel plenty more powerful compared the machine powered by M1. In fact, Apple claims that the iMac with M3 is twice as fast as the iMac with M1.</p><p>Not only does Apple silicon promise a fulfilling macOS experience with integrations across Apple&apos;s product ecosystem, but it should improve use across a variety of needs. The 16-core Neural Engine built on the chip is apparently 60% faster than it was on M1, resulting in improved on-device AI processing. The M3 processor also has a new Media Engine that provides hardware acceleration for video codecs like H.264, HEVC, ProRes and ProRes RAW, as well as support for AV1 decoding.</p><p>But what I&apos;m perhaps most excited about is the gaming performance made possible by M3. Just like the <a href="https://www.tomsguide.com/news/a17-pro">A17 Pro</a> found on the iPhone 15 Pro, the M3 supports accelerated ray tracing, letting games have more realistic lighting based on the environments. I demoed Stray on the new iMac, and thought the neon-lit alleys looked incredibly nuanced. With the M3, there&apos;s probably never been a better time to try out Mac gaming. </p><p><br></p><h3 class="article-body__section" id="section-imac-m3-2023-outlook"><span>iMac M3 2023 outlook</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3430px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="rVQmGQTfWFfAzexujN3zYC" name="IMG_2607.JPG" alt="iMac 2023" src="https://cdn.mos.cms.futurecdn.net/rVQmGQTfWFfAzexujN3zYC.jpg" mos="" align="middle" fullscreen="" width="3430" height="1930" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Although the iMac M3 2023 might not seem revolutionary at a glance, it refreshes a popular all-in-one computer with some impressive-sounding performance upgrades. The new M3 silicon seems to offer improvements for all kinds of users, whether they be students, small business owners and even gamers. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 5 things we didn’t see at Apple’s Scary Fast event ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/news/5-things-we-didnt-see-at-apples-scary-fast-event</link>
                                                                            <description>
                            <![CDATA[ Yes, we saw new MacBook Pros and a refreshed 24-inch iMac, but it feels like there were a few missed opportunities here for Apple. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">XNR2nomU6enCp2myW5nHdG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/mvfqMdpacfMXkpmV7Y4U4E-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Tue, 31 Oct 2023 10:21:14 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alan Martin  ]]></dc:creator>                                                                                    <dc:source><![CDATA[ http://cdn.mos.cms.futurecdn.net/xMmhmPSssqZHHFWveDgSs7.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/mvfqMdpacfMXkpmV7Y4U4E-1280-80.png">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple October Event]]></media:description>                                                            <media:text><![CDATA[Apple October Event]]></media:text>
                                <media:title type="plain"><![CDATA[Apple October Event]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/mvfqMdpacfMXkpmV7Y4U4E-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>What will almost certainly be Apple’s last event of 2024 has been and gone, but it left a lot of question marks.</p><p>Yes, the ‘Scary Fast’ event <a href="https://www.tomsguide.com/news/live/apple-october-event-live-m3-macbook-pro-m3-imac-and-more">wasn’t short on announcements</a>, given we got three different <a href="https://www.tomsguide.com/news/apple-m3-chip">M3 chips</a> powering three different computers. But despite this, it feels like there were a few big missed opportunities for Apple. </p><p>Here are the five main things we missed, and the prospects of them coming in the next 12 months.</p><h2 id="1-32-inch-imac">1. 32-inch iMac</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5472px;"><p class="vanilla-image-block" style="padding-top:56.29%;"><img id="zeMc5fK7HKfiqSBEYDibZa" name="DSC01073.JPG" alt="The 27-inch iMac (2020)" src="https://cdn.mos.cms.futurecdn.net/zeMc5fK7HKfiqSBEYDibZa.jpg" mos="" align="middle" fullscreen="" width="5472" height="3080" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>It’s great that Apple hasn’t forgotten the iMac. The colorful 24-inch model was well overdue for a refresh, as it was still pootling along with its first-generation M1 chipset. The move to M3 will, Apple says, <a href="https://www.tomsguide.com/news/imac-m3-unveiled-up-to-2x-faster-and-good-enough-for-gaming">offer double the speed for buyers keen to make the upgrade</a>.</p><p>But you know what’s even more overdue for an upgrade? The <a href="https://www.tomsguide.com/news/apple-kills-27-inch-imac-as-apple-silicon-takes-over">discontinued 27-inch iMac</a>. For plenty of people, a 24-inch screen on an all-in-one computer simply doesn’t cut it, and they’re crying out for something bigger.</p><p>That will be coming in time, according to Bloomberg’s Mark Gurman. Earlier this month he wrote that <a href="https://www.tomsguide.com/news/apple-reportedly-working-on-a-new-32-inch-imac-heres-what-we-know">a 32-inch model is on Apple’s roadmap at some point after the 24-inch iMac refresh</a>, so hopefully we’ll see a big-screen iMac land before 2024 is out. Though the analyst Ming-Chi Kuo reckons we <a href="https://www.tomsguide.com/news/32-inch-imac-with-mini-led-display-tipped-to-arrive-in-2025-and-itll-be-expensive">might be looking at 2025</a>.</p><h2 id="2-m3-mac-mini">2. M3 Mac 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="biKhha8EC3vCZMrEkoCGJH" name="Mac mini M2 2023.jpg" alt="Apple Mac mini M2 on a desk, plugged in" src="https://cdn.mos.cms.futurecdn.net/biKhha8EC3vCZMrEkoCGJH.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One way Apple could have satisfied users who like a big-screen experience would be with a refreshed Mac mini. The dinky desktop doesn’t come with a screen, meaning you can plug it into anything via HDMI.</p><p>But it was a no-show. One <a href="https://www.tomsguide.com/news/new-apple-mac-mini-m3-reportedly-on-the-way-heres-what-we-know">appeared to be in testing back in August</a>, so it’s something of a mystery as to why Apple didn’t think the time was right for it to make its debut. Perhaps the company didn’t want to overshadow the return of the iMac.</p><p>In any case, this will no doubt come before 2024 is out, which makes it tough to recommend buying the current <a href="https://www.tomsguide.com/reviews/mac-mini-m2">M2 Mac mini</a> for the moment, unless you see a phenomenally good deal.</p><h2 id="3-ipad-mini">3. 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="qMJ5bQJaE9Cy67y8d3vuXC" name="TG_iPad-mini.jpg" alt="The iPad mini 2021" src="https://cdn.mos.cms.futurecdn.net/qMJ5bQJaE9Cy67y8d3vuXC.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Henry T. Casey)</span></figcaption></figure><p>Apple’s non-Pro iPads are supposedly nearly ready to emerge, but for some reason <a href="https://www.tomsguide.com/news/new-ipads-slated-for-march-2024-everything-we-know">Apple has apparently pushed them into 2024</a>.</p><p>To be clear, they were always a long shot for the ‘Scary Fast’ event, which Apple had made pretty clear was a Mac-focused affair. </p><p>But with an iPad mini battery <a href="https://www.tomsguide.com/news/ipad-mini-could-appear-at-todays-apple-event-after-all-heres-why">showing up in a Chinese regulatory listing alongside things that <em>did </em>end up appearing</a>, fans of tiny tablets were hoping for a ‘one more thing’ style reveal that didn’t come.</p><h2 id="4-usb-c-accessories">4. USB-C 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="rMv8VjAqTLwSFAVqjzJXDk" name="shutterstock_1919745620.jpg" alt="USB-C and Lightning charging cables for phone on black background" src="https://cdn.mos.cms.futurecdn.net/rMv8VjAqTLwSFAVqjzJXDk.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ivan Shenets | Shutterstock)</span></figcaption></figure><p>With Apple’s (<a href="https://www.tomsguide.com/news/rip-lightning-apple-will-be-forced-to-use-usb-c-on-iphones-in-2024">forced</a>) decision to abandon Lightning cable in favor of USB-C on the <a href="https://www.tomsguide.com/reviews/apple-iphone-15">iPhone 15</a>, it seemed likely that the <a href="https://www.tomsguide.com/news/imac-2023">24-inch M3 iMac</a> would arrive with USB-C accessories to match. Indeed, <a href="https://www.tomsguide.com/news/usb-c-magic-mouse-expected-at-apple-event-but-no-word-on-port-placement">Bloomberg’s Mark Gurman predicted it</a>.</p><p>It didn’t happen. Instead, the new Mac’s accessories will arrive with the same Lightning ports as before. </p><p>That’s surprising, but there’s a very real time limit on this. The European Union has mandated USB-C as the standardized connector, with all new products requiring the port by the end of 2024. Yes, Apple could keep Lightning outside of Europe — but it won’t. It just doesn’t make sense financially to build different ports on the same device.</p><h2 id="5-magic-mouse-with-a-sensibly-placed-charging-port">5. Magic Mouse with a sensibly placed charging port</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q44pynfkvEEswHB7myjahV" name="Apple Magic Mouse charging.jpg" alt="Apple Magic Mouse" src="https://cdn.mos.cms.futurecdn.net/Q44pynfkvEEswHB7myjahV.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Many people thought Apple would take advantage of the switch to USB-C to do away with one of its most baffling design decisions of all time: putting the Lightning port on the bottom of its Magic Mouse. </p><p>As users have frequently pointed out, this placement may look neat, but it means you can’t use the mouse while it’s charging, which is just impractical.</p><p>No refreshed USB-C Magic Mouse means the port continues to live in its current position. If that’s disappointing to you, be sure to read our list of the <a href="https://www.tomsguide.com/best-picks/best-mouse">best mice</a> to find a quality alternative for your Mac.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Where to buy the new M3 iMac — pre-orders open right now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/deals/where-to-buy-m3-imac</link>
                                                                            <description>
                            <![CDATA[ The new M3 iMac is now available for pre-order — here's how to score yours ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">vN5NQqmdMoJFP4FMEwa6gd</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/BTFWGo4tHpzq5AABGL8TFT-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Tue, 31 Oct 2023 00:30:36 +0000</pubDate>                                                                                                                                <updated>Wed, 01 Nov 2023 16:05:10 +0000</updated>
                                                                                                                                            <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ millie.daviswilliams@futurenet.com (Millie Davis-Williams) ]]></author>                    <dc:creator><![CDATA[ Millie Davis-Williams ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/WU6pa7hKuxs5ScCoqcXYWA.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Millie is a Deals Writer at Tom&#039;s Guide specializing in tech deals content. Based in London, Millie has spent a lifetime stubbornly refusing to pay full price on any possible purchase. She has years of searching for the best discounts on the latest and greatest phones, TVs and gadgets under her belt, and knows how to sort the best deals from the rest. Helping readers save on the products they want is her mission, whether it’s an Apple Watch or a new tablet.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Since working at Tom’s Guide, Millie has covered retail events like Prime Day, Black Friday and Cyber Monday extensively, meaning she knows the products readers are looking for and the best times of year to hit “purchase.”&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;When she’s not looking for discounts, Millie covers news and writes how-to articles about everything from phones, streaming devices, and headphones to apps and video games. Armed with an extensive knowledge of her family’s vinyl collection, Millie also provides hints for daily music game Heardle to readers.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;In her spare time, Millie enjoys reading, gaming on her Nintendo Switch and creating digital art. She’s also a fan of watching Disney movies and collecting plush (the latter having totally taken over her bedroom.)&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/BTFWGo4tHpzq5AABGL8TFT-1280-80.png">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[M3 iMac]]></media:description>                                                            <media:text><![CDATA[M3 iMac]]></media:text>
                                <media:title type="plain"><![CDATA[M3 iMac]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/BTFWGo4tHpzq5AABGL8TFT-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>In case you missed the recent <a href="https://www.tomsguide.com/news/apple-october-event-2023">Apple Event</a>, a new iMac has been announced — and it&apos;s better than ever. Apple&apos;s latest all-in-one computer is already out for pre-orders, so make sure to snag yours now.</p><p>The new M3 iMac is set for release on Tuesday, November 7. According to Apple, it can perform up to 2x faster than the <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">M1 iMac (2021)</a> thanks to its more powerful M3 chip. The M3 iMac has also had a boost to its gaming capabilities — since the M3 chip has hardware accelerated ray tracing for AAA games.</p><p>The base configuration of the iMac sports a 24-inch 4.5K display, an 8-core GPU, 8GB RAM and a 256GB SSD and starts at $1,299. An upgraded model with a 10-core GPU, 8GB RAM and a 256GB SSD will also be available for $1,499. There are a generous selection of 7 color options to choose from.</p><p>The <a href="https://www.apple.com/shop/buy-mac/imac" target="_blank" rel="nofollow">M3 iMac preorder</a> is now up for grabs at the Apple Store. If you&apos;re interested in picking up some other Apple goodies, check out our <a href="https://www.tomsguide.com/deals/apple-black-friday-deals-2022">Black Friday Apple sales</a> coverage.</p><h3 class="article-body__section" id="section-where-to-buy-m3-imac-us"><span>Where to buy M3 iMac (US)</span></h3><div class="product"><a data-dimension112="4f65c7b1-d2e6-4da1-b3c1-48675d56fa27" data-action="Deal Block" data-label="iMac 24-inch (M3): $1,299 @ Best Buy" data-dimension48="iMac 24-inch (M3): $1,299 @ Best Buy" href="https://www.bestbuy.com/site/apple-imac-24-all-in-one-m3-chip-8gb-memory-256gb-latest-model-silver/6534276.p" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="kwTe2hwGe7jEYsxBUTJ48c" name="M3 iMac square.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kwTe2hwGe7jEYsxBUTJ48c.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>iMac 24-inch (M3): </strong><a href="https://www.bestbuy.com/site/apple-imac-24-all-in-one-m3-chip-8gb-memory-256gb-latest-model-silver/6534276.p" target="_blank" rel="nofollow" data-dimension112="4f65c7b1-d2e6-4da1-b3c1-48675d56fa27" data-action="Deal Block" data-label="iMac 24-inch (M3): $1,299 @ Best Buy" data-dimension48="iMac 24-inch (M3): $1,299 @ Best Buy"><strong>$1,299 @ Best Buy</strong></a><strong><br></strong>The new M3 iMac is now available for pre-order at Best Buy. This all-in-one computer sports a 24-inch 4.5K display and a new M3 chip, making it up to 2x faster than the previous iMac. The basic configuration comes with an 8-core GPU, 8GB RAM and a 256GB SSD.<a class="view-deal button" href="https://www.bestbuy.com/site/apple-imac-24-all-in-one-m3-chip-8gb-memory-256gb-latest-model-silver/6534276.p" target="_blank" rel="nofollow" data-dimension112="4f65c7b1-d2e6-4da1-b3c1-48675d56fa27" data-action="Deal Block" data-label="iMac 24-inch (M3): $1,299 @ Best Buy" data-dimension48="iMac 24-inch (M3): $1,299 @ Best Buy">View Deal</a></p></div><h3 class="article-body__section" id="section-where-to-buy-m3-imac-uk"><span>Where to buy M3 iMac (UK)</span></h3><div class="product"><a data-dimension112="35f94c28-cac3-44c7-b020-1f2798bf9bba" data-action="Deal Block" data-label="iMac 24-inch (M3): £1,399 @ Box.co.uk" data-dimension48="iMac 24-inch (M3): £1,399 @ Box.co.uk" href="https://www.box.co.uk/Apple-iMac-M3-Chip-8GB-RAM-256GB-SSD-8-C_4918623.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="kwTe2hwGe7jEYsxBUTJ48c" name="M3 iMac square.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kwTe2hwGe7jEYsxBUTJ48c.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>iMac 24-inch (M3): </strong><a href="https://www.box.co.uk/Apple-iMac-M3-Chip-8GB-RAM-256GB-SSD-8-C_4918623.html" target="_blank" rel="nofollow" data-dimension112="35f94c28-cac3-44c7-b020-1f2798bf9bba" data-action="Deal Block" data-label="iMac 24-inch (M3): £1,399 @ Box.co.uk" data-dimension48="iMac 24-inch (M3): £1,399 @ Box.co.uk"><strong>£1,399 @ Box.co.uk</strong></a><strong><br></strong>The new M3 iMac is now available for pre-order at Box.co.uk. This all-in-one computer sports a 24-inch 4.5K display and a new M3 chip, making it up to 2x faster than the previous iMac. The basic configuration comes with an 8-core GPU, 8GB RAM and a 256GB SSD.<a class="view-deal button" href="https://www.box.co.uk/Apple-iMac-M3-Chip-8GB-RAM-256GB-SSD-8-C_4918623.html" target="_blank" rel="nofollow" data-dimension112="35f94c28-cac3-44c7-b020-1f2798bf9bba" data-action="Deal Block" data-label="iMac 24-inch (M3): £1,399 @ Box.co.uk" data-dimension48="iMac 24-inch (M3): £1,399 @ Box.co.uk">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple reportedly working on a new 32-inch iMac — here's what we know ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/news/apple-reportedly-working-on-a-new-32-inch-imac-heres-what-we-know</link>
                                                                            <description>
                            <![CDATA[ The 24-inch iMac will finally get its bigger brother back in late 2024 or 2025 according to Bloomberg’s Mark Gurman. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VoeQ79JRi5v2QfcELY5GtK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QaTth2qAZeKrrhWXatE8cY-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 23 Oct 2023 09:43:30 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alan Martin  ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xMmhmPSssqZHHFWveDgSs7.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/QaTth2qAZeKrrhWXatE8cY-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The 27-inch iMac (2020) is no longer sold]]></media:description>                                                            <media:text><![CDATA[The 27-inch iMac (2020) is no longer sold]]></media:text>
                                <media:title type="plain"><![CDATA[The 27-inch iMac (2020) is no longer sold]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QaTth2qAZeKrrhWXatE8cY-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When Apple launched its colorful range of <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">24-inch iMacs</a> to replace the silver 21.5-inch version in April 2021, most people assumed that the 27-inch iMac would soon be getting the same stylish makeover and introduction of Apple Silicon.</p><p>Nearly 30 months later, and that still hasn’t happened. Apple has merely <a href="https://www.tomsguide.com/news/apple-kills-27-inch-imac-as-apple-silicon-takes-over">discontinued both the Intel-powered 27-inch iMacs</a> and <a href="https://www.tomsguide.com/news/apple-discontinues-imac-pro-ahead-of-imac-2021-launch">iMac Pros</a> without offering a direct replacement, leaving big-screen fans despondent.</p><p>So there’s good and bad news in the latest <a href="https://www.bloomberg.com/news/newsletters/2023-10-22/what-is-apple-doing-in-ai-revamping-siri-search-apple-music-and-other-apps-lo1ffr7p" target="_blank">Power On newsletter</a> from Bloomberg’s Mark Gurman. The good news is that Apple hasn’t forgotten about the big-screen iMac fans out there. The bad news is that there’s still quite a wait ahead of them.</p><p>“This larger model is still poised to follow the 24-inch one, coming in either late 2024 or 2025,” Gurman writes. “It will have a 32-inch display, making it the biggest iMac in Apple’s history.”</p><p>Yes, 32 inches — an 18.5% increase in screen real estate. But given the chunky bezels that adorned the 27-inch iMac, the actual footprint might not be all that different. After all, the 24-inch iMac isn’t all that different to its 21.5-inch predecessor, and considerably thinner: 18.1 x 21.5 x 5.8 inches (24-inch model) vs 17.7 x 20.8 x 6.9 inches (21.5-inch version). </p><p>Assuming the basic design remains the same, you can expect a substantial chin on the screen, however, as the picture below shows.</p><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="yPHhzXonXV5cgW4ojXN4jL" name="shutterstock_2127724169.jpg" alt="A yellow iMac on a wooden desk with Bluetooth peripherals beside it" src="https://cdn.mos.cms.futurecdn.net/yPHhzXonXV5cgW4ojXN4jL.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Pickaxe Media / Shutterstock)</span></figcaption></figure><h2 id="why-the-long-wait">Why the long wait?</h2><p>By the time the new iMac rolls around, it could be more than four years since the colorful 24-inch version arrived, which begs one simple question: why such a long gap?</p><p>According to Gurman, that wasn’t the plan. “Apple had aimed to release a larger, pro-focused iMac soon after the 24-inch iMac launched,” he writes. “Under the original road map, you would have seen the M1 24-inch iMac, then an M2-based iMac Pro and, finally, a 24-inch iMac refresh.”</p><p>The iMac Pro didn’t arrive “due to cost concerns”, which is apparently why Apple introduced the <a href="https://www.tomsguide.com/reviews/mac-studio">Mac Studio</a> and <a href="https://www.tomsguide.com/reviews/apple-studio-display">Studio Display</a> to give high-end desktop users something to tide them over.</p><p>Gurman refers to this upcoming all-in-one computer as an iMac Pro rather than a larger iMac, and that might be reflected in the pricing, of course. While Apple’s <a href="https://www.tomsguide.com/reviews/apple-imac-27-inch-2020">last 27-inch iMac</a> started at $1,799, the cheapest <a href="https://www.tomsguide.com/us/apple-imac-pro,review-5304.html">iMac Pro</a> configuration came in at $4,999. For comparison, the cheapest Mac Studio and Studio Display bundle would set you back $3,598, so it’s possible we’ll split the difference.</p><p>Hopefully Apple will have configurations available for all its customers — from those who just want a cheap(ish) big-screen experience, to those who want a <a href="https://www.tomsguide.com/news/macbook-pro-m3-max-could-be-most-powerful-apple-laptop-ever-with-40-gpu-cores">ludicrous number of cores</a>. We’ll hopefully find out late next year.</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/apple-could-be-working-on-a-32-inch-imac-and-i-want-one-already">Apple could be working on a 32-inch iMac — and I want one</a></li><li><a href="https://www.tomsguide.com/news/m3-macbook-pro-and-macbook-air-tipped-for-2024-heres-what-we-know">M3 MacBook Pro and MacBook Air tipped for 2024</a></li><li><a href="https://www.tomsguide.com/news/ipad-mini-7-and-ipad-air-6-could-arrive-this-week-what-we-know">iPad mini 7 and iPad Air 6 could arrive this week</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 32-inch iMac with mini LED display tipped to arrive in 2025 — and it’ll be expensive ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/news/32-inch-imac-with-mini-led-display-tipped-to-arrive-in-2025-and-itll-be-expensive</link>
                                                                            <description>
                            <![CDATA[ Apple could be working on several new iMac upgrades for 2024 and beyond, according to analyst predictions. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">YBizxSFpYqzKKjao7d9UDG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/tNjUmNca5pxS38e7X8ec38-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 18 Oct 2023 09:23:21 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></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.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jeff is UK Editor-in-Chief for Tom’s Guide looking after the day-to-day output of the site’s British contingent. Rising early and heading straight for the coffee machine, Jeff loves nothing more than dialing into the zeitgeist of the day’s tech news and poring over the latest technical details to discover the best features of the newest products. A tech journalist for over a decade, he has traveled around the world testing and reviewing any gadget he can get his hands on.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team at Tom’s Guide, Jeff covered technology and science for two of the UK’s biggest news sites: Metro.co.uk and the Daily Mirror, producing podcasts, videos and weekly columns on all things tech. Memorable moments include getting lost in Vienna in an electric Audi, touring Lockheed Martin’s mile-long fighter jet factory in Fort Worth and filming a Netflix documentary about Elon Musk in West London.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&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 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/tNjUmNca5pxS38e7X8ec38-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iMac 2021]]></media:description>                                                            <media:text><![CDATA[Apple iMac 2021]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iMac 2021]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/tNjUmNca5pxS38e7X8ec38-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Rumors are hotting up that Apple is <a href="https://www.tomsguide.com/news/new-imac-rumored-to-pack-m2-and-m2-pro-chips-heres-what-we-know">preparing to refresh its 24-inch iMac with M2 and M2 Pro chips</a>. But anyone hoping for a speedy reveal of the new machines may have longer to wait than we originally thought. According to Apple analyst Ming-Chi Kuo, any refresh to the 24-inch iMac line will happen next year in 2024. So much for a 2023 refresh alongside <a href="https://www.tomsguide.com/news/ipad-mini-7-and-ipad-air-6-could-arrive-this-week-what-we-know">hotly-tipped iPad mini 7 and iPad Air 6</a>, then.</p><p>Kuo, a supply-chain analyst with a strong track record in predicting Apple’s movements, also believes Apple will release a higher-end 32-inch iMac with a mini LED display in 2025. Given Apple’s current 32-inch Pro Display XDR with mini LED costs $5k, this new iMac will surely be for those with deep pockets. We’re well past <a href="https://www.tomsguide.com/news/apples-vision-pro-headset-will-cost-dollar3499-and-everybody-had-the-same-reaction">Apple Vision Pro territory here</a>. </p><div class="see-more see-more--clipped"><blockquote class="twitter-tweet hawk-ignore" data-lang="en"><p lang="en" dir="ltr">New iMac prediction update:1. 24-inch iMac refresh in 2024.2. Higher-end 32-inch mini LED display iMac in 2025. https://t.co/l7jzEecwZi<a href="https://twitter.com/mingchikuo/status/1714350456565350625">October 17, 2023</a></p></blockquote><div class="see-more__filter"></div></div><p>Kuo’s prediction follows on from his correct analysis that Apple would refresh the Mac Pro and Mac mini this year. Earlier this week, it was reported that more powerful configurations of the current M1 iMac are facing delayed shipments. Customers ordering increased SSD and RAM are being forced until November to reveal their product. Which, some have speculated, could be a sign Apple is preparing for a hardware refresh.</p><p>Separately, other rumors have suggested Apple would skip the M2 chip for the iMac and would instead simply <a href="https://www.tomsguide.com/news/new-imac-tipped-to-launch-late-2023-with-m3-power">go with a new M3</a>. Seeing as the M2 chip launched last summer alongside the MacBook Air M2, it would make sense for the M3 chip to debut in a new iMac 12 months later.</p><p>"I haven&apos;t seen anything to indicate there will be a new iMac until the M3 chip generation, which won&apos;t arrive until the tail end of this year at the earliest or next year," wrote Bloomberg’s Mark Gurman, back in February 2023. "So if you want to stick with the iMac, you&apos;ll just have to sit tight."</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:42.85%;"><img id="7hq8LosjChoWg3pzCuqezb" name="TG_iMac_2021_HERO-2.jpg" alt="Apple iMac 24-inch" src="https://cdn.mos.cms.futurecdn.net/7hq8LosjChoWg3pzCuqezb.jpg" mos="" align="middle" fullscreen="" width="2000" height="857" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>We’ve covered all the latest updates on a possible M3 iMac in <a href="https://www.tomsguide.com/news/imac-2023"><u>our hub page here</u></a>, but for now it seems like Kuo has the inside track on a 24-inch revision with M2 and M2 Pro and we shouldn’t get our hopes up until the new year. </p><p>As my colleague Tony Polanco <a href="https://www.tomsguide.com/news/new-imac-rumored-to-pack-m2-and-m2-pro-chips-heres-what-we-know">put it</a>, none of this information is official yet, so it’s best to take it with a pinch of salt. While it would make far more sense for Apple to wait and release an M2 iMac, the M2 and M2 Pro chips are still plenty powerful. So we’ll have to wait and see what ends up coming out of Cupertino in the months ahead.</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/apple-could-be-working-on-a-32-inch-imac-and-i-want-one-already">Apple could be working on a 32-inch iMac — and I want one</a></li><li><a href="https://www.tomsguide.com/news/m3-macbook-pro-and-macbook-air-tipped-for-2024-heres-what-we-know">M3 MacBook Pro and MacBook Air tipped for 2024</a></li><li><a href="https://www.tomsguide.com/news/ipad-mini-7-and-ipad-air-6-could-arrive-this-week-what-we-know">iPad mini 7 and iPad Air 6 could arrive this week</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ New iMac rumored to pack M2 and M2 Pro chips — here’s what we know ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/news/new-imac-rumored-to-pack-m2-and-m2-pro-chips-heres-what-we-know</link>
                                                                            <description>
                            <![CDATA[ A new rumor suggests Apple will launch an M2 and M2 Pro iMac, but what about M3? Here's what we know. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CrENFeQLHajoEpYWKwzNJH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Ks6KtG9fx9soz6ddidT9iY-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 17 Oct 2023 14:27:22 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ http://cdn.mos.cms.futurecdn.net/XSDE2dchSuQdFVYcpTmqHi.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/Ks6KtG9fx9soz6ddidT9iY-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple iMac 24-inch]]></media:description>                                                            <media:text><![CDATA[Apple iMac 24-inch]]></media:text>
                                <media:title type="plain"><![CDATA[Apple iMac 24-inch]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Ks6KtG9fx9soz6ddidT9iY-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The all-in-one 24-inch <a href="https://www.tomsguide.com/reviews/apple-imac-24-inch-review-beauty-and-brawn-in-one-slim-package">iMac</a> with an <a href="https://www.tomsguide.com/news/apple-m1-chip-everything-you-need-to-know-about-apple-silicon-macs">Apple M1 chip</a> is one of the few Apple computers that hasn’t been upgraded with the latest M-series chips. We’ve heard rumors about the next iMac for some time, and it’s more than likely Apple will eventually upgrade this particular Mac. However, if a new rumor is accurate, the upcoming iMac will receive an update — but it’s not the one we expected.</p><p>According to Japanese Apple blog <a href="https://www.macotakara.jp/macintosh/entry-45460.html" target="_blank"><u>MacOtakara</u></a> (via <a href="https://9to5mac.com/2023/10/13/m2-imac-rumor/" target="_blank">9to5Mac</a>), more powerful configurations of the existing M1 iMac are seeing delayed shipments — with those who’ve increased SSD and RAM being forced to wait until November to receive their computer. The blog, which 9to5Mac says is well-sourced when it comes to hardware rumors, believes these delayed shipments could signal that Apple is preparing for a hardware refresh.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2768px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WbopJqeGmdrtcLqT2r8eYe" name="TG_iMac-2021_color-1.jpg" alt="iMac 2021" src="https://cdn.mos.cms.futurecdn.net/WbopJqeGmdrtcLqT2r8eYe.jpg" mos="" align="middle" fullscreen="" width="2768" height="1557" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>Here’s where things get interesting. According to MacOtakara, Apple will apparently upgrade the iMac with <a href="https://www.tomsguide.com/news/apple-m2-chip">Apple M2</a> and <a href="https://www.tomsguide.com/news/apple-m2-pro">Apple M2 Pro</a> models.</p><p>This hardware update would’ve made sense a year ago when the Apple M2 chip debuted, or even earlier this year when the M2 Pro and <a href="https://www.tomsguide.com/news/m2-max">Apple M2 Max</a> chips arrived. However, reports suggest that <a href="https://www.tomsguide.com/news/apple-m3-chip">Apple M3</a> processors could launch as soon as the first half of 2024. If all these rumors are true, then an M2 iMac — while more powerful than its M1-driven predecessor — would have an older processor when Macs with the M3 chip launch.</p><h2 id="outlook-xa0">Outlook </h2><p>To be fair, none of what we’ve reported above has been substantiated so it’s best to take it all with a dose of skepticism. It’s also important to note that delayed shipments don’t always indicate an imminent hardware refresh. As 9to5Mac points out, the current <a href="https://www.tomsguide.com/reviews/macbook-pro-14-inch-2023">MacBook Pro 14-inch</a> and <a href="https://www.tomsguide.com/reviews/macbook-pro-16-inch-2023-review">MacBook Pro 16-inch</a> have faced delays.</p><p>It’s unclear when Apple will update the iMac or what processor it plans to ship it with. Though the M2 and M2 Pro chips are plenty powerful, it’d make more sense for the company to release an <a href="https://www.tomsguide.com/news/imac-2023">M3 iMac</a> seeing as how the (still powerful) M1 chip is aging out. But again, none of this is yet official so it’s best to wait and see until we get the definitive word from Apple.</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/apple-could-be-working-on-a-32-inch-imac-and-i-want-one-already">Apple could be working on a 32-inch iMac — and I want one</a></li><li><a href="https://www.tomsguide.com/news/m3-macbook-pro-and-macbook-air-tipped-for-2024-heres-what-we-know">M3 MacBook Pro and MacBook Air tipped for 2024</a></li><li><a href="https://www.tomsguide.com/news/ipad-mini-7-and-ipad-air-6-could-arrive-this-week-what-we-know">iPad mini 7 and iPad Air 6 could arrive this week</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Hurry! Labor Day sale knocks Mac mini to $499, MacBook Air M2 to $899 ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/deals/hurry-labor-day-sale-knocks-mac-mini-to-dollar499-macbook-air-m2-to-dollar899</link>
                                                                            <description>
                            <![CDATA[ Labor Day sales are coming in fast and I've just spotted the best Apple deals of the year. These current-gen Macs start at just $499. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aSkZ3RPXNw2auo6GrUuFrf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VdytKXZUpsHnGdubeDw2zM-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 29 Aug 2023 19:50:53 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Apple Desktops]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Desktop Computers]]></category>
                                                                                                <author><![CDATA[ louis.ramirez@futurenet.com (Louis Ramirez) ]]></author>                    <dc:creator><![CDATA[ Louis Ramirez ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oYF2xVwCb4pTGhAJi8Yqr5.jpeg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;As deals editor-in-chief at Tom’s Guide, Louis refuses to pay full price for anything. He has over 10 years of experience finding the best deals and coupons to bring readers. Louis price checks&amp;nbsp;against multiple retailers and searches high and low for sales on 4K TVs, Apple devices, streaming services, mattresses, kitchen appliances, and more.&amp;nbsp;He&#039;s also always looking for the the best coupon codes to turn good deals into stellar buys.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;He has covered major retail events like Amazon Prime Day, Black Friday, and Cyber Monday for more than a decade and knows how to spot an epic deal from a fake discount. He&#039;s also great at helping people negotiate better prices on everything from gym memberships to their home internet service. Louis&#039; work has also helped readers find PS5 restock, baby formula, Clorox wipes, and everything in between. For his next major purchase, Louis is hoping to find a killer deal on an M3-based Mac.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;A born-and-bred New Yorker, Louis is always in search of the perfect cup of coffee. On his free time, he enjoys swimming, running, and any workout that pushes his Apple Watch to the max. He&#039;s also a big fan of international films, horror movies, and K-dramas. His work has appeared on Gizmodo, CNET, Digital Trends, Dealnews, and Time Out New York.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/VdytKXZUpsHnGdubeDw2zM-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[MacBook Air M2]]></media:description>                                                            <media:text><![CDATA[MacBook Air M2]]></media:text>
                                <media:title type="plain"><![CDATA[MacBook Air M2]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VdytKXZUpsHnGdubeDw2zM-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The final days of August are here and if you&apos;re shopping for a new Mac, I&apos;ve just spotted two of the best <a href="https://www.tomsguide.com/deals/best-labor-day-sales">Labor Day sales</a> you can get right now.</p><p>If you&apos;re in need of a new laptop, <a href="https://www.bestbuy.com/site/macbook-air-13-6-laptop-apple-m2-chip-8gb-memory-256gb-ssd-midnight/6509650.p?skuId=6509650" target="_blank" rel="nofollow">Best Buy has the 13-inch MacBook Air (M2/256GB) on sale for just $899</a>. Best Buy offered this price earlier in the month, but it required a My Best Buy Pro membership ($49/year). Today&apos;s deal is open to anyone and one of the best last-minute <a href="https://www.tomsguide.com/deals/back-to-school-sales">back to school sales</a> I&apos;ve seen. </p><p>If you prefer a Mac desktop, <a href="https://www.bhphotovideo.com/c/product/1746353-REG/apple_mmfj3ll_a_mac_mini_with_m2.html" target="_blank" rel="nofollow">B&H Photo has the Mac mini M2 on sale for $499</a>. I&apos;ve seen this price before, but it&apos;s a rare deal and it tends to sell out fast. It&apos;s one of the best I&apos;ve seen. </p><div class="product"><a data-dimension112="335acf32-0da3-4007-b76f-2c96052e07e8" data-action="Deal Block" data-label="MacBook Air (M2/256GB): was $1,099 now $899 @ Best Buy" data-dimension48="MacBook Air (M2/256GB): was $1,099 now $899 @ Best Buy" href="https://www.bestbuy.com/site/macbook-air-13-6-laptop-apple-m2-chip-8gb-memory-256gb-ssd-midnight/6509650.p?skuId=6509650" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3130px;"><p class="vanilla-image-block" style="padding-top:60.54%;"><img id="DD4dykbxfMEAFqqWeMC7hN" name="MacBook Air 2022 deal block.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DD4dykbxfMEAFqqWeMC7hN.jpeg" mos="" align="middle" fullscreen="" width="3130" height="1895" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>MacBook Air (M2/256GB): </strong><a href="https://www.bestbuy.com/site/macbook-air-13-6-laptop-apple-m2-chip-8gb-memory-256gb-ssd-midnight/6509650.p?skuId=6509650" target="_blank" rel="nofollow" data-dimension112="335acf32-0da3-4007-b76f-2c96052e07e8" data-action="Deal Block" data-label="MacBook Air (M2/256GB): was $1,099 now $899 @ Best Buy" data-dimension48="MacBook Air (M2/256GB): was $1,099 now $899 @ Best Buy"><strong>was $1,099 now $899 @ Best Buy</strong></a><br>The MacBook Air M2 boasts a load of great features. It includes a larger 13.6-inch Liquid Retina display (2560 x 1664), Apple's M2 CPU w/ 8-core GPU, 8GB of RAM, 256GB SSD, 1080p FaceTime camera, four-speaker system with Spatial Audio, and MagSafe charging. In our <a href="https://www.tomsguide.com/reviews/macbook-air-2022-m2">MacBook Air M2 review</a>, we called the Editor's Choice laptop an unbeatable combo of performance, design, and battery life.<br><strong>Price check: </strong><a href="https://www.bhphotovideo.com/c/product/1710305-REG/apple_mly33ll_a_13_6_macbook_air_m2.html" target="_blank" rel="nofollow"><strong>$949 @ B&H Photo</strong></a><strong> | </strong><a href="https://www.amazon.com/dp/B0B3BVWJ6Y" target="_blank" rel="nofollow"><strong>sold out @ Amazon</strong></a><a class="view-deal button" href="https://www.bestbuy.com/site/macbook-air-13-6-laptop-apple-m2-chip-8gb-memory-256gb-ssd-midnight/6509650.p?skuId=6509650" target="_blank" rel="nofollow" data-dimension112="335acf32-0da3-4007-b76f-2c96052e07e8" data-action="Deal Block" data-label="MacBook Air (M2/256GB): was $1,099 now $899 @ Best Buy" data-dimension48="MacBook Air (M2/256GB): was $1,099 now $899 @ Best Buy">View Deal</a></p></div><div class="product"><a data-dimension112="cc6aadc2-fd02-4983-b737-f28a95bad052" data-action="Deal Block" data-label="Apple Mac mini M2: was $599 now $499 @ B&amp;H Photo" data-dimension48="Apple Mac mini M2: was $599 now $499 @ B&amp;H Photo" href="https://www.bhphotovideo.com/c/product/1746353-REG/apple_mmfj3ll_a_mac_mini_with_m2.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="CBtjTmHi4mPTXaFWSV4vNU" name="1605029423_IMG_1444249.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/CBtjTmHi4mPTXaFWSV4vNU.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Apple Mac mini M2: </strong><a href="https://www.bhphotovideo.com/c/product/1746353-REG/apple_mmfj3ll_a_mac_mini_with_m2.html" target="_blank" rel="nofollow" data-dimension112="cc6aadc2-fd02-4983-b737-f28a95bad052" data-action="Deal Block" data-label="Apple Mac mini M2: was $599 now $499 @ B&amp;H Photo" data-dimension48="Apple Mac mini M2: was $599 now $499 @ B&amp;H Photo"><strong>was $599 now $499 @ B&H Photo</strong></a><strong><br>Back in stock! </strong>The new Mac mini M2 is faster and $100 cheaper than its M1-based predecessor. In our <a href="https://www.tomsguide.com/reviews/mac-mini-m2">Mac mini M2 review</a>, we said it's one of the best computers on the market with a speedy M2 CPU that runs circles around Apple's M1 CPU. The base model supports up to two external displays at up to the same resolutions (6K via Thunderbolt 4 or 4K via HDMI). It features an M2 CPU, 8GB of RAM, and 256GB SSD.<br><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0BSHGHGXR" target="_blank" rel="nofollow"><strong>sold out @ Amazon</strong></a><strong> | </strong><a href="https://www.bestbuy.com/site/apple-mac-mini-desktop-m2-chip-8gb-memory-256gb-ssd-latest-model-silver/6427500.p?skuId=6427500" target="_blank" rel="nofollow"><strong>$599 @ Best Buy</strong></a><a class="view-deal button" href="https://www.bhphotovideo.com/c/product/1746353-REG/apple_mmfj3ll_a_mac_mini_with_m2.html" target="_blank" rel="nofollow" data-dimension112="cc6aadc2-fd02-4983-b737-f28a95bad052" data-action="Deal Block" data-label="Apple Mac mini M2: was $599 now $499 @ B&amp;H Photo" data-dimension48="Apple Mac mini M2: was $599 now $499 @ B&amp;H Photo">View Deal</a></p></div><p>The 13-inch MacBook Air M2 is unbeatable at its full price and an even bigger value at $899. In fact, we think the MacBook Air M2 is the <a href="https://www.tomsguide.com/best-picks/best-laptops">best laptop</a> on the market right now for the majority of people. In our <a href="https://www.tomsguide.com/reviews/macbook-air-2022-m2">MacBook Air M2 review</a>, we said the Editor&apos;s Choice laptop offers a winning combination of performance, design, and battery life.</p><p>It runs circles around most Windows laptops, and the MacBook Air M2 blazes through everyday tasks like browsing the web and streaming video. Granted, it&apos;s not as fast as the <a href="https://www.tomsguide.com/reviews/macbook-pro-13-inch-m2-2022">MacBook Pro M2</a>, but for most people we&apos;re confident that the MacBook Air M2 will serve your needs well. The MacBook Air M2 also has incredible battery life — we got 14 hours and 6 minutes of battery life out of our unit.</p><p>Meanwhile, in our <a href="https://www.tomsguide.com/reviews/mac-mini-m2">Mac mini M2 review</a>, we had almost nothing but praise for this device. The M2 is Apple&apos;s latest edition of the Mac mini and it&apos;s definitely the best one yet. It&apos;s more powerful than the previous generation despite having a list price that&apos;s $100 cheaper.</p><p>This power boost is thanks to the new Apple M2 chip. It’s super fast for everyday tasks like browsing the web and streaming video, and it also blazes through tasks like editing photos or rendering 4K video. This version, unfortunately, doesn&apos;t come with the M2 Pro chip, which is even more powerful, but trust me when I say the normal M2 chip is plenty powerful for most people. I had no issues while working with it. </p><p>Make sure to follow our <a href="https://www.tomsguide.com/deals/best-apple-labor-day-sales">Apple Labor Day sales</a> coverage for more deals this week. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>