<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:cf="https://www.futureplc.com/rss/content-flags"
>
    <channel>
                    <atom:link rel="alternate" hreflang="en-AU"
                       href="https://www.tomsguide.com/au/feeds/tag/amazon"
                       type="application/rss+xml"/>
                            <title><![CDATA[ Latest from Tom's Guide AU in Amazon ]]></title>
                <link>https://www.tomsguide.com/au/tag/amazon</link>
        <description><![CDATA[ All the latest amazon content from the Tom's Guide  AU team ]]></description>
                                    <lastBuildDate>Mon, 07 Sep 2026 12:06:41 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ Prime Video top 10 movies — here are the 3 you need to watch this week (Sept. 7-13) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It’s the start of a new week, and the Prime Video top 10 most-watched list has been updated. This ever-changing ranking gives you a quick look at the movies drawing the most attention on the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a>. However, popularity doesn’t automatically mean high quality. </p><p>That’s why I’ve combed through today’s Prime Video top 10 and picked out three movies worth adding to your watch list. Well, actually, I’ve selected two movies that deserve your attention, and one that is only for the morbidly curious who enjoy watching a misfire. If you like “so bad, it’s good” movies, then the current Prime Video No. 1 might appeal to you. </p><p>These are the standouts of the Prime Video most-watched list right now. And one final note: this article is based on the Prime Video top 10 as of <strong>Monday, September 7</strong>. Here are my three picks… </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePaVgW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePaVgW.js" async></script><h3 class="article-body__section" id="section-best-prime-video-top-10-movies-to-stream-right-now"><span>Best Prime Video top 10 movies to stream right now</span></h3><h2 id="the-runner-2026">‘The Runner’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="high" data-lazy-src="https://www.youtube-nocookie.com/embed/zz4rsZLcauY" allowfullscreen></iframe></div></div><p>Prime Video’s new original thriller “The Runner” set an unwanted record last week when it received the worst reviews of Gal Gadot’s career. The movie holds a miserable 8% on <a href="https://www.rottentomatoes.com/m/the_runner_2026" target="_blank">Rotten Tomatoes</a>. So, you’re probably asking why I’ve included it here, and honestly, it’s because there’s something morbidly interesting about watching a trainwreck. Critics have labeled it “lazy,” “tedious,” and “dumb as dirt.”  So watch at your own peril.</p><p>Described by Prime Video as a “pulse-pounding psychological thriller,” Gadot plays a high-powered lawyer whose ordinary world is thrown into chaos when a mysterious caller (Damian Lewis) informs her that her son has been kidnapped. Given a series of commands, she must race through London to complete them; otherwise her son will be murdered. It’s a race-against-the-clock thriller with some seriously sloppy execution.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H8NQDT9C" target="_blank" rel="nofollow"><em><strong>"The Runner on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="good-fortune-2025">‘Good Fortune’ (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/ZKWndx83RwQ" allowfullscreen></iframe></div></div><p>Keanu Reeves might be extremely good at playing a kick-butt action hero, but he’s also got serious comedic chops. It’s the latter on display in “Good Fortune,” a pleasing comedy written and directed by Aziz Ansari. This movie has its heart in the right place, even if its commentary on wealth inequality and class divide feels a little flawed. Still, it’s got a fun high-concept premise and features Ansari alongside Reeves, Seth Rogan and Keke Palmer.</p><p>Arj (Ansari) is an aspiring filmmaker, but stuck working low-paid jobs just to keep his head above water. One such job is working as an assistant for a wealthy venture capitalist, Jeff (Rogen). But when Jeff fires Arj, the gig-worker hits rock bottom. In steps Gabriel (Reeves), a low-level guardian angel desperate to prove himself to his superiors. When Gabriel meddles in Arj's and Jeff's lives, he makes a mess that requires a lot of cleanup.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0FQXH2QNX" target="_blank" rel="nofollow"><em><strong>"Good Fortune" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="project-hail-mary-39-2026">‘Project Hail Mary' (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/m08TxIsFTRI" allowfullscreen></iframe></div></div><p>“Project Hail Mary” arrived on Prime Video on July 3, and it’s been a mainstay of the top 10 ever since. Naturally, it’s starting to slip down the list after more than two months on the platform, but if you still haven’t watched it, you really should make it a priority. I rewatched it over the weekend for the third time, and it continues to delight each time. Based on the Andy Weir novel of the same name, it’s a dazzlingly entertaining sci-fi movie that ranks among the year’s best. </p><p>The movie opens with Ryland Grace (Ryan Gosling) awaking from an induced coma onboard an interstellar spaceship, several light-years from Earth. Clearly, he’s millions of miles away from home for a reason, but the problem is, he can’t remember his mission, or even his name. What follows is a thrilling blockbuster in which the fate of the Earth hangs in the balance. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GHXVBQLM" target="_blank" rel="nofollow"><em><strong>"Project Hail Mary" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-prime-video-top-10-movies-right-now"><span>Prime Video top 10 movies right now</span></h3><ol start="1"><li>"The Runner" (2026)</li><li>"Good Fortune" (2025)</li><li>"The Last Sunrise" (2026)</li><li>"Icefall" (2025)</li><li>"The Mummy" (2017)</li><li>"Masters of the Universe" (2026)</li><li>"Stolen Girl" (2025)</li><li>"Damaged" (2024)</li><li>"Project Hail Mary" (2026)</li><li>"The Amateur" (2025)</li></ol><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in September 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/the-delightful-keanu-reeves-comedy-you-probably-missed-just-landed-on-prime-video-and-its-what-im-watching-this-weekend">The delightful Keanu Reeves comedy just landed on Prime Video</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/streaming-service-report-card-2026-we-graded-netflix-prime-video-apple-tv-hbo-max-and-more-heres-the-winner">Streaming Service Report Card 2026: We graded the top picks</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-here-are-the-3-you-need-to-watch-this-week-sept-7-13</link>
                                                                            <description>
                            <![CDATA[ Prime Video's top 10 movies list has been refreshed to start the week, and I'm picking out the highlights, including a thriller, sci-fi and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mdgUY4MTHuLvW6tcXPdhr6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/cCihscdkCdGsnVu2KX5FSb-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 07 Sep 2026 12:06:41 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ rory.mellon@futurenet.com (Rory Mellon) ]]></author>                    <dc:creator><![CDATA[ Rory Mellon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5Rv6LtQXMj5JB4Eu8Lt4Sn.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/cCihscdkCdGsnVu2KX5FSb-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on an orange circles background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on an orange circles background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on an orange circles background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/cCihscdkCdGsnVu2KX5FSb-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It’s the start of a new week, and the Prime Video top 10 most-watched list has been updated. This ever-changing ranking gives you a quick look at the movies drawing the most attention on the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a>. However, popularity doesn’t automatically mean high quality. </p><p>That’s why I’ve combed through today’s Prime Video top 10 and picked out three movies worth adding to your watch list. Well, actually, I’ve selected two movies that deserve your attention, and one that is only for the morbidly curious who enjoy watching a misfire. If you like “so bad, it’s good” movies, then the current Prime Video No. 1 might appeal to you. </p><p>These are the standouts of the Prime Video most-watched list right now. And one final note: this article is based on the Prime Video top 10 as of <strong>Monday, September 7</strong>. Here are my three picks… </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePaVgW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePaVgW.js" async></script><h3 class="article-body__section" id="section-best-prime-video-top-10-movies-to-stream-right-now"><span>Best Prime Video top 10 movies to stream right now</span></h3><h2 id="the-runner-2026">‘The Runner’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="high" data-lazy-src="https://www.youtube-nocookie.com/embed/zz4rsZLcauY" allowfullscreen></iframe></div></div><p>Prime Video’s new original thriller “The Runner” set an unwanted record last week when it received the worst reviews of Gal Gadot’s career. The movie holds a miserable 8% on <a href="https://www.rottentomatoes.com/m/the_runner_2026" target="_blank">Rotten Tomatoes</a>. So, you’re probably asking why I’ve included it here, and honestly, it’s because there’s something morbidly interesting about watching a trainwreck. Critics have labeled it “lazy,” “tedious,” and “dumb as dirt.”  So watch at your own peril.</p><p>Described by Prime Video as a “pulse-pounding psychological thriller,” Gadot plays a high-powered lawyer whose ordinary world is thrown into chaos when a mysterious caller (Damian Lewis) informs her that her son has been kidnapped. Given a series of commands, she must race through London to complete them; otherwise her son will be murdered. It’s a race-against-the-clock thriller with some seriously sloppy execution.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H8NQDT9C" target="_blank" rel="nofollow"><em><strong>"The Runner on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="good-fortune-2025">‘Good Fortune’ (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/ZKWndx83RwQ" allowfullscreen></iframe></div></div><p>Keanu Reeves might be extremely good at playing a kick-butt action hero, but he’s also got serious comedic chops. It’s the latter on display in “Good Fortune,” a pleasing comedy written and directed by Aziz Ansari. This movie has its heart in the right place, even if its commentary on wealth inequality and class divide feels a little flawed. Still, it’s got a fun high-concept premise and features Ansari alongside Reeves, Seth Rogan and Keke Palmer.</p><p>Arj (Ansari) is an aspiring filmmaker, but stuck working low-paid jobs just to keep his head above water. One such job is working as an assistant for a wealthy venture capitalist, Jeff (Rogen). But when Jeff fires Arj, the gig-worker hits rock bottom. In steps Gabriel (Reeves), a low-level guardian angel desperate to prove himself to his superiors. When Gabriel meddles in Arj's and Jeff's lives, he makes a mess that requires a lot of cleanup.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0FQXH2QNX" target="_blank" rel="nofollow"><em><strong>"Good Fortune" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="project-hail-mary-39-2026">‘Project Hail Mary' (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/m08TxIsFTRI" allowfullscreen></iframe></div></div><p>“Project Hail Mary” arrived on Prime Video on July 3, and it’s been a mainstay of the top 10 ever since. Naturally, it’s starting to slip down the list after more than two months on the platform, but if you still haven’t watched it, you really should make it a priority. I rewatched it over the weekend for the third time, and it continues to delight each time. Based on the Andy Weir novel of the same name, it’s a dazzlingly entertaining sci-fi movie that ranks among the year’s best. </p><p>The movie opens with Ryland Grace (Ryan Gosling) awaking from an induced coma onboard an interstellar spaceship, several light-years from Earth. Clearly, he’s millions of miles away from home for a reason, but the problem is, he can’t remember his mission, or even his name. What follows is a thrilling blockbuster in which the fate of the Earth hangs in the balance. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GHXVBQLM" target="_blank" rel="nofollow"><em><strong>"Project Hail Mary" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-prime-video-top-10-movies-right-now"><span>Prime Video top 10 movies right now</span></h3><ol start="1"><li>"The Runner" (2026)</li><li>"Good Fortune" (2025)</li><li>"The Last Sunrise" (2026)</li><li>"Icefall" (2025)</li><li>"The Mummy" (2017)</li><li>"Masters of the Universe" (2026)</li><li>"Stolen Girl" (2025)</li><li>"Damaged" (2024)</li><li>"Project Hail Mary" (2026)</li><li>"The Amateur" (2025)</li></ol><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in September 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/the-delightful-keanu-reeves-comedy-you-probably-missed-just-landed-on-prime-video-and-its-what-im-watching-this-weekend">The delightful Keanu Reeves comedy just landed on Prime Video</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/streaming-service-report-card-2026-we-graded-netflix-prime-video-apple-tv-hbo-max-and-more-heres-the-winner">Streaming Service Report Card 2026: We graded the top picks</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 best new to Prime Video movies to binge-watch this weekend (Sept. 4-6) —including a historic Best Picture winner ]]></title>
                                                                                                <dc:content><![CDATA[ <p>September delivered a seriously stacked movie lineup to <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a>, with a whopping <a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-98-new-movies-here-are-the-5-im-streaming-first">98 new films landing on the streaming service</a> at the top of the month. That's nearly double the number of new additions we usually see, so there's no shortage of ways to spend a weekend on the couch. </p><p>If you're looking for something to watch, you don't need to go digging for the good stuff. I've combed through all the new releases on Prime Video to spotlight the best of the bunch, three standout films that stand above the rest. Halloween's coming early with how many horror movies just arrived on Prime Video, but if I had to pick just one, <strong>"Silence of the Lambs" </strong>is well worth your time. To date it's the only horror movie that's ever won Best Picture. There's also <strong>"Trap," </strong>a campy thriller from M. Night Shyamalan, and <strong>"The First Omen,"</strong> one of the few series reboots in recent years that I genuinely enjoyed. </p><p>Ready to start watching? Here's why each one is worth a spot on your watchlist this weekend.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePaVgW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePaVgW.js" async></script><h2 id="39-the-first-omen-39-2024">'The First Omen' (2024)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/lmN1Op8ygno" allowfullscreen></iframe></div></div><p><em><strong>The vibe</strong></em>: A quick and haunting demon fix that works against all the odds</p><p><em><strong>Why you should watch it</strong></em><strong>:</strong> I'm still not convinced a prequel to "The Omen" needed to exist, but <strong>"The First Omen" is a solid horror movie, first and foremost</strong>, with more exploration of deeper themes like religious trauma and authoritarian assaults on bodily autonomy than I expected for a reboot. Nell Tiger Free stars as Margaret, a woman who's sent to Rome to begin a life to service to the church, only to discover the origins of the sinister events that lead to the birth of Damien Thorn (Harvey Spencer Stephens), the Antichrist. With an impressive critics' score of <strong>84% on Rotten Tomatoes</strong>, you know it’s a horror movie worth watching.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0CVQSL8XM" target="_blank" rel="nofollow"><em><strong>"The First Omen" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-trap-39-2024">'Trap' (2024)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/hJiPAJKjUVg" allowfullscreen></iframe></div></div><p><em><strong>The vibe</strong></em><strong>: </strong>An<strong> </strong>M. Night Shyamalan thriller where <strong>a serial killer turned suburban dad</strong> must escape capture after walking into the police's arena-size trap.</p><p><em><strong>Why you should watch it</strong></em><strong>:</strong> While "Trap" doesn't quite stick the landing, it's an absurd but entertaining ride with plenty of twists to keep your attention. Josh Hartnett stars as the man of the hour, whose family have no clue about his murderous double life. But when he takes his teen daughter, Riley (Ariel Donoghue) to a concert, he realizes it's been overrun by law enforcement in <strong>an elaborate sting operation</strong>. With delightfully over-the-top performances, a campy narrative, and some curveballs I genuinely didn't see coming, <strong>"Trap" makes for a fun watch if nothing else.</strong></p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/detail/0I2TZOL3OM4GTUKUTFSHC02Z5S" target="_blank" rel="nofollow"><em><strong>"Trap" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="the-silence-of-the-lambs-1991">‘The Silence of the Lambs’ (1991)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/6iB21hsprAQ" allowfullscreen></iframe></div></div><p><em><strong>The vibe</strong></em><strong>:</strong> A <strong>slow-burn serial killer hunt</strong> with an undercurrent of enemies to lovers (Watch the sequel before you call me crazy)</p><p><em><strong>Why you should watch it:</strong></em> I've probably seen this movie a million times (my first tattoo was a death's head hawk moth because it!) and I don't think I'll ever get tired of it. Anthony Hopkins' iconic performance as Hannibal Lecter never fails to make my skin crawl, and Jodie Foster is equally mesmerizing as the tenacious FBI-agent-in-training Clarice Starling. <strong>She's given the impossible task of getting the convicted cannibal to help flush out a new serial killer</strong> on the loose. Director Jonathan Demme uses some ingenious camera tricks to create a general sense of unease that mirrors the othering Clarice struggles with as one of the few women in her line of work.</p><p><em><strong>Stream </strong></em><a href="https://www.primevideo.com/detail/0J4209KLMEOZOQ945ESPQIQ9IM" target="_blank" rel="nofollow"><em><strong>"Silence of the Lambs" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/3-best-new-to-prime-video-shows-you-should-binge-watch-this-weekend-sept-4-6">3 best new to Prime Video shows you should binge-watch this weekend (Sept. 4-6)</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/9-new-movies-and-shows-to-watch-this-weekend-mayday-silo-the-gentlemen-and-more-sept-4-6">9 new movies and shows to watch this weekend — 'Mayday,' 'Silo,' 'The Gentlemen' and more (Sept. 4-6)</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming-devices/the-one-fire-tv-setting-you-need-to-change-right-now-to-instantly-boost-performance">The one Fire TV setting you need to change right now to instantly boost performance</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-best-new-to-prime-video-movies-to-binge-watch-this-weekend-sept-4-6-including-a-historic-best-picture-winner</link>
                                                                            <description>
                            <![CDATA[ Planning to binge-watch something new this weekend? Here's our weekly guide to the best new to Prime Video movies you should be streaming right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6fwAG8MXVrqhkdZCZ99km</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JBy4JwfMvxZAJ2z6VKQGeK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 04 Sep 2026 17:45:17 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alyse Stanley ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/BxNnQuBWRHqkv5xWZsjrjc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alyse Stanley is a news editor at Tom’s Guide, overseeing weekend coverage and writing about the latest in tech, gaming, and entertainment. Before Tom’s Guide, Alyse worked as an editor for the Washington Post’s sunsetted video game section, Launcher, where she also wrote about indie games you shouldn’t miss, how to tackle your gaming backlog, and all things Nintendo. She previously led Gizmodo’s weekend news desk covering breaking tech news and has written game reviews and features for outlets like Polygon, Unwinnable, and Rock, Paper, Shotgun. A recent Chicago-area transplant born and raised in Virginia, Alyse is a big fan of horror movies, cartoons, and roller skating. She&#039;s also a puzzle fan and can often be found contributing to the NYT Connections coverage on Tom&#039;s Guide &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/JBy4JwfMvxZAJ2z6VKQGeK-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on a blue pink film reel background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on a blue pink film reel background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on a blue pink film reel background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JBy4JwfMvxZAJ2z6VKQGeK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>September delivered a seriously stacked movie lineup to <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a>, with a whopping <a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-98-new-movies-here-are-the-5-im-streaming-first">98 new films landing on the streaming service</a> at the top of the month. That's nearly double the number of new additions we usually see, so there's no shortage of ways to spend a weekend on the couch. </p><p>If you're looking for something to watch, you don't need to go digging for the good stuff. I've combed through all the new releases on Prime Video to spotlight the best of the bunch, three standout films that stand above the rest. Halloween's coming early with how many horror movies just arrived on Prime Video, but if I had to pick just one, <strong>"Silence of the Lambs" </strong>is well worth your time. To date it's the only horror movie that's ever won Best Picture. There's also <strong>"Trap," </strong>a campy thriller from M. Night Shyamalan, and <strong>"The First Omen,"</strong> one of the few series reboots in recent years that I genuinely enjoyed. </p><p>Ready to start watching? Here's why each one is worth a spot on your watchlist this weekend.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePaVgW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePaVgW.js" async></script><h2 id="39-the-first-omen-39-2024">'The First Omen' (2024)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/lmN1Op8ygno" allowfullscreen></iframe></div></div><p><em><strong>The vibe</strong></em>: A quick and haunting demon fix that works against all the odds</p><p><em><strong>Why you should watch it</strong></em><strong>:</strong> I'm still not convinced a prequel to "The Omen" needed to exist, but <strong>"The First Omen" is a solid horror movie, first and foremost</strong>, with more exploration of deeper themes like religious trauma and authoritarian assaults on bodily autonomy than I expected for a reboot. Nell Tiger Free stars as Margaret, a woman who's sent to Rome to begin a life to service to the church, only to discover the origins of the sinister events that lead to the birth of Damien Thorn (Harvey Spencer Stephens), the Antichrist. With an impressive critics' score of <strong>84% on Rotten Tomatoes</strong>, you know it’s a horror movie worth watching.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0CVQSL8XM" target="_blank" rel="nofollow"><em><strong>"The First Omen" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-trap-39-2024">'Trap' (2024)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/hJiPAJKjUVg" allowfullscreen></iframe></div></div><p><em><strong>The vibe</strong></em><strong>: </strong>An<strong> </strong>M. Night Shyamalan thriller where <strong>a serial killer turned suburban dad</strong> must escape capture after walking into the police's arena-size trap.</p><p><em><strong>Why you should watch it</strong></em><strong>:</strong> While "Trap" doesn't quite stick the landing, it's an absurd but entertaining ride with plenty of twists to keep your attention. Josh Hartnett stars as the man of the hour, whose family have no clue about his murderous double life. But when he takes his teen daughter, Riley (Ariel Donoghue) to a concert, he realizes it's been overrun by law enforcement in <strong>an elaborate sting operation</strong>. With delightfully over-the-top performances, a campy narrative, and some curveballs I genuinely didn't see coming, <strong>"Trap" makes for a fun watch if nothing else.</strong></p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/detail/0I2TZOL3OM4GTUKUTFSHC02Z5S" target="_blank" rel="nofollow"><em><strong>"Trap" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="the-silence-of-the-lambs-1991">‘The Silence of the Lambs’ (1991)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/6iB21hsprAQ" allowfullscreen></iframe></div></div><p><em><strong>The vibe</strong></em><strong>:</strong> A <strong>slow-burn serial killer hunt</strong> with an undercurrent of enemies to lovers (Watch the sequel before you call me crazy)</p><p><em><strong>Why you should watch it:</strong></em> I've probably seen this movie a million times (my first tattoo was a death's head hawk moth because it!) and I don't think I'll ever get tired of it. Anthony Hopkins' iconic performance as Hannibal Lecter never fails to make my skin crawl, and Jodie Foster is equally mesmerizing as the tenacious FBI-agent-in-training Clarice Starling. <strong>She's given the impossible task of getting the convicted cannibal to help flush out a new serial killer</strong> on the loose. Director Jonathan Demme uses some ingenious camera tricks to create a general sense of unease that mirrors the othering Clarice struggles with as one of the few women in her line of work.</p><p><em><strong>Stream </strong></em><a href="https://www.primevideo.com/detail/0J4209KLMEOZOQ945ESPQIQ9IM" target="_blank" rel="nofollow"><em><strong>"Silence of the Lambs" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/3-best-new-to-prime-video-shows-you-should-binge-watch-this-weekend-sept-4-6">3 best new to Prime Video shows you should binge-watch this weekend (Sept. 4-6)</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/9-new-movies-and-shows-to-watch-this-weekend-mayday-silo-the-gentlemen-and-more-sept-4-6">9 new movies and shows to watch this weekend — 'Mayday,' 'Silo,' 'The Gentlemen' and more (Sept. 4-6)</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming-devices/the-one-fire-tv-setting-you-need-to-change-right-now-to-instantly-boost-performance">The one Fire TV setting you need to change right now to instantly boost performance</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 best new to Prime Video shows you should binge-watch this weekend (Sept. 4-6) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>September 2026 came out of the gate running, if all of the must-watch shows and movies <a href="https://www.tomsguide.com/entertainment/streaming/13-must-watch-shows-and-movies-to-stream-in-september-2026-slow-horses-the-traitors-monster-and-more">arriving on streaming this month</a> are any proof. And <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> is no exception, with high-profile flicks and series <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">quickly being added</a> to the Amazon streamer's already extensive library of titles. </p><p>On the TV front, that includes a revival of the long-running motor-enthusiast series "The Grand Tour," which will welcome three new hosts and a bunch of action-packed new auto challenges beginning on September 4. </p><p>There's also the still-airing fourth season of the action-crime favorite "Reacher," which premiered on August 12 and still has two more episodes to go until that big finale. And if you're looking for a throwback show <a href="https://www.tomsguide.com/entertainment/streaming/3-shows-with-a-lot-of-episodes-that-yes-are-still-on-and-where-to-binge-them">with a lot of episodes</a> to dig into, "Desperate Housewives" arrived on the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a> on September 1 with 180 installments of delicious camp and suspenseful mystery.</p><p>Without further ado, here are the three best new-to-Prime Video shows to binge this weekend. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePaVgW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePaVgW.js" async></script><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="39-the-grand-tour-39-season-7">'The Grand Tour' season 7</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/oihKWzSkXjc" allowfullscreen></iframe></div></div><p><strong>What it's about:</strong> The British motoring television program gets a lively reboot on September 4, replacing Jeremy Clarkson, Richard Hammond, and James May with Throttle House YouTubers Thomas Holland and James Engelsman, alongside British railway enthusiast and social media personality Francis Bourgeois. The format remains with a variety of action-packed challenges across six globe-trotting episodes, including crossing the Angolan desert in track cars, testing performance vehicles in California and exploring Malaysia's vibrant car culture.</p><p><strong>Why you should watch it: </strong>"<a href="https://www.tomsguide.com/entertainment/streaming/watch-the-not-very-grand-tour-online">The Grand Tour</a>" is one of Prime Video's most-watched original series, so it will be interesting to see if our fresh lineup of presenters can match the chemistry, humor and camaraderie of their predecessors. Regardless, Amazon has already started planning a second series with the new trio, so there are many more motoring antics to come. </p><p><em><strong>Stream </strong></em><a href="https://www.amazon.com/The-Grand-Tour-Season-1/dp/B086VXCTGW" target="_blank" rel="nofollow"><em><strong>"The Grand Tour" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-desperate-housewives-39">'Desperate Housewives'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/wF_VG1UGx2s" allowfullscreen></iframe></div></div><p><strong>What it's about: </strong>The suburban women of Wisteria Lane lead a pretty idyllic life on their quiet, beautiful street—that is, until one of them turns up dead. That deceased neighbor (Brenda Strong's Mary Alice Young) goes on to narrate the messy and often shocking lives of her close-knit friends, from domestic struggles to romantic drama to hidden dark secrets. The iconic ensemble cast includes Teri Hatcher, Felicity Huffman, Marcia Cross, Eva Longoria and Nicolette Sheridan. </p><p><strong>Why you should watch it: </strong>If you didn't tune into the pulpy, groundbreaking primetime dramedy during its original run on ABC from October 2004 to May 2012, now's as good an opportunity as any: All eight seasons arrived on Prime Video on September 1. That's 180 episodes that addictively mix gripping mystery with delicious melodrama and physical comedy—you'll be clicking "Play next episode" before you know it. </p><p><em><strong>Stream </strong></em><a href="https://www.primevideo.com/detail/0NLQE3T6XNNLCZHRRTUY3IMOH7" target="_blank" rel="nofollow"><em><strong>"Desperate Housewives" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-reacher-39-season-4">'Reacher' season 4</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/PCbp1FfipPg" allowfullscreen></iframe></div></div><p><strong>What it's about:</strong> Alan Ritchson's Jack Reacher is back in the City of Brotherly Love, this time getting pulled into a complex and deadly conspiracy after trying to help a troubled woman (Karen Kwong-Chip) on the Philadelphia subway. After she shockingly takes her life, both federal agents and dangerous thugs swarm him about a mysterious flash drive and his connection to the woman. Reacher digs into the woman's background, which leads back to some ugly truths that incriminate not only figures at the highest rank of power, but also those closest to him. </p><p><strong>Why you should watch it: </strong>Based on "Gone Tomorrow," the 13th of Lee Child’s Jack Reacher novels, the latest installment of this Amazon action-crime thriller gives fans exactly what they've come to expect from the action-packed franchise. "<em>Reacher</em> maintains its formula for maximum entertainment, serving more brawn, enough narrative brains, and always the right amount of Alan Ritchson to keep the operation up and running for seasons to come," praises the critical consensus on Rotten Tomatoes, where season 4 has a fresh 93% approval rating. </p><p><em><strong>Stream </strong></em><a href="https://www.amazon.com/Reacher-Season-1/dp/B09ML1QV1S" target="_blank" rel="nofollow"><em><strong>"Reacher" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-98-new-movies-here-are-the-5-im-streaming-first">Prime Video just added 98 new movies — here are the 5 to stream</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-new-to-prime-video-movies-in-september-2026-with-90-percent-or-higher-on-rotten-tomatoes">5 new to Prime Video movies with 90% or higher on Rotten Tomatoes</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-here-are-the-3-you-need-to-watch-this-week-aug-31-sept-6">Prime Video top 10 movies — here are the 3 you need to watch=</a></li></ul><div data-model-name="Amazon Prime Video,Hulu,Netflix,Paramount Plus,Peacock TV,Disney+,Apple TV" data-widget-type="multimodelreview" data-widget-title="Today's best streaming service deals"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-best-new-to-prime-video-shows-you-should-binge-watch-this-weekend-sept-4-6</link>
                                                                            <description>
                            <![CDATA[ Planning to binge-watch something new this weekend? Here's our weekly guide to the best new to Prime Video series you should be streaming right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">S6uetAbU6NAJKMgS5BtaDS</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qYDhM9dx63YdRw4BjCBEhb-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 04 Sep 2026 12:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Christina Izzo ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/LMncQCRNbbLXxxjbfZJvWE.jpeg ]]></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/qYDhM9dx63YdRw4BjCBEhb-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on a purple gold background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on a purple gold background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on a purple gold background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qYDhM9dx63YdRw4BjCBEhb-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>September 2026 came out of the gate running, if all of the must-watch shows and movies <a href="https://www.tomsguide.com/entertainment/streaming/13-must-watch-shows-and-movies-to-stream-in-september-2026-slow-horses-the-traitors-monster-and-more">arriving on streaming this month</a> are any proof. And <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> is no exception, with high-profile flicks and series <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">quickly being added</a> to the Amazon streamer's already extensive library of titles. </p><p>On the TV front, that includes a revival of the long-running motor-enthusiast series "The Grand Tour," which will welcome three new hosts and a bunch of action-packed new auto challenges beginning on September 4. </p><p>There's also the still-airing fourth season of the action-crime favorite "Reacher," which premiered on August 12 and still has two more episodes to go until that big finale. And if you're looking for a throwback show <a href="https://www.tomsguide.com/entertainment/streaming/3-shows-with-a-lot-of-episodes-that-yes-are-still-on-and-where-to-binge-them">with a lot of episodes</a> to dig into, "Desperate Housewives" arrived on the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a> on September 1 with 180 installments of delicious camp and suspenseful mystery.</p><p>Without further ado, here are the three best new-to-Prime Video shows to binge this weekend. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePaVgW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePaVgW.js" async></script><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="39-the-grand-tour-39-season-7">'The Grand Tour' season 7</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/oihKWzSkXjc" allowfullscreen></iframe></div></div><p><strong>What it's about:</strong> The British motoring television program gets a lively reboot on September 4, replacing Jeremy Clarkson, Richard Hammond, and James May with Throttle House YouTubers Thomas Holland and James Engelsman, alongside British railway enthusiast and social media personality Francis Bourgeois. The format remains with a variety of action-packed challenges across six globe-trotting episodes, including crossing the Angolan desert in track cars, testing performance vehicles in California and exploring Malaysia's vibrant car culture.</p><p><strong>Why you should watch it: </strong>"<a href="https://www.tomsguide.com/entertainment/streaming/watch-the-not-very-grand-tour-online">The Grand Tour</a>" is one of Prime Video's most-watched original series, so it will be interesting to see if our fresh lineup of presenters can match the chemistry, humor and camaraderie of their predecessors. Regardless, Amazon has already started planning a second series with the new trio, so there are many more motoring antics to come. </p><p><em><strong>Stream </strong></em><a href="https://www.amazon.com/The-Grand-Tour-Season-1/dp/B086VXCTGW" target="_blank" rel="nofollow"><em><strong>"The Grand Tour" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-desperate-housewives-39">'Desperate Housewives'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/wF_VG1UGx2s" allowfullscreen></iframe></div></div><p><strong>What it's about: </strong>The suburban women of Wisteria Lane lead a pretty idyllic life on their quiet, beautiful street—that is, until one of them turns up dead. That deceased neighbor (Brenda Strong's Mary Alice Young) goes on to narrate the messy and often shocking lives of her close-knit friends, from domestic struggles to romantic drama to hidden dark secrets. The iconic ensemble cast includes Teri Hatcher, Felicity Huffman, Marcia Cross, Eva Longoria and Nicolette Sheridan. </p><p><strong>Why you should watch it: </strong>If you didn't tune into the pulpy, groundbreaking primetime dramedy during its original run on ABC from October 2004 to May 2012, now's as good an opportunity as any: All eight seasons arrived on Prime Video on September 1. That's 180 episodes that addictively mix gripping mystery with delicious melodrama and physical comedy—you'll be clicking "Play next episode" before you know it. </p><p><em><strong>Stream </strong></em><a href="https://www.primevideo.com/detail/0NLQE3T6XNNLCZHRRTUY3IMOH7" target="_blank" rel="nofollow"><em><strong>"Desperate Housewives" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-reacher-39-season-4">'Reacher' season 4</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/PCbp1FfipPg" allowfullscreen></iframe></div></div><p><strong>What it's about:</strong> Alan Ritchson's Jack Reacher is back in the City of Brotherly Love, this time getting pulled into a complex and deadly conspiracy after trying to help a troubled woman (Karen Kwong-Chip) on the Philadelphia subway. After she shockingly takes her life, both federal agents and dangerous thugs swarm him about a mysterious flash drive and his connection to the woman. Reacher digs into the woman's background, which leads back to some ugly truths that incriminate not only figures at the highest rank of power, but also those closest to him. </p><p><strong>Why you should watch it: </strong>Based on "Gone Tomorrow," the 13th of Lee Child’s Jack Reacher novels, the latest installment of this Amazon action-crime thriller gives fans exactly what they've come to expect from the action-packed franchise. "<em>Reacher</em> maintains its formula for maximum entertainment, serving more brawn, enough narrative brains, and always the right amount of Alan Ritchson to keep the operation up and running for seasons to come," praises the critical consensus on Rotten Tomatoes, where season 4 has a fresh 93% approval rating. </p><p><em><strong>Stream </strong></em><a href="https://www.amazon.com/Reacher-Season-1/dp/B09ML1QV1S" target="_blank" rel="nofollow"><em><strong>"Reacher" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-98-new-movies-here-are-the-5-im-streaming-first">Prime Video just added 98 new movies — here are the 5 to stream</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-new-to-prime-video-movies-in-september-2026-with-90-percent-or-higher-on-rotten-tomatoes">5 new to Prime Video movies with 90% or higher on Rotten Tomatoes</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-here-are-the-3-you-need-to-watch-this-week-aug-31-sept-6">Prime Video top 10 movies — here are the 3 you need to watch=</a></li></ul><div data-model-name="Amazon Prime Video,Hulu,Netflix,Paramount Plus,Peacock TV,Disney+,Apple TV" data-widget-type="multimodelreview" data-widget-title="Today's best streaming service deals"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 new to Prime Video thriller movies to watch this week — including a chilling Martin Scorsese classic with Robert De Niro (Sept. 1-7) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Prime Video has confirmed its <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">September 2026 slate</a>, and the Amazon-owned <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a> is adding dozens of movies to its library to kick off the new month. But fear not thriller fans; you don’t need to waste time scrolling the new additions, because I’ve done the hard work for you and combed through the arrivals to find a trio of worthwhile thriller picks. </p><p>Prime Video subscribers really are spoilt for choice this week. In fact, there are so many solid options that cutting it down to just three was no easy task. However, my selections include a must-watch for “John Wick” fans and a Martin Scorsese classic with Robert De Niro. If you enjoy a movie packed with tension and twists, get these in your watchlist right now.</p><p>There's no time to waste, so without further introduction, these are the three new to Prime Video thriller movies worth watching this week.</p><h3 class="article-body__section" id="section-3-best-new-to-prime-video-thriller-movies-this-week"><span>3 best new to Prime Video thriller movies this week</span></h3><h2 id="atomic-blonde-2017">‘Atomic Blonde’ (2017)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/yIUube1pSC0" allowfullscreen></iframe></div></div><p>Charlize Theron gives Keanu Reeves a run for his money in this action-thriller that feels very inspired by “John Wick.” It comes from director David Leitch, who was reportedly an (uncredited) co-director on the first Wick movie, so it’s perhaps no surprise that “Atomic Blonde” shares a lot of DNA. Set just days before the collapse of the Berlin Wall, this movie is an uber-stylish adrenaline-raiser with some memorable neon-lit action scenes.</p><p>Theron plays Lorraine Broughton, a high-ranking MI6 agent who is sent to Berlin to retrieve a watch stolen by a KGB agent. But this timepiece is more than a fancy accessory; it holds the name of every active intelligence agent in Berlin, so its return is of paramount importance. Once on the scene, Lorraine is drawn into a dangerous spy game where the line between friend and foe blurs. “John Wick” fans will love “Atomic Blonde."</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B073VDJGW5" target="_blank" rel="nofollow"><em><strong>"Atomic Blonde" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="cape-fear-1991">‘Cape Fear’ (1991)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/SBsH1aareN4" allowfullscreen></iframe></div></div><p>“Cape Fear” was the seventh collaboration between director Martin Scorsese and star Robert De Niro. A remake of the 1962 movie of the same name, it’s a chilling psychological thriller in which De Niro plays one of the genre’s most disturbing villains, and Scorsese brings his usual filmmaking wizardry to the table. Unsurprisingly, De Niro scooped a deserved Oscar nomination for his role as a convicted psychopath out for revenge. </p><p>Max Cady (De Niro) is released from prison after 14 years behind bars for rape and battery, but he doesn’t have redemption on his mind; Cady wants revenge against his public defender, Sam Bowden (Nick Nolte), whom he believes butchered his defence. Cady soon begins tormenting Bowden and his family relentlessly, forcing the lawyer to take drastic action. It all leads up to a nail-biting conclusion set on the eponymous Cape Fear River.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B00D5UKCXM" target="_blank" rel="nofollow"><em><strong>"Cape Fear" on Prime Video</strong></em></a><em><strong> now</strong></em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Oo2rqW"></div>                            </div>                            <script src="https://kwizly.com/embed/Oo2rqW.js" async></script><h2 id="don-t-breathe-2016">‘Don’t Breathe’ (2016)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/76yBTNDB6vU" allowfullscreen></iframe></div></div><p>Before revitalizing the “Alien” franchise with “Alien: Romulus,” director Fede Álvarez made “Don’t Breathe” a tense and suspenseful thriller that lives up to its name. As the intensity ratchets up, you might find yourself holding your breath. It’s a dark and effective horror-thriller with a stomach-turning twist. Without relying on the bloody mayhem Álvarez was known for after directing the 2013 “Evil Dead” reboot, “Don’t Breathe” thrives thanks to its more grounded tone and a heavy sense of atmosphere.</p><p>Set in Detroit, “Don’t Breathe” follows three thieves (Jane Levy, Dylan Minnette and Daniel Zovatto) who pick the reclusive Norman (Stephan Lang), a blind war veteran, as their next victim. Due to his age and visual impairment, they think he’ll be an easy mark. They quickly discover, to their horror, that Norman isn’t defenceless, and when they become trapped in his home, they are forced into a desperate battle to survive.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B01KZRKVB0" target="_blank" rel="nofollow"><em><strong>"Don't Breathe" on Prime Video</strong></em></a><em><strong> now</strong></em></p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in September 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/movies/7-top-new-movies-to-watch-this-week-on-netflix-prime-video-paramount-and-more-including-an-overlooked-thriller-with-a-shocking-twist-sept-1-7">7 top new movies to watch this week</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-here-are-the-3-you-need-to-watch-this-week-aug-31-sept-6">Prime Video top 10 movies — here are the 3 you need to watch</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-new-to-prime-video-thriller-movies-to-watch-this-week-including-a-chilling-martin-scorsese-classic-with-robert-de-niro-sept-1-7</link>
                                                                            <description>
                            <![CDATA[ Prime Video's massive September 2026 movie drop includes a trio of gripping thrillers that deserve a place in your watchlist this week. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">GNyM2gjHGKbvV7TfPDSeeK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/zWqHCpTxYNgNF2cEkpZ93U-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 01 Sep 2026 10:41:46 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ rory.mellon@futurenet.com (Rory Mellon) ]]></author>                    <dc:creator><![CDATA[ Rory Mellon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5Rv6LtQXMj5JB4Eu8Lt4Sn.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/zWqHCpTxYNgNF2cEkpZ93U-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on blue electric currents background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on blue electric currents background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on blue electric currents background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/zWqHCpTxYNgNF2cEkpZ93U-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Prime Video has confirmed its <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">September 2026 slate</a>, and the Amazon-owned <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a> is adding dozens of movies to its library to kick off the new month. But fear not thriller fans; you don’t need to waste time scrolling the new additions, because I’ve done the hard work for you and combed through the arrivals to find a trio of worthwhile thriller picks. </p><p>Prime Video subscribers really are spoilt for choice this week. In fact, there are so many solid options that cutting it down to just three was no easy task. However, my selections include a must-watch for “John Wick” fans and a Martin Scorsese classic with Robert De Niro. If you enjoy a movie packed with tension and twists, get these in your watchlist right now.</p><p>There's no time to waste, so without further introduction, these are the three new to Prime Video thriller movies worth watching this week.</p><h3 class="article-body__section" id="section-3-best-new-to-prime-video-thriller-movies-this-week"><span>3 best new to Prime Video thriller movies this week</span></h3><h2 id="atomic-blonde-2017">‘Atomic Blonde’ (2017)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/yIUube1pSC0" allowfullscreen></iframe></div></div><p>Charlize Theron gives Keanu Reeves a run for his money in this action-thriller that feels very inspired by “John Wick.” It comes from director David Leitch, who was reportedly an (uncredited) co-director on the first Wick movie, so it’s perhaps no surprise that “Atomic Blonde” shares a lot of DNA. Set just days before the collapse of the Berlin Wall, this movie is an uber-stylish adrenaline-raiser with some memorable neon-lit action scenes.</p><p>Theron plays Lorraine Broughton, a high-ranking MI6 agent who is sent to Berlin to retrieve a watch stolen by a KGB agent. But this timepiece is more than a fancy accessory; it holds the name of every active intelligence agent in Berlin, so its return is of paramount importance. Once on the scene, Lorraine is drawn into a dangerous spy game where the line between friend and foe blurs. “John Wick” fans will love “Atomic Blonde."</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B073VDJGW5" target="_blank" rel="nofollow"><em><strong>"Atomic Blonde" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="cape-fear-1991">‘Cape Fear’ (1991)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/SBsH1aareN4" allowfullscreen></iframe></div></div><p>“Cape Fear” was the seventh collaboration between director Martin Scorsese and star Robert De Niro. A remake of the 1962 movie of the same name, it’s a chilling psychological thriller in which De Niro plays one of the genre’s most disturbing villains, and Scorsese brings his usual filmmaking wizardry to the table. Unsurprisingly, De Niro scooped a deserved Oscar nomination for his role as a convicted psychopath out for revenge. </p><p>Max Cady (De Niro) is released from prison after 14 years behind bars for rape and battery, but he doesn’t have redemption on his mind; Cady wants revenge against his public defender, Sam Bowden (Nick Nolte), whom he believes butchered his defence. Cady soon begins tormenting Bowden and his family relentlessly, forcing the lawyer to take drastic action. It all leads up to a nail-biting conclusion set on the eponymous Cape Fear River.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B00D5UKCXM" target="_blank" rel="nofollow"><em><strong>"Cape Fear" on Prime Video</strong></em></a><em><strong> now</strong></em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Oo2rqW"></div>                            </div>                            <script src="https://kwizly.com/embed/Oo2rqW.js" async></script><h2 id="don-t-breathe-2016">‘Don’t Breathe’ (2016)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/76yBTNDB6vU" allowfullscreen></iframe></div></div><p>Before revitalizing the “Alien” franchise with “Alien: Romulus,” director Fede Álvarez made “Don’t Breathe” a tense and suspenseful thriller that lives up to its name. As the intensity ratchets up, you might find yourself holding your breath. It’s a dark and effective horror-thriller with a stomach-turning twist. Without relying on the bloody mayhem Álvarez was known for after directing the 2013 “Evil Dead” reboot, “Don’t Breathe” thrives thanks to its more grounded tone and a heavy sense of atmosphere.</p><p>Set in Detroit, “Don’t Breathe” follows three thieves (Jane Levy, Dylan Minnette and Daniel Zovatto) who pick the reclusive Norman (Stephan Lang), a blind war veteran, as their next victim. Due to his age and visual impairment, they think he’ll be an easy mark. They quickly discover, to their horror, that Norman isn’t defenceless, and when they become trapped in his home, they are forced into a desperate battle to survive.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B01KZRKVB0" target="_blank" rel="nofollow"><em><strong>"Don't Breathe" on Prime Video</strong></em></a><em><strong> now</strong></em></p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in September 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/movies/7-top-new-movies-to-watch-this-week-on-netflix-prime-video-paramount-and-more-including-an-overlooked-thriller-with-a-shocking-twist-sept-1-7">7 top new movies to watch this week</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-here-are-the-3-you-need-to-watch-this-week-aug-31-sept-6">Prime Video top 10 movies — here are the 3 you need to watch</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Prime Video top 10 movies — here are the 3 you need to watch this week (Aug. 31-Sept. 6) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Prime Video’s top 10 most-watched movies list has been updated over the weekend, and it’s a great starting point if you’re looking for something to watch on the Amazon-owned <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a>. However, current popularity doesn’t necessarily mean a movie is worthwhile. It’s not uncommon for subpar picks to land in the Prime Video top 10.</p><p>That’s why I’ve combed through the current Prime Video top 10 to find the entries that deserve to be on your watchlist this week. My selections include a high-concept comedy, a sun-soaked romantic drama, and a classic caper that stars the late-great Dolly Parton. Give these a watch this week. </p><p>This article is based on the Prime Video top 10 as of <strong>Monday, August 31</strong>, and with that housekeeping out of the way, let’s dive into my top picks.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePaVgW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePaVgW.js" async></script><h3 class="article-body__section" id="section-best-prime-video-top-10-movies-to-stream-right-now"><span>Best Prime Video top 10 movies to stream right now</span></h3><h2 id="the-last-sunrise-2026">‘The Last Sunrise’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/NhI2UpkFAFw" allowfullscreen></iframe></div></div><p>As the summer season draws to a close, Prime Video is offering up one final sun-soaked escape in “The Last Sunrise.” This romantic drama is based on Anna Todd’s novel of the same name and stars Maia Reficco, Fernando Líndez and Eva Longoria. It’s your typical girl-meets-boy movie, but its lack of original ideas hasn’t stopped it from climbing to the top of Prime Video's top 10; it has been locked at No.1 since last week.</p><p>Ry (Reficco) and her overprotective mother (Longoria) move from America to Mallorca, Spain, where stunning beaches and unexpected romance await. Ry soon meets a charming local, Juliàn (Líndez), and the two begin a passionate love affair. But Ry is dealing with chronic health conditions, and when her condition worsens and long-hidden family secrets come to light, the pair's intense romance might not survive until the end of the summer. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H8Q7NP6Q" target="_blank" rel="nofollow"><em><strong>"The Last Sunrise" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="good-fortune-2025-2">‘Good Fortune’ (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/ZKWndx83RwQ" allowfullscreen></iframe></div></div><p>“Good Fortune” is an enjoyable high-concept comedy starring Seth Rogen, Aziz Ansari, Keke Palmer and Keanu Reeves. It touches on wealth inequality, the gig economy, and the growing class divide without ever fully exploring these pressing issues. Still, it approaches its topical subject with optimistic eyes, and Reeves is particularly wonderful as a hapless guardian angel. </p><p>Writer and director Aziz Ansari also stars as Arj, an aspiring filmmaker, working low-paid jobs to get by. One such job is working as an assistant for a wealthy venture capitalist, Jeff (Rogen). But when Jeff fires Arj, the gig-worker hits rock bottom. In steps Gabriel (Reeves), a low-level guardian angel desperate to prove himself to his superiors. When Gabriel meddles in Arj's and Jeff's lives, he makes a mess that proves very tough to clean up.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0FQXH2QNX" target="_blank" rel="nofollow"><em><strong>"Good Fortune" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="nine-to-five-1980">‘Nine to Five’ (1980)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/qni6HOyPNBA" allowfullscreen></iframe></div></div><p>It’s no surprise to see “Nine to Five” in the Prime Video top 10. This classic 1980s comedy caper stars Jane Fonda, Lily Tomlin, and the beloved Dolly Parton. The “Queen of Country” passed away last week at the age of 80, with an outpouring of love for everything Dolly accomplished across her remarkable life and career. So, it’s clear to see why Prime Video subscribers are turning to this movie as the world mourns the passing of a true icon.</p><p>This comedy centers on three women (Fonda, Tomlin and Parton) who have all been wronged by their boss, Franklin Hart (Dabney Coleman), the vice president of a fictional conglomerate. Fed up with being treated unfairly in a male-dominated workplace, the trio decides to take matters into their own hands and hatch a scheme to kidnap Hart and run the company as they see fit. And yes, it features Dolly’s enduring pop song of the same name.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B00C3L6ZBM" target="_blank" rel="nofollow"><em><strong>"Nine to Five" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-prime-video-top-10-movies-right-now"><span>Prime Video top 10 movies right now</span></h3><ol start="1"><li>"The Last Sunrise" (2026)</li><li>"Icefall" (2025)</li><li>"Good Fortune" (2025)</li><li>"Stolen Girl" (2025)</li><li>"Masters of the Universe" (2026)</li><li>"Nine to Five" (1980)</li><li>"Project Hail Mary" (2026)</li><li>"The Devil's Mouth" (2026)</li><li>"The Amateur" (2025)</li><li>"Damaged" (2024)</li></ol><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in September 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/the-delightful-keanu-reeves-comedy-you-probably-missed-just-landed-on-prime-video-and-its-what-im-watching-this-weekend">The delightful Keanu Reeves comedy just landed on Prime Video</a></li><li><a href="https://www.tomsguide.com/entertainment/music-streaming/how-to-watch-dolly-parton-glastonbury">How to watch Dolly Parton Glastonbury on BBC iPlayer</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-here-are-the-3-you-need-to-watch-this-week-aug-31-sept-6</link>
                                                                            <description>
                            <![CDATA[ The Prime Video top 10 most-watched movies list has been updated, and I'm picking out three highlights you need to watch this week. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">FUvYLn4XtS6CBFWLSqwWdT</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/69cG5Jf7AqEGcZaShn3ixL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 31 Aug 2026 13:13:32 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ rory.mellon@futurenet.com (Rory Mellon) ]]></author>                    <dc:creator><![CDATA[ Rory Mellon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5Rv6LtQXMj5JB4Eu8Lt4Sn.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/69cG5Jf7AqEGcZaShn3ixL-1280-80.jpg">
                                                            <media:credit><![CDATA[imageBROKER / Elena Nazarova / Alamy]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on purple and blue gradient background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on purple and blue gradient background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on purple and blue gradient background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/69cG5Jf7AqEGcZaShn3ixL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Prime Video’s top 10 most-watched movies list has been updated over the weekend, and it’s a great starting point if you’re looking for something to watch on the Amazon-owned <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a>. However, current popularity doesn’t necessarily mean a movie is worthwhile. It’s not uncommon for subpar picks to land in the Prime Video top 10.</p><p>That’s why I’ve combed through the current Prime Video top 10 to find the entries that deserve to be on your watchlist this week. My selections include a high-concept comedy, a sun-soaked romantic drama, and a classic caper that stars the late-great Dolly Parton. Give these a watch this week. </p><p>This article is based on the Prime Video top 10 as of <strong>Monday, August 31</strong>, and with that housekeeping out of the way, let’s dive into my top picks.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePaVgW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePaVgW.js" async></script><h3 class="article-body__section" id="section-best-prime-video-top-10-movies-to-stream-right-now"><span>Best Prime Video top 10 movies to stream right now</span></h3><h2 id="the-last-sunrise-2026">‘The Last Sunrise’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/NhI2UpkFAFw" allowfullscreen></iframe></div></div><p>As the summer season draws to a close, Prime Video is offering up one final sun-soaked escape in “The Last Sunrise.” This romantic drama is based on Anna Todd’s novel of the same name and stars Maia Reficco, Fernando Líndez and Eva Longoria. It’s your typical girl-meets-boy movie, but its lack of original ideas hasn’t stopped it from climbing to the top of Prime Video's top 10; it has been locked at No.1 since last week.</p><p>Ry (Reficco) and her overprotective mother (Longoria) move from America to Mallorca, Spain, where stunning beaches and unexpected romance await. Ry soon meets a charming local, Juliàn (Líndez), and the two begin a passionate love affair. But Ry is dealing with chronic health conditions, and when her condition worsens and long-hidden family secrets come to light, the pair's intense romance might not survive until the end of the summer. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H8Q7NP6Q" target="_blank" rel="nofollow"><em><strong>"The Last Sunrise" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="good-fortune-2025-2">‘Good Fortune’ (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/ZKWndx83RwQ" allowfullscreen></iframe></div></div><p>“Good Fortune” is an enjoyable high-concept comedy starring Seth Rogen, Aziz Ansari, Keke Palmer and Keanu Reeves. It touches on wealth inequality, the gig economy, and the growing class divide without ever fully exploring these pressing issues. Still, it approaches its topical subject with optimistic eyes, and Reeves is particularly wonderful as a hapless guardian angel. </p><p>Writer and director Aziz Ansari also stars as Arj, an aspiring filmmaker, working low-paid jobs to get by. One such job is working as an assistant for a wealthy venture capitalist, Jeff (Rogen). But when Jeff fires Arj, the gig-worker hits rock bottom. In steps Gabriel (Reeves), a low-level guardian angel desperate to prove himself to his superiors. When Gabriel meddles in Arj's and Jeff's lives, he makes a mess that proves very tough to clean up.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0FQXH2QNX" target="_blank" rel="nofollow"><em><strong>"Good Fortune" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="nine-to-five-1980">‘Nine to Five’ (1980)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/qni6HOyPNBA" allowfullscreen></iframe></div></div><p>It’s no surprise to see “Nine to Five” in the Prime Video top 10. This classic 1980s comedy caper stars Jane Fonda, Lily Tomlin, and the beloved Dolly Parton. The “Queen of Country” passed away last week at the age of 80, with an outpouring of love for everything Dolly accomplished across her remarkable life and career. So, it’s clear to see why Prime Video subscribers are turning to this movie as the world mourns the passing of a true icon.</p><p>This comedy centers on three women (Fonda, Tomlin and Parton) who have all been wronged by their boss, Franklin Hart (Dabney Coleman), the vice president of a fictional conglomerate. Fed up with being treated unfairly in a male-dominated workplace, the trio decides to take matters into their own hands and hatch a scheme to kidnap Hart and run the company as they see fit. And yes, it features Dolly’s enduring pop song of the same name.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B00C3L6ZBM" target="_blank" rel="nofollow"><em><strong>"Nine to Five" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-prime-video-top-10-movies-right-now"><span>Prime Video top 10 movies right now</span></h3><ol start="1"><li>"The Last Sunrise" (2026)</li><li>"Icefall" (2025)</li><li>"Good Fortune" (2025)</li><li>"Stolen Girl" (2025)</li><li>"Masters of the Universe" (2026)</li><li>"Nine to Five" (1980)</li><li>"Project Hail Mary" (2026)</li><li>"The Devil's Mouth" (2026)</li><li>"The Amateur" (2025)</li><li>"Damaged" (2024)</li></ol><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in September 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/the-delightful-keanu-reeves-comedy-you-probably-missed-just-landed-on-prime-video-and-its-what-im-watching-this-weekend">The delightful Keanu Reeves comedy just landed on Prime Video</a></li><li><a href="https://www.tomsguide.com/entertainment/music-streaming/how-to-watch-dolly-parton-glastonbury">How to watch Dolly Parton Glastonbury on BBC iPlayer</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 best new to Prime Video shows you should binge-watch this weekend (August 28-30) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>How is September almost here? Soon summer will continue on only in our hearts and lingering sun burns. Prime Video released a few new movies this week, including the German-comedy "Back to the '90s" and the young adult romantic drama "The Last Sunrise" that's guaranteed to break your heart, but it's slim pickings on the TV front. </p><p>Thankfully, August has been a banner month for TV releases on Prime Video, so there's still plenty of bingeworthy shows to catch up on this weekend. With so many shows to choose from, it can be hard to narrow down what to watch next. That's why I'm rounding up the best of the bunch to help you skip the scrolling and get to streaming. Of everything added, these are the three worth adding to your watchlist: Alan Ritchson's high-octane return in <strong>"Reacher" season 4</strong>, the messy YA drama "<strong>Sterling Point"</strong> that has everyone buzzing, and the surprisingly wholesome crossover episode you never expected, <strong>"The Chosen in the Wild with Bear Grylls."</strong></p><p>For even more recommendations on what to watch, check out <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">Prime Video's September line-up</a>. So without further ado, here are the three best new to Prime Video shows to binge this weekend. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePaVgW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePaVgW.js" async></script><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="39-reacher-39-season-4-2">'Reacher' season 4</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/PCbp1FfipPg" allowfullscreen></iframe></div></div><p><strong>What it's about:</strong> Jack Reacher (Alan Ritchson) is back in Philadelphia, where he gets caught up in a deadly conspiracy after witnessing a woman (Karen Kwong-Chip) kill herself on the subway. Before she dies, she appears to slip something to Reacher, putting him in the crosshairs of federal agents and the CIA. As he digs into the woman's background, it leads back to some ugly truths that incriminate not only the top brass, but those closest to him. </p><p><strong>Why you should watch it: </strong>Season 4 of this viral crime thriller (which adapts Lee Child’s "Gone Tomorrow") delivers everything fans have come to expect — and much of that success boils down to Alan Ritchson, who proves yet again to be a pitch perfect Reacher. We're halfway into the season now, but there's still plenty of time to catch up before the finale. And after Wednesday's bombshell ending, it's shaping up to be a season unlike any other.  </p><p><em><strong>Stream </strong></em><a href="https://www.amazon.com/dp/B09ML1QV1S" target="_blank" rel="nofollow"><em><strong>"Reacher" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-sterling-point-39">'Sterling Point'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/bwwF3TuJQME" allowfullscreen></iframe></div></div><p><strong>What it's about: </strong>"Sterling Point" is a grounded YA mystery drama starring Ella Rubin as Annie Jacobson, a 17-year-old who unexpectedly inherits a remote island in Canada from her estranged grandfather. Determined to figure out why he left the property to her, she secretly travels there and begins to investigate her family's past. But as she unearths secrets that maybe should have stayed buried, she finds herself caught in a love triangle and discovers that a local girl named Ramona (Amélie Hoeferle) may have a surprising connection to her own family.</p><p><strong>Why you should watch it: </strong>"Sterling Point" debuted with a strong 91% critics score on <a href="https://www.rottentomatoes.com/tv/sterling_point/s01" target="_blank">Rotten Tomatoes</a> and has been getting plenty of buzz online — enough to secure a second season, as <a href="https://variety.com/2026/tv/news/sterling-point-renewed-season-2-amazon-1236839112/" target="_blank">Prime Video confirmed this week</a>. This messy coming-of-age drama is an easy show to get lost in, and with just eight episodes, it’s practically tailor-made to suck up a lazy weekend.</p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/detail/0K94N2UBORZCLPIC46VTJQ093E" target="_blank" rel="nofollow"><em><strong>"Sterling Point" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-the-chosen-in-the-wild-with-bear-grylls-39">'The Chosen in the Wild with Bear Grylls'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/wp4BuflDszk" allowfullscreen></iframe></div></div><p><strong>What it's about: </strong>The famous survivalist Bear Grylls takes Jesus and his followers on some grueling adventures through the Utah desert. Well, sort of. Rather, he's joined by the actors who play them in "The Chosen," the hit series about the life, death, and resurrection of Jesus of Nazareth. Showrunner Dallas Jenkins also joins in the final episode to suffer through his share of trials and tribulations. While they're braving the wilderness, they open up about faith and the challenges they’ve faced in conversations that feel surprisingly natural given the reality show set-up. </p><p><strong>Why you should watch it: </strong>This show feels made in a lab for men with religious trauma, and that's not a dig — I'm married to one and recommended it to him. It's not particularly challenging or deep, instea soothing watch to throw on in the background that's surprisingly wholesome at moments. Its focus on men being open and vulnerable about their feelings gives it more substance than the typical Bear Grylls survival show you might expect. </p><p><em><strong>Stream </strong></em><a href="https://www.primevideo.com/detail/0GOZ7CFS15K5QZI82RSB4MMZB9" target="_blank" rel="nofollow"><em><strong>"The Chosen in the Wild with Bear Grylls" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-best-prime-video-movies-to-stream-now-before-they-leave-in-august-2026">5 best Prime Video movies to stream now before they leave in August 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in September 2026: Top picks and all the new movies and shows to watch</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-shows-heres-the-3-worth-binge-watching-this-week-august-26-september-1">Prime Video top 10 shows — here’s the 3 worth binge-watching this week (August 26-September 1)</a></li></ul><div data-model-name="Amazon Prime Video,Hulu,Netflix,Paramount Plus,Peacock TV,Disney+,Apple TV" data-widget-type="multimodelreview" data-widget-title="Today's best streaming service deals"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-best-new-to-prime-video-shows-you-should-binge-watch-this-weekend-august-28-30</link>
                                                                            <description>
                            <![CDATA[ Planning to binge-watch something new this weekend? Here's our weekly guide to the best new to Prime Video series you should be streaming right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nLuKhrNcmCGXpTTFS8yQZ7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qYDhM9dx63YdRw4BjCBEhb-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 28 Aug 2026 18:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alyse Stanley ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/BxNnQuBWRHqkv5xWZsjrjc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alyse Stanley is a news editor at Tom’s Guide, overseeing weekend coverage and writing about the latest in tech, gaming, and entertainment. Before Tom’s Guide, Alyse worked as an editor for the Washington Post’s sunsetted video game section, Launcher, where she also wrote about indie games you shouldn’t miss, how to tackle your gaming backlog, and all things Nintendo. She previously led Gizmodo’s weekend news desk covering breaking tech news and has written game reviews and features for outlets like Polygon, Unwinnable, and Rock, Paper, Shotgun. A recent Chicago-area transplant born and raised in Virginia, Alyse is a big fan of horror movies, cartoons, and roller skating. She&#039;s also a puzzle fan and can often be found contributing to the NYT Connections coverage on Tom&#039;s Guide &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/qYDhM9dx63YdRw4BjCBEhb-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on a purple gold background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on a purple gold background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on a purple gold background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qYDhM9dx63YdRw4BjCBEhb-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>How is September almost here? Soon summer will continue on only in our hearts and lingering sun burns. Prime Video released a few new movies this week, including the German-comedy "Back to the '90s" and the young adult romantic drama "The Last Sunrise" that's guaranteed to break your heart, but it's slim pickings on the TV front. </p><p>Thankfully, August has been a banner month for TV releases on Prime Video, so there's still plenty of bingeworthy shows to catch up on this weekend. With so many shows to choose from, it can be hard to narrow down what to watch next. That's why I'm rounding up the best of the bunch to help you skip the scrolling and get to streaming. Of everything added, these are the three worth adding to your watchlist: Alan Ritchson's high-octane return in <strong>"Reacher" season 4</strong>, the messy YA drama "<strong>Sterling Point"</strong> that has everyone buzzing, and the surprisingly wholesome crossover episode you never expected, <strong>"The Chosen in the Wild with Bear Grylls."</strong></p><p>For even more recommendations on what to watch, check out <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">Prime Video's September line-up</a>. So without further ado, here are the three best new to Prime Video shows to binge this weekend. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ePaVgW"></div>                            </div>                            <script src="https://kwizly.com/embed/ePaVgW.js" async></script><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="39-reacher-39-season-4-2">'Reacher' season 4</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/PCbp1FfipPg" allowfullscreen></iframe></div></div><p><strong>What it's about:</strong> Jack Reacher (Alan Ritchson) is back in Philadelphia, where he gets caught up in a deadly conspiracy after witnessing a woman (Karen Kwong-Chip) kill herself on the subway. Before she dies, she appears to slip something to Reacher, putting him in the crosshairs of federal agents and the CIA. As he digs into the woman's background, it leads back to some ugly truths that incriminate not only the top brass, but those closest to him. </p><p><strong>Why you should watch it: </strong>Season 4 of this viral crime thriller (which adapts Lee Child’s "Gone Tomorrow") delivers everything fans have come to expect — and much of that success boils down to Alan Ritchson, who proves yet again to be a pitch perfect Reacher. We're halfway into the season now, but there's still plenty of time to catch up before the finale. And after Wednesday's bombshell ending, it's shaping up to be a season unlike any other.  </p><p><em><strong>Stream </strong></em><a href="https://www.amazon.com/dp/B09ML1QV1S" target="_blank" rel="nofollow"><em><strong>"Reacher" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-sterling-point-39">'Sterling Point'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/bwwF3TuJQME" allowfullscreen></iframe></div></div><p><strong>What it's about: </strong>"Sterling Point" is a grounded YA mystery drama starring Ella Rubin as Annie Jacobson, a 17-year-old who unexpectedly inherits a remote island in Canada from her estranged grandfather. Determined to figure out why he left the property to her, she secretly travels there and begins to investigate her family's past. But as she unearths secrets that maybe should have stayed buried, she finds herself caught in a love triangle and discovers that a local girl named Ramona (Amélie Hoeferle) may have a surprising connection to her own family.</p><p><strong>Why you should watch it: </strong>"Sterling Point" debuted with a strong 91% critics score on <a href="https://www.rottentomatoes.com/tv/sterling_point/s01" target="_blank">Rotten Tomatoes</a> and has been getting plenty of buzz online — enough to secure a second season, as <a href="https://variety.com/2026/tv/news/sterling-point-renewed-season-2-amazon-1236839112/" target="_blank">Prime Video confirmed this week</a>. This messy coming-of-age drama is an easy show to get lost in, and with just eight episodes, it’s practically tailor-made to suck up a lazy weekend.</p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/detail/0K94N2UBORZCLPIC46VTJQ093E" target="_blank" rel="nofollow"><em><strong>"Sterling Point" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-the-chosen-in-the-wild-with-bear-grylls-39">'The Chosen in the Wild with Bear Grylls'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/wp4BuflDszk" allowfullscreen></iframe></div></div><p><strong>What it's about: </strong>The famous survivalist Bear Grylls takes Jesus and his followers on some grueling adventures through the Utah desert. Well, sort of. Rather, he's joined by the actors who play them in "The Chosen," the hit series about the life, death, and resurrection of Jesus of Nazareth. Showrunner Dallas Jenkins also joins in the final episode to suffer through his share of trials and tribulations. While they're braving the wilderness, they open up about faith and the challenges they’ve faced in conversations that feel surprisingly natural given the reality show set-up. </p><p><strong>Why you should watch it: </strong>This show feels made in a lab for men with religious trauma, and that's not a dig — I'm married to one and recommended it to him. It's not particularly challenging or deep, instea soothing watch to throw on in the background that's surprisingly wholesome at moments. Its focus on men being open and vulnerable about their feelings gives it more substance than the typical Bear Grylls survival show you might expect. </p><p><em><strong>Stream </strong></em><a href="https://www.primevideo.com/detail/0GOZ7CFS15K5QZI82RSB4MMZB9" target="_blank" rel="nofollow"><em><strong>"The Chosen in the Wild with Bear Grylls" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-best-prime-video-movies-to-stream-now-before-they-leave-in-august-2026">5 best Prime Video movies to stream now before they leave in August 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in September 2026: Top picks and all the new movies and shows to watch</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-shows-heres-the-3-worth-binge-watching-this-week-august-26-september-1">Prime Video top 10 shows — here’s the 3 worth binge-watching this week (August 26-September 1)</a></li></ul><div data-model-name="Amazon Prime Video,Hulu,Netflix,Paramount Plus,Peacock TV,Disney+,Apple TV" data-widget-type="multimodelreview" data-widget-title="Today's best streaming service deals"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ New on Prime Video in September 2026: Top picks and all the new movies and shows to watch ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Summer is almost behind us, and for me, September officially marks the beginning of fall. As the days get shorter and the weather starts to cool, streaming services like <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> are already looking ahead to the colder months. That means swapping out some of those quintessential summer movies for cozier watches, autumnal favorites, and plenty of new movies and shows to settle in with as the seasons change.</p><p>Prime Video’s September 2026 lineup is now fully revealed, and I’ve rounded up the biggest releases worth keeping an eye on, from major new arrivals to some of the month’s most anticipated titles. That includes a new spinoff series set in the world of “Reacher,” an adrenaline-fueled action-thriller, and a romantic comedy based on Ali Hazelwood’s novel.</p><p>Here are my standout picks for the month, followed by the full list of everything coming to Prime Video throughout September 2026.</p><h3 class="article-body__section" id="section-new-on-prime-video-in-september-2026-top-picks"><span>New on Prime Video in September 2026: Top picks</span></h3><h2 id="the-runner-september-2">‘The Runner’ (September 2)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/zz4rsZLcauY" allowfullscreen></iframe></div></div><p>Prime Video is known to have plenty of action-thrillers, from “Reacher” to “The Terminal List,” so it’s no surprise we’re getting another in the form of “The Runner.” This original movie feels like “Speed” meets “Taken.” It’s built on a ruthless premise that demands constant motion, meaning if the protagonist stops running, the consequences are instantly fatal. Clocking in at a brisk 84 minutes, the film seems to cut out all filler to deliver a non-stop burst of suspense. </p><p>Maia Marten (Gal Gadot) is a successful London lawyer whose morning jog takes a terrifying turn when she receives a call telling her that her young son has been kidnapped. The anonymous caller gives Maia a series of instructions she must follow if she wants to see him again, forcing her to race across London on foot. As the demands become increasingly dangerous, Maia is pushed further out of her comfort zone while trying to work out who is behind the kidnapping. </p><p><em><strong>Stream "The Runner" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H8NQDT9C" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from Sept. 2</strong></em></p><h2 id="the-grand-tour-september-13">‘The Grand Tour’ (September 13)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/Xtr-oPCp2GQ" allowfullscreen></iframe></div></div><p>This new chapter of “The Grand Tour” marks a major new beginning for the global motoring franchise. Shifting gears from the old-school pub banter of the original trio, the new era leans into a faster, slightly absurd, digital-first style of humor while keeping the spirit of wild road trips. The atmospheric core is built around putting totally unsuitable cars into unforgiving environments, like racing track cars across African deserts or testing high-performance vehicles against fighter jets.</p><p>“The Grand Tour” returns with a brand-new presenting trio as Francis Bourgeois joins James Engelsman and Thomas Holland for a six-episode motoring adventure. The new hosts travel across the globe, putting a range of unusual and high-performance cars through increasingly ambitious challenges. Their journey takes them from the deserts of Angola to Malaysia and California, where they explore local car culture, test cutting-edge vehicles and take on some seriously unconventional tasks. </p><p><em><strong>Stream "The Grand Tour" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0HCNPSDGH" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from Sept. 13</strong></em></p><h2 id="neagley-september-16">‘Neagley’ (September 16)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/BOzNaa_o9_g" allowfullscreen></iframe></div></div><p>For the first time, “Reacher” is getting its own spinoff with “Neagley,” which expands Prime Video’s massive action universe. Maria Sten steps into the spotlight to lead the series, reprising her fan-favorite role as the brilliant former 110th Special Investigations sergeant. The show is overseen directly by “Reacher” creator Nick Santora alongside Nicholas Wootton, ensuring the same hard-hitting, fast-paced DNA. Even better, Prime Video is dropping all 8 episodes at once on premiere day.</p><p>Frances Neagley (Maria Sten) is a former member of the Army’s 110th Special Investigations Unit who now works as a private investigator in Chicago. When someone she once knew and cared about dies in what appears to be a suspicious accident, Neagley refuses to accept the official explanation. She begins investigating the circumstances surrounding the death, drawing on her military experience and the skills she developed alongside Jack Reacher (Alan Ritchson). </p><p><em><strong>Stream "Neagley" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GY916X2W" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from Sept. 16</strong></em></p><h2 id="you-me-against-the-world-september-18">‘You+Me - Against the World’ (September 18)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/a4JBA0NBTwU" allowfullscreen></iframe></div></div><p>If you’re a romance fan, you’ll want to stay tuned for “You+Me - Against the World.” This French original film is clearly designed to capitalize on the massive global success of modern romantic thrillers. It’s adapted directly from the runaway hit book trilogy by popular French author Emma Green, which sold nearly a million copies across France. This film isn’t like standard campus romances, though, since the story is driven by an unidentified figure watching them from the shadows, threatening to expose life-ruining secrets.</p><p>Alma Lancaster (Vittoria Di Savoia) is an 18-year-old university student from a wealthy family who believes she is studying law, while she secretly follows her ambition of becoming a filmmaker. Her life changes when she meets Vadim Arcadi (Lucas Barski), a rebellious 20-year-old student with a troubled past. When the pair are forced to work together on a student film, their initial clashes gradually turn into a relationship neither expected. However, their growing connection is complicated when someone begins watching them.</p><p><em><strong>Stream "You+Me - Against the World" on </strong></em><a href="https://www.amazon.com/gp/video/storefront" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from Sept. 18</strong></em></p><h2 id="the-love-hypothesis-september-23">‘The Love Hypothesis’ (September 23)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/vo0N_i326as" allowfullscreen></iframe></div></div><p>One of the biggest releases this month has to be “The Love Hypothesis,” a major book-to-screen romantic comedy that could be a standout for the fall. The film is adapted from Ali Hazelwood’s 2021 New York Times bestselling novel, which originally began as a viral internet fan-fiction sensation before becoming a huge hit in the contemporary romance world. I have fairly high hopes for the adaptation, too, given that it was directed by Claire Scanlon, who previously helmed the incredible Netflix rom-com “Set It Up.” </p><p>Olive Smith (Lili Reinhart) is a Ph.D. candidate whose life takes an unexpected turn when she discovers that her best friend, Ahn (Rachel Marsh), has feelings for Olive’s crush. Hoping to convince Ahn that she has moved on, Olive impulsively kisses intimidating biology professor Adam Carlsen (Tom Bateman). When the incident sparks rumors around campus, Adam suggests they pretend to be a couple, giving them both something to gain from the arrangement. Soon, these rules become increasingly difficult to follow.</p><p><em><strong>Stream "The Love Hypothesis" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H4WZS7VX" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from Sept. 23</strong></em></p><h3 class="article-body__section" id="section-new-shows-on-prime-video-in-september-2026"><span>New shows on Prime Video in September 2026</span></h3><p><strong>September 1</strong></p><ul><li>American Classic (2026)</li><li>Desperate Housewives Seasons 1-8 (2004)</li><li>Everybody Loves Raymond Season 1-9 (1996)</li><li>Over the Garden Wall (2014)</li></ul><p><strong>September 4</strong></p><ul><li>ONE Championship on Prime (2026)</li></ul><p><strong>September 13</strong></p><ul><li>The Grand Tour season 7</li></ul><p><strong>September 15</strong></p><ul><li>Demon Slayer: Kimetsu no Yaiba S1-4 (2019)</li></ul><p><strong>September 16</strong></p><ul><li>Neagley (2026)</li></ul><p><strong>September 24</strong></p><ul><li>Go Deep: The DeSean Jackson Story (2026)</li></ul><h3 class="article-body__section" id="section-new-movies-on-prime-video-in-september-2026"><span>New movies on Prime Video in September 2026</span></h3><p><strong>September 1</strong></p><ul><li>A Serious Man (2009)</li><li>Ali G Indahouse: The Movie (2003)</li><li>Army Of Darkness (1993)</li><li>Atomic Blonde (2017)</li><li>Bird On A Wire (1990)</li><li>Blow Out (1981)</li><li>Blue Crush (2002)</li><li>Blue Crush 2 (2011)</li><li>Borat: Cultural Learnings of America For Make Benefit Glorious Nation of Kazakhstan (2006)</li><li>Breaking News In Yuba County (2021)</li><li>Breezy (1973)</li><li>Bruno (2009)</li><li>Cape Fear (1962)</li><li>Cape Fear (1991)</li><li>Carlito’s Way (1993)</li><li>Carlito’s Way: Rise To Power (2005)</li><li>Carrie (1976)</li><li>Carrie (2013)</li><li>Cat People (1982)</li><li>Chef (2014)</li><li>Collateral (2004)</li><li>Conor McGregor: Notorious (2017)</li><li>Coogan’s Bluff (1968)</li><li>Death Becomes Her (1992)</li><li>Devil (2010)</li><li>Dirty Rotten Scoundrels (1988)</li><li>Don’t Breathe (2016)</li><li>Dracula Untold (2014)</li><li>Dressed to Kill (1980)</li><li>Duck You Sucker – A Fistful Of Dynamite (1972)</li><li>Eagle Eye (2008)</li><li>Eastern Promises (2007)</li><li>Fear (1996)</li><li>For Love Of The Game (1999)</li><li>Frost/Nixon (2009)</li><li>George A. Romero’s Land of the Dead (2005)</li><li>Halloween II (1981)</li><li>Halloween III: Season of the Witch (1982)</li><li>Hannibal (2001)</li><li>Hart’s War (2002)</li><li>Hour Of The Gun (1967)</li><li>Ice Age (2002)</li><li>Ice Age: Dawn of the Dinosaurs (2009)</li><li>It Came From Outer Space (1953)</li><li>Jack Reacher (2012)</li><li>Jack Reacher: Never Go Back (2016)</li><li>Leatherheads (2008)</li><li>Matinee (1993)</li><li>Max (2015)</li><li>Meet Joe Black (1998)</li><li>Morbius (2022)</li><li>Mr. Baseball (1992)</li><li>Munich (2006)</li><li>Now You See Me (2013)</li><li>Now You See Me 2 (2016)</li><li>Overboard (1987)</li><li>Prince of Darkness (1987)</li><li>Raging Bull (1980)</li><li>Rain Man (1988)</li><li>Raising Cain (1992)</li><li>Reality Bites (1994)</li><li>The Skeleton Key (2005)</li><li>Slaughterhouse-Five (1972)</li><li>Teen Wolf (1985)</li><li>Teen Wolf: The Movie (2023)</li><li>The Alamo (1960)</li><li>The Bone Collector (1999)</li><li>The Brink’s Job (1978)</li><li>The Edge Of Seventeen (2017)</li><li>The First Omen (2024)</li><li>The Great Escape (1963)</li><li>The Greatest Story Ever Told (1965)</li><li>The Horse Soldiers (1959)</li><li>The Longest Yard (2005)</li><li>The Motorcycle Diaries (2004)</li><li>The Mummy (2017)</li><li>The Muse (1999)</li><li>The Purge (2013)</li><li>The Purge: Anarchy (2014)</li><li>The Purge: Election Year (2016)</li><li>The River Wild (1994)</li><li>The Shepherd of the Hills (1941)</li><li>The Silence of the Lambs (1991)</li><li>The SpongeBob SquarePants Movie (2004)</li><li>The Thing (1982)</li><li>The Visit (2013)</li><li>The War Wagon (1967)</li><li>They Live (1988)</li><li>Uptown Girls (2003)</li><li>Valkyrie (2008)</li><li>Valley Girl (1983)</li><li>Van Helsing (2004)</li><li>Videodrome (1983)</li><li>Wild at Heart (1990)</li><li>Winchester ’73 (1950)</li><li>Windtalkers (2002)</li><li>Witness For The Prosecution (1957)</li><li>Trap (2024)</li></ul><p><strong>September 10</strong></p><ul><li>Bombshell (2019)</li></ul><p><strong>September 15</strong></p><ul><li>Demon Slayer – Kimetsu no Yaiba – The Movie: Mugen Train (2021)</li></ul><p><strong>September 23</strong></p><ul><li>The Love Hypothesis (2026)</li></ul><p><strong>September 24</strong></p><ul><li>The Fire Inside (2024)</li></ul><p><strong>September 25</strong></p><ul><li>Once Upon a Time… In Hollywood (2019)</li></ul><h3 class="article-body__section" id="section-live-sports"><span>Live sports</span></h3><p><strong>NWSL</strong></p><ul><li><strong>Fri Sept 4 at 10 p.m. ET: </strong>Bay FC vs. Kansas City Current</li><li><strong>Fri Sept 11 at 8 p.m. ET: </strong>Kansas City Current vs. Orlando Pride</li><li><strong>Fri Sept 18 at 10 p.m. ET: </strong>San Diego Wave vs. Kansas City Current</li><li><strong>Fri Sept 25 at 8 p.m. ET: </strong>Gotham FC vs. Chicago Stars</li></ul><p><strong>Yankees</strong></p><ul><li><strong>Wed Sept 9 at 7:05 p.m. ET:</strong> Colorado Rockies at New York Yankees</li><li><strong>Wed Sept 23 at 7:05 p.m. ET: </strong>Tampa Bay Rays at New York Yankees</li></ul><p><strong>Thursday Night Football</strong></p><ul><li><strong>Thu Sept 17 at 8:15 p.m. ET: </strong>Detroit Lions at Buffalo Bills</li><li><strong>Thu Sept 24 at 8:15 p.m. ET:</strong> Atlanta Falcons at Green Bay Packers</li></ul><p><strong>WNBA</strong></p><ul><li><strong>Sat Sept 19 at 7 p.m. ET: </strong>Chicago Sky at Atlanta Dream</li><li><strong>Sat Sept 19 at 9 p.m. ET: </strong>Seattle Storm at Golden State Valkyries</li><li><strong>Sun Sept 27: </strong>WNBA Playoffs First Round — matchup and times TBD</li></ul><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/3-free-movies-on-prime-video-you-probably-havent-seen-and-can-stream-without-a-subscription">3 free movies on Prime Video you probably haven't seen</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/the-last-sunrise-review-prime-videos-new-romantic-drama-looks-stunning-forgets-the-most-important-part">Prime Video’s new romantic drama forgets the most important part</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/new-on-netflix-in-september-2026-5-best-movies-and-shows-to-stream-plus-full-release-list">Everything new on Netflix in September 2026</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-september-2026-top-picks-and-all-the-new-movies-and-shows-to-watch</link>
                                                                            <description>
                            <![CDATA[ Our guide to the best new movies and shows you can stream on Prime Video in September 2026. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">QLZwwrsNirenMTjaZVnVea</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/q5arBLX4hzJNvdbpqJKhZe-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 28 Aug 2026 04:01:00 +0000</pubDate>                                                                                                                                <updated>Fri, 04 Sep 2026 14:49:46 +0000</updated>
                                                                                                                                            <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ alix.blackburn@futurenet.com (Alix Blackburn) ]]></author>                    <dc:creator><![CDATA[ Alix Blackburn ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/8UxyT2McanNFLYwQ6wC7di.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/q5arBLX4hzJNvdbpqJKhZe-1280-80.jpg">
                                                            <media:credit><![CDATA[Alamy]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on blue abstract background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on blue abstract background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on blue abstract background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/q5arBLX4hzJNvdbpqJKhZe-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Summer is almost behind us, and for me, September officially marks the beginning of fall. As the days get shorter and the weather starts to cool, streaming services like <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> are already looking ahead to the colder months. That means swapping out some of those quintessential summer movies for cozier watches, autumnal favorites, and plenty of new movies and shows to settle in with as the seasons change.</p><p>Prime Video’s September 2026 lineup is now fully revealed, and I’ve rounded up the biggest releases worth keeping an eye on, from major new arrivals to some of the month’s most anticipated titles. That includes a new spinoff series set in the world of “Reacher,” an adrenaline-fueled action-thriller, and a romantic comedy based on Ali Hazelwood’s novel.</p><p>Here are my standout picks for the month, followed by the full list of everything coming to Prime Video throughout September 2026.</p><h3 class="article-body__section" id="section-new-on-prime-video-in-september-2026-top-picks"><span>New on Prime Video in September 2026: Top picks</span></h3><h2 id="the-runner-september-2">‘The Runner’ (September 2)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/zz4rsZLcauY" allowfullscreen></iframe></div></div><p>Prime Video is known to have plenty of action-thrillers, from “Reacher” to “The Terminal List,” so it’s no surprise we’re getting another in the form of “The Runner.” This original movie feels like “Speed” meets “Taken.” It’s built on a ruthless premise that demands constant motion, meaning if the protagonist stops running, the consequences are instantly fatal. Clocking in at a brisk 84 minutes, the film seems to cut out all filler to deliver a non-stop burst of suspense. </p><p>Maia Marten (Gal Gadot) is a successful London lawyer whose morning jog takes a terrifying turn when she receives a call telling her that her young son has been kidnapped. The anonymous caller gives Maia a series of instructions she must follow if she wants to see him again, forcing her to race across London on foot. As the demands become increasingly dangerous, Maia is pushed further out of her comfort zone while trying to work out who is behind the kidnapping. </p><p><em><strong>Stream "The Runner" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H8NQDT9C" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from Sept. 2</strong></em></p><h2 id="the-grand-tour-september-13">‘The Grand Tour’ (September 13)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/Xtr-oPCp2GQ" allowfullscreen></iframe></div></div><p>This new chapter of “The Grand Tour” marks a major new beginning for the global motoring franchise. Shifting gears from the old-school pub banter of the original trio, the new era leans into a faster, slightly absurd, digital-first style of humor while keeping the spirit of wild road trips. The atmospheric core is built around putting totally unsuitable cars into unforgiving environments, like racing track cars across African deserts or testing high-performance vehicles against fighter jets.</p><p>“The Grand Tour” returns with a brand-new presenting trio as Francis Bourgeois joins James Engelsman and Thomas Holland for a six-episode motoring adventure. The new hosts travel across the globe, putting a range of unusual and high-performance cars through increasingly ambitious challenges. Their journey takes them from the deserts of Angola to Malaysia and California, where they explore local car culture, test cutting-edge vehicles and take on some seriously unconventional tasks. </p><p><em><strong>Stream "The Grand Tour" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0HCNPSDGH" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from Sept. 13</strong></em></p><h2 id="neagley-september-16">‘Neagley’ (September 16)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/BOzNaa_o9_g" allowfullscreen></iframe></div></div><p>For the first time, “Reacher” is getting its own spinoff with “Neagley,” which expands Prime Video’s massive action universe. Maria Sten steps into the spotlight to lead the series, reprising her fan-favorite role as the brilliant former 110th Special Investigations sergeant. The show is overseen directly by “Reacher” creator Nick Santora alongside Nicholas Wootton, ensuring the same hard-hitting, fast-paced DNA. Even better, Prime Video is dropping all 8 episodes at once on premiere day.</p><p>Frances Neagley (Maria Sten) is a former member of the Army’s 110th Special Investigations Unit who now works as a private investigator in Chicago. When someone she once knew and cared about dies in what appears to be a suspicious accident, Neagley refuses to accept the official explanation. She begins investigating the circumstances surrounding the death, drawing on her military experience and the skills she developed alongside Jack Reacher (Alan Ritchson). </p><p><em><strong>Stream "Neagley" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GY916X2W" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from Sept. 16</strong></em></p><h2 id="you-me-against-the-world-september-18">‘You+Me - Against the World’ (September 18)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/a4JBA0NBTwU" allowfullscreen></iframe></div></div><p>If you’re a romance fan, you’ll want to stay tuned for “You+Me - Against the World.” This French original film is clearly designed to capitalize on the massive global success of modern romantic thrillers. It’s adapted directly from the runaway hit book trilogy by popular French author Emma Green, which sold nearly a million copies across France. This film isn’t like standard campus romances, though, since the story is driven by an unidentified figure watching them from the shadows, threatening to expose life-ruining secrets.</p><p>Alma Lancaster (Vittoria Di Savoia) is an 18-year-old university student from a wealthy family who believes she is studying law, while she secretly follows her ambition of becoming a filmmaker. Her life changes when she meets Vadim Arcadi (Lucas Barski), a rebellious 20-year-old student with a troubled past. When the pair are forced to work together on a student film, their initial clashes gradually turn into a relationship neither expected. However, their growing connection is complicated when someone begins watching them.</p><p><em><strong>Stream "You+Me - Against the World" on </strong></em><a href="https://www.amazon.com/gp/video/storefront" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from Sept. 18</strong></em></p><h2 id="the-love-hypothesis-september-23">‘The Love Hypothesis’ (September 23)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/vo0N_i326as" allowfullscreen></iframe></div></div><p>One of the biggest releases this month has to be “The Love Hypothesis,” a major book-to-screen romantic comedy that could be a standout for the fall. The film is adapted from Ali Hazelwood’s 2021 New York Times bestselling novel, which originally began as a viral internet fan-fiction sensation before becoming a huge hit in the contemporary romance world. I have fairly high hopes for the adaptation, too, given that it was directed by Claire Scanlon, who previously helmed the incredible Netflix rom-com “Set It Up.” </p><p>Olive Smith (Lili Reinhart) is a Ph.D. candidate whose life takes an unexpected turn when she discovers that her best friend, Ahn (Rachel Marsh), has feelings for Olive’s crush. Hoping to convince Ahn that she has moved on, Olive impulsively kisses intimidating biology professor Adam Carlsen (Tom Bateman). When the incident sparks rumors around campus, Adam suggests they pretend to be a couple, giving them both something to gain from the arrangement. Soon, these rules become increasingly difficult to follow.</p><p><em><strong>Stream "The Love Hypothesis" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H4WZS7VX" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from Sept. 23</strong></em></p><h3 class="article-body__section" id="section-new-shows-on-prime-video-in-september-2026"><span>New shows on Prime Video in September 2026</span></h3><p><strong>September 1</strong></p><ul><li>American Classic (2026)</li><li>Desperate Housewives Seasons 1-8 (2004)</li><li>Everybody Loves Raymond Season 1-9 (1996)</li><li>Over the Garden Wall (2014)</li></ul><p><strong>September 4</strong></p><ul><li>ONE Championship on Prime (2026)</li></ul><p><strong>September 13</strong></p><ul><li>The Grand Tour season 7</li></ul><p><strong>September 15</strong></p><ul><li>Demon Slayer: Kimetsu no Yaiba S1-4 (2019)</li></ul><p><strong>September 16</strong></p><ul><li>Neagley (2026)</li></ul><p><strong>September 24</strong></p><ul><li>Go Deep: The DeSean Jackson Story (2026)</li></ul><h3 class="article-body__section" id="section-new-movies-on-prime-video-in-september-2026"><span>New movies on Prime Video in September 2026</span></h3><p><strong>September 1</strong></p><ul><li>A Serious Man (2009)</li><li>Ali G Indahouse: The Movie (2003)</li><li>Army Of Darkness (1993)</li><li>Atomic Blonde (2017)</li><li>Bird On A Wire (1990)</li><li>Blow Out (1981)</li><li>Blue Crush (2002)</li><li>Blue Crush 2 (2011)</li><li>Borat: Cultural Learnings of America For Make Benefit Glorious Nation of Kazakhstan (2006)</li><li>Breaking News In Yuba County (2021)</li><li>Breezy (1973)</li><li>Bruno (2009)</li><li>Cape Fear (1962)</li><li>Cape Fear (1991)</li><li>Carlito’s Way (1993)</li><li>Carlito’s Way: Rise To Power (2005)</li><li>Carrie (1976)</li><li>Carrie (2013)</li><li>Cat People (1982)</li><li>Chef (2014)</li><li>Collateral (2004)</li><li>Conor McGregor: Notorious (2017)</li><li>Coogan’s Bluff (1968)</li><li>Death Becomes Her (1992)</li><li>Devil (2010)</li><li>Dirty Rotten Scoundrels (1988)</li><li>Don’t Breathe (2016)</li><li>Dracula Untold (2014)</li><li>Dressed to Kill (1980)</li><li>Duck You Sucker – A Fistful Of Dynamite (1972)</li><li>Eagle Eye (2008)</li><li>Eastern Promises (2007)</li><li>Fear (1996)</li><li>For Love Of The Game (1999)</li><li>Frost/Nixon (2009)</li><li>George A. Romero’s Land of the Dead (2005)</li><li>Halloween II (1981)</li><li>Halloween III: Season of the Witch (1982)</li><li>Hannibal (2001)</li><li>Hart’s War (2002)</li><li>Hour Of The Gun (1967)</li><li>Ice Age (2002)</li><li>Ice Age: Dawn of the Dinosaurs (2009)</li><li>It Came From Outer Space (1953)</li><li>Jack Reacher (2012)</li><li>Jack Reacher: Never Go Back (2016)</li><li>Leatherheads (2008)</li><li>Matinee (1993)</li><li>Max (2015)</li><li>Meet Joe Black (1998)</li><li>Morbius (2022)</li><li>Mr. Baseball (1992)</li><li>Munich (2006)</li><li>Now You See Me (2013)</li><li>Now You See Me 2 (2016)</li><li>Overboard (1987)</li><li>Prince of Darkness (1987)</li><li>Raging Bull (1980)</li><li>Rain Man (1988)</li><li>Raising Cain (1992)</li><li>Reality Bites (1994)</li><li>The Skeleton Key (2005)</li><li>Slaughterhouse-Five (1972)</li><li>Teen Wolf (1985)</li><li>Teen Wolf: The Movie (2023)</li><li>The Alamo (1960)</li><li>The Bone Collector (1999)</li><li>The Brink’s Job (1978)</li><li>The Edge Of Seventeen (2017)</li><li>The First Omen (2024)</li><li>The Great Escape (1963)</li><li>The Greatest Story Ever Told (1965)</li><li>The Horse Soldiers (1959)</li><li>The Longest Yard (2005)</li><li>The Motorcycle Diaries (2004)</li><li>The Mummy (2017)</li><li>The Muse (1999)</li><li>The Purge (2013)</li><li>The Purge: Anarchy (2014)</li><li>The Purge: Election Year (2016)</li><li>The River Wild (1994)</li><li>The Shepherd of the Hills (1941)</li><li>The Silence of the Lambs (1991)</li><li>The SpongeBob SquarePants Movie (2004)</li><li>The Thing (1982)</li><li>The Visit (2013)</li><li>The War Wagon (1967)</li><li>They Live (1988)</li><li>Uptown Girls (2003)</li><li>Valkyrie (2008)</li><li>Valley Girl (1983)</li><li>Van Helsing (2004)</li><li>Videodrome (1983)</li><li>Wild at Heart (1990)</li><li>Winchester ’73 (1950)</li><li>Windtalkers (2002)</li><li>Witness For The Prosecution (1957)</li><li>Trap (2024)</li></ul><p><strong>September 10</strong></p><ul><li>Bombshell (2019)</li></ul><p><strong>September 15</strong></p><ul><li>Demon Slayer – Kimetsu no Yaiba – The Movie: Mugen Train (2021)</li></ul><p><strong>September 23</strong></p><ul><li>The Love Hypothesis (2026)</li></ul><p><strong>September 24</strong></p><ul><li>The Fire Inside (2024)</li></ul><p><strong>September 25</strong></p><ul><li>Once Upon a Time… In Hollywood (2019)</li></ul><h3 class="article-body__section" id="section-live-sports"><span>Live sports</span></h3><p><strong>NWSL</strong></p><ul><li><strong>Fri Sept 4 at 10 p.m. ET: </strong>Bay FC vs. Kansas City Current</li><li><strong>Fri Sept 11 at 8 p.m. ET: </strong>Kansas City Current vs. Orlando Pride</li><li><strong>Fri Sept 18 at 10 p.m. ET: </strong>San Diego Wave vs. Kansas City Current</li><li><strong>Fri Sept 25 at 8 p.m. ET: </strong>Gotham FC vs. Chicago Stars</li></ul><p><strong>Yankees</strong></p><ul><li><strong>Wed Sept 9 at 7:05 p.m. ET:</strong> Colorado Rockies at New York Yankees</li><li><strong>Wed Sept 23 at 7:05 p.m. ET: </strong>Tampa Bay Rays at New York Yankees</li></ul><p><strong>Thursday Night Football</strong></p><ul><li><strong>Thu Sept 17 at 8:15 p.m. ET: </strong>Detroit Lions at Buffalo Bills</li><li><strong>Thu Sept 24 at 8:15 p.m. ET:</strong> Atlanta Falcons at Green Bay Packers</li></ul><p><strong>WNBA</strong></p><ul><li><strong>Sat Sept 19 at 7 p.m. ET: </strong>Chicago Sky at Atlanta Dream</li><li><strong>Sat Sept 19 at 9 p.m. ET: </strong>Seattle Storm at Golden State Valkyries</li><li><strong>Sun Sept 27: </strong>WNBA Playoffs First Round — matchup and times TBD</li></ul><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/3-free-movies-on-prime-video-you-probably-havent-seen-and-can-stream-without-a-subscription">3 free movies on Prime Video you probably haven't seen</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/the-last-sunrise-review-prime-videos-new-romantic-drama-looks-stunning-forgets-the-most-important-part">Prime Video’s new romantic drama forgets the most important part</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/new-on-netflix-in-september-2026-5-best-movies-and-shows-to-stream-plus-full-release-list">Everything new on Netflix in September 2026</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to tell if Big Tech is secretly building an AI data center in your town ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Earlier this week, I wrote about the <a href="https://www.tomsguide.com/ai/states-are-starting-to-ban-the-secrecy-behind-ai-data-centers-heres-why-you-should-care" target="_blank">growing backlash against the secrecy surrounding AI data centers</a>.</p><p>One of the biggest problems for residents is that you can't object to, ask questions about or even investigate a data center if you don't know one is coming. And apparently, searching your town's planning agenda for the words "data center" may not be enough.</p><p>A new <a href="https://substack.com/home/post/p-212873299" target="_blank">report</a> from <a href="https://www.tomsguide.com/ai/erin-brockovich-just-launched-an-ai-data-center-map-and-it-highlights-a-growing-problem-tech-giants-are-avoiding">Erin Brockovich</a> and Suzanne Boothby highlights some of the surprisingly ordinary language that can appear in zoning applications, permits and council agendas long before a massive data center project is publicly identified.</p><p>That matters as the AI boom moves beyond the traditional data center hubs. According to <a href="https://www.pewresearch.org/short-reads/2026/04/13/most-new-data-centers-in-the-us-are-coming-to-rural-areas/" target="_blank">Pew Research Center</a>, 67% of planned U.S. data centers are in rural areas, while 39% are planned for counties that don't currently have one.</p><p>So if you're wondering whether one could be headed for your community, here are seven terms worth knowing.</p><h2 id="1-light-industrial">1. Light industrial</h2><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="BHokJd7HbaekT45XCrHZ9E" name="Sunset" alt="The sun sets behind a field of long grass" src="https://cdn.mos.cms.futurecdn.net/BHokJd7HbaekT45XCrHZ9E.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>This might be one of the easiest phrases to overlook. Many local zoning codes were written before anyone had to figure out where to put an enormous building filled with thousands of servers and GPUs. As a result, there may not actually be a zoning category for "data center."</p><p>Instead, developers can seek land zoned for "light industrial" or "heavy industrial" uses.</p><p>That doesn't mean every light-industrial zoning request is secretly a data center. But a request involving a particularly large piece of land — especially one near major electrical infrastructure — may be worth investigating.</p><p>In <a href="https://www.desmog.com/2026/04/07/how-data-center-developers-staked-their-claim-in-rural-georgia/" target="_blank">Coweta County, Georgia</a>, for example, early discussions around what eventually became the enormous Project Sail data center included rezoning rural land for light industrial use. The project is now planned as a nine-building data center campus covering more than four million square feet.</p><h2 id="2-data-processing">2. Data processing</h2><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="TxLTvGhtdYPvBwmqmvY9PB" name="1655453969.jpg" alt="man working on laptop in data center" src="https://cdn.mos.cms.futurecdn.net/TxLTvGhtdYPvBwmqmvY9PB.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p>This one sounds almost comically mundane considering what it can describe.</p><p>Rather than "AI data center," local documents may use terms such as "data processing," "data hosting" or "data processing and related services."</p><p>Again, this doesn't mean something is being hidden, but it means searching local government websites only for "data center" could cause you to miss relevant documents.</p><p>The <a href="https://www.thebrockovichreport.com/p/the-code-words-that-mean-a-data-center" target="_blank">Brockovich Report</a> points to Ashville, Ohio, where the village's own data center moratorium referred to uses involving "data processing, hosting and related services."</p><h2 id="3-technology-campus">3. Technology campus</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CgM32zeN5DhvnERkHmbvT5" name="shutterstock_2766334445-16x9" alt="data centers" src="https://cdn.mos.cms.futurecdn.net/CgM32zeN5DhvnERkHmbvT5.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>"Technology campus," "technology park," "advanced manufacturing" and even "flex space" can cover a wide range of legitimate developments. They can also encompass data centers.</p><p>A huge parcel of land, nearby high-voltage transmission lines, plans for a new electrical substation, backup generators or unusually large power requirements can tell you far more than the project's branding.</p><p>That's particularly important because a "technology campus" sounds very different from what residents may eventually see: enormous windowless buildings packed with servers, cooling equipment and electrical infrastructure.</p><h2 id="4-a-mysterious-39-project-something-39">4. A mysterious 'Project [Something]'</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5760px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uxVyMC4axbWv9HjcMQWGyh" name="shutterstock_2711380465-2" alt="ai data centers" src="https://cdn.mos.cms.futurecdn.net/uxVyMC4axbWv9HjcMQWGyh.jpg" mos="" align="middle" fullscreen="" width="5760" height="3240" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Project Sail. Project Louie. Project Baccara. <a href="https://www.tomsguide.com/ai/this-ai-data-center-will-be-bigger-than-2-000-walmarts-and-dump-23-atom-bombs-worth-of-energy-into-the-environment-every-day-and-locals-are-terrified">Project Stratos. </a>Once you start reading about proposed data centers, mysterious project names appear everywhere.</p><p>Companies commonly use codenames while assembling land and planning major developments, so spotting "Project Whatever" doesn't mean Google or Microsoft is secretly moving into town.</p><p>But it's another reason to look beyond recognizable company names.</p><p><a href="https://www.cowetaprojectsail.com/coweta-lp/" target="_blank">Project Sail</a> in Georgia, for example, was originally associated publicly with Atlas Development rather than Prologis, the giant industrial real-estate company now developing the data center campus.</p><p>In Indiana, environmental permitting documents for something called <a href="https://specials.idsnews.com/data-center-morgan-county-indiana-billion-dollar/" target="_blank">"Project Louie" </a>identify plans for a six-building data center campus.</p><h2 id="5-an-llc-you-39-ve-never-heard-of">5. An LLC you've never heard of</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:56.21%;"><img id="C6spLqZRurNkCvceiwaEnA" name="business" alt="business paperwork" src="https://cdn.mos.cms.futurecdn.net/C6spLqZRurNkCvceiwaEnA.png" mos="" align="middle" fullscreen="" width="813" height="457" 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>This is probably the biggest reason Googling "Is Amazon building a data center near me?" probably won't get you very far. Land purchases and development applications can be made through LLCs or real-estate affiliates rather than the company that will eventually use the site.</p><p>There are legitimate business reasons for doing this. Keeping a buyer's identity private while assembling a large site, for example, can prevent land prices from soaring as soon as word gets out that a trillion-dollar tech company is interested.</p><p>But for residents, it makes following a project considerably harder.</p><p>If an unfamiliar LLC suddenly appears on documents involving hundreds of acres of land, try searching the company name in your state's corporate registry. Look at the people associated with it, its registered address and whether those names connect to other developments.</p><h2 id="6-development-agreement-or-term-sheet">6. Development agreement or term sheet</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6580px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dj4Qr8Htctbyq9j78X7oYP" name="handshake" alt="handshake" src="https://cdn.mos.cms.futurecdn.net/dj4Qr8Htctbyq9j78X7oYP.jpg" mos="" align="middle" fullscreen="" width="6580" height="3701" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images/Rock Star)</span></figcaption></figure><p>If I saw these words on a town council agenda, up until recently I might skip over them. But here's why you should look closely at these keywords: A development agreement, framework or term sheet can spell out what a developer and local government have already discussed, including infrastructure improvements, tax arrangements and money for schools, roads or emergency services.</p><p>The details can also reveal the scale of a project long before the name of its eventual tenant becomes public.</p><p>One thing I'd look for in particular is new infrastructure. If an agreement suddenly includes millions of dollars for water-system upgrades, electrical infrastructure or road construction connected to an industrial project, it's worth asking why those upgrades are necessary and who will use them.</p><h2 id="7-emergency">7. Emergency</h2><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="Nb3wQbzRWfigMuBxxfrcLM" name="data center" alt="Data Center" src="https://cdn.mos.cms.futurecdn.net/Nb3wQbzRWfigMuBxxfrcLM.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Strange one to be on the list, I know. But an "emergency" resolution can change how quickly a government action takes effect.</p><p>That's what makes Ashville, Ohio, such an interesting example.</p><p>According to the <a href="https://www.thebrockovichreport.com/p/the-code-words-that-mean-a-data-center?" target="_blank">Brockovich Report</a>, a data center permit there was filed on a Friday. The following Monday, the village council approved an emergency 180-day moratorium on data center zoning permits. Two days later, the permit was issued anyway.</p><p>The dispute has since made its way into the courts. </p><p>For residents, the takeaway is simply that "emergency" is one of those words I'd stop scrolling for if it appeared beside a major land-use or development decision.</p><h2 id="the-takeaway">The takeaway</h2><p>All of these key words matter most when you put the clues together because noe of the terms prove much of anything on their own. </p><p>Local planning and zoning agendas are usually posted online, as are meeting minutes and many permit applications. Property records can tell you who bought the land, while state corporate databases can help identify who's behind an unfamiliar LLC.</p><p>Utility regulators are another place to look. A data center that isn't named publicly may still need an enormous amount of electricity, and substations, transmission upgrades and other infrastructure can leave their own paper trail.</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/perplexitys-new-local-first-ai-runs-on-your-pc-and-asks-before-using-the-cloud">Perplexity’s new local-first AI runs on your PC — and asks before using the cloud</a></li><li><a href="https://www.tomsguide.com/ai/chatgpt/chatgpt-can-learn-your-repetitive-tasks-by-watching-you-here-are-7-prompts-to-try">ChatGPT can learn your repetitive tasks by watching you — here are 7 prompts to try</a></li><li><a href="https://www.tomsguide.com/ai/chatgpt/the-best-way-to-use-chatgpt-for-writing-isnt-writing-7-prompts-i-use-to-make-it-my-creative-partner">The best way to use ChatGPT for writing isn't writing — 7 prompts I use to make it my creative partner</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/7-code-words-that-could-mean-an-ai-data-center-is-coming-to-your-town</link>
                                                                            <description>
                            <![CDATA[ AI data centers don't always appear as "data centers" in local documents. Here are 7 terms that could signal one is coming to your community. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mWSGoMHeGdoSPx8d8DYbqX</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NXW2NByAShwnmDyWcPWbpc-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 27 Aug 2026 15:30:20 +0000</pubDate>                                                                                                                                <updated>Thu, 27 Aug 2026 16:16:58 +0000</updated>
                                                                                                                                            <category><![CDATA[AI]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/zYjevim2q7FjQiefqpjZRB.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/NXW2NByAShwnmDyWcPWbpc-1280-80.jpg">
                                                            <media:credit><![CDATA[Getty Images/Roger Starnes Sr]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Skid steer in field]]></media:description>                                                            <media:text><![CDATA[Skid steer in field]]></media:text>
                                <media:title type="plain"><![CDATA[Skid steer in field]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NXW2NByAShwnmDyWcPWbpc-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Earlier this week, I wrote about the <a href="https://www.tomsguide.com/ai/states-are-starting-to-ban-the-secrecy-behind-ai-data-centers-heres-why-you-should-care" target="_blank">growing backlash against the secrecy surrounding AI data centers</a>.</p><p>One of the biggest problems for residents is that you can't object to, ask questions about or even investigate a data center if you don't know one is coming. And apparently, searching your town's planning agenda for the words "data center" may not be enough.</p><p>A new <a href="https://substack.com/home/post/p-212873299" target="_blank">report</a> from <a href="https://www.tomsguide.com/ai/erin-brockovich-just-launched-an-ai-data-center-map-and-it-highlights-a-growing-problem-tech-giants-are-avoiding">Erin Brockovich</a> and Suzanne Boothby highlights some of the surprisingly ordinary language that can appear in zoning applications, permits and council agendas long before a massive data center project is publicly identified.</p><p>That matters as the AI boom moves beyond the traditional data center hubs. According to <a href="https://www.pewresearch.org/short-reads/2026/04/13/most-new-data-centers-in-the-us-are-coming-to-rural-areas/" target="_blank">Pew Research Center</a>, 67% of planned U.S. data centers are in rural areas, while 39% are planned for counties that don't currently have one.</p><p>So if you're wondering whether one could be headed for your community, here are seven terms worth knowing.</p><h2 id="1-light-industrial">1. Light industrial</h2><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="BHokJd7HbaekT45XCrHZ9E" name="Sunset" alt="The sun sets behind a field of long grass" src="https://cdn.mos.cms.futurecdn.net/BHokJd7HbaekT45XCrHZ9E.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>This might be one of the easiest phrases to overlook. Many local zoning codes were written before anyone had to figure out where to put an enormous building filled with thousands of servers and GPUs. As a result, there may not actually be a zoning category for "data center."</p><p>Instead, developers can seek land zoned for "light industrial" or "heavy industrial" uses.</p><p>That doesn't mean every light-industrial zoning request is secretly a data center. But a request involving a particularly large piece of land — especially one near major electrical infrastructure — may be worth investigating.</p><p>In <a href="https://www.desmog.com/2026/04/07/how-data-center-developers-staked-their-claim-in-rural-georgia/" target="_blank">Coweta County, Georgia</a>, for example, early discussions around what eventually became the enormous Project Sail data center included rezoning rural land for light industrial use. The project is now planned as a nine-building data center campus covering more than four million square feet.</p><h2 id="2-data-processing">2. Data processing</h2><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="TxLTvGhtdYPvBwmqmvY9PB" name="1655453969.jpg" alt="man working on laptop in data center" src="https://cdn.mos.cms.futurecdn.net/TxLTvGhtdYPvBwmqmvY9PB.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p>This one sounds almost comically mundane considering what it can describe.</p><p>Rather than "AI data center," local documents may use terms such as "data processing," "data hosting" or "data processing and related services."</p><p>Again, this doesn't mean something is being hidden, but it means searching local government websites only for "data center" could cause you to miss relevant documents.</p><p>The <a href="https://www.thebrockovichreport.com/p/the-code-words-that-mean-a-data-center" target="_blank">Brockovich Report</a> points to Ashville, Ohio, where the village's own data center moratorium referred to uses involving "data processing, hosting and related services."</p><h2 id="3-technology-campus">3. Technology campus</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CgM32zeN5DhvnERkHmbvT5" name="shutterstock_2766334445-16x9" alt="data centers" src="https://cdn.mos.cms.futurecdn.net/CgM32zeN5DhvnERkHmbvT5.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>"Technology campus," "technology park," "advanced manufacturing" and even "flex space" can cover a wide range of legitimate developments. They can also encompass data centers.</p><p>A huge parcel of land, nearby high-voltage transmission lines, plans for a new electrical substation, backup generators or unusually large power requirements can tell you far more than the project's branding.</p><p>That's particularly important because a "technology campus" sounds very different from what residents may eventually see: enormous windowless buildings packed with servers, cooling equipment and electrical infrastructure.</p><h2 id="4-a-mysterious-39-project-something-39">4. A mysterious 'Project [Something]'</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5760px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uxVyMC4axbWv9HjcMQWGyh" name="shutterstock_2711380465-2" alt="ai data centers" src="https://cdn.mos.cms.futurecdn.net/uxVyMC4axbWv9HjcMQWGyh.jpg" mos="" align="middle" fullscreen="" width="5760" height="3240" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Project Sail. Project Louie. Project Baccara. <a href="https://www.tomsguide.com/ai/this-ai-data-center-will-be-bigger-than-2-000-walmarts-and-dump-23-atom-bombs-worth-of-energy-into-the-environment-every-day-and-locals-are-terrified">Project Stratos. </a>Once you start reading about proposed data centers, mysterious project names appear everywhere.</p><p>Companies commonly use codenames while assembling land and planning major developments, so spotting "Project Whatever" doesn't mean Google or Microsoft is secretly moving into town.</p><p>But it's another reason to look beyond recognizable company names.</p><p><a href="https://www.cowetaprojectsail.com/coweta-lp/" target="_blank">Project Sail</a> in Georgia, for example, was originally associated publicly with Atlas Development rather than Prologis, the giant industrial real-estate company now developing the data center campus.</p><p>In Indiana, environmental permitting documents for something called <a href="https://specials.idsnews.com/data-center-morgan-county-indiana-billion-dollar/" target="_blank">"Project Louie" </a>identify plans for a six-building data center campus.</p><h2 id="5-an-llc-you-39-ve-never-heard-of">5. An LLC you've never heard of</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:813px;"><p class="vanilla-image-block" style="padding-top:56.21%;"><img id="C6spLqZRurNkCvceiwaEnA" name="business" alt="business paperwork" src="https://cdn.mos.cms.futurecdn.net/C6spLqZRurNkCvceiwaEnA.png" mos="" align="middle" fullscreen="" width="813" height="457" 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>This is probably the biggest reason Googling "Is Amazon building a data center near me?" probably won't get you very far. Land purchases and development applications can be made through LLCs or real-estate affiliates rather than the company that will eventually use the site.</p><p>There are legitimate business reasons for doing this. Keeping a buyer's identity private while assembling a large site, for example, can prevent land prices from soaring as soon as word gets out that a trillion-dollar tech company is interested.</p><p>But for residents, it makes following a project considerably harder.</p><p>If an unfamiliar LLC suddenly appears on documents involving hundreds of acres of land, try searching the company name in your state's corporate registry. Look at the people associated with it, its registered address and whether those names connect to other developments.</p><h2 id="6-development-agreement-or-term-sheet">6. Development agreement or term sheet</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6580px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dj4Qr8Htctbyq9j78X7oYP" name="handshake" alt="handshake" src="https://cdn.mos.cms.futurecdn.net/dj4Qr8Htctbyq9j78X7oYP.jpg" mos="" align="middle" fullscreen="" width="6580" height="3701" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images/Rock Star)</span></figcaption></figure><p>If I saw these words on a town council agenda, up until recently I might skip over them. But here's why you should look closely at these keywords: A development agreement, framework or term sheet can spell out what a developer and local government have already discussed, including infrastructure improvements, tax arrangements and money for schools, roads or emergency services.</p><p>The details can also reveal the scale of a project long before the name of its eventual tenant becomes public.</p><p>One thing I'd look for in particular is new infrastructure. If an agreement suddenly includes millions of dollars for water-system upgrades, electrical infrastructure or road construction connected to an industrial project, it's worth asking why those upgrades are necessary and who will use them.</p><h2 id="7-emergency">7. Emergency</h2><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="Nb3wQbzRWfigMuBxxfrcLM" name="data center" alt="Data Center" src="https://cdn.mos.cms.futurecdn.net/Nb3wQbzRWfigMuBxxfrcLM.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Strange one to be on the list, I know. But an "emergency" resolution can change how quickly a government action takes effect.</p><p>That's what makes Ashville, Ohio, such an interesting example.</p><p>According to the <a href="https://www.thebrockovichreport.com/p/the-code-words-that-mean-a-data-center?" target="_blank">Brockovich Report</a>, a data center permit there was filed on a Friday. The following Monday, the village council approved an emergency 180-day moratorium on data center zoning permits. Two days later, the permit was issued anyway.</p><p>The dispute has since made its way into the courts. </p><p>For residents, the takeaway is simply that "emergency" is one of those words I'd stop scrolling for if it appeared beside a major land-use or development decision.</p><h2 id="the-takeaway">The takeaway</h2><p>All of these key words matter most when you put the clues together because noe of the terms prove much of anything on their own. </p><p>Local planning and zoning agendas are usually posted online, as are meeting minutes and many permit applications. Property records can tell you who bought the land, while state corporate databases can help identify who's behind an unfamiliar LLC.</p><p>Utility regulators are another place to look. A data center that isn't named publicly may still need an enormous amount of electricity, and substations, transmission upgrades and other infrastructure can leave their own paper trail.</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/perplexitys-new-local-first-ai-runs-on-your-pc-and-asks-before-using-the-cloud">Perplexity’s new local-first AI runs on your PC — and asks before using the cloud</a></li><li><a href="https://www.tomsguide.com/ai/chatgpt/chatgpt-can-learn-your-repetitive-tasks-by-watching-you-here-are-7-prompts-to-try">ChatGPT can learn your repetitive tasks by watching you — here are 7 prompts to try</a></li><li><a href="https://www.tomsguide.com/ai/chatgpt/the-best-way-to-use-chatgpt-for-writing-isnt-writing-7-prompts-i-use-to-make-it-my-creative-partner">The best way to use ChatGPT for writing isn't writing — 7 prompts I use to make it my creative partner</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 new to Prime Video thriller movies to watch this week — including a twisting detective mystery with Samuel L. Jackson (Aug. 25-31) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>August is drawing to a close, but there’s still time to stream some of the most popular thriller movies recently added to Prime Video. The <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a> has added a steady slew of new picks for subscribers to enjoy in recent weeks, and I’m picking out a trio that left a strong impression. </p><p>Whatever type of thriller you prefer, there is a pick for you below, from an action effort set across a frozen lake to a detective mystery through the dark streets of Scotland. There’s also an intense cat-and-mouse game with the final film performance of James Van Der Beek. </p><p>These are the latest thriller movies added to Prime Video, and all of them have made their way into the platform’s top 10 most-watched list. Add them to your watchlist this week.</p><h3 class="article-body__section" id="section-3-best-new-to-prime-video-thriller-movies-this-week"><span>3 best new to Prime Video thriller movies this week</span></h3><h2 id="icefall-2025">‘Icefall’ (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/NBSOfRsn_bs" allowfullscreen></iframe></div></div><p>“Icefall” might have released to little fanfare last November, but it’s carving out a sizeable audience now that it’s available to stream on Prime Video. This Joel Kinnaman-fronted action-thriller even briefly dethroned “Masters of the Universe” for the No. 1 spot in the platform’s top 10 most-watched. While He-Man has since reclaimed the top position, it proves that Prime Video subscribers find the movie’s pitch very appealing.</p><p>Set across the frozen wilderness, a younger ranger, Ani (Cara Jade Myers), arrests a mysterious poacher, Harlan (Kinnaman), who is living off the land to escape his traumatic past. However, when masked criminals attack, the two are forced to strike up an uneasy alliance. The assailants are hunting for a crashed plane holding millions of dollars in cash, and Harlan and Ani will need to put their differences aside if they want to survive the ordeal. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0FSDCCKY9" target="_blank" rel="nofollow"><em><strong>"Icefall" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="damaged-2024">‘Damaged’ (2024)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/Sg8NuJL5P_8" allowfullscreen></iframe></div></div><p>“Damaged” is another thriller movie that’s been moving up the Prime Video top 10 list this week. The critical reviews aren’t so impressive (it scores a very poor 27% on <a href="https://www.rottentomatoes.com/m/damaged_2024" target="_blank">Rotten Tomatoes</a>). However, it does star Samuel L. Jackson, which is clearly enough to get plenty of Prime subscribers interested. My advice is to keep your expectations in check if you decide to add this crime thriller to your watchlist this week. </p><p>Set in Scotland, a killer is on the loose, and the authorities are struggling to identify this sadistic serial murderer and put an end to their spree. Detective Dan Lawson (Jackson) from the Chicago homicide force is called in to assist. Working alongside Detective Walker Bravo (Vincent Cassel), Lawson discovers a pattern that mimics another serial killer that he investigated five years earlier. Could these new killings be linked, or the work of a copycat? </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0CVKZHM88" target="_blank" rel="nofollow"><em><strong>"Damaged" on Prime Video</strong></em></a><em><strong> now</strong></em></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/rooCFaczeXQ" allowfullscreen></iframe></div></div><p>“The Gates” marks the final movie appearance of James Van Der Beek. The “Dawson’s Creek” star passed away in February, and this chilling thriller was released posthumously. While the movie received largely middling reviews, Van Der Beek’s performance was widely praised, and “The Gates,” like my previous two picks in this roundup, has cemented itself in the Prime Video top 10. </p><p>“The Gate” sees a trio of college friends (Mason Gooding, Algee Smith and Keith Powers) on a road trip when they make what could be a fatal mistake by taking a shortcut through a remote gated community. Here they witness a murder and become trapped within the community's walls, hunted by the residents, who are led by a warped man of faith, Jacob (Van Der Beek). These friends must survive as they desperately seek an escape.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0GKQ3G3BL" target="_blank" rel="nofollow"><em><strong>"The Gates" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch#section-new-movies-on-prime-video-in-august-2026">New on Prime Video in August 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/3-romantic-comedies-on-prime-video-you-probably-havent-seen">3 romantic comedies on Prime Video you probably haven't seen</a></li><li><a href="https://www.tomsguide.com/news/how-to-get-prime-video-for-free">How to get Prime Video for free</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-new-to-prime-video-thriller-movies-to-watch-this-week-including-a-twisting-detective-mystery-with-samuel-l-jackson-aug-25-31</link>
                                                                            <description>
                            <![CDATA[ These recently added thriller movies on Prime Video will add some tension, twists, and adrenaline to your weekly streaming watchlist. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Lof57mhGHPQ8hfwFhMCzdV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/zWqHCpTxYNgNF2cEkpZ93U-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 25 Aug 2026 13:12:50 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ rory.mellon@futurenet.com (Rory Mellon) ]]></author>                    <dc:creator><![CDATA[ Rory Mellon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5Rv6LtQXMj5JB4Eu8Lt4Sn.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/zWqHCpTxYNgNF2cEkpZ93U-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on blue electric currents background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on blue electric currents background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on blue electric currents background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/zWqHCpTxYNgNF2cEkpZ93U-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>August is drawing to a close, but there’s still time to stream some of the most popular thriller movies recently added to Prime Video. The <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a> has added a steady slew of new picks for subscribers to enjoy in recent weeks, and I’m picking out a trio that left a strong impression. </p><p>Whatever type of thriller you prefer, there is a pick for you below, from an action effort set across a frozen lake to a detective mystery through the dark streets of Scotland. There’s also an intense cat-and-mouse game with the final film performance of James Van Der Beek. </p><p>These are the latest thriller movies added to Prime Video, and all of them have made their way into the platform’s top 10 most-watched list. Add them to your watchlist this week.</p><h3 class="article-body__section" id="section-3-best-new-to-prime-video-thriller-movies-this-week"><span>3 best new to Prime Video thriller movies this week</span></h3><h2 id="icefall-2025">‘Icefall’ (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/NBSOfRsn_bs" allowfullscreen></iframe></div></div><p>“Icefall” might have released to little fanfare last November, but it’s carving out a sizeable audience now that it’s available to stream on Prime Video. This Joel Kinnaman-fronted action-thriller even briefly dethroned “Masters of the Universe” for the No. 1 spot in the platform’s top 10 most-watched. While He-Man has since reclaimed the top position, it proves that Prime Video subscribers find the movie’s pitch very appealing.</p><p>Set across the frozen wilderness, a younger ranger, Ani (Cara Jade Myers), arrests a mysterious poacher, Harlan (Kinnaman), who is living off the land to escape his traumatic past. However, when masked criminals attack, the two are forced to strike up an uneasy alliance. The assailants are hunting for a crashed plane holding millions of dollars in cash, and Harlan and Ani will need to put their differences aside if they want to survive the ordeal. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0FSDCCKY9" target="_blank" rel="nofollow"><em><strong>"Icefall" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="damaged-2024">‘Damaged’ (2024)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/Sg8NuJL5P_8" allowfullscreen></iframe></div></div><p>“Damaged” is another thriller movie that’s been moving up the Prime Video top 10 list this week. The critical reviews aren’t so impressive (it scores a very poor 27% on <a href="https://www.rottentomatoes.com/m/damaged_2024" target="_blank">Rotten Tomatoes</a>). However, it does star Samuel L. Jackson, which is clearly enough to get plenty of Prime subscribers interested. My advice is to keep your expectations in check if you decide to add this crime thriller to your watchlist this week. </p><p>Set in Scotland, a killer is on the loose, and the authorities are struggling to identify this sadistic serial murderer and put an end to their spree. Detective Dan Lawson (Jackson) from the Chicago homicide force is called in to assist. Working alongside Detective Walker Bravo (Vincent Cassel), Lawson discovers a pattern that mimics another serial killer that he investigated five years earlier. Could these new killings be linked, or the work of a copycat? </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0CVKZHM88" target="_blank" rel="nofollow"><em><strong>"Damaged" on Prime Video</strong></em></a><em><strong> now</strong></em></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/rooCFaczeXQ" allowfullscreen></iframe></div></div><p>“The Gates” marks the final movie appearance of James Van Der Beek. The “Dawson’s Creek” star passed away in February, and this chilling thriller was released posthumously. While the movie received largely middling reviews, Van Der Beek’s performance was widely praised, and “The Gates,” like my previous two picks in this roundup, has cemented itself in the Prime Video top 10. </p><p>“The Gate” sees a trio of college friends (Mason Gooding, Algee Smith and Keith Powers) on a road trip when they make what could be a fatal mistake by taking a shortcut through a remote gated community. Here they witness a murder and become trapped within the community's walls, hunted by the residents, who are led by a warped man of faith, Jacob (Van Der Beek). These friends must survive as they desperately seek an escape.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0GKQ3G3BL" target="_blank" rel="nofollow"><em><strong>"The Gates" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch#section-new-movies-on-prime-video-in-august-2026">New on Prime Video in August 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/3-romantic-comedies-on-prime-video-you-probably-havent-seen">3 romantic comedies on Prime Video you probably haven't seen</a></li><li><a href="https://www.tomsguide.com/news/how-to-get-prime-video-for-free">How to get Prime Video for free</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Run, don't walk — I've spotted 9 of the best fitness Father's Day gifts that'll help dad work on his #DadBod ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/sales-events/fathers-day-gift-ideas-au">Father's Day 2026</a> is officially just over a week away, landing on Sunday, September 6 in Australia.</p><p>If your dad has an affinity for all things fitness and sports, then it's the perfect time to aid in his obsession. Whether he's a frequent gym-goer, likes the occasional game of golf or pickleball or even signs up for a ski pass every snow season, I've gathered 9 of the best fitness-focused Father's Day gifts below. </p><p>I've even included some fun new tech releases — like the <a href="https://www.amazon.com.au/Amazfit-Premium-Running-Sapphire-Workouts/dp/B0GM29C6PW" target="_blank">Amazfit Active 3 Premium</a> and the <a href="https://www.amazon.com.au/SHOKZ-Conduction-Headphones-Cancelling-Waterproof/dp/B0D2HKCMBP" target="_blank">Shokz OpenRun Pro 2 headphones</a>. Both are excellent for the running club dads who want to track every kilometre, but are also a good fit for the casual stroll dads who just want to get some extra steps in (and listen to their fave tunes while doing so!). </p><p>All of these items come with 4-star reviews on Amazon, and same-day or fast delivery is available ahead of next week. So scroll on to find the best Father's Day fitness gifts worth shopping this year. </p>        <div class="featured_product_block featured_block_hero" data-id="6dd72cb0-a031-11f1-9dc1-1538b0d4cad4">            <a href="https://www.amazon.com.au/Pickleball-Fiberglass-Approved-Honeycomb-Breathable/dp/B0CHDP1Q2B" data-model-name="Pickleball Paddle Set of 2" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/8foB5NE2eNSyV8LuaC9d6j.jpg" alt="Pickleball Paddle Set of 2 Pickle Ball Rackets,usapa Approved Pickleball Set of 2 Paddles,fiberglass Surface & 13mm Pp Honeycomb Core,breathable Handle,4 Indoor & Outdoor Balls,1 Pickleball Bag"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Glarollirace</div>                                        <div class="featured__title">Pickleball Paddle Set of 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72d28-a031-11f1-b1d3-a1a6836802e0">            <a href="https://www.amazon.com.au/Lamicall-Ski-Goggles-Skiing-Compatible/dp/B0G7WQBRLL" data-model-name="Skiing Goggles" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/3iYHopfEqSWEXUFXpj6mBi.jpg" alt="Lamicall Ski Goggles, Skiing Goggles - 【hd Spherical Lens】 Anti-Fog Snow Snowboard Goggles With Cat3 Lens, Wide Otg Over, Helmet Compatible, Uv400 Protection for Men & Women"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Lamicall</div>                                        <div class="featured__title">Skiing Goggles</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72d8c-a031-11f1-b115-9731b8324ab5">            <a href="https://www.amazon.com.au/Practice-Backyard-Simulator-Chipping-Training/dp/B0GQ3JVMZC" data-model-name="Golf Mat With Ball Tray" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:96.80%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/fY6HdWhguhTZgno4SrS7Ci.jpg" alt="Golf Mat With Ball Tray, 117x150 Cm Golf Hitting Mats Practice Outdoor Indoor for Backyard Driving Range Simulator Mat, Golf Chipping Swing Training Aid Mat, Gifts for Dad,golfers ﻿"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>KAPEICamper</div>                                        <div class="featured__title">Golf Mat With Ball Tray</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72de6-a031-11f1-a86d-8d0e94f73c9d">            <a href="https://www.amazon.com.au/ZENGVEE-Workout-Running-Shirts-Athletic/dp/B09YD5P3H6" data-model-name="5 Pack Men's Workout Running Shirts" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:129.87%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZNYbUFgrL3fnojJLP353Fj.jpg" alt="Zengvee 5 Pack Men's Workout Running Shirts Athletic Gym Tops"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ZENGVEE</div>                                        <div class="featured__title">5 Pack Men's Workout Running Shirts</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72e40-a031-11f1-9423-1fbfb4058d69">            <a href="https://www.amazon.com.au/Cimic-Athletic-Basketball-Zippered-Waistband%EF%BC%88BlackGreyGreenNavy/dp/B0DSB77KK8" data-model-name="5 Pack Mens Gym Running Shorts" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/zZHoZiNzNML5TP86qh8Z6j.jpg" alt="Cimic 5 Pack Mens Gym Running Shorts Workout Basketball Shorts"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Cimic</div>                                        <div class="featured__title">5 Pack Mens Gym Running Shorts</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72e9a-a031-11f1-98d2-31a20c182324">            <a href="https://www.amazon.com.au/Amazfit-Premium-Running-Sapphire-Workouts/dp/B0GM29C6PW" data-model-name="Active 3 Premium " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/8CKfQ8acGPupDJZrrUSSAi.jpg" alt="Amazfit Active 3 Premium Gps Running Smart Watch 45mm, 1.32" Amoled Sapphire Display, 12-Day Battery, 4gb, Nfc, Offline Maps, 170+ Workouts, 5 Atm, for Android & Iphone (apex Silver)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>AMAZFIT</div>                                        <div class="featured__title">Active 3 Premium </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72f4e-a031-11f1-a9a2-21835d17d0e5">            <a href="https://www.amazon.com.au/SHOKZ-Conduction-Headphones-Cancelling-Waterproof/dp/B0D2HKCMBP" data-model-name="Shokz OpenRun Pro 2 Bone Conduction Headphones" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jyvbmnn7EBVk5r5JWH85Sa.jpg" alt="Shokz Openrun Pro 2 Bone Conduction Headphones, 12h, Nc Mics, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shokz</div>                                        <div class="featured__title">OpenRun Pro 2 Bone Conduction Headphones</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72fe4-a031-11f1-b188-55b63e1b445e">            <a href="https://www.amazon.com.au/Fitness-Skipping-Analysis-Crossfit-Exercise/dp/B08N696C5V" data-model-name="Smart Jump Rope" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/M7BMm38f2prz4hhno9KgFi.jpg" alt="Renpho Smart Jump Rope With App, Fitness Training & Tracking, Lcd Display"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>RENPHO</div>                                        <div class="featured__title">Smart Jump Rope</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd73066-a031-11f1-936e-e711b01717c9">            <a href="https://www.amazon.com.au/HydroJug-New-Stainless-Steel-Shaker/dp/B0F68RPCQ5" data-model-name="Stainless Steel Shaker" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/tUjz7qWUBdMuc23yfsFgCi.jpg" alt="Hydrojug 24 Oz New Stainless Steel Shaker – Insulated, Leakproof, Bpa-Free With Silent Mixing Grate – No Clumps, No Noise – Premium Shaker for Fitness, Sports & Everyday Use, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>HydroJug</div>                                        <div class="featured__title">Stainless Steel Shaker</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/forget-socks-shop-these-30-expert-picked-skincare-and-haircare-buys-for-dad-this-fathers-day">Forget socks — shop these 30 expert-picked skincare and haircare buys for dad this Father's Day</a></li><li><a href="https://www.tomsguide.com/tech/forget-a-new-tie-ive-found-15-of-the-best-fathers-day-tech-gifts-that-will-make-you-his-favourite-child">Forget a new tie — I've found 15 of the best Father's Day tech gifts that will make you his favourite child</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/gamer-dad-ive-found-11-winning-fathers-day-gaming-ideas-to-level-up-your-gifting">Gamer dad? I've found 11 winning Father's Day gaming ideas to level up your gifting</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/fitness/run-dont-walk-ive-spotted-9-of-the-best-fitness-fathers-day-gifts-thatll-help-dad-work-on-his-dadbod</link>
                                                                            <description>
                            <![CDATA[ Fitness-focused dads need fitness-focused gifts — and I've found 9 that will arrive in time for Father's Day in Australia. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">9MwyJciFCAiWq3XTWcD6ZM</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/uvZW8mnoa69VxokseCFRnN-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Tue, 25 Aug 2026 03:55:45 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Wellness]]></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/png" url="https://cdn.mos.cms.futurecdn.net/uvZW8mnoa69VxokseCFRnN-1280-80.png">
                                                            <media:credit><![CDATA[Future / Edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[products on orange background]]></media:description>                                                            <media:text><![CDATA[products on orange background]]></media:text>
                                <media:title type="plain"><![CDATA[products on orange background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/uvZW8mnoa69VxokseCFRnN-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/sales-events/fathers-day-gift-ideas-au">Father's Day 2026</a> is officially just over a week away, landing on Sunday, September 6 in Australia.</p><p>If your dad has an affinity for all things fitness and sports, then it's the perfect time to aid in his obsession. Whether he's a frequent gym-goer, likes the occasional game of golf or pickleball or even signs up for a ski pass every snow season, I've gathered 9 of the best fitness-focused Father's Day gifts below. </p><p>I've even included some fun new tech releases — like the <a href="https://www.amazon.com.au/Amazfit-Premium-Running-Sapphire-Workouts/dp/B0GM29C6PW" target="_blank">Amazfit Active 3 Premium</a> and the <a href="https://www.amazon.com.au/SHOKZ-Conduction-Headphones-Cancelling-Waterproof/dp/B0D2HKCMBP" target="_blank">Shokz OpenRun Pro 2 headphones</a>. Both are excellent for the running club dads who want to track every kilometre, but are also a good fit for the casual stroll dads who just want to get some extra steps in (and listen to their fave tunes while doing so!). </p><p>All of these items come with 4-star reviews on Amazon, and same-day or fast delivery is available ahead of next week. So scroll on to find the best Father's Day fitness gifts worth shopping this year. </p>        <div class="featured_product_block featured_block_hero" data-id="6dd72cb0-a031-11f1-9dc1-1538b0d4cad4">            <a href="https://www.amazon.com.au/Pickleball-Fiberglass-Approved-Honeycomb-Breathable/dp/B0CHDP1Q2B" data-model-name="Pickleball Paddle Set of 2" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/8foB5NE2eNSyV8LuaC9d6j.jpg" alt="Pickleball Paddle Set of 2 Pickle Ball Rackets,usapa Approved Pickleball Set of 2 Paddles,fiberglass Surface & 13mm Pp Honeycomb Core,breathable Handle,4 Indoor & Outdoor Balls,1 Pickleball Bag"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Glarollirace</div>                                        <div class="featured__title">Pickleball Paddle Set of 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72d28-a031-11f1-b1d3-a1a6836802e0">            <a href="https://www.amazon.com.au/Lamicall-Ski-Goggles-Skiing-Compatible/dp/B0G7WQBRLL" data-model-name="Skiing Goggles" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/3iYHopfEqSWEXUFXpj6mBi.jpg" alt="Lamicall Ski Goggles, Skiing Goggles - 【hd Spherical Lens】 Anti-Fog Snow Snowboard Goggles With Cat3 Lens, Wide Otg Over, Helmet Compatible, Uv400 Protection for Men & Women"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Lamicall</div>                                        <div class="featured__title">Skiing Goggles</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72d8c-a031-11f1-b115-9731b8324ab5">            <a href="https://www.amazon.com.au/Practice-Backyard-Simulator-Chipping-Training/dp/B0GQ3JVMZC" data-model-name="Golf Mat With Ball Tray" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:96.80%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/fY6HdWhguhTZgno4SrS7Ci.jpg" alt="Golf Mat With Ball Tray, 117x150 Cm Golf Hitting Mats Practice Outdoor Indoor for Backyard Driving Range Simulator Mat, Golf Chipping Swing Training Aid Mat, Gifts for Dad,golfers ﻿"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>KAPEICamper</div>                                        <div class="featured__title">Golf Mat With Ball Tray</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72de6-a031-11f1-a86d-8d0e94f73c9d">            <a href="https://www.amazon.com.au/ZENGVEE-Workout-Running-Shirts-Athletic/dp/B09YD5P3H6" data-model-name="5 Pack Men's Workout Running Shirts" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:129.87%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZNYbUFgrL3fnojJLP353Fj.jpg" alt="Zengvee 5 Pack Men's Workout Running Shirts Athletic Gym Tops"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ZENGVEE</div>                                        <div class="featured__title">5 Pack Men's Workout Running Shirts</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72e40-a031-11f1-9423-1fbfb4058d69">            <a href="https://www.amazon.com.au/Cimic-Athletic-Basketball-Zippered-Waistband%EF%BC%88BlackGreyGreenNavy/dp/B0DSB77KK8" data-model-name="5 Pack Mens Gym Running Shorts" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/zZHoZiNzNML5TP86qh8Z6j.jpg" alt="Cimic 5 Pack Mens Gym Running Shorts Workout Basketball Shorts"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Cimic</div>                                        <div class="featured__title">5 Pack Mens Gym Running Shorts</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72e9a-a031-11f1-98d2-31a20c182324">            <a href="https://www.amazon.com.au/Amazfit-Premium-Running-Sapphire-Workouts/dp/B0GM29C6PW" data-model-name="Active 3 Premium " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/8CKfQ8acGPupDJZrrUSSAi.jpg" alt="Amazfit Active 3 Premium Gps Running Smart Watch 45mm, 1.32" Amoled Sapphire Display, 12-Day Battery, 4gb, Nfc, Offline Maps, 170+ Workouts, 5 Atm, for Android & Iphone (apex Silver)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>AMAZFIT</div>                                        <div class="featured__title">Active 3 Premium </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72f4e-a031-11f1-a9a2-21835d17d0e5">            <a href="https://www.amazon.com.au/SHOKZ-Conduction-Headphones-Cancelling-Waterproof/dp/B0D2HKCMBP" data-model-name="Shokz OpenRun Pro 2 Bone Conduction Headphones" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jyvbmnn7EBVk5r5JWH85Sa.jpg" alt="Shokz Openrun Pro 2 Bone Conduction Headphones, 12h, Nc Mics, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shokz</div>                                        <div class="featured__title">OpenRun Pro 2 Bone Conduction Headphones</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd72fe4-a031-11f1-b188-55b63e1b445e">            <a href="https://www.amazon.com.au/Fitness-Skipping-Analysis-Crossfit-Exercise/dp/B08N696C5V" data-model-name="Smart Jump Rope" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/M7BMm38f2prz4hhno9KgFi.jpg" alt="Renpho Smart Jump Rope With App, Fitness Training & Tracking, Lcd Display"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>RENPHO</div>                                        <div class="featured__title">Smart Jump Rope</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6dd73066-a031-11f1-936e-e711b01717c9">            <a href="https://www.amazon.com.au/HydroJug-New-Stainless-Steel-Shaker/dp/B0F68RPCQ5" data-model-name="Stainless Steel Shaker" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/tUjz7qWUBdMuc23yfsFgCi.jpg" alt="Hydrojug 24 Oz New Stainless Steel Shaker – Insulated, Leakproof, Bpa-Free With Silent Mixing Grate – No Clumps, No Noise – Premium Shaker for Fitness, Sports & Everyday Use, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>HydroJug</div>                                        <div class="featured__title">Stainless Steel Shaker</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/forget-socks-shop-these-30-expert-picked-skincare-and-haircare-buys-for-dad-this-fathers-day">Forget socks — shop these 30 expert-picked skincare and haircare buys for dad this Father's Day</a></li><li><a href="https://www.tomsguide.com/tech/forget-a-new-tie-ive-found-15-of-the-best-fathers-day-tech-gifts-that-will-make-you-his-favourite-child">Forget a new tie — I've found 15 of the best Father's Day tech gifts that will make you his favourite child</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/gamer-dad-ive-found-11-winning-fathers-day-gaming-ideas-to-level-up-your-gifting">Gamer dad? I've found 11 winning Father's Day gaming ideas to level up your gifting</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon raised prices on Echo, Fire TV, and Kindle devices — here's how much more you're going to pay ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Over the weekend, Amazon quietly raised prices for nearly all of the devices the company makes, including the <a href="https://www.tomsguide.com/us/amazon-echo-dot-gen-3,review-5811.html">Echo Dot</a>, <a href="https://www.tomsguide.com/tablets/e-readers/kindle-paperwhite-2024-review">Kindle Paperwhite</a> and<a href="https://www.tomsguide.com/entertainment/streaming-devices/amazon-launches-updated-fire-tv-stick-hd-thats-slimmer-and-doesnt-require-a-wall-adapter"> Fire TV Stick HD</a>. It's the latest in a series of price increases that have hit nearly every company. You can guess what's to blame.</p><p>Amazon's new prices vary in amount, with at least one device seeing a 60% increase; the company cited the ongoing <a href="https://www.tomsguide.com/computing/the-ram-crisis-is-so-much-bigger-than-pcs-heres-the-rest-of-the-products-caught-in-the-crossfire">RAM crisis</a> and component inflation. First spotted by <a href="https://fortune.com/2026/08/21/exclusive-amazon-quietly-hiked-prices-echo-fire-tv-kindle-eero-significant-increases-memory-costs/" target="_blank">Fortune</a>, some of the company's cheaper devices appear to be the most affected. </p><p>Here's what the new prices look like:</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FYUSTSLJG4LM47i68vjPdg" name="Echo Show 21-5" alt="Watching Fire TV on the Echo Show 21 in the kitchen" src="https://cdn.mos.cms.futurecdn.net/FYUSTSLJG4LM47i68vjPdg.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><caption>Smart speakers and displays</caption><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Original price</strong></p></th><th  ><p><strong>New price</strong></p></th><th  ><p><strong>Increase</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Echo Dot</strong></p></td><td  ><p>$49</p></td><td  ><p>$79</p></td><td  ><p>61.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Dot Max</strong></p></td><td  ><p>$99</p></td><td  ><p>$119</p></td><td  ><p>20.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Studio</strong></p></td><td  ><p>$219</p></td><td  ><p>$219</p></td><td  ><p>0%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Show 5</strong></p></td><td  ><p>$89</p></td><td  ><p>$99</p></td><td  ><p>11.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Show 8</strong></p></td><td  ><p>$179</p></td><td  ><p>$199</p></td><td  ><p>11.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Show 11</strong></p></td><td  ><p>$219</p></td><td  ><p>$249</p></td><td  ><p>13.7%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Show 15</strong></p></td><td  ><p>$299</p></td><td  ><p>$349</p></td><td  ><p>16.7%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Show 21</strong></p></td><td  ><p>$399</p></td><td  ><p>$499</p></td><td  ><p>25.1%</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Bqve9zMXpkbhMu5Ex5nCpb" name="Amazon Fire TV stick 4K max" alt="Amazon Fire TV stick 4K max" src="https://cdn.mos.cms.futurecdn.net/Bqve9zMXpkbhMu5Ex5nCpb.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><caption>Fire TV sticks</caption><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Original Price</strong></p></th><th  ><p><strong>New Price</strong></p></th><th  ><p><strong>Increase</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Amazon Fire TV Stick HD</strong></p></td><td  ><p>$35</p></td><td  ><p>$39</p></td><td  ><p>11.4%</p></td></tr><tr><td class="firstcol " ><p><strong>Fire TV Stick 4K Select</strong></p></td><td  ><p>$39</p></td><td  ><p>$49</p></td><td  ><p>25.6%</p></td></tr><tr><td class="firstcol " ><p><strong>Fire TV Stick 4K Max</strong></p></td><td  ><p>$59</p></td><td  ><p>$84</p></td><td  ><p>42.4%</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KVyvXAxLs7HEWJvCgxxEmM" name="Amazon Kindle Colorsoft-6.jpg" alt="Kindle Colorsoft" src="https://cdn.mos.cms.futurecdn.net/KVyvXAxLs7HEWJvCgxxEmM.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><caption>Kindles</caption><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Original Price</strong></p></th><th  ><p><strong>New Price</strong></p></th><th  ><p><strong>Increase</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Kindle</strong></p></td><td  ><p>$110</p></td><td  ><p>$149</p></td><td  ><p>35.5%</p></td></tr><tr><td class="firstcol " ><p><strong>Kindle Paperwhite</strong></p></td><td  ><p>$159</p></td><td  ><p>$199</p></td><td  ><p>25.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Kindle</strong> <strong>Colorsoft</strong></p></td><td  ><p>$249</p></td><td  ><p>$289</p></td><td  ><p>16.1%</p></td></tr></tbody></table></div><p>The Echo Dot saw the largest increase up 60% and $30, from $49 to $79, while the higher-tier Echo Show 11 is also getting a $30 hike from $219 to $249.</p><p>Additionally, the 16GB Kindle and Kindle Paperwhite saw hikes, going from $109 to $149 and $159 to $199, respectively. The Fire TV Stick HD only saw a $5 hike from $34 to $39 and the 4K Max rose from $59 to $84. </p><p>Surprisingly, the Amazon-owned <a href="https://www.tomsguide.com/face-off/ring-video-doorbell-3-vs-doorbell-pro">Ring lineup of doorbells and security cameras</a> didn't get more expensive. </p><p>An Amazon spokesperson told Tom's Guide, "After absorbing these increases for as long as we could, we recently adjusted pricing across our product lines." She noted that "significant" increases in memory and component costs led to the decision.</p><h2 id="still-a-cheaper-option">Still a cheaper option</h2><p>In some cases, despite the price hikes, Amazon's devices might still be the cheaper option. Unfortunately, that's because everything else also got more expensive this year. </p><p>In July, <a href="https://www.tomsguide.com/entertainment/streaming-devices/some-streaming-sticks-are-doubling-in-price-heres-whats-driving-up-costs">Roku bumped prices</a> on its streaming devices, with the Roku hitting $150 and the entry-level Roku Streaming Stick now at $40, up from $30.</p><p>Kindles might be more expensive than similar rival options like the Nook GlowLight 4, which comes with 32GB of memory for $149. </p><p>The Echo Dot, though, remains cheaper than the <a href="https://www.tomsguide.com/audio/smart-speakers/google-home-speaker-review">Google Home Speaker</a>, which starts at $99, though the gap is only $20 now. </p><h2 id="amazon-devices-outlook">Amazon Devices: Outlook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="g4rv5xpNBNaytDaHXvb2nM" name="Echo Show 8 (4th Gen)--3" alt="The Echo Show 8 (4th Gen) with the Alexa+ logo on screen on a desk" src="https://cdn.mos.cms.futurecdn.net/g4rv5xpNBNaytDaHXvb2nM.jpg" mos="" align="middle" fullscreen="" width="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 moment, only the Fire tablets seem to be unaffected — in fact, they’re the only devices currently on sale, but this could be due largely to the fact that it’s <a href="https://www.tomsguide.com/news/ultimate-back-to-school-guide">back to school season</a>. </p><p>For years, Amazon’s Echo smart home speakers have been the company’s trojan horse to get its voice assistant in homes across the world. Given that <a href="https://www.tomsguide.com/ai/alexa-release-date-cost-devices-and-all-the-new-ai-features">Alexa+</a> is available on virtually every Amazon Echo device, the company may have calculated that it’s saturated the market enough so that adoption of Alexa+ wouldn’t be affected by any potential loss in sales.</p><p>Still, the timing is curious, as the company also announced last week that <a href="https://www.aboutamazon.com/news/devices/alexa-plus-fire-tv-free-ai">Alexa+ would be available, free of charge</a>, to its newest Fire TV devices. That means if you have a current-generation Amazon Fire TV Stick, the Fire TV Cube, or Amazon Ember smart TV, you can get the full version of Amazon’s AI-enabled assistant without needing a Prime account, or paying $19.99 per month. </p><p>Regardless of whether you want Alexa+, more than ever it’s worth waiting until Black Friday or Prime Day to purchase one of Amazon’s devices (sadly, the new sale price may be the old regular price). If you don’t want to wait that long, some third-party retailers are still offering the original price. For example, you can still find the Amazon Echo Dot for $49 at <a href="https://www.target.com/p/amazon-echo-dot-5th-gen-2022-smart-speaker-with-alexa-glacier-white/-/A-87130563" target="_blank" rel="nofollow">Target</a> and <a href="https://www.homedepot.com/pep/Amazon-Echo-Dot-5th-Gen-Smart-Speaker-with-Alexa-Deep-Sea-Blue-B09B93ZDG4/323260668" target="_blank" rel="nofollow">Home Depot</a>. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/ai/my-12-year-old-noticed-a-missing-amazon-shopping-feature-so-i-tried-to-build-it-with-ai"><strong>My 12-year-old noticed a missing Amazon shopping feature — so I tried to build it with AI</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/sales-events/ive-had-amazon-prime-for-over-a-decade-heres-the-9-best-perks-youre-paying-for-but-probably-not-using"><strong>9 best Amazon Prime perks you're paying for but probably not using</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/sales-events/amazon-has-a-hidden-button-that-connects-you-with-a-real-customer-service-agent-heres-where-to-find-it"><strong>Amazon has a hidden button that connects you with a real customer service agent — here's where to find it</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/audio/smart-speakers/amazon-raised-prices-on-echo-fire-tv-and-kindle-devices-heres-how-much-more-youre-going-to-pay</link>
                                                                            <description>
                            <![CDATA[ This past weekend, Amazon raised prices on most of its devices, including the Echo, Kindle, Fire TV and eero. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Js4G5GSp5o9jKtzyUmMBcA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wqVGnqkQWWiAV4PhBUSR8-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 24 Aug 2026 20:38:20 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Smart Speakers]]></category>
                                                    <category><![CDATA[E-Readers]]></category>
                                                    <category><![CDATA[Routers]]></category>
                                                    <category><![CDATA[Streaming Devices]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Speakers]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Computing Hardware]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></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;br&gt;Send secure tips on Signal: scyo1.55.&lt;/p&gt; ]]></dc:description>
                                                                                                        <dc:contributor><![CDATA[ Mike Prospero ]]></dc:contributor>
                                                                    <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/wqVGnqkQWWiAV4PhBUSR8-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Echo Dot with Clock review]]></media:description>                                                            <media:text><![CDATA[Echo Dot with Clock review]]></media:text>
                                <media:title type="plain"><![CDATA[Echo Dot with Clock review]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wqVGnqkQWWiAV4PhBUSR8-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Over the weekend, Amazon quietly raised prices for nearly all of the devices the company makes, including the <a href="https://www.tomsguide.com/us/amazon-echo-dot-gen-3,review-5811.html">Echo Dot</a>, <a href="https://www.tomsguide.com/tablets/e-readers/kindle-paperwhite-2024-review">Kindle Paperwhite</a> and<a href="https://www.tomsguide.com/entertainment/streaming-devices/amazon-launches-updated-fire-tv-stick-hd-thats-slimmer-and-doesnt-require-a-wall-adapter"> Fire TV Stick HD</a>. It's the latest in a series of price increases that have hit nearly every company. You can guess what's to blame.</p><p>Amazon's new prices vary in amount, with at least one device seeing a 60% increase; the company cited the ongoing <a href="https://www.tomsguide.com/computing/the-ram-crisis-is-so-much-bigger-than-pcs-heres-the-rest-of-the-products-caught-in-the-crossfire">RAM crisis</a> and component inflation. First spotted by <a href="https://fortune.com/2026/08/21/exclusive-amazon-quietly-hiked-prices-echo-fire-tv-kindle-eero-significant-increases-memory-costs/" target="_blank">Fortune</a>, some of the company's cheaper devices appear to be the most affected. </p><p>Here's what the new prices look like:</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FYUSTSLJG4LM47i68vjPdg" name="Echo Show 21-5" alt="Watching Fire TV on the Echo Show 21 in the kitchen" src="https://cdn.mos.cms.futurecdn.net/FYUSTSLJG4LM47i68vjPdg.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><caption>Smart speakers and displays</caption><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Original price</strong></p></th><th  ><p><strong>New price</strong></p></th><th  ><p><strong>Increase</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Echo Dot</strong></p></td><td  ><p>$49</p></td><td  ><p>$79</p></td><td  ><p>61.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Dot Max</strong></p></td><td  ><p>$99</p></td><td  ><p>$119</p></td><td  ><p>20.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Studio</strong></p></td><td  ><p>$219</p></td><td  ><p>$219</p></td><td  ><p>0%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Show 5</strong></p></td><td  ><p>$89</p></td><td  ><p>$99</p></td><td  ><p>11.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Show 8</strong></p></td><td  ><p>$179</p></td><td  ><p>$199</p></td><td  ><p>11.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Show 11</strong></p></td><td  ><p>$219</p></td><td  ><p>$249</p></td><td  ><p>13.7%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Show 15</strong></p></td><td  ><p>$299</p></td><td  ><p>$349</p></td><td  ><p>16.7%</p></td></tr><tr><td class="firstcol " ><p><strong>Echo Show 21</strong></p></td><td  ><p>$399</p></td><td  ><p>$499</p></td><td  ><p>25.1%</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Bqve9zMXpkbhMu5Ex5nCpb" name="Amazon Fire TV stick 4K max" alt="Amazon Fire TV stick 4K max" src="https://cdn.mos.cms.futurecdn.net/Bqve9zMXpkbhMu5Ex5nCpb.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><caption>Fire TV sticks</caption><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Original Price</strong></p></th><th  ><p><strong>New Price</strong></p></th><th  ><p><strong>Increase</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Amazon Fire TV Stick HD</strong></p></td><td  ><p>$35</p></td><td  ><p>$39</p></td><td  ><p>11.4%</p></td></tr><tr><td class="firstcol " ><p><strong>Fire TV Stick 4K Select</strong></p></td><td  ><p>$39</p></td><td  ><p>$49</p></td><td  ><p>25.6%</p></td></tr><tr><td class="firstcol " ><p><strong>Fire TV Stick 4K Max</strong></p></td><td  ><p>$59</p></td><td  ><p>$84</p></td><td  ><p>42.4%</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KVyvXAxLs7HEWJvCgxxEmM" name="Amazon Kindle Colorsoft-6.jpg" alt="Kindle Colorsoft" src="https://cdn.mos.cms.futurecdn.net/KVyvXAxLs7HEWJvCgxxEmM.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div ><table><caption>Kindles</caption><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Original Price</strong></p></th><th  ><p><strong>New Price</strong></p></th><th  ><p><strong>Increase</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Kindle</strong></p></td><td  ><p>$110</p></td><td  ><p>$149</p></td><td  ><p>35.5%</p></td></tr><tr><td class="firstcol " ><p><strong>Kindle Paperwhite</strong></p></td><td  ><p>$159</p></td><td  ><p>$199</p></td><td  ><p>25.2%</p></td></tr><tr><td class="firstcol " ><p><strong>Kindle</strong> <strong>Colorsoft</strong></p></td><td  ><p>$249</p></td><td  ><p>$289</p></td><td  ><p>16.1%</p></td></tr></tbody></table></div><p>The Echo Dot saw the largest increase up 60% and $30, from $49 to $79, while the higher-tier Echo Show 11 is also getting a $30 hike from $219 to $249.</p><p>Additionally, the 16GB Kindle and Kindle Paperwhite saw hikes, going from $109 to $149 and $159 to $199, respectively. The Fire TV Stick HD only saw a $5 hike from $34 to $39 and the 4K Max rose from $59 to $84. </p><p>Surprisingly, the Amazon-owned <a href="https://www.tomsguide.com/face-off/ring-video-doorbell-3-vs-doorbell-pro">Ring lineup of doorbells and security cameras</a> didn't get more expensive. </p><p>An Amazon spokesperson told Tom's Guide, "After absorbing these increases for as long as we could, we recently adjusted pricing across our product lines." She noted that "significant" increases in memory and component costs led to the decision.</p><h2 id="still-a-cheaper-option">Still a cheaper option</h2><p>In some cases, despite the price hikes, Amazon's devices might still be the cheaper option. Unfortunately, that's because everything else also got more expensive this year. </p><p>In July, <a href="https://www.tomsguide.com/entertainment/streaming-devices/some-streaming-sticks-are-doubling-in-price-heres-whats-driving-up-costs">Roku bumped prices</a> on its streaming devices, with the Roku hitting $150 and the entry-level Roku Streaming Stick now at $40, up from $30.</p><p>Kindles might be more expensive than similar rival options like the Nook GlowLight 4, which comes with 32GB of memory for $149. </p><p>The Echo Dot, though, remains cheaper than the <a href="https://www.tomsguide.com/audio/smart-speakers/google-home-speaker-review">Google Home Speaker</a>, which starts at $99, though the gap is only $20 now. </p><h2 id="amazon-devices-outlook">Amazon Devices: Outlook</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="g4rv5xpNBNaytDaHXvb2nM" name="Echo Show 8 (4th Gen)--3" alt="The Echo Show 8 (4th Gen) with the Alexa+ logo on screen on a desk" src="https://cdn.mos.cms.futurecdn.net/g4rv5xpNBNaytDaHXvb2nM.jpg" mos="" align="middle" fullscreen="" width="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 moment, only the Fire tablets seem to be unaffected — in fact, they’re the only devices currently on sale, but this could be due largely to the fact that it’s <a href="https://www.tomsguide.com/news/ultimate-back-to-school-guide">back to school season</a>. </p><p>For years, Amazon’s Echo smart home speakers have been the company’s trojan horse to get its voice assistant in homes across the world. Given that <a href="https://www.tomsguide.com/ai/alexa-release-date-cost-devices-and-all-the-new-ai-features">Alexa+</a> is available on virtually every Amazon Echo device, the company may have calculated that it’s saturated the market enough so that adoption of Alexa+ wouldn’t be affected by any potential loss in sales.</p><p>Still, the timing is curious, as the company also announced last week that <a href="https://www.aboutamazon.com/news/devices/alexa-plus-fire-tv-free-ai">Alexa+ would be available, free of charge</a>, to its newest Fire TV devices. That means if you have a current-generation Amazon Fire TV Stick, the Fire TV Cube, or Amazon Ember smart TV, you can get the full version of Amazon’s AI-enabled assistant without needing a Prime account, or paying $19.99 per month. </p><p>Regardless of whether you want Alexa+, more than ever it’s worth waiting until Black Friday or Prime Day to purchase one of Amazon’s devices (sadly, the new sale price may be the old regular price). If you don’t want to wait that long, some third-party retailers are still offering the original price. For example, you can still find the Amazon Echo Dot for $49 at <a href="https://www.target.com/p/amazon-echo-dot-5th-gen-2022-smart-speaker-with-alexa-glacier-white/-/A-87130563" target="_blank" rel="nofollow">Target</a> and <a href="https://www.homedepot.com/pep/Amazon-Echo-Dot-5th-Gen-Smart-Speaker-with-Alexa-Deep-Sea-Blue-B09B93ZDG4/323260668" target="_blank" rel="nofollow">Home Depot</a>. </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><strong></strong><a href="https://www.tomsguide.com/ai/my-12-year-old-noticed-a-missing-amazon-shopping-feature-so-i-tried-to-build-it-with-ai"><strong>My 12-year-old noticed a missing Amazon shopping feature — so I tried to build it with AI</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/sales-events/ive-had-amazon-prime-for-over-a-decade-heres-the-9-best-perks-youre-paying-for-but-probably-not-using"><strong>9 best Amazon Prime perks you're paying for but probably not using</strong></a><strong></strong></li><li><strong></strong><a href="https://www.tomsguide.com/sales-events/amazon-has-a-hidden-button-that-connects-you-with-a-real-customer-service-agent-heres-where-to-find-it"><strong>Amazon has a hidden button that connects you with a real customer service agent — here's where to find it</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ My 12-year-old noticed a missing Amazon shopping feature — so I tried to build it with AI ]]></title>
                                                                                                <dc:content><![CDATA[ <p>My son was shopping for <a href="https://www.tomsguide.com/ai/i-let-chatgpt-gemini-and-alexa-shop-my-kids-back-to-school-supplies-only-one-got-it-right">middle school supplies </a>when he ran into a problem I assumed Amazon had solved years ago.</p><p>His best friend didn’t have the school supply list, so my son wanted to send him the contents of his own Amazon cart. The idea was simple: compare what they had picked and make sure they were buying the same binders, notebooks and other supplies.</p><p>Except there was no share button. Well, there is, but only for businesses using Amazon business. The only option for consumers is to share Lists, but that would have required my son to create a new list and move everything over after he had already filled his cart. It’s possible, but hardly intuitive. He didn’t want to create a registry. He wanted to send his friend the cart that was already sitting in front of him.</p><p>Amazon does have an official <a href="https://www.amazon.com/gp/help/customer/display.html?nodeId=Tmq9gNwVn8hDWiQuK8">Share Cart feature</a>, but it’s designed for Amazon Business accounts. That felt like a strangely obvious feature for Amazon to leave out. So I decided to see whether I could build it myself.</p><h2 id="i-asked-chatgpt-to-build-cartshare">I asked ChatGPT to build CartShare</h2><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="qVX6zaBeF2YDK6rYE5gKQi" name="8 - 2026-08-21T135756.347" alt="Amanda's AI Lab" src="https://cdn.mos.cms.futurecdn.net/qVX6zaBeF2YDK6rYE5gKQi.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I'm always looking for a reason to build something, but I really wondered if it would be possible to build something like this. For those who aren't developers, <a href="https://www.tomsguide.com/ai/ai-billionaires-advice-to-teens-master-vibe-coding-heres-5-prompts-to-get-started">vibe coding </a>has made it incredibly easy to see a problem and build a solution using natural language. <br><br>In this case, I described the problem to ChatGPT: I wanted a button that could read the products and quantities in an Amazon cart, turn them into a private link and let someone else open that link to see the same supplies.</p><p>The result was <a href="https://cartshare-amazon.amandacaswell.chatgpt.site/">CartShare</a>, a small website paired with a Chrome extension.</p><p>The proposed flow was exactly what my son had asked for. Open an Amazon cart, click the CartShare extension and copy the resulting link. The friend receiving it could check off anything they already owned, open individual products on Amazon or select the supplies they wanted.</p><p>The shared cart itself didn’t require an account or database. Product identifiers, titles and quantities were encoded inside the link, which meant CartShare didn’t need anyone’s Amazon password, delivery address or payment information.</p><p>ChatGPT built the interface, packaged the Chrome extension and published the site. It looked like a real product, complete with a name, privacy language and a large button promising to copy the selected products into the recipient’s Amazon cart.</p><h2 id="does-it-actually-work">Does it actually work? </h2><p>Yes...and no. The sharing page worked. CartShare could display a set of products, preserve their quantities and create a link that could be sent to someone else.</p><p>The one-click Amazon transfer did not. The prototype attempted to use an Amazon cart URL containing the product identifiers and quantities. When I tested it, Amazon returned a 500 error and said it didn’t support the session or client.</p><p>That meant the most satisfying part of the idea, pressing one button and watching someone else’s cart populate, couldn’t be treated as finished. The Chrome extension that reads the original cart still needs to be tested against a real Amazon cart as well, since Amazon can change the structure of its pages at any time.</p><p>I went back to the CartShare site and changed it. The transfer button was removed and replaced with a clear status notice explaining that the project worked only partially. Recipients could compare products and open them individually, but CartShare could not yet promise a complete cart-to-cart transfer.</p><p>It was a useful reminder of how deceptive vibe coding can be, even when nobody is trying to deceive anyone. AI can produce a polished interface before the underlying behavior has been properly tested. The buttons, colors and copy make the project feel finished, but a convincing website is not proof that the feature behind it works especially when you put it up against a big corporation like Amazon. </p><h2 id="bottom-line">Bottom line </h2><p>Could CartShare eventually work? Probably, although it may require both people to install the extension.</p><p>Instead of relying on Amazon’s rejected cart URL, a future version could open the recipient’s Amazon cart and add each selected product through the same visible controls a shopper would use. That would be slower and more fragile because the extension would need to keep up with changes to Amazon’s website. It would still avoid sharing passwords or payment information.</p><p>The other option is to stop short of automatically filling the recipient’s cart. Even a clean, shareable page showing the exact products and quantities is more convenient than asking someone to rebuild a cart from screenshots or create an Amazon List after the shopping is already done.</p><p>CartShare isn’t ready to replace Amazon’s missing share button. It is a public prototype that shows how the feature could work and, perhaps more importantly, where the simple idea runs into Amazon’s technical boundaries.</p><p>My son’s request took seconds to explain. Vibe coding turned it into a website and Chrome extension without requiring me to become a developer first. Getting from a convincing prototype to a dependable product is where the harder work begins but overall, I feel like this was a win. I personally enjoy seeing how things work, even if they don't fully come to fruition. </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/google-gemini-just-made-it-easy-to-remove-watermarks-from-ai-images-heres-how-to-do-it"><strong>Google Gemini just made it easy to remove watermarks from AI images — here’s how to do it</strong></a></li><li><a href="https://www.tomsguide.com/ai/i-dont-use-ai-to-write-my-emails-heres-how-i-use-it-to-manage-my-inbox-instead"><strong>I don’t use AI to write my emails — here’s how I use it to manage my inbox instead</strong></a></li><li><a href="https://www.tomsguide.com/ai/claude/5-features-that-give-claude-the-edge-over-chatgpt"><strong>5 features that give Claude the edge over ChatGPT</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/my-12-year-old-noticed-a-missing-amazon-shopping-feature-so-i-tried-to-build-it-with-ai</link>
                                                                            <description>
                            <![CDATA[ Amazon still won't let you share a cart. See what happened when I tried building a custom AI extension to fix the missing feature. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">v9F4rwFipug3YJmKNVBAVk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/E5Y3diZwGxdsUZM3t2FvVK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 23 Aug 2026 12:46:21 +0000</pubDate>                                                                                                                                <updated>Sun, 23 Aug 2026 22:00:57 +0000</updated>
                                                                                                                                            <category><![CDATA[AI]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/zYjevim2q7FjQiefqpjZRB.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/E5Y3diZwGxdsUZM3t2FvVK-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amazon deals]]></media:description>                                                            <media:text><![CDATA[Amazon deals]]></media:text>
                                <media:title type="plain"><![CDATA[Amazon deals]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/E5Y3diZwGxdsUZM3t2FvVK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>My son was shopping for <a href="https://www.tomsguide.com/ai/i-let-chatgpt-gemini-and-alexa-shop-my-kids-back-to-school-supplies-only-one-got-it-right">middle school supplies </a>when he ran into a problem I assumed Amazon had solved years ago.</p><p>His best friend didn’t have the school supply list, so my son wanted to send him the contents of his own Amazon cart. The idea was simple: compare what they had picked and make sure they were buying the same binders, notebooks and other supplies.</p><p>Except there was no share button. Well, there is, but only for businesses using Amazon business. The only option for consumers is to share Lists, but that would have required my son to create a new list and move everything over after he had already filled his cart. It’s possible, but hardly intuitive. He didn’t want to create a registry. He wanted to send his friend the cart that was already sitting in front of him.</p><p>Amazon does have an official <a href="https://www.amazon.com/gp/help/customer/display.html?nodeId=Tmq9gNwVn8hDWiQuK8">Share Cart feature</a>, but it’s designed for Amazon Business accounts. That felt like a strangely obvious feature for Amazon to leave out. So I decided to see whether I could build it myself.</p><h2 id="i-asked-chatgpt-to-build-cartshare">I asked ChatGPT to build CartShare</h2><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="qVX6zaBeF2YDK6rYE5gKQi" name="8 - 2026-08-21T135756.347" alt="Amanda's AI Lab" src="https://cdn.mos.cms.futurecdn.net/qVX6zaBeF2YDK6rYE5gKQi.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I'm always looking for a reason to build something, but I really wondered if it would be possible to build something like this. For those who aren't developers, <a href="https://www.tomsguide.com/ai/ai-billionaires-advice-to-teens-master-vibe-coding-heres-5-prompts-to-get-started">vibe coding </a>has made it incredibly easy to see a problem and build a solution using natural language. <br><br>In this case, I described the problem to ChatGPT: I wanted a button that could read the products and quantities in an Amazon cart, turn them into a private link and let someone else open that link to see the same supplies.</p><p>The result was <a href="https://cartshare-amazon.amandacaswell.chatgpt.site/">CartShare</a>, a small website paired with a Chrome extension.</p><p>The proposed flow was exactly what my son had asked for. Open an Amazon cart, click the CartShare extension and copy the resulting link. The friend receiving it could check off anything they already owned, open individual products on Amazon or select the supplies they wanted.</p><p>The shared cart itself didn’t require an account or database. Product identifiers, titles and quantities were encoded inside the link, which meant CartShare didn’t need anyone’s Amazon password, delivery address or payment information.</p><p>ChatGPT built the interface, packaged the Chrome extension and published the site. It looked like a real product, complete with a name, privacy language and a large button promising to copy the selected products into the recipient’s Amazon cart.</p><h2 id="does-it-actually-work">Does it actually work? </h2><p>Yes...and no. The sharing page worked. CartShare could display a set of products, preserve their quantities and create a link that could be sent to someone else.</p><p>The one-click Amazon transfer did not. The prototype attempted to use an Amazon cart URL containing the product identifiers and quantities. When I tested it, Amazon returned a 500 error and said it didn’t support the session or client.</p><p>That meant the most satisfying part of the idea, pressing one button and watching someone else’s cart populate, couldn’t be treated as finished. The Chrome extension that reads the original cart still needs to be tested against a real Amazon cart as well, since Amazon can change the structure of its pages at any time.</p><p>I went back to the CartShare site and changed it. The transfer button was removed and replaced with a clear status notice explaining that the project worked only partially. Recipients could compare products and open them individually, but CartShare could not yet promise a complete cart-to-cart transfer.</p><p>It was a useful reminder of how deceptive vibe coding can be, even when nobody is trying to deceive anyone. AI can produce a polished interface before the underlying behavior has been properly tested. The buttons, colors and copy make the project feel finished, but a convincing website is not proof that the feature behind it works especially when you put it up against a big corporation like Amazon. </p><h2 id="bottom-line">Bottom line </h2><p>Could CartShare eventually work? Probably, although it may require both people to install the extension.</p><p>Instead of relying on Amazon’s rejected cart URL, a future version could open the recipient’s Amazon cart and add each selected product through the same visible controls a shopper would use. That would be slower and more fragile because the extension would need to keep up with changes to Amazon’s website. It would still avoid sharing passwords or payment information.</p><p>The other option is to stop short of automatically filling the recipient’s cart. Even a clean, shareable page showing the exact products and quantities is more convenient than asking someone to rebuild a cart from screenshots or create an Amazon List after the shopping is already done.</p><p>CartShare isn’t ready to replace Amazon’s missing share button. It is a public prototype that shows how the feature could work and, perhaps more importantly, where the simple idea runs into Amazon’s technical boundaries.</p><p>My son’s request took seconds to explain. Vibe coding turned it into a website and Chrome extension without requiring me to become a developer first. Getting from a convincing prototype to a dependable product is where the harder work begins but overall, I feel like this was a win. I personally enjoy seeing how things work, even if they don't fully come to fruition. </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/google-gemini-just-made-it-easy-to-remove-watermarks-from-ai-images-heres-how-to-do-it"><strong>Google Gemini just made it easy to remove watermarks from AI images — here’s how to do it</strong></a></li><li><a href="https://www.tomsguide.com/ai/i-dont-use-ai-to-write-my-emails-heres-how-i-use-it-to-manage-my-inbox-instead"><strong>I don’t use AI to write my emails — here’s how I use it to manage my inbox instead</strong></a></li><li><a href="https://www.tomsguide.com/ai/claude/5-features-that-give-claude-the-edge-over-chatgpt"><strong>5 features that give Claude the edge over ChatGPT</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 best new to Prime Video shows to binge-watch this weekend (August 22-23) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>August is barreling on, and <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">the best streaming services</a> are bursting with a fresh crop of new films and TV series for us to binge on our couches. <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> regularly updates its already extensive streaming library every month, and <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">August 2026</a> was no exception. </p><p>Given how many new shows have popped up, I'm rounding up the best of the bunch to help you skip the scrolling and get to streaming. Of everything added, there's only three worth adding to your watchlist: Alan Ritchson's high-octane return in <strong>"Reacher" season 4</strong>, the messy YA drama "<strong>Sterling Point"</strong> that everyone is talking about, and the crossover episode you never expected, <strong>"The Chosen in the Wild with Bear Grylls."</strong></p><p>So without further ado, here are the three best new to Prime Video shows to binge this weekend. </p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="39-reacher-39-season-4-3">'Reacher' season 4</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/PCbp1FfipPg" allowfullscreen></iframe></div></div><p><strong>What it's about:</strong> Jack Reacher (Alan Ritchson) is back in Philadelphia, where he witnesses a woman (Karen Kwong-Chip), kill herself on a subway car. He's hounded by police, federal agents and the CIA, who all think she slipped him something before she died. Our action hero gets drawn into a conspiracy that goes all the way to the very top. Season 4 adapts Lee Child’s "Gone Tomorrow," sending Reacher on a dangerous search for answers, and along the way, he’s forced to confront his guilt over the woman's fate that set everything in motion.</p><p><strong>Why you should watch it: </strong>This crime thriller delivers in all the ways you'd expect — and much of the credit goes to the perfectly cast Alan Ritchson, who kills it yet again.</p><p><em><strong>Stream </strong></em><a href="https://www.amazon.com/dp/B09ML1QV1S" target="_blank" rel="nofollow"><em><strong>"Reacher" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-sterling-point-39-2">'Sterling Point'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/bwwF3TuJQME" allowfullscreen></iframe></div></div><p><strong>What it's about: </strong>"Sterling Point" is a grounded YA mystery drama starring Ella Rubin as Annie Jacobson, a 17-year-old who inherits a remote island in Canada from her estranged grandfather. She secretly travels to the mysterious property to figure out why their grandfather chose her and learn more about her family history. While she's digging up long-buried secrets, she gets caught in a love triangle and discovers that a girl named Ramona (Amélie Hoeferle) is already staying there and appears to have a connection to her own family.</p><p><strong>Why you should watch it: </strong>"Sterling Point" debuted with a strong 92% critics score on Rotten Tomatoes and has been getting plenty of buzz on social media. It's a messy coming-of-age teen drama that's fun to lose yourself — and at only eight episodes, it's perfect for a weekend binge. </p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/detail/0K94N2UBORZCLPIC46VTJQ093E" target="_blank" rel="nofollow"><em><strong>"Sterling Point" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-the-chosen-in-the-wild-with-bear-grylls-39-2">'The Chosen in the Wild with Bear Grylls'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/wp4BuflDszk" allowfullscreen></iframe></div></div><p><strong>What it's about: </strong>The famous survivalist Bear Grylls takes Jesus and his followers on devilishly tough adventures in the deserts of Utah. Or rather, he takes the actors who play them in "The Chosen," the multi-season series about the life, death, and resurrection of Jesus of Nazareth, along with showrunner Dallas Jenkins as they discuss faith and nature's trials and tribulations. </p><p><strong>Why you should watch it: </strong>I'm not sure who exactly was clamoring for Bear Grylls content, but this seems made in a lab for men with religious trauma. </p><p><em><strong>Stream </strong></em><a href="https://www.primevideo.com/detail/0GOZ7CFS15K5QZI82RSB4MMZB9" target="_blank" rel="nofollow"><em><strong>"The Chosen in the Wild with Bear Grylls" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-videos-upcoming-ai-makeover-could-completely-change-how-you-decide-what-to-watch-next">Prime Video's upcoming AI makeover could completely change how you decide what to watch next</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-videos-new-shark-thriller-movie-has-one-big-problem-lurking-beneath-the-surface-and-its-not-the-shark">Prime Video’s new shark thriller movie has one big problem lurking beneath the surface, and it’s not the shark</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-5-gripping-movies-you-can-stream-for-free-and-one-is-an-action-packed-western-film">Prime Video just added 5 gripping movies you can stream for free — and one is an action-packed western film</a></li></ul><div data-model-name="Amazon Prime Video,Hulu,Netflix,Paramount Plus,Peacock TV,Disney+,Apple TV" data-widget-type="multimodelreview" data-widget-title="Today's best streaming service deals"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-best-new-to-prime-video-shows-to-binge-watch-this-weekend-august-22-23</link>
                                                                            <description>
                            <![CDATA[ Planning to binge-watch something new this weekend? Here's our weekly guide to the best new to Prime Video series you should be streaming right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">urrFBA2vhF5wbu6UJCpD4A</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aozP98atByMPCDdiMyJSPC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 22 Aug 2026 18:50:18 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alyse Stanley ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/BxNnQuBWRHqkv5xWZsjrjc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alyse Stanley is a news editor at Tom’s Guide, overseeing weekend coverage and writing about the latest in tech, gaming, and entertainment. Before Tom’s Guide, Alyse worked as an editor for the Washington Post’s sunsetted video game section, Launcher, where she also wrote about indie games you shouldn’t miss, how to tackle your gaming backlog, and all things Nintendo. She previously led Gizmodo’s weekend news desk covering breaking tech news and has written game reviews and features for outlets like Polygon, Unwinnable, and Rock, Paper, Shotgun. A recent Chicago-area transplant born and raised in Virginia, Alyse is a big fan of horror movies, cartoons, and roller skating. She&#039;s also a puzzle fan and can often be found contributing to the NYT Connections coverage on Tom&#039;s Guide &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/aozP98atByMPCDdiMyJSPC-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on teal bubbles background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on teal bubbles background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on teal bubbles background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aozP98atByMPCDdiMyJSPC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>August is barreling on, and <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">the best streaming services</a> are bursting with a fresh crop of new films and TV series for us to binge on our couches. <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> regularly updates its already extensive streaming library every month, and <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">August 2026</a> was no exception. </p><p>Given how many new shows have popped up, I'm rounding up the best of the bunch to help you skip the scrolling and get to streaming. Of everything added, there's only three worth adding to your watchlist: Alan Ritchson's high-octane return in <strong>"Reacher" season 4</strong>, the messy YA drama "<strong>Sterling Point"</strong> that everyone is talking about, and the crossover episode you never expected, <strong>"The Chosen in the Wild with Bear Grylls."</strong></p><p>So without further ado, here are the three best new to Prime Video shows to binge this weekend. </p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="39-reacher-39-season-4-3">'Reacher' season 4</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/PCbp1FfipPg" allowfullscreen></iframe></div></div><p><strong>What it's about:</strong> Jack Reacher (Alan Ritchson) is back in Philadelphia, where he witnesses a woman (Karen Kwong-Chip), kill herself on a subway car. He's hounded by police, federal agents and the CIA, who all think she slipped him something before she died. Our action hero gets drawn into a conspiracy that goes all the way to the very top. Season 4 adapts Lee Child’s "Gone Tomorrow," sending Reacher on a dangerous search for answers, and along the way, he’s forced to confront his guilt over the woman's fate that set everything in motion.</p><p><strong>Why you should watch it: </strong>This crime thriller delivers in all the ways you'd expect — and much of the credit goes to the perfectly cast Alan Ritchson, who kills it yet again.</p><p><em><strong>Stream </strong></em><a href="https://www.amazon.com/dp/B09ML1QV1S" target="_blank" rel="nofollow"><em><strong>"Reacher" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-sterling-point-39-2">'Sterling Point'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/bwwF3TuJQME" allowfullscreen></iframe></div></div><p><strong>What it's about: </strong>"Sterling Point" is a grounded YA mystery drama starring Ella Rubin as Annie Jacobson, a 17-year-old who inherits a remote island in Canada from her estranged grandfather. She secretly travels to the mysterious property to figure out why their grandfather chose her and learn more about her family history. While she's digging up long-buried secrets, she gets caught in a love triangle and discovers that a girl named Ramona (Amélie Hoeferle) is already staying there and appears to have a connection to her own family.</p><p><strong>Why you should watch it: </strong>"Sterling Point" debuted with a strong 92% critics score on Rotten Tomatoes and has been getting plenty of buzz on social media. It's a messy coming-of-age teen drama that's fun to lose yourself — and at only eight episodes, it's perfect for a weekend binge. </p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/detail/0K94N2UBORZCLPIC46VTJQ093E" target="_blank" rel="nofollow"><em><strong>"Sterling Point" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="39-the-chosen-in-the-wild-with-bear-grylls-39-2">'The Chosen in the Wild with Bear Grylls'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/wp4BuflDszk" allowfullscreen></iframe></div></div><p><strong>What it's about: </strong>The famous survivalist Bear Grylls takes Jesus and his followers on devilishly tough adventures in the deserts of Utah. Or rather, he takes the actors who play them in "The Chosen," the multi-season series about the life, death, and resurrection of Jesus of Nazareth, along with showrunner Dallas Jenkins as they discuss faith and nature's trials and tribulations. </p><p><strong>Why you should watch it: </strong>I'm not sure who exactly was clamoring for Bear Grylls content, but this seems made in a lab for men with religious trauma. </p><p><em><strong>Stream </strong></em><a href="https://www.primevideo.com/detail/0GOZ7CFS15K5QZI82RSB4MMZB9" target="_blank" rel="nofollow"><em><strong>"The Chosen in the Wild with Bear Grylls" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-videos-upcoming-ai-makeover-could-completely-change-how-you-decide-what-to-watch-next">Prime Video's upcoming AI makeover could completely change how you decide what to watch next</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-videos-new-shark-thriller-movie-has-one-big-problem-lurking-beneath-the-surface-and-its-not-the-shark">Prime Video’s new shark thriller movie has one big problem lurking beneath the surface, and it’s not the shark</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-5-gripping-movies-you-can-stream-for-free-and-one-is-an-action-packed-western-film">Prime Video just added 5 gripping movies you can stream for free — and one is an action-packed western film</a></li></ul><div data-model-name="Amazon Prime Video,Hulu,Netflix,Paramount Plus,Peacock TV,Disney+,Apple TV" data-widget-type="multimodelreview" data-widget-title="Today's best streaming service deals"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget a new tie — I've found 15 of the best Father's Day tech gifts that will make you his favourite child ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/sales-events/fathers-day-gift-ideas-au">Father's Day 2026</a> is just 17 days away, landing on Sunday, September 6 in Australia, and there's no time like the present to shop for a perfect gift for dad. </p><p>Having said that, sometimes shopping for dad-worthy gifts can be quite challenging, as no matter how much you spend, it doesn't always equate to your father's (or father figure's) value in your life. With that in mind, I've compiled 15 of the best tech-focused gifts that will improve and upgrade dad's everyday life. </p><p>Whether he's constantly on-the-go to his next adventure, or making memories with the grandkids, there's something here for every type of dad — and he doesn't need to be tech-savvy to enjoy 'em. </p><p>I've deliberately chosen a wide variety of items that include top-notch tech gizmos like power banks, wireless headphones and security cameras. As a tech writer, I've also included some of my favourite devices that I use almost every day, such as a <a href="https://www.amazon.com.au/Electronic-Auto-Rotate-Slideshow-Mountable-Remotely/dp/B0DZWS38S2" target="_blank">Frameo digital picture frame</a>, an <a href="https://www.amazon.com.au/Insta360-Retro-Bundle-Special-White/dp/B0GSRQLQF2" target="_blank">Insta360 tiny camera</a> and a <a href="https://www.amazon.com.au/Belkin-Compatible-Wireless-Charging-Adjustable/dp/B0FMXGMWN1" target="_blank">Belkin charging station</a> (which my FIL may or may not be getting this year 👀). </p><p>All of these items come from top-rated retailers, like Amazon, JB Hi-Fi and The Good Guys, with each ensuring quicker-than-ever delivery. So, you can rest assured that dad will get his gift right on time for his big day. </p><p>Enough preamble — here are the best Father's Day tech gifts I've found this year. </p>        <div class="featured_product_block featured_block_hero" data-id="b99ebd7c-9b70-11f1-b696-056581ac2c5a">            <a href="https://www.amazon.com.au/dp/B0DYBR8611" data-model-name="Echo Show 8" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:150%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RrokQRnNeiKmPKR6fGg4PZ.jpg" alt="Amazon Echo Show 8 (newest Gen) - Seamlessly Redesigned, Vibrant Hd 8.7" Display With Spatial Audio and Alexa—perfect for Your Kitchen Counter, Glacier White, With Alexa+ Early Access"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Amazon</div>                                        <div class="featured__title">Echo Show 8</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ebe26-9b70-11f1-823d-2f3b38e754f7">            <a href="https://www.amazon.com.au/INIU-Smallest-20000mAh-Portable-Compatible/dp/B0DCMW8SJV" data-model-name="22.5W Mini Power Bank" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/WBxuqVbDGqG3dwGANNKycZ.jpg" alt="Iniu Power Bank, Smallest 20000mah 22.5w Fast Charging Portable Charger"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>INIU</div>                                        <div class="featured__title">22.5W Mini Power Bank</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ebea8-9b70-11f1-9df1-47bfadbce656">            <a href="https://www.thegoodguys.com.au/tp-link-2k-3mp-solar-powered-security-camera-tapo-c410-kit" data-model-name="2K Solar-Powered Security Camera" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:99.13%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/y2WdzKpQXcKUtM9sxEuSca.png" alt="Tp-Link 2k 3mp Solar-Powered Security Camera"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>TP-LINK</div>                                        <div class="featured__title">2K Solar-Powered Security Camera</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ebf02-9b70-11f1-9e98-3d6496ca948f">            <a href="https://www.amazon.com.au/Crosley-Voyager-Portable-Bluetooth-Turntable/dp/B09FPT9KWT" data-model-name="Voyager Portable Bluetooth Turntable" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7p9qfPJU7LyT9nVfWohjSZ.jpg" alt="Crosley Voyager Portable Bluetooth Turntable, Sage"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crosley</div>                                        <div class="featured__title">Voyager Portable Bluetooth Turntable</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ebf66-9b70-11f1-8e6b-e58ba2c4372c">            <a href="https://www.amazon.com.au/1280x800-Touchscreen-Electronic-Auto-Rotate-Mountable/dp/B0F61WL5GD" data-model-name="10.1-inch Wi-Fi Digital Picture Frame" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/TtDdt8CBFjnEg2oY23vcaZ.jpg" alt="Frameo 10.1 Inch Wifi Digital Picture Frame, Hd Ips Touchscreen Digital Photo Frame Electronic, 32gb Storage, Auto-Rotate, Wall Mountable, Share Photos/videos From Anywhere (black)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Frameo</div>                                        <div class="featured__title">10.1-inch Wi-Fi Digital Picture Frame</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ebfc0-9b70-11f1-b074-259c62ef0c58">            <a href="https://www.amazon.com.au/Insta360-Retro-Bundle-Special-White/dp/B0GSRQLQF2" data-model-name="Go 3S Retro Bundle Special Edition 64GB" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/mQaJdY7hAdRkzneFhA8WEZ.jpg" alt="Insta360 Go 3s Retro Bundle Special Edition 64gb White - Small 4k Vlogging Camera, Hands-Free Pov Cam, Retro Filters, 4k30fps, Extra Bttery, Lightweight Wearable Vlog Camera for Street & Daily Shots"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Insta360</div>                                        <div class="featured__title">Go 3S Retro Bundle Special Edition 64GB</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec01a-9b70-11f1-abb3-a3aa5f9fc873">            <a href="https://www.amazon.com.au/Belkin-Compatible-Wireless-Charging-Adjustable/dp/B0FMXGMWN1" data-model-name="3 in 1 Qi2 Wireless Charging Dock Stand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RN9J5UN2bwrPj4z3h82QXZ.jpg" alt="Belkin 3 in 1 Qi2 Wireless Charging Dock Stand 25w Active Cooling Sand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Belkin</div>                                        <div class="featured__title">3 in 1 Qi2 Wireless Charging Dock Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec07e-9b70-11f1-bf5c-7345907926ca">            <a href="https://www.amazon.com.au/JBL-Charge-Bluetooth-Waterproof-Built/dp/B08VD5DC5L" data-model-name="Charge 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QDRjV7TFDZDWgBjVMcXJH7.jpg" alt="Jbl Charge 5 - Portable Bluetooth Speaker With Deep Bass, Ip67 Waterproof and Dustproof, 20 Hours of Playtime, in Blue"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>JBL</div>                                        <div class="featured__title">Charge 5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec0d8-9b70-11f1-8853-892637caebb0">            <a href="https://www.amazon.com.au/dp/B0B6GK4VTC" data-model-name="Indoor Camera (2nd Gen)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/uXFszDJWWhWQpW6Qn46RVZ.jpg" alt="Ring Indoor Camera (2nd Gen) by Amazon | Plug-In Pet Security Camera | 1080p Hd Video, Privacy Cover, Wi-Fi, Diy Alternative to a Cctv System | 30-Day Free Trial of Ring Protect Plan"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ring</div>                                        <div class="featured__title">Indoor Camera (2nd Gen)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec13c-9b70-11f1-aad9-7f36016b2a1f">            <a href="https://www.amazon.com.au/Soundcore-Cancelling-Powerful-Playtime-Bluetooth/dp/B0CRTYZG5C" data-model-name="P30i by Anker Noise-Cancelling Earbuds" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/33r7NV7dYm5BVrwXKdPGMZ.jpg" alt="Soundcore P30i by Anker Noise Cancelling Earbuds, Strong and Smart Noise Cancelling, Powerful Bass, 45h Playtime, 2-In-1 Case and Phone Stand, Ip54, Wireless Earbuds, Bluetooth 5.4 (black)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Soundcore</div>                                        <div class="featured__title">P30i by Anker Noise-Cancelling Earbuds</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec196-9b70-11f1-b46d-f122cd55b559">            <a href="https://www.amazon.com.au/dp/B0F7Z4LF41" data-model-name="Fire Stick 4K" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:77.49%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/3Z46KJNbdpf6jpbok9MtFD.png" alt="Amazon Fire TV Stick 4K"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Amazon</div>                                        <div class="featured__title">Fire Stick 4K</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec1f0-9b70-11f1-bf9f-c3e6eb92f630">            <a href="https://www.jbhifi.com.au/products/camp-snap-cs-8-digital-video-camera" data-model-name="CS-8 Digital Video Camera" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/knqMgmcfYPgqJfPaXHUduZ.jpg" alt="Camp Snap Cs-8 Digital Video Camera"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CAMP SNAP</div>                                        <div class="featured__title">CS-8 Digital Video Camera</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec254-9b70-11f1-a497-43a0bf3fe6c4">            <a href="https://www.jbhifi.com.au/products/remarkable-paper-pro-move-with-markerplus-and-book-folio-weave-basalt" data-model-name="Paper Pro Move With Markerplus and Book Folio Weave" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/i6DU9BL4ZVHAjDkvcHJFPZ.jpg" alt="Remarkable Paper Pro Move With Markerplus and Book Folio Weave (basalt)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMARKABLE</div>                                        <div class="featured__title">Paper Pro Move With Markerplus and Book Folio Weave</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec2ae-9b70-11f1-b1f5-652f022e8be7">            <a href="https://www.amazon.com.au/Soundcore-Cancelling-Headphones-Ultra-Fast-Comfortable/dp/B0CZ8G716J" data-model-name="Space One Pro by Anker Adaptive Active Noise Cancelling Headphones " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/iPeMqqptQPmvwGfT8tKDfZ.jpg" alt="Soundcore Space One Pro by Anker, Adaptive Active Noise Cancelling Headphones Driven by 6 Mics, Super Foldable Design, 60h Lossless Audio, Ultra-Fast Charging, Hi-Res Wireless Audio, Comfortable Fit"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Soundcore</div>                                        <div class="featured__title">Space One Pro by Anker Adaptive Active Noise Cancelling Headphones </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec312-9b70-11f1-9254-15f1057760b0">            <a href="https://www.amazon.com.au/DJI-Standard-Waterproof-Stabilization-Touchscreens/dp/B0D1YH4B2R" data-model-name="Osmo Action 5 Pro Standard Combo" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YbvLg2GJCwmRq6VvJLTRmZ.jpg" alt="Dji Osmo Action 5 Pro Standard Combo, Waterproof Camera With 1/1.3" Sensor, 4k/120fps Video, Subject Tracking, Stabilization, Dual Oled Touchscreens, Action Camera 4k Ideal for Sports, Vlog"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DJI</div>                                        <div class="featured__title">Osmo Action 5 Pro Standard Combo</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/tech/forget-a-new-tie-ive-found-15-of-the-best-fathers-day-tech-gifts-that-will-make-you-his-favourite-child</link>
                                                                            <description>
                            <![CDATA[ On the hunt for some new tech for dad this Father's Day? I've found 15 of the best gifts to shop this year. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5DQca8fccBWdCVG68oHzB8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QhnEb8XeKGN67gMF4EefWf-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 19 Aug 2026 06:05:41 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></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/QhnEb8XeKGN67gMF4EefWf-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Products on blue and grey gradient background]]></media:description>                                                            <media:text><![CDATA[Products on blue and grey gradient background]]></media:text>
                                <media:title type="plain"><![CDATA[Products on blue and grey gradient background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QhnEb8XeKGN67gMF4EefWf-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/sales-events/fathers-day-gift-ideas-au">Father's Day 2026</a> is just 17 days away, landing on Sunday, September 6 in Australia, and there's no time like the present to shop for a perfect gift for dad. </p><p>Having said that, sometimes shopping for dad-worthy gifts can be quite challenging, as no matter how much you spend, it doesn't always equate to your father's (or father figure's) value in your life. With that in mind, I've compiled 15 of the best tech-focused gifts that will improve and upgrade dad's everyday life. </p><p>Whether he's constantly on-the-go to his next adventure, or making memories with the grandkids, there's something here for every type of dad — and he doesn't need to be tech-savvy to enjoy 'em. </p><p>I've deliberately chosen a wide variety of items that include top-notch tech gizmos like power banks, wireless headphones and security cameras. As a tech writer, I've also included some of my favourite devices that I use almost every day, such as a <a href="https://www.amazon.com.au/Electronic-Auto-Rotate-Slideshow-Mountable-Remotely/dp/B0DZWS38S2" target="_blank">Frameo digital picture frame</a>, an <a href="https://www.amazon.com.au/Insta360-Retro-Bundle-Special-White/dp/B0GSRQLQF2" target="_blank">Insta360 tiny camera</a> and a <a href="https://www.amazon.com.au/Belkin-Compatible-Wireless-Charging-Adjustable/dp/B0FMXGMWN1" target="_blank">Belkin charging station</a> (which my FIL may or may not be getting this year 👀). </p><p>All of these items come from top-rated retailers, like Amazon, JB Hi-Fi and The Good Guys, with each ensuring quicker-than-ever delivery. So, you can rest assured that dad will get his gift right on time for his big day. </p><p>Enough preamble — here are the best Father's Day tech gifts I've found this year. </p>        <div class="featured_product_block featured_block_hero" data-id="b99ebd7c-9b70-11f1-b696-056581ac2c5a">            <a href="https://www.amazon.com.au/dp/B0DYBR8611" data-model-name="Echo Show 8" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:150%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RrokQRnNeiKmPKR6fGg4PZ.jpg" alt="Amazon Echo Show 8 (newest Gen) - Seamlessly Redesigned, Vibrant Hd 8.7" Display With Spatial Audio and Alexa—perfect for Your Kitchen Counter, Glacier White, With Alexa+ Early Access"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Amazon</div>                                        <div class="featured__title">Echo Show 8</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ebe26-9b70-11f1-823d-2f3b38e754f7">            <a href="https://www.amazon.com.au/INIU-Smallest-20000mAh-Portable-Compatible/dp/B0DCMW8SJV" data-model-name="22.5W Mini Power Bank" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/WBxuqVbDGqG3dwGANNKycZ.jpg" alt="Iniu Power Bank, Smallest 20000mah 22.5w Fast Charging Portable Charger"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>INIU</div>                                        <div class="featured__title">22.5W Mini Power Bank</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ebea8-9b70-11f1-9df1-47bfadbce656">            <a href="https://www.thegoodguys.com.au/tp-link-2k-3mp-solar-powered-security-camera-tapo-c410-kit" data-model-name="2K Solar-Powered Security Camera" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:99.13%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/y2WdzKpQXcKUtM9sxEuSca.png" alt="Tp-Link 2k 3mp Solar-Powered Security Camera"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>TP-LINK</div>                                        <div class="featured__title">2K Solar-Powered Security Camera</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ebf02-9b70-11f1-9e98-3d6496ca948f">            <a href="https://www.amazon.com.au/Crosley-Voyager-Portable-Bluetooth-Turntable/dp/B09FPT9KWT" data-model-name="Voyager Portable Bluetooth Turntable" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7p9qfPJU7LyT9nVfWohjSZ.jpg" alt="Crosley Voyager Portable Bluetooth Turntable, Sage"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Crosley</div>                                        <div class="featured__title">Voyager Portable Bluetooth Turntable</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ebf66-9b70-11f1-8e6b-e58ba2c4372c">            <a href="https://www.amazon.com.au/1280x800-Touchscreen-Electronic-Auto-Rotate-Mountable/dp/B0F61WL5GD" data-model-name="10.1-inch Wi-Fi Digital Picture Frame" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/TtDdt8CBFjnEg2oY23vcaZ.jpg" alt="Frameo 10.1 Inch Wifi Digital Picture Frame, Hd Ips Touchscreen Digital Photo Frame Electronic, 32gb Storage, Auto-Rotate, Wall Mountable, Share Photos/videos From Anywhere (black)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Frameo</div>                                        <div class="featured__title">10.1-inch Wi-Fi Digital Picture Frame</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ebfc0-9b70-11f1-b074-259c62ef0c58">            <a href="https://www.amazon.com.au/Insta360-Retro-Bundle-Special-White/dp/B0GSRQLQF2" data-model-name="Go 3S Retro Bundle Special Edition 64GB" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/mQaJdY7hAdRkzneFhA8WEZ.jpg" alt="Insta360 Go 3s Retro Bundle Special Edition 64gb White - Small 4k Vlogging Camera, Hands-Free Pov Cam, Retro Filters, 4k30fps, Extra Bttery, Lightweight Wearable Vlog Camera for Street & Daily Shots"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Insta360</div>                                        <div class="featured__title">Go 3S Retro Bundle Special Edition 64GB</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec01a-9b70-11f1-abb3-a3aa5f9fc873">            <a href="https://www.amazon.com.au/Belkin-Compatible-Wireless-Charging-Adjustable/dp/B0FMXGMWN1" data-model-name="3 in 1 Qi2 Wireless Charging Dock Stand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RN9J5UN2bwrPj4z3h82QXZ.jpg" alt="Belkin 3 in 1 Qi2 Wireless Charging Dock Stand 25w Active Cooling Sand"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Belkin</div>                                        <div class="featured__title">3 in 1 Qi2 Wireless Charging Dock Stand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec07e-9b70-11f1-bf5c-7345907926ca">            <a href="https://www.amazon.com.au/JBL-Charge-Bluetooth-Waterproof-Built/dp/B08VD5DC5L" data-model-name="Charge 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QDRjV7TFDZDWgBjVMcXJH7.jpg" alt="Jbl Charge 5 - Portable Bluetooth Speaker With Deep Bass, Ip67 Waterproof and Dustproof, 20 Hours of Playtime, in Blue"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>JBL</div>                                        <div class="featured__title">Charge 5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec0d8-9b70-11f1-8853-892637caebb0">            <a href="https://www.amazon.com.au/dp/B0B6GK4VTC" data-model-name="Indoor Camera (2nd Gen)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/uXFszDJWWhWQpW6Qn46RVZ.jpg" alt="Ring Indoor Camera (2nd Gen) by Amazon | Plug-In Pet Security Camera | 1080p Hd Video, Privacy Cover, Wi-Fi, Diy Alternative to a Cctv System | 30-Day Free Trial of Ring Protect Plan"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ring</div>                                        <div class="featured__title">Indoor Camera (2nd Gen)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec13c-9b70-11f1-aad9-7f36016b2a1f">            <a href="https://www.amazon.com.au/Soundcore-Cancelling-Powerful-Playtime-Bluetooth/dp/B0CRTYZG5C" data-model-name="P30i by Anker Noise-Cancelling Earbuds" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/33r7NV7dYm5BVrwXKdPGMZ.jpg" alt="Soundcore P30i by Anker Noise Cancelling Earbuds, Strong and Smart Noise Cancelling, Powerful Bass, 45h Playtime, 2-In-1 Case and Phone Stand, Ip54, Wireless Earbuds, Bluetooth 5.4 (black)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Soundcore</div>                                        <div class="featured__title">P30i by Anker Noise-Cancelling Earbuds</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec196-9b70-11f1-b46d-f122cd55b559">            <a href="https://www.amazon.com.au/dp/B0F7Z4LF41" data-model-name="Fire Stick 4K" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:77.49%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/3Z46KJNbdpf6jpbok9MtFD.png" alt="Amazon Fire TV Stick 4K"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Amazon</div>                                        <div class="featured__title">Fire Stick 4K</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec1f0-9b70-11f1-bf9f-c3e6eb92f630">            <a href="https://www.jbhifi.com.au/products/camp-snap-cs-8-digital-video-camera" data-model-name="CS-8 Digital Video Camera" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/knqMgmcfYPgqJfPaXHUduZ.jpg" alt="Camp Snap Cs-8 Digital Video Camera"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CAMP SNAP</div>                                        <div class="featured__title">CS-8 Digital Video Camera</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec254-9b70-11f1-a497-43a0bf3fe6c4">            <a href="https://www.jbhifi.com.au/products/remarkable-paper-pro-move-with-markerplus-and-book-folio-weave-basalt" data-model-name="Paper Pro Move With Markerplus and Book Folio Weave" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/i6DU9BL4ZVHAjDkvcHJFPZ.jpg" alt="Remarkable Paper Pro Move With Markerplus and Book Folio Weave (basalt)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMARKABLE</div>                                        <div class="featured__title">Paper Pro Move With Markerplus and Book Folio Weave</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec2ae-9b70-11f1-b1f5-652f022e8be7">            <a href="https://www.amazon.com.au/Soundcore-Cancelling-Headphones-Ultra-Fast-Comfortable/dp/B0CZ8G716J" data-model-name="Space One Pro by Anker Adaptive Active Noise Cancelling Headphones " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/iPeMqqptQPmvwGfT8tKDfZ.jpg" alt="Soundcore Space One Pro by Anker, Adaptive Active Noise Cancelling Headphones Driven by 6 Mics, Super Foldable Design, 60h Lossless Audio, Ultra-Fast Charging, Hi-Res Wireless Audio, Comfortable Fit"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Soundcore</div>                                        <div class="featured__title">Space One Pro by Anker Adaptive Active Noise Cancelling Headphones </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b99ec312-9b70-11f1-9254-15f1057760b0">            <a href="https://www.amazon.com.au/DJI-Standard-Waterproof-Stabilization-Touchscreens/dp/B0D1YH4B2R" data-model-name="Osmo Action 5 Pro Standard Combo" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YbvLg2GJCwmRq6VvJLTRmZ.jpg" alt="Dji Osmo Action 5 Pro Standard Combo, Waterproof Camera With 1/1.3" Sensor, 4k/120fps Video, Subject Tracking, Stabilization, Dual Oled Touchscreens, Action Camera 4k Ideal for Sports, Vlog"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DJI</div>                                        <div class="featured__title">Osmo Action 5 Pro Standard Combo</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Prime Video top 10 movies — here are the 3 worth watching this week (August 17-23) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you're not sure what to watch on Prime Video this week, you might turn to the streaming service's top 10 most-watched list for some guidance. After all, this rotating ranking gives you a quick look at the movies dominating the platform right now. However, it's no perfect recommendation tool. </p><p>Take it from me, somebody who tracks the Prime Video top 10 daily: Just because a movie ranks on the list doesn't necessarily mean it's a quality watch. But that's why I've combed through the current top 10 (as of Monday, August 17) and picked out a trio of movies worthy of your time.</p><h3 class="article-body__section" id="section-best-movies-in-the-prime-video-top-10"><span>Best movies in the Prime Video top 10</span></h3><h2 id="masters-of-the-universe-2026">‘Masters of the Universe' (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/X21JsHLHnY8" allowfullscreen></iframe></div></div><p>Amazon MGM Studios’ “Masters of the Universe” underwhelmed in theaters, failing to recoup its $170 million budget, but it’s been far from a disappointment on Prime Video, where it’s had the No. 1 spot on lockdown for more than a week. He-Man fans didn’t turn out in large numbers when it was in cinemas, but they’re paying attention on streaming. The fantasy blockbuster also holds a strong 86% viewer score on <a href="https://www.rottentomatoes.com/m/masters_of_the_universe_2026" target="_blank">Rotten Tomatoes</a>.</p><p>Based on the beloved Mattel toy range, which was originally created to compete with a rival’s lineup of popular “Star Wars” action figures, “Masters of the Universe” follows Prince Adam (Nicholas Galitzine), who is sent to Earth as a child when his home of Eternia is conquered by the ruthless Skeletor (Jared Leto). Years later, now a fully grown adult, he must return to the fantasy land to fulfil his destiny and save his people from his nemesis.  </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0GZHLSV86" target="_blank" rel="nofollow"><em><strong>"Masters of the Universe on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="project-hail-mary-2026">‘Project Hail Mary’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/m08TxIsFTRI" allowfullscreen></iframe></div></div><p>I’ve recommended “Project Hail Mary” dozens of times already this year, and I’m not stopping now. Put simply, this is one of the year’s most entertaining blockbusters, with plenty of heart and exciting moments. It’s adapted from Andy Weir’s novel and stars Ryan Gosling as an astronaut on a critical mission. But while Gosling is fantastic, the real star of the show is an alien creature named Rocky, brought to life by some phenomenal puppetry. </p><p>In “Project Hail Mary,” astronaut Ryland Grace (Gosling) awakes on an interstellar craft, millions of miles away from Earth. The problem is he can’t remember his mission, or even his own name. Piecing together his past, Grace must find a way to prevent Earth’s sun from dying, but fortunately, he’s got some help from a lovable alien, Rocky. “Project Hail Mary” is the complete sci-fi package; it’s funny, thrilling and packed with memorable moments.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GHXVBQLM" target="_blank" rel="nofollow"><em><strong>"Project Hail Mary" on Prime Video</strong></em></a><em><strong> now</strong></em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLKpkW"></div>                            </div>                            <script src="https://kwizly.com/embed/OLKpkW.js" async></script><h2 id="the-gates-2026">‘The Gates’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/rooCFaczeXQ" allowfullscreen></iframe></div></div><p>Similar to "Masters of the Universe," "The Gates" is a movie that didn't receive much attention on the big screen, but is getting a second win via Prime Video. This dark thriller marks the final movie appearance of James Van Der Beek, who passed away in February. While the reviews were lukewarm, Van Der Beek's villainous performance was highlighted as one of the movie's biggest strengths. I'm glad to see his final film role celebrated.</p><p>“The Gate” sees a trio of college friends (Mason Gooding, Algee Smith and Keith Powers) enjoying a road trip when they make what proves to be a potentially fatal mistake by taking a shortcut through a remote gated community. They witness a ritualistic murder and are then trapped within the community's walls. Hunted by the local residents who plan to frame them for the murder, the trio endures a desperate battle for survival.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0GKQ3G3BL" target="_blank" rel="nofollow"><em><strong>"The Gates" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-prime-video-top-10-movies-right-now"><span>Prime Video top 10 movies right now</span></h3><ol start="1"><li>"Masters of the Universe" (2026)</li><li>"The Amateur" (2025)</li><li>"Badh" (2025)</li><li>"Project Hail Mary" (2026)</li><li>"S4: The Bob Lazar Story' (2026)</li><li>"The Devil's Mouth" (2026)</li><li>"The Gate" (2026)</li><li>"Wrong Turn" (2021)</li><li>"Uncharted" (2022)</li><li>"Primate" (2026)</li></ol><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in August 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/movies/how-well-do-you-really-know-80s-action-movies-this-quiz-will-put-your-memory-to-the-test-from-terminator-to-die-hard">How well do you really know 80s action movies? Take our quiz</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-new-to-prime-video-movies-in-august-2026-with-90-percent-or-higher-on-rotten-tomatoes">5 new to Prime Video movies with 90% or higher on Rotten Tomatoes</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-here-are-the-3-worth-watching-this-week-august-17-23</link>
                                                                            <description>
                            <![CDATA[ The Prime Video top 10 most-watched movies list has recently been updated, and I've picked out the three that are worth watching now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ugW5aEpCzqewHQqH426Wke</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/KFAWy2ARKTf8LL9yy3E8y3-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 17 Aug 2026 13:40:01 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ rory.mellon@futurenet.com (Rory Mellon) ]]></author>                    <dc:creator><![CDATA[ Rory Mellon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5Rv6LtQXMj5JB4Eu8Lt4Sn.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/KFAWy2ARKTf8LL9yy3E8y3-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on a orange film reel background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on a orange film reel background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on a orange film reel background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/KFAWy2ARKTf8LL9yy3E8y3-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you're not sure what to watch on Prime Video this week, you might turn to the streaming service's top 10 most-watched list for some guidance. After all, this rotating ranking gives you a quick look at the movies dominating the platform right now. However, it's no perfect recommendation tool. </p><p>Take it from me, somebody who tracks the Prime Video top 10 daily: Just because a movie ranks on the list doesn't necessarily mean it's a quality watch. But that's why I've combed through the current top 10 (as of Monday, August 17) and picked out a trio of movies worthy of your time.</p><h3 class="article-body__section" id="section-best-movies-in-the-prime-video-top-10"><span>Best movies in the Prime Video top 10</span></h3><h2 id="masters-of-the-universe-2026">‘Masters of the Universe' (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/X21JsHLHnY8" allowfullscreen></iframe></div></div><p>Amazon MGM Studios’ “Masters of the Universe” underwhelmed in theaters, failing to recoup its $170 million budget, but it’s been far from a disappointment on Prime Video, where it’s had the No. 1 spot on lockdown for more than a week. He-Man fans didn’t turn out in large numbers when it was in cinemas, but they’re paying attention on streaming. The fantasy blockbuster also holds a strong 86% viewer score on <a href="https://www.rottentomatoes.com/m/masters_of_the_universe_2026" target="_blank">Rotten Tomatoes</a>.</p><p>Based on the beloved Mattel toy range, which was originally created to compete with a rival’s lineup of popular “Star Wars” action figures, “Masters of the Universe” follows Prince Adam (Nicholas Galitzine), who is sent to Earth as a child when his home of Eternia is conquered by the ruthless Skeletor (Jared Leto). Years later, now a fully grown adult, he must return to the fantasy land to fulfil his destiny and save his people from his nemesis.  </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0GZHLSV86" target="_blank" rel="nofollow"><em><strong>"Masters of the Universe on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="project-hail-mary-2026">‘Project Hail Mary’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/m08TxIsFTRI" allowfullscreen></iframe></div></div><p>I’ve recommended “Project Hail Mary” dozens of times already this year, and I’m not stopping now. Put simply, this is one of the year’s most entertaining blockbusters, with plenty of heart and exciting moments. It’s adapted from Andy Weir’s novel and stars Ryan Gosling as an astronaut on a critical mission. But while Gosling is fantastic, the real star of the show is an alien creature named Rocky, brought to life by some phenomenal puppetry. </p><p>In “Project Hail Mary,” astronaut Ryland Grace (Gosling) awakes on an interstellar craft, millions of miles away from Earth. The problem is he can’t remember his mission, or even his own name. Piecing together his past, Grace must find a way to prevent Earth’s sun from dying, but fortunately, he’s got some help from a lovable alien, Rocky. “Project Hail Mary” is the complete sci-fi package; it’s funny, thrilling and packed with memorable moments.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GHXVBQLM" target="_blank" rel="nofollow"><em><strong>"Project Hail Mary" on Prime Video</strong></em></a><em><strong> now</strong></em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLKpkW"></div>                            </div>                            <script src="https://kwizly.com/embed/OLKpkW.js" async></script><h2 id="the-gates-2026">‘The Gates’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/rooCFaczeXQ" allowfullscreen></iframe></div></div><p>Similar to "Masters of the Universe," "The Gates" is a movie that didn't receive much attention on the big screen, but is getting a second win via Prime Video. This dark thriller marks the final movie appearance of James Van Der Beek, who passed away in February. While the reviews were lukewarm, Van Der Beek's villainous performance was highlighted as one of the movie's biggest strengths. I'm glad to see his final film role celebrated.</p><p>“The Gate” sees a trio of college friends (Mason Gooding, Algee Smith and Keith Powers) enjoying a road trip when they make what proves to be a potentially fatal mistake by taking a shortcut through a remote gated community. They witness a ritualistic murder and are then trapped within the community's walls. Hunted by the local residents who plan to frame them for the murder, the trio endures a desperate battle for survival.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0GKQ3G3BL" target="_blank" rel="nofollow"><em><strong>"The Gates" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-prime-video-top-10-movies-right-now"><span>Prime Video top 10 movies right now</span></h3><ol start="1"><li>"Masters of the Universe" (2026)</li><li>"The Amateur" (2025)</li><li>"Badh" (2025)</li><li>"Project Hail Mary" (2026)</li><li>"S4: The Bob Lazar Story' (2026)</li><li>"The Devil's Mouth" (2026)</li><li>"The Gate" (2026)</li><li>"Wrong Turn" (2021)</li><li>"Uncharted" (2022)</li><li>"Primate" (2026)</li></ol><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in August 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/movies/how-well-do-you-really-know-80s-action-movies-this-quiz-will-put-your-memory-to-the-test-from-terminator-to-die-hard">How well do you really know 80s action movies? Take our quiz</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-new-to-prime-video-movies-in-august-2026-with-90-percent-or-higher-on-rotten-tomatoes">5 new to Prime Video movies with 90% or higher on Rotten Tomatoes</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ ‘This feels much more like Amazon forcing the issue on them' — streamer sounds the alarm on Amazon using Twitch’s content to train its AI models ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Twitch’s community of streamers was none too pleased with the popular streaming service when it was revealed that it allowed their content to be used to train Amazon's AI models. </p><p>And what made that shocking bit of news even more upsetting was the fact that those same users were automatically opted into that practice and have unknowingly been a part of that process for years now. It seems like the growing discontent towards this decision forced Twitch to add an option for content creators to opt out of having their channel used as a training tool for Amazon’s generative AI.</p><p>Twitch’s <a href="https://help.twitch.tv/s/article/twitch-account-settings?language=en_US#FAQ" target="_blank">FAQ page</a> makes it clear that opting out means “streams, VODs, clips, stream chats, and pictures and text on your channel will not be used in future training of a model developed by Amazon whose purpose is to generate or synthesize text, audio, images, or video. And we’re sure the streaming service’s massive streamer community is flocking to this official Twitch <a href="http://twitch.tv/settings/security" target="_blank">settings page</a> to make good use of that opt-out option.</p><p>We reached out to <a href="https://www.twitch.tv/zachbussey" target="_blank">Zach Bussey</a>, TOS.gg a Twitch streamer who covers the streaming industry through his <a href="https://tos.gg/" target="_blank">weekly creator newsletter</a>, to get his thoughts on this surprising development.</p><h2 id="a-decision-that-may-be-out-of-twitch-s-hands">A decision that may be out of Twitch’s hands</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4096px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="L96q9fjkYGgxgU9weaWCnG" name="shutterstock_2486109301-2" alt="twitch" src="https://cdn.mos.cms.futurecdn.net/L96q9fjkYGgxgU9weaWCnG.jpg" mos="" align="middle" fullscreen="" width="4096" height="2304" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>When asked about Twitch’s decision to let its content be used to train Amazon’s AI models, Bussey stated that he thinks Amazon made that decision for them.</p><p>“Twitch's decision here isn't really one I think they are making. Instead, this feels much more like Amazon forcing the issue on them,” he noted. “The CPO, Mikey Minty, pretty clearly expressed that without overtly saying it on a stream an hour ago. The problem for Twitch is they have never been profitable and are at the whims of Amazon if they want to continue to be a platform. So it feels like they may have been able to negotiate that Opt-out option, but there was never really a choice about whether it would be implemented.”</p><p>As for the broader trend of tech companies using user-generated content to improve AI models, here’s what else Bussey had to say:</p><p>“The broader trend isn't great for creators, nor is it good for platforms, largely because AI perpetually, at best, makes slop consumable content. There's nothing great about it; it's just stuck in the middle as being, at best, average. Platforms have historically benefitted from startup creators who eventually became great creators. But the process to go from just getting started to being great takes time, effort, and a lot of learning. If they get flooded in the middle of their creator career by all the slop AI content, they'll never be able to achieve greatness. Effectively, we're diluting all these platforms and leaving them stuck in mediocrity. Do you really want to spend your time consuming things when everything is 'okay enough'?”</p><p>Bussey recognizes Twitch’s AI training method as the norm for similar creator platforms. And what’s most interesting is that he says users on those platforms may not even be aware that it’s happening to them yet. “Unfortunately, it likely is the norm across creator platforms, whether we know it or not: maybe first-party or a third party taking the data,” he pointed out. “It's why I think it's incredibly important to have transparency and advocate for better regulation. At the very least, platforms should offer to pay creators for their data when they give creators the option to train on their content.”</p><h2 id="bottom-line-2">Bottom line</h2><p>Bussey left us with this comment as to what AI as a whole could mean for streamers and their profession going forward: </p><p>“For streamers, I don't think that AI is going to replace them if that's the question. In fact, I'd wager that live streaming will be the last holdout in the content creation space. In a world where you won't be able to trust that what you see in a YouTube video, a TikTok, or a Twitter post is real...a lot more people will be seeking out live content for the last reliable digital human experience.”</p><p>You can watch this <a href="https://www.twitch.tv/zachbussey/clip/BlitheUnsightlyMonitorKappaWealth--edSXXVMPiaFzhe-?range=7d">clip</a> from Bussey’s Twitch channel to hear him provide more insight on the matter.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/openai-is-testing-a-pay-to-reset-limits-feature-heres-what-it-could-mean-for-your-chatgpt-usage-quota" target="_blank">OpenAI is testing a pay-to-reset limits feature — here’s what it could mean for your ChatGPT usage quota</a></li><li><a href="https://www.tomsguide.com/ai/raising-the-standard-inside-talkspaces-bold-new-ai-mental-health-support-tool" target="_blank">'Raising the standard': Inside Talkspace's bold new AI mental health support tool</a></li><li><a href="https://www.tomsguide.com/ai/google-health-gets-a-lot-of-hate-but-these-5-ai-coach-prompts-changed-my-mind" target="_blank">Google Health gets a lot of hate — but these 5 AI Coach prompts changed my mind</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/this-feels-much-more-like-amazon-forcing-the-issue-on-them-streamer-sounds-the-alarm-on-amazon-using-twitchs-content-to-train-its-ai-models</link>
                                                                            <description>
                            <![CDATA[ With such a major backlash against the reveal of Twitch allowing its users’ content to train Amazon’s AI models, one streamer we spoke to gave his opinion on the matter. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">gXBnVVxQfhiWbB3urkdGo5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/HkXoxmEQ5Fr2oNbaohftF8-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 13 Aug 2026 17:33:43 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[AI]]></category>
                                                                                                                    <dc:creator><![CDATA[ Elton Jones ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/NVtYYXr3tEPUE67jf3HtXM.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/HkXoxmEQ5Fr2oNbaohftF8-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[twitch]]></media:description>                                                            <media:text><![CDATA[twitch]]></media:text>
                                <media:title type="plain"><![CDATA[twitch]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/HkXoxmEQ5Fr2oNbaohftF8-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Twitch’s community of streamers was none too pleased with the popular streaming service when it was revealed that it allowed their content to be used to train Amazon's AI models. </p><p>And what made that shocking bit of news even more upsetting was the fact that those same users were automatically opted into that practice and have unknowingly been a part of that process for years now. It seems like the growing discontent towards this decision forced Twitch to add an option for content creators to opt out of having their channel used as a training tool for Amazon’s generative AI.</p><p>Twitch’s <a href="https://help.twitch.tv/s/article/twitch-account-settings?language=en_US#FAQ" target="_blank">FAQ page</a> makes it clear that opting out means “streams, VODs, clips, stream chats, and pictures and text on your channel will not be used in future training of a model developed by Amazon whose purpose is to generate or synthesize text, audio, images, or video. And we’re sure the streaming service’s massive streamer community is flocking to this official Twitch <a href="http://twitch.tv/settings/security" target="_blank">settings page</a> to make good use of that opt-out option.</p><p>We reached out to <a href="https://www.twitch.tv/zachbussey" target="_blank">Zach Bussey</a>, TOS.gg a Twitch streamer who covers the streaming industry through his <a href="https://tos.gg/" target="_blank">weekly creator newsletter</a>, to get his thoughts on this surprising development.</p><h2 id="a-decision-that-may-be-out-of-twitch-s-hands">A decision that may be out of Twitch’s hands</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4096px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="L96q9fjkYGgxgU9weaWCnG" name="shutterstock_2486109301-2" alt="twitch" src="https://cdn.mos.cms.futurecdn.net/L96q9fjkYGgxgU9weaWCnG.jpg" mos="" align="middle" fullscreen="" width="4096" height="2304" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>When asked about Twitch’s decision to let its content be used to train Amazon’s AI models, Bussey stated that he thinks Amazon made that decision for them.</p><p>“Twitch's decision here isn't really one I think they are making. Instead, this feels much more like Amazon forcing the issue on them,” he noted. “The CPO, Mikey Minty, pretty clearly expressed that without overtly saying it on a stream an hour ago. The problem for Twitch is they have never been profitable and are at the whims of Amazon if they want to continue to be a platform. So it feels like they may have been able to negotiate that Opt-out option, but there was never really a choice about whether it would be implemented.”</p><p>As for the broader trend of tech companies using user-generated content to improve AI models, here’s what else Bussey had to say:</p><p>“The broader trend isn't great for creators, nor is it good for platforms, largely because AI perpetually, at best, makes slop consumable content. There's nothing great about it; it's just stuck in the middle as being, at best, average. Platforms have historically benefitted from startup creators who eventually became great creators. But the process to go from just getting started to being great takes time, effort, and a lot of learning. If they get flooded in the middle of their creator career by all the slop AI content, they'll never be able to achieve greatness. Effectively, we're diluting all these platforms and leaving them stuck in mediocrity. Do you really want to spend your time consuming things when everything is 'okay enough'?”</p><p>Bussey recognizes Twitch’s AI training method as the norm for similar creator platforms. And what’s most interesting is that he says users on those platforms may not even be aware that it’s happening to them yet. “Unfortunately, it likely is the norm across creator platforms, whether we know it or not: maybe first-party or a third party taking the data,” he pointed out. “It's why I think it's incredibly important to have transparency and advocate for better regulation. At the very least, platforms should offer to pay creators for their data when they give creators the option to train on their content.”</p><h2 id="bottom-line-2">Bottom line</h2><p>Bussey left us with this comment as to what AI as a whole could mean for streamers and their profession going forward: </p><p>“For streamers, I don't think that AI is going to replace them if that's the question. In fact, I'd wager that live streaming will be the last holdout in the content creation space. In a world where you won't be able to trust that what you see in a YouTube video, a TikTok, or a Twitter post is real...a lot more people will be seeking out live content for the last reliable digital human experience.”</p><p>You can watch this <a href="https://www.twitch.tv/zachbussey/clip/BlitheUnsightlyMonitorKappaWealth--edSXXVMPiaFzhe-?range=7d">clip</a> from Bussey’s Twitch channel to hear him provide more insight on the matter.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/openai-is-testing-a-pay-to-reset-limits-feature-heres-what-it-could-mean-for-your-chatgpt-usage-quota" target="_blank">OpenAI is testing a pay-to-reset limits feature — here’s what it could mean for your ChatGPT usage quota</a></li><li><a href="https://www.tomsguide.com/ai/raising-the-standard-inside-talkspaces-bold-new-ai-mental-health-support-tool" target="_blank">'Raising the standard': Inside Talkspace's bold new AI mental health support tool</a></li><li><a href="https://www.tomsguide.com/ai/google-health-gets-a-lot-of-hate-but-these-5-ai-coach-prompts-changed-my-mind" target="_blank">Google Health gets a lot of hate — but these 5 AI Coach prompts changed my mind</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Prime Video top 10 movies — here are the 3 worth watching this week (Aug. 10-16) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Prime Video’s movie library can be pretty overwhelming, which makes the platform’s top 10 most-watched list a useful tool for getting a quick rundown of the films proving the most popular on the platform right now. But just because a movie ranks high doesn’t guarantee it’s worth your time; quite the opposite. I’ve seen many subpar flicks get into the top 10.</p><p>That’s why I’ve combed through the current Prime Video top 10 (as of Monday, August 10) and picked out a trio of movies that I believe deserve your attention. This week my picks range from a slick spy thriller to a dazzling sci-fi blockbuster to a chilling horror about a family pet turned feral. These are the best movies in today’s Prime Video top 10 ranking.</p><h3 class="article-body__section" id="section-best-movies-in-the-prime-video-top-10"><span>Best movies in the Prime Video top 10</span></h3><h2 id="the-amateur-2025">‘The Amateur’ (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/DCWcK4c-F8Q" allowfullscreen></iframe></div></div><p>I’m happy to see “The Amateur” sticking around the Prime Video top 10. This spy thriller starring Oscar winner Rami Malek is based on the 1981 novel by Robert Littell and was one of last year’s slightly underappreciated gems in theaters. It’s great to see it getting a second wind via Amazon’s streaming service. If you like the “Bourne” movies, you need to watch it.</p><p>Malek plays a CIA analyst whose world is shattered when his wife is killed in a terrorist attack. Using his skills, he identifies those responsible for his wife's murder and blackmails his superiors into giving him a license to hunt them down and get revenge. A novice in the field, Charlie (Malek) is shown the ropes by a gruff mentor, Hendo (Laurence Fishburne). However, even with some training, he’s still a fish out of water. Quickly realizing he can’t outshoot his enemies, he outthinks them using his superior intellect.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0D4885S88" target="_blank" rel="nofollow"><em><strong>"The Amateur" on Prime Video</strong></em></a><em><strong> now</strong></em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XmxxBO"></div>                            </div>                            <script src="https://kwizly.com/embed/XmxxBO.js" async></script><h2 id="project-hail-mary-2026-2">‘Project Hail Mary’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/m08TxIsFTRI" allowfullscreen></iframe></div></div><p>“Project Hail Mary” is one of the year’s most entertaining blockbusters, and even if it was clearly made to be enjoyed on the big screen, it’s still a worthwhile watch at home. Adapted from Andy Weir’s novel of the same name, it stars Ryan Gosling, and while the “La La Land” star is excellent as the protagonist, Ryland Grace, he’s totally upstaged by an extraterrestrial nicknamed Rocky, who is brought to life using some incredible puppetry.</p><p>Smartly using a non-linear structure that leaps between the present day and flashbacks, “Project Hail Mary” is the story of Ryland Grace (Gosling), an astronaut on a mission that is vital to humanity’s survival. There’s just the slight problem that he awakens on an interstellar craft without any memories of his mission or even his own name. Piecing together his past, Grace must find a way to prevent the sun from dying, with a little help. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GHXVBQLM" target="_blank" rel="nofollow"><em><strong>"Project Hail Mary" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="primate-2026">‘Primate’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/wo87F-va410" allowfullscreen></iframe></div></div><p>“Primate” is a chilling horror-thriller about a family pet that goes from furry family member to a feral beast. It’s not the first movie of its ilk to use this core concept; Stephen King’s “Cujo” was unleashed on the screen back in 1983, but, running a tight 90 minutes, this chiller is effectively paced and concludes before the story's limitations are exposed. It’s a bloody creature feature that is a worthwhile watch for horror fans now it’s on Prime Video. </p><p>Lucy Pinborough (Johnny Sequoyah) returns to her family home in Hawai’i after several years away. Reunited with her father (Oscar-winning Troy Kotsur) and younger sister Erin (Gia Hunter), the homecoming quickly turns to a nightmare when the family’s pet chimpanzee, Ben, becomes violent after being infected with rabies. Now it’s a battle for survival against an aggressive animal that Lucy and Erin once considered part of the family.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0G7643HC3" target="_blank" rel="nofollow"><em><strong>"Primate" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-prime-video-top-10-movies-right-now"><span>Prime Video top 10 movies right now</span></h3><ol start="1"><li>"Masters of the Universe" (2026)</li><li>"The Amateur" (2025)</li><li>"Project Hail Mary" (2026)</li><li>"The Devil's Mouth" (2026)</li><li>"Moonfall" (2022)</li><li>"Primate" (2026)</li><li>"Uncharted" (2022)</li><li>"Agent Zero" (2026)</li><li>"Do Not Enter" (2026)</li><li>"The Sheep Detectives" (2026)</li></ol><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in August 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/movies/classic-movie-lovers-take-our-quiz-to-see-how-much-you-really-know-from-indiana-jones-to-star-wars">Take our classic movie quiz to see how much you really know</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-new-to-prime-video-movies-in-august-2026-with-90-percent-or-higher-on-rotten-tomatoes">5 new to Prime Video movies with 90% or higher on Rotten Tomatoes</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-here-are-the-3-worth-watching-this-week-aug-10-16</link>
                                                                            <description>
                            <![CDATA[ The Prime Video top 10 most-watched list has been updated for the week ahead, and I'm picking out the best entries in today's ranking. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">A2mi9oq2HVJvXpts2KgCRa</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/jkNJbHLaY7hb8gngkjaw9B-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 10 Aug 2026 11:55:44 +0000</pubDate>                                                                                                                                <updated>Mon, 10 Aug 2026 12:56:47 +0000</updated>
                                                                                                                                            <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ rory.mellon@futurenet.com (Rory Mellon) ]]></author>                    <dc:creator><![CDATA[ Rory Mellon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5Rv6LtQXMj5JB4Eu8Lt4Sn.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/jkNJbHLaY7hb8gngkjaw9B-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on yellow blue background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on yellow blue background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on yellow blue background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/jkNJbHLaY7hb8gngkjaw9B-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Prime Video’s movie library can be pretty overwhelming, which makes the platform’s top 10 most-watched list a useful tool for getting a quick rundown of the films proving the most popular on the platform right now. But just because a movie ranks high doesn’t guarantee it’s worth your time; quite the opposite. I’ve seen many subpar flicks get into the top 10.</p><p>That’s why I’ve combed through the current Prime Video top 10 (as of Monday, August 10) and picked out a trio of movies that I believe deserve your attention. This week my picks range from a slick spy thriller to a dazzling sci-fi blockbuster to a chilling horror about a family pet turned feral. These are the best movies in today’s Prime Video top 10 ranking.</p><h3 class="article-body__section" id="section-best-movies-in-the-prime-video-top-10"><span>Best movies in the Prime Video top 10</span></h3><h2 id="the-amateur-2025">‘The Amateur’ (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/DCWcK4c-F8Q" allowfullscreen></iframe></div></div><p>I’m happy to see “The Amateur” sticking around the Prime Video top 10. This spy thriller starring Oscar winner Rami Malek is based on the 1981 novel by Robert Littell and was one of last year’s slightly underappreciated gems in theaters. It’s great to see it getting a second wind via Amazon’s streaming service. If you like the “Bourne” movies, you need to watch it.</p><p>Malek plays a CIA analyst whose world is shattered when his wife is killed in a terrorist attack. Using his skills, he identifies those responsible for his wife's murder and blackmails his superiors into giving him a license to hunt them down and get revenge. A novice in the field, Charlie (Malek) is shown the ropes by a gruff mentor, Hendo (Laurence Fishburne). However, even with some training, he’s still a fish out of water. Quickly realizing he can’t outshoot his enemies, he outthinks them using his superior intellect.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0D4885S88" target="_blank" rel="nofollow"><em><strong>"The Amateur" on Prime Video</strong></em></a><em><strong> now</strong></em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XmxxBO"></div>                            </div>                            <script src="https://kwizly.com/embed/XmxxBO.js" async></script><h2 id="project-hail-mary-2026-2">‘Project Hail Mary’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/m08TxIsFTRI" allowfullscreen></iframe></div></div><p>“Project Hail Mary” is one of the year’s most entertaining blockbusters, and even if it was clearly made to be enjoyed on the big screen, it’s still a worthwhile watch at home. Adapted from Andy Weir’s novel of the same name, it stars Ryan Gosling, and while the “La La Land” star is excellent as the protagonist, Ryland Grace, he’s totally upstaged by an extraterrestrial nicknamed Rocky, who is brought to life using some incredible puppetry.</p><p>Smartly using a non-linear structure that leaps between the present day and flashbacks, “Project Hail Mary” is the story of Ryland Grace (Gosling), an astronaut on a mission that is vital to humanity’s survival. There’s just the slight problem that he awakens on an interstellar craft without any memories of his mission or even his own name. Piecing together his past, Grace must find a way to prevent the sun from dying, with a little help. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GHXVBQLM" target="_blank" rel="nofollow"><em><strong>"Project Hail Mary" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="primate-2026">‘Primate’ (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/wo87F-va410" allowfullscreen></iframe></div></div><p>“Primate” is a chilling horror-thriller about a family pet that goes from furry family member to a feral beast. It’s not the first movie of its ilk to use this core concept; Stephen King’s “Cujo” was unleashed on the screen back in 1983, but, running a tight 90 minutes, this chiller is effectively paced and concludes before the story's limitations are exposed. It’s a bloody creature feature that is a worthwhile watch for horror fans now it’s on Prime Video. </p><p>Lucy Pinborough (Johnny Sequoyah) returns to her family home in Hawai’i after several years away. Reunited with her father (Oscar-winning Troy Kotsur) and younger sister Erin (Gia Hunter), the homecoming quickly turns to a nightmare when the family’s pet chimpanzee, Ben, becomes violent after being infected with rabies. Now it’s a battle for survival against an aggressive animal that Lucy and Erin once considered part of the family.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0G7643HC3" target="_blank" rel="nofollow"><em><strong>"Primate" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-prime-video-top-10-movies-right-now"><span>Prime Video top 10 movies right now</span></h3><ol start="1"><li>"Masters of the Universe" (2026)</li><li>"The Amateur" (2025)</li><li>"Project Hail Mary" (2026)</li><li>"The Devil's Mouth" (2026)</li><li>"Moonfall" (2022)</li><li>"Primate" (2026)</li><li>"Uncharted" (2022)</li><li>"Agent Zero" (2026)</li><li>"Do Not Enter" (2026)</li><li>"The Sheep Detectives" (2026)</li></ol><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in August 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/movies/classic-movie-lovers-take-our-quiz-to-see-how-much-you-really-know-from-indiana-jones-to-star-wars">Take our classic movie quiz to see how much you really know</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-new-to-prime-video-movies-in-august-2026-with-90-percent-or-higher-on-rotten-tomatoes">5 new to Prime Video movies with 90% or higher on Rotten Tomatoes</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I gave ChatGPT, Gemini, and Alexa the same school supply list — one cost 3X as much ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When I was a kid, <a href="https://www.tomsguide.com/sales-events/best-back-to-school-sales-2024">back-to-school shopping</a> was my favorite. But as a mom with three kids and three different lists — kindergarten, fourth grade and sixth grade — going to the store to get everything is daunting. Plus, shopping with three kids in tow means there will be inevitable meltdowns over extras and nice-to-haves. <br><br>That's why this year, I decided to lean on three AI assistants to do the job for me. I gave ChatGPT, Gemini and<a href="https://www.tomsguide.com/ai/ive-been-using-alexa-for-3-months-here-are-my-5-favorite-features-and-one-im-not-a-fan-of"> Alexa+</a> the exact same school supply list and asked each one to shop for me. My instructions were simple: follow the teacher's list, stick to the required quantities, choose reasonably priced products and skip anything marked optional.</p><p>The results weren't even close.</p><h2 id="chatgpt-was-the-most-accurate">ChatGPT was the most accurate </h2><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="cFWuhuePMHeUVnidAKHtfJ" name="ChatGPT walmart" alt="Walmart haul" src="https://cdn.mos.cms.futurecdn.net/cFWuhuePMHeUVnidAKHtfJ.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Once I uploaded the list, ChatGPT asked me to log into my Walmart account so it could do the shopping for me. I sat and watched as it took charge. <br><br>It followed the required brands and quantities, chose reasonably priced products and skipped every optional item exactly as I requested. Where the list allowed flexibility, it selected neutral colors instead of stopping to ask me to make decisions.</p><p>The tradeoff was speed. ChatGPT took the longest to finish, but it spent that time checking the list carefully rather than rushing through it. The total came to<strong> $92.55</strong> for my daughter's fourth grade school supplies. That seemed like a lot for just one kid. </p><h2 id="gemini-was-careful-but-slightly-more-thoughtful">Gemini was careful, but slightly more thoughtful</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/pCYKx5U9H2QcQBHdHVPjD4.jpg" alt="Gemini school shopping" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GNBwFQm56RZz2tYn8CrsL.jpg" alt="Gemini school shopping" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>After uploading the school supply list, Gemini created my cart through Instacart. Once I logged into the Instacart app, Gemini took control. </p><p>Like ChatGPT, it avoided buying optional supplies. It also paused several times to ask me to approve colors for certain products instead of making the decision itself. This is something ChatGPT didn't do. I wasn't picky about colors, but it was a nice option as I know some kids are very particular. As a family that went through an entire year of "yellow" with my youngest, I get it. </p><p>That approach may appeal to shoppers who want more control, but it also meant the experience required more back-and-forth. ultimately bringing the total to about <strong>$60-$90</strong>. It would have been $105 with the optional water bottle. </p><p>I was really surprised how low the price was, especially compared to Walmart. Gemini seemed to do a better job scanning the entire internet for the best deals from Instacart. Those unexpected results were interesting to see.  </p><h2 id="alexa-was-lightning-fast-but-incredibly-expensive">Alexa was lightning fast — but incredibly expensive</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="p2yPvdQptcZzfjkRLzdJKW" name="8 - 2026-08-07T171845.896" alt="Alexa" src="https://cdn.mos.cms.futurecdn.net/p2yPvdQptcZzfjkRLzdJKW.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>We are very much an <a href="https://www.tomsguide.com/ai/i-put-alexa-to-the-test-with-my-chaotic-family-heres-5-things-i-liked-and-2-that-could-use-work">Alexa+ family</a>. I figured, why not use Alexa+ to shop for all our back-to-school needs. And while Alexa+ made the shopping experience a breeze, that convenience came with a hefty price tag.</p><p>Alexa built a cart totaling <strong>$251.48 </strong>— nearly three times what ChatGPT and Gemini found — and that was for just one kid! I'm going to have to get an <a href="https://www.tomsguide.com/ai/i-used-chatgpt-to-start-a-side-hustle-heres-the-hard-truth">extra side hustle at that rate</a>. </p><p>Unlike the other assistants, Alexa added <em>everything</em> it found, including optional items like headphones and a computer mouse that I had specifically asked it to skip. It also asked me to approve colors for several products instead of making those choices automatically.</p><p>If my goal had simply been to get everything into an Amazon cart as quickly as possible, Alexa succeeded. But if I had clicked "Buy Now" without checking the order, I would have spent well over $150 more than necessary. To be honest, I really wanted Alexa+ to win because shopping on Amazon is just so easy, but it was definitely a wake-up call. </p><h2 id="overall-winner-gemini">Overall winner: Gemini</h2><p>For this test, Gemini was the clear winner. It was more hands-on than ChatGPT and slower than Alexa, but the least expensive. It understood the assignment, followed the school supply list most closely, skipped optional purchases, but gave me the total with them in case I wanted to add them at the end. It also delivered the lowest total by a comfortable margin and was ready to deliver them. </p><p>The biggest takeaway was that AI shopping assistants are getting remarkably good, but they aren't interchangeable. The service they're connected to matters just as much as the AI itself. In this case, Gemini paired with Instacart proved to be the smartest — and cheapest — way to tackle my kids' back-to-school shopping.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/the-smartest-ai-trick-isnt-a-prompt-its-your-google-drive">The smartest AI trick isn't a prompt — it's your Google Drive</a></li><li><a href="https://www.tomsguide.com/ai/chatgpt/i-found-a-secret-menu-of-chatgpt-features-here-are-my-9-favorites">I found ChatGPT's secret menu — these 9 features change everything</a></li><li><a href="https://www.tomsguide.com/ai/claude-has-4-built-in-skills-i-use-constantly-heres-how-to-find-them">Claude has 4 built-in skills I use constantly — here’s how to find them</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/i-let-chatgpt-gemini-and-alexa-shop-my-kids-back-to-school-supplies-only-one-got-it-right</link>
                                                                            <description>
                            <![CDATA[ I asked ChatGPT, Gemini and Alexa to shop my kids' school supply lists. One AI found the best deals, while another nearly tripled my total. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">TAdH2SCkATi9Hh7jR2svCE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/spWVVZu9iMtEswcy4ZcQkf-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sat, 08 Aug 2026 05:00:00 +0000</pubDate>                                                                                                                                <updated>Sat, 08 Aug 2026 12:47:34 +0000</updated>
                                                                                                                                            <category><![CDATA[AI]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/zYjevim2q7FjQiefqpjZRB.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/spWVVZu9iMtEswcy4ZcQkf-1280-80.png">
                                                            <media:credit><![CDATA[Future/Gemini edit]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[back to school assistants]]></media:description>                                                            <media:text><![CDATA[back to school assistants]]></media:text>
                                <media:title type="plain"><![CDATA[back to school assistants]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/spWVVZu9iMtEswcy4ZcQkf-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When I was a kid, <a href="https://www.tomsguide.com/sales-events/best-back-to-school-sales-2024">back-to-school shopping</a> was my favorite. But as a mom with three kids and three different lists — kindergarten, fourth grade and sixth grade — going to the store to get everything is daunting. Plus, shopping with three kids in tow means there will be inevitable meltdowns over extras and nice-to-haves. <br><br>That's why this year, I decided to lean on three AI assistants to do the job for me. I gave ChatGPT, Gemini and<a href="https://www.tomsguide.com/ai/ive-been-using-alexa-for-3-months-here-are-my-5-favorite-features-and-one-im-not-a-fan-of"> Alexa+</a> the exact same school supply list and asked each one to shop for me. My instructions were simple: follow the teacher's list, stick to the required quantities, choose reasonably priced products and skip anything marked optional.</p><p>The results weren't even close.</p><h2 id="chatgpt-was-the-most-accurate">ChatGPT was the most accurate </h2><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="cFWuhuePMHeUVnidAKHtfJ" name="ChatGPT walmart" alt="Walmart haul" src="https://cdn.mos.cms.futurecdn.net/cFWuhuePMHeUVnidAKHtfJ.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Once I uploaded the list, ChatGPT asked me to log into my Walmart account so it could do the shopping for me. I sat and watched as it took charge. <br><br>It followed the required brands and quantities, chose reasonably priced products and skipped every optional item exactly as I requested. Where the list allowed flexibility, it selected neutral colors instead of stopping to ask me to make decisions.</p><p>The tradeoff was speed. ChatGPT took the longest to finish, but it spent that time checking the list carefully rather than rushing through it. The total came to<strong> $92.55</strong> for my daughter's fourth grade school supplies. That seemed like a lot for just one kid. </p><h2 id="gemini-was-careful-but-slightly-more-thoughtful">Gemini was careful, but slightly more thoughtful</h2><figure role="gallery"><figure><img src="https://cdn.mos.cms.futurecdn.net/pCYKx5U9H2QcQBHdHVPjD4.jpg" alt="Gemini school shopping" /><figcaption><small role="credit">Future</small></figcaption></figure><figure><img src="https://cdn.mos.cms.futurecdn.net/GNBwFQm56RZz2tYn8CrsL.jpg" alt="Gemini school shopping" /><figcaption><small role="credit">Future</small></figcaption></figure></figure><p>After uploading the school supply list, Gemini created my cart through Instacart. Once I logged into the Instacart app, Gemini took control. </p><p>Like ChatGPT, it avoided buying optional supplies. It also paused several times to ask me to approve colors for certain products instead of making the decision itself. This is something ChatGPT didn't do. I wasn't picky about colors, but it was a nice option as I know some kids are very particular. As a family that went through an entire year of "yellow" with my youngest, I get it. </p><p>That approach may appeal to shoppers who want more control, but it also meant the experience required more back-and-forth. ultimately bringing the total to about <strong>$60-$90</strong>. It would have been $105 with the optional water bottle. </p><p>I was really surprised how low the price was, especially compared to Walmart. Gemini seemed to do a better job scanning the entire internet for the best deals from Instacart. Those unexpected results were interesting to see.  </p><h2 id="alexa-was-lightning-fast-but-incredibly-expensive">Alexa was lightning fast — but incredibly expensive</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="p2yPvdQptcZzfjkRLzdJKW" name="8 - 2026-08-07T171845.896" alt="Alexa" src="https://cdn.mos.cms.futurecdn.net/p2yPvdQptcZzfjkRLzdJKW.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>We are very much an <a href="https://www.tomsguide.com/ai/i-put-alexa-to-the-test-with-my-chaotic-family-heres-5-things-i-liked-and-2-that-could-use-work">Alexa+ family</a>. I figured, why not use Alexa+ to shop for all our back-to-school needs. And while Alexa+ made the shopping experience a breeze, that convenience came with a hefty price tag.</p><p>Alexa built a cart totaling <strong>$251.48 </strong>— nearly three times what ChatGPT and Gemini found — and that was for just one kid! I'm going to have to get an <a href="https://www.tomsguide.com/ai/i-used-chatgpt-to-start-a-side-hustle-heres-the-hard-truth">extra side hustle at that rate</a>. </p><p>Unlike the other assistants, Alexa added <em>everything</em> it found, including optional items like headphones and a computer mouse that I had specifically asked it to skip. It also asked me to approve colors for several products instead of making those choices automatically.</p><p>If my goal had simply been to get everything into an Amazon cart as quickly as possible, Alexa succeeded. But if I had clicked "Buy Now" without checking the order, I would have spent well over $150 more than necessary. To be honest, I really wanted Alexa+ to win because shopping on Amazon is just so easy, but it was definitely a wake-up call. </p><h2 id="overall-winner-gemini">Overall winner: Gemini</h2><p>For this test, Gemini was the clear winner. It was more hands-on than ChatGPT and slower than Alexa, but the least expensive. It understood the assignment, followed the school supply list most closely, skipped optional purchases, but gave me the total with them in case I wanted to add them at the end. It also delivered the lowest total by a comfortable margin and was ready to deliver them. </p><p>The biggest takeaway was that AI shopping assistants are getting remarkably good, but they aren't interchangeable. The service they're connected to matters just as much as the AI itself. In this case, Gemini paired with Instacart proved to be the smartest — and cheapest — way to tackle my kids' back-to-school shopping.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/the-smartest-ai-trick-isnt-a-prompt-its-your-google-drive">The smartest AI trick isn't a prompt — it's your Google Drive</a></li><li><a href="https://www.tomsguide.com/ai/chatgpt/i-found-a-secret-menu-of-chatgpt-features-here-are-my-9-favorites">I found ChatGPT's secret menu — these 9 features change everything</a></li><li><a href="https://www.tomsguide.com/ai/claude-has-4-built-in-skills-i-use-constantly-heres-how-to-find-them">Claude has 4 built-in skills I use constantly — here’s how to find them</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Alexa+ has finally landed in Australia — but am I ready to let an AI-powered virtual assistant manage my life? ]]></title>
                                                                                                <dc:content><![CDATA[ <p>After launching in the US late last year, Amazon's enhanced Alexa+ virtual assistant has made its way to Australian shores, with early access starting today (August 6) for Aussie customers with eligible devices. </p><p>Amazon's voice assistant has gotten a major generative-AI upgrade, with the online giant claiming the changes make Alexa smarter, more conversational and more capable than ever before. <a href="https://www.tomsguide.com/ai/alexa-release-date-cost-devices-and-all-the-new-ai-features#section-what-is-alexa">Alexa+'s memory and emotional upgrades </a>are very similar to what users have become accustomed to with other conversational chatbots, like ChatGPT and Gemini. </p><p>The new Alexa is made for more than just asking questions about the weather or changing your playlists. Its newfound capabilities include integrating with other smart home appliances, arranging dinner reservations, sending emails and setting appointments, offering suggestions for everything from entertainment and recipes to directions and price drops on Amazon based on learned experiences, and so much more — it's almost overwhelming to consider. </p><p>Unlike the previous version, Alexa+ can also initiate conversations without requiring a wake word (i.e. saying 'Alexa'), and remember users’ personal preferences. For its Australian launch, Alexa+ has been adapted for local conditions. It has an Aussie accent, features local news outlets, and can respond with more emotional nuance, like cheeky banter or slang. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2928px;"><p class="vanilla-image-block" style="padding-top:56.28%;"><img id="UhWTxDwfjr3JjprMMgacN6" name="D-Pack-8-SCM-1464" alt="Amazon Alexa+ lifestyle images" src="https://cdn.mos.cms.futurecdn.net/UhWTxDwfjr3JjprMMgacN6.jpg" mos="" align="middle" fullscreen="" width="2928" height="1648" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p>So how exactly does Alexa+ work behind the scenes? The upgraded assistant has been built using Amazon's Bedrock generative-AI platform and combines multiple LLMs, including Amazon's own Nova and models from partners like Anthropic. It's these enhancements that improve Alexa+'s ability to recognise and respond to more natural language (such as half-sentences, colloquialisms, clunky questions, and tone) and to answer user queries with greater accuracy. </p><p>Alexa+'s early access is now available for Australian consumers, with a larger rollout coming later this year. Amazon customers can opt-in to try the new voice assistant by either purchasing a new eligible Echo device or registering one they already own on <a href="http://amazon.com.au/newalexa" target="_blank">Amazon's website</a>. </p><p>And as with most of Amazon's subscription-based smart home products, the company does eventually intend to charge users for Alexa+  — although there is a relatively easy way to get it for free. After the early access period ends, an Alexa+ subscription will be included in Amazon Prime's many membership benefits. If you don't have Prime, you can purchase a monthly Alexa+ subscription for AU$29.99p/m — a price that’s frankly a little nonsensical, given Prime itself costs just AU$9.99p/m.</p><h2 id="is-alexa-actually-worth-the-hype">Is Alexa+ actually worth the hype? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:985px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vxtTxXVVWCnv3mLs7dTzZ6" name="AU-ALEXA_2026_0007" alt="Amazon Alexa+ lifestyle images" src="https://cdn.mos.cms.futurecdn.net/v2/t:307,l:461,cw:985,ch:554,q:80/vxtTxXVVWCnv3mLs7dTzZ6.jpg" mos="" align="middle" fullscreen="" width="1970" height="1255" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p>After spending an afternoon at an Amazon media briefing and seeing all that Alexa+ can do, I honestly remain a little sceptical. Granted, there are plenty of benefits to having a smart assistant with generative-AI smarts — in its demos, Amazon showed that Alexa+ can connect to <em>almost</em> every smart thing in your home, automate your routines and help you when your hands are full with kids or pets by responding to your emails, organising your shopping list and so on. </p><p>While that all sounds useful, I have to admit to still feeling uneasy at the thought of my personal data being collected and used to train a generative AI-powered virtual assistant. While I can appreciate Alexa+ now better understands what it means to be Aussie — things like adding an 'o' to the end of every word, where to find a 'succulent Chinese meal', the passionate rivalry between footy clubs and how to <em>correctly</em> eat Vegemite — my jury's still out on whether I want an Amazon-owned AI assistant planning my day, running my smart home and communicating on my behalf. </p><p>In fairness, Amazon does have safeguards in place for those of us who are wary about using the new voice assistant. As per <a href="https://www.amazon.com.au/b/?node=220224964051" target="_blank">Alexa's Trust & Privacy hub</a>, Amazon states that consumers are in control when using Alexa+ and can manage interactions with the voice assistant via a dedicated Privacy dashboard. You can also listen to what Alexa has heard, review any attachments you've shared via the app or email, and delete chat history or change how long it’s stored. You can also mute your devices at any time by hitting the mute button or using the dashboard when you're not using Alexa+. </p><p>I'll be spending the next few weeks getting some more hands-on time with the Echo Show 8 and Alexa+, so I’ll report back with an update on my experiences. For now, if you're curious about Alexa+ and want to give it a go, <a href="http://amazon.com.au/newalexa" target="_blank">you can register for access 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/home/smart-home/i-used-alexa-routines-to-supercharge-my-ring-doorbell-heres-how-you-can-too">The 5-minute upgrade: How to connect your Ring doorbell to Alexa routines</a></li><li><a href="https://www.tomsguide.com/ai/alexa-now-lets-you-customize-its-personality-heres-how-it-works">Alexa+ now lets you customise its personality — here’s how it works</a></li><li><a href="https://www.tomsguide.com/ai/i-asked-the-vp-of-alexa-about-amazons-ai-coming-to-new-smart-glasses-youre-going-to-hear-things-from-us-in-2026">I asked the VP of Alexa+ about Amazon's AI coming to new smart glasses — 'You’re going to hear things from us in 2026'</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/alexa-has-finally-landed-in-australia-but-am-i-ready-to-let-an-ai-powered-virtual-assistant-manage-my-life</link>
                                                                            <description>
                            <![CDATA[ Alexa+ — Amazon's generative AI-enhanced voice assistant — has landed in Australia, with early access available from today (August 6) for eligible customers. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">W4jNo8kPmtUxxFZCemDVBY</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/pa5gwZJrxGYSfMdtRL7Yhf-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 06 Aug 2026 04:46:16 +0000</pubDate>                                                                                                                                <updated>Thu, 06 Aug 2026 04:48:39 +0000</updated>
                                                                                                                                            <category><![CDATA[AI]]></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/pa5gwZJrxGYSfMdtRL7Yhf-1280-80.jpg">
                                                            <media:credit><![CDATA[Amazon]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amazon Alexa+ Australian launch]]></media:description>                                                            <media:text><![CDATA[Amazon Alexa+ Australian launch]]></media:text>
                                <media:title type="plain"><![CDATA[Amazon Alexa+ Australian launch]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/pa5gwZJrxGYSfMdtRL7Yhf-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>After launching in the US late last year, Amazon's enhanced Alexa+ virtual assistant has made its way to Australian shores, with early access starting today (August 6) for Aussie customers with eligible devices. </p><p>Amazon's voice assistant has gotten a major generative-AI upgrade, with the online giant claiming the changes make Alexa smarter, more conversational and more capable than ever before. <a href="https://www.tomsguide.com/ai/alexa-release-date-cost-devices-and-all-the-new-ai-features#section-what-is-alexa">Alexa+'s memory and emotional upgrades </a>are very similar to what users have become accustomed to with other conversational chatbots, like ChatGPT and Gemini. </p><p>The new Alexa is made for more than just asking questions about the weather or changing your playlists. Its newfound capabilities include integrating with other smart home appliances, arranging dinner reservations, sending emails and setting appointments, offering suggestions for everything from entertainment and recipes to directions and price drops on Amazon based on learned experiences, and so much more — it's almost overwhelming to consider. </p><p>Unlike the previous version, Alexa+ can also initiate conversations without requiring a wake word (i.e. saying 'Alexa'), and remember users’ personal preferences. For its Australian launch, Alexa+ has been adapted for local conditions. It has an Aussie accent, features local news outlets, and can respond with more emotional nuance, like cheeky banter or slang. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2928px;"><p class="vanilla-image-block" style="padding-top:56.28%;"><img id="UhWTxDwfjr3JjprMMgacN6" name="D-Pack-8-SCM-1464" alt="Amazon Alexa+ lifestyle images" src="https://cdn.mos.cms.futurecdn.net/UhWTxDwfjr3JjprMMgacN6.jpg" mos="" align="middle" fullscreen="" width="2928" height="1648" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p>So how exactly does Alexa+ work behind the scenes? The upgraded assistant has been built using Amazon's Bedrock generative-AI platform and combines multiple LLMs, including Amazon's own Nova and models from partners like Anthropic. It's these enhancements that improve Alexa+'s ability to recognise and respond to more natural language (such as half-sentences, colloquialisms, clunky questions, and tone) and to answer user queries with greater accuracy. </p><p>Alexa+'s early access is now available for Australian consumers, with a larger rollout coming later this year. Amazon customers can opt-in to try the new voice assistant by either purchasing a new eligible Echo device or registering one they already own on <a href="http://amazon.com.au/newalexa" target="_blank">Amazon's website</a>. </p><p>And as with most of Amazon's subscription-based smart home products, the company does eventually intend to charge users for Alexa+  — although there is a relatively easy way to get it for free. After the early access period ends, an Alexa+ subscription will be included in Amazon Prime's many membership benefits. If you don't have Prime, you can purchase a monthly Alexa+ subscription for AU$29.99p/m — a price that’s frankly a little nonsensical, given Prime itself costs just AU$9.99p/m.</p><h2 id="is-alexa-actually-worth-the-hype">Is Alexa+ actually worth the hype? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:985px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vxtTxXVVWCnv3mLs7dTzZ6" name="AU-ALEXA_2026_0007" alt="Amazon Alexa+ lifestyle images" src="https://cdn.mos.cms.futurecdn.net/v2/t:307,l:461,cw:985,ch:554,q:80/vxtTxXVVWCnv3mLs7dTzZ6.jpg" mos="" align="middle" fullscreen="" width="1970" height="1255" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p>After spending an afternoon at an Amazon media briefing and seeing all that Alexa+ can do, I honestly remain a little sceptical. Granted, there are plenty of benefits to having a smart assistant with generative-AI smarts — in its demos, Amazon showed that Alexa+ can connect to <em>almost</em> every smart thing in your home, automate your routines and help you when your hands are full with kids or pets by responding to your emails, organising your shopping list and so on. </p><p>While that all sounds useful, I have to admit to still feeling uneasy at the thought of my personal data being collected and used to train a generative AI-powered virtual assistant. While I can appreciate Alexa+ now better understands what it means to be Aussie — things like adding an 'o' to the end of every word, where to find a 'succulent Chinese meal', the passionate rivalry between footy clubs and how to <em>correctly</em> eat Vegemite — my jury's still out on whether I want an Amazon-owned AI assistant planning my day, running my smart home and communicating on my behalf. </p><p>In fairness, Amazon does have safeguards in place for those of us who are wary about using the new voice assistant. As per <a href="https://www.amazon.com.au/b/?node=220224964051" target="_blank">Alexa's Trust & Privacy hub</a>, Amazon states that consumers are in control when using Alexa+ and can manage interactions with the voice assistant via a dedicated Privacy dashboard. You can also listen to what Alexa has heard, review any attachments you've shared via the app or email, and delete chat history or change how long it’s stored. You can also mute your devices at any time by hitting the mute button or using the dashboard when you're not using Alexa+. </p><p>I'll be spending the next few weeks getting some more hands-on time with the Echo Show 8 and Alexa+, so I’ll report back with an update on my experiences. For now, if you're curious about Alexa+ and want to give it a go, <a href="http://amazon.com.au/newalexa" target="_blank">you can register for access 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/home/smart-home/i-used-alexa-routines-to-supercharge-my-ring-doorbell-heres-how-you-can-too">The 5-minute upgrade: How to connect your Ring doorbell to Alexa routines</a></li><li><a href="https://www.tomsguide.com/ai/alexa-now-lets-you-customize-its-personality-heres-how-it-works">Alexa+ now lets you customise its personality — here’s how it works</a></li><li><a href="https://www.tomsguide.com/ai/i-asked-the-vp-of-alexa-about-amazons-ai-coming-to-new-smart-glasses-youre-going-to-hear-things-from-us-in-2026">I asked the VP of Alexa+ about Amazon's AI coming to new smart glasses — 'You’re going to hear things from us in 2026'</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 new to Prime Video thriller movies to watch this week — including a ‘90s crime classic with one of the most shocking twists in film history (August 4-10) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I’m combing through the latest movies on Prime Video and picking out a selection of gripping thrillers you should watch this week to add some excitement to your mid-week streaming. </p><p>Prime Video just added more than 50 movies to kick off its <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">August 2026 slate</a>, so there are plenty of options. These include a classic crime thriller with a jaw-dropping twist, a tense spy-thriller based on real history, and a surreal neo-noir mystery from legendary director David Lynch. </p><p>Don’t waste your precious movie-watching time scrolling through all the new arrivals on Prime Video; I’ve already done the legwork for you and picked out a selection of highlights. Here are the best new to Prime Video thriller movies you need to add to your watchlist this week. </p><h3 class="article-body__section" id="section-3-best-new-to-prime-video-thriller-movies-this-week"><span>3 best new to Prime Video thriller movies this week</span></h3><h2 id="the-usual-suspects-1995">‘The Usual Suspects’ (1995)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/x3t0Nc6fg7w" allowfullscreen></iframe></div></div><p>Earlier this year, <a href="https://www.tomsguide.com/entertainment/movies/i-got-2-000-readers-to-pick-the-best-movie-twist-of-all-time-and-this-90s-classic-was-the-clear-winner">I polled more than 2,000 Tom’s Guide readers</a> to determine the best movie twist of all time. While “The Sixth Sense” took home the gold, 1995’s “The Usual Suspects” secured second place with almost 20% of the vote. If you somehow haven’t seen this Bryan Singer crime thriller, and more importantly, don’t know the devilishly brilliant twists, then stop reading this article and watch this genre classic ASAP before you have the shocking reveal ruined.</p><p>This thriller revolves around a single question: Who is Keyser Söze? After a job gone wrong at the San Pedro Harbor, a timid small-time crook, Roger “Verbal” Kint (Kevin Spacey), is taken into police custody for interrogation. Through a series of flashbacks, he explains how the ill-fated heist came to be and, more importantly, how he made contact with the enigmatic crimelord, Keyser Söze. The police hope to identify Söze using Verbal’s testimony, but there is trickery afoot, and the elusive criminal mastermind is already one step ahead of the authorities.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0DPND4ZVW" target="_blank" rel="nofollow"><em><strong>"The Usual Suspects" on Prime Video</strong></em></a><em><strong> now</strong></em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O6p3Ae"></div>                            </div>                            <script src="https://kwizly.com/embed/O6p3Ae.js" async></script><h2 id="operation-finale-2018">'Operation Finale' (2018)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/07Y4_6PD0Z4" allowfullscreen></iframe></div></div><p>“Operation Finale” is an intense and powerful spy-thriller rooted in real history. Directed by Chris Weitz, this movie chronicles a 1960s operation to capture an SS officer, Adolf Eichmann (played by Ben Kingsley), and bring him to trial in Jerusalem for his abhorrent crimes during World War II. That mission is easy to get invested in, and while the 2018 movie does run a little long at two hours, it’s still a compelling watch with a strong cast.</p><p>In 1960s Argentina, a group of Israeli agents believes they may have identified German officer Adolf Eichmann, one of the key figures behind Hitler’s “Final Solution.” Determined to bring him to justice at any cost, these Mossad agents must infiltrate his inner circle and then find a way to capture him so they can bring him to justice and face the consequences of his war crimes. Their leader is Peter Malkin (Oscar Isaac), a man deeply haunted by the past.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B07GVQZ9H2" target="_blank" rel="nofollow"><em><strong>"Operation Finale" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="blue-velvet-1986">‘Blue Velvet’ (1986)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/rAA6imfqMYQ" allowfullscreen></iframe></div></div><p>Visionary director David Lynch passed away in January 2025, so why not celebrate a remarkable career by watching one of his most beloved movies, “Blue Velvet.” This influential neo-noir mystery-thriller explores the darker side of suburbia and earned Lynch his second Oscar nomination for Best Director. Curiously, it was very divisive upon release in 1986, but over the decades since, it has been reevaluated by contemporary critics. </p><p>Frequent Lynch collaborator Kyle MacLachlan plays Jeffrey, a college student who returns home to Lumberton, North Carolina, after his father suffers a stroke. Back in the suffocating mundanity of suburban existence, Jeffrey begins to unravel a twisting mystery when he finds a severed human ear near his home; this leads to a fascination with a troubled nightclub singer, Dorothy (Isabella Rossellini), and things get darker (and more disturbing) from there.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0H9ZK3ZKW" target="_blank" rel="nofollow"><em><strong>"Blue Velvet" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch#section-new-movies-on-prime-video-in-august-2026">New on Prime Video in August 2026</a></li><li><a href="https://www.tomsguide.com/news/how-to-get-prime-video-for-free">How to get Prime Video for free</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-5-movies-you-can-stream-for-free-including-a-claustrophobic-sci-fi-thriller-set-in-a-frozen-future">Prime Video just added 5 movies you can stream for free</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-new-to-prime-video-thriller-movies-to-stream-this-week-including-a-90s-crime-classic-with-one-of-the-most-shocking-twists-in-film-history-august-4-10</link>
                                                                            <description>
                            <![CDATA[ Prime Video just added more than 50 movies to its library, including a trio of intense, twist-fueled thriller flicks worthy of your watchlist. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LBfnuDLSmiVajdUkXoTydS</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7EZZyGZEXsWAo6kmTF6dAL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 04 Aug 2026 11:11:44 +0000</pubDate>                                                                                                                                <updated>Wed, 05 Aug 2026 11:05:54 +0000</updated>
                                                                                                                                            <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ rory.mellon@futurenet.com (Rory Mellon) ]]></author>                    <dc:creator><![CDATA[ Rory Mellon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5Rv6LtQXMj5JB4Eu8Lt4Sn.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/7EZZyGZEXsWAo6kmTF6dAL-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo ]]></media:description>                                                            <media:text><![CDATA[Prime Video logo ]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7EZZyGZEXsWAo6kmTF6dAL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’m combing through the latest movies on Prime Video and picking out a selection of gripping thrillers you should watch this week to add some excitement to your mid-week streaming. </p><p>Prime Video just added more than 50 movies to kick off its <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">August 2026 slate</a>, so there are plenty of options. These include a classic crime thriller with a jaw-dropping twist, a tense spy-thriller based on real history, and a surreal neo-noir mystery from legendary director David Lynch. </p><p>Don’t waste your precious movie-watching time scrolling through all the new arrivals on Prime Video; I’ve already done the legwork for you and picked out a selection of highlights. Here are the best new to Prime Video thriller movies you need to add to your watchlist this week. </p><h3 class="article-body__section" id="section-3-best-new-to-prime-video-thriller-movies-this-week"><span>3 best new to Prime Video thriller movies this week</span></h3><h2 id="the-usual-suspects-1995">‘The Usual Suspects’ (1995)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/x3t0Nc6fg7w" allowfullscreen></iframe></div></div><p>Earlier this year, <a href="https://www.tomsguide.com/entertainment/movies/i-got-2-000-readers-to-pick-the-best-movie-twist-of-all-time-and-this-90s-classic-was-the-clear-winner">I polled more than 2,000 Tom’s Guide readers</a> to determine the best movie twist of all time. While “The Sixth Sense” took home the gold, 1995’s “The Usual Suspects” secured second place with almost 20% of the vote. If you somehow haven’t seen this Bryan Singer crime thriller, and more importantly, don’t know the devilishly brilliant twists, then stop reading this article and watch this genre classic ASAP before you have the shocking reveal ruined.</p><p>This thriller revolves around a single question: Who is Keyser Söze? After a job gone wrong at the San Pedro Harbor, a timid small-time crook, Roger “Verbal” Kint (Kevin Spacey), is taken into police custody for interrogation. Through a series of flashbacks, he explains how the ill-fated heist came to be and, more importantly, how he made contact with the enigmatic crimelord, Keyser Söze. The police hope to identify Söze using Verbal’s testimony, but there is trickery afoot, and the elusive criminal mastermind is already one step ahead of the authorities.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0DPND4ZVW" target="_blank" rel="nofollow"><em><strong>"The Usual Suspects" on Prime Video</strong></em></a><em><strong> now</strong></em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O6p3Ae"></div>                            </div>                            <script src="https://kwizly.com/embed/O6p3Ae.js" async></script><h2 id="operation-finale-2018">'Operation Finale' (2018)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/07Y4_6PD0Z4" allowfullscreen></iframe></div></div><p>“Operation Finale” is an intense and powerful spy-thriller rooted in real history. Directed by Chris Weitz, this movie chronicles a 1960s operation to capture an SS officer, Adolf Eichmann (played by Ben Kingsley), and bring him to trial in Jerusalem for his abhorrent crimes during World War II. That mission is easy to get invested in, and while the 2018 movie does run a little long at two hours, it’s still a compelling watch with a strong cast.</p><p>In 1960s Argentina, a group of Israeli agents believes they may have identified German officer Adolf Eichmann, one of the key figures behind Hitler’s “Final Solution.” Determined to bring him to justice at any cost, these Mossad agents must infiltrate his inner circle and then find a way to capture him so they can bring him to justice and face the consequences of his war crimes. Their leader is Peter Malkin (Oscar Isaac), a man deeply haunted by the past.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B07GVQZ9H2" target="_blank" rel="nofollow"><em><strong>"Operation Finale" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="blue-velvet-1986">‘Blue Velvet’ (1986)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/rAA6imfqMYQ" allowfullscreen></iframe></div></div><p>Visionary director David Lynch passed away in January 2025, so why not celebrate a remarkable career by watching one of his most beloved movies, “Blue Velvet.” This influential neo-noir mystery-thriller explores the darker side of suburbia and earned Lynch his second Oscar nomination for Best Director. Curiously, it was very divisive upon release in 1986, but over the decades since, it has been reevaluated by contemporary critics. </p><p>Frequent Lynch collaborator Kyle MacLachlan plays Jeffrey, a college student who returns home to Lumberton, North Carolina, after his father suffers a stroke. Back in the suffocating mundanity of suburban existence, Jeffrey begins to unravel a twisting mystery when he finds a severed human ear near his home; this leads to a fascination with a troubled nightclub singer, Dorothy (Isabella Rossellini), and things get darker (and more disturbing) from there.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0H9ZK3ZKW" target="_blank" rel="nofollow"><em><strong>"Blue Velvet" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch#section-new-movies-on-prime-video-in-august-2026">New on Prime Video in August 2026</a></li><li><a href="https://www.tomsguide.com/news/how-to-get-prime-video-for-free">How to get Prime Video for free</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-5-movies-you-can-stream-for-free-including-a-claustrophobic-sci-fi-thriller-set-in-a-frozen-future">Prime Video just added 5 movies you can stream for free</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Prime Video top 10 movies — here’s the 3 worth watching right now (August 1-2) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It's the start of a new month, and <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> is heating up with great new movies to curl up on the couch in the glorious AC this weekend. <a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-52-new-movies-here-are-the-5-im-streaming-first" target="_blank" rel="nofollow">Prime Video just added over 50 movies</a> in August, but not all of them are worth your precious streaming time. </p><p>To narrow down what to watch next, I make a beeline to the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a>'s list of the top 10 most-watched movies. Sure, it cuts through the noise, but how do you separate the movie night hits from the overhyped duds? Because let's be real, just because it's trending doesn't mean it merits a watch. Just look at Prime Video's lukewarm shark thriller at the #1 spot, which has an 18% audience score on Rotten Tomatoes. </p><p>To help you skip the scrolling and get to streaming, I've rounded up the standout picks from Prime Video's current top 10. That includes a slice of fantasy comfort food, a slept-on horror thriller, and Ryan Gosling's crowd-pleasing sci-fi adventure. So without further ado, let's dive into the best movies in Prime Video's top 10 that are worth adding to your watchlist.</p><p><em>This article is based on the global Prime Video top 10 list as of Sunday, August 2, 2026.</em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XmxxBO"></div>                            </div>                            <script src="https://kwizly.com/embed/XmxxBO.js" async></script><h3 class="article-body__section" id="section-best-movies-in-the-prime-video-top-10"><span>Best movies in the Prime Video top 10</span></h3><h2 id="project-hail-mary">'Project Hail Mary'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/m08TxIsFTRI" allowfullscreen></iframe></div></div><p>Amaze! Amaze! Amaze! The sci-fi sensation "Project Hail Mary" is just as phenomenal as everyone says. Ryan Gosling is in top form as the charming yet woefully out of his league Ryland Grace, a disgraced scientist now teaching middle school. He, like everyone else, is quietly ignoring the end of the world getting closer now that a star-eating microbe is chowing down on our sun.  </p><p>He wakes up on a spaceship with no memory of his identity or how he got there. As the pieces come together, he realizes he's been roped into a suicide mission to save Earth from annihilation. Thankfully, he's got a buddy to help: Rocky, the lovable alien brought to life through voice and puppetry by James Ortiz. Their friendship becomes the emotional core of the movie, fueling a story packed with heartfelt humor, high-stakes disaster drama, and tense spacewalk sequences that had me watching through my fingers in theaters. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0GHXTWRV2" target="_blank" rel="nofollow"><em><strong>"Project Hail Mary" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="masters-of-the-universe">'Masters of the Universe'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/X21JsHLHnY8" allowfullscreen></iframe></div></div><p>As far as scraping the bottom of the IP barrel goes, audiences at least seem to get a kick out of this latest unnecessary reboot. It's sitting at an 86% audience score on Rotten Tomatoes, warmer than its middling 67% from critics. I was a '90s kid and never watched He-man or She-ra — well, unless you count ND Stevenson's hella gay reboot — but I'm not above some popcorn fodder full of hunky actors to help a Sunday afternoon along. </p><p>Prince Adam (Nicholas Galitzine) is a young man who grew up on Earth and, after discovering the Sword of Power, learns of his true lineage: He's a prince on the distant planet of Eternia. When he returns, he finds his home has fallen under the control of the ruthless Skeletor (Jared Leto). Joined by allies Teela (Camila Mendes) and Duncan (Idris Elba), Adam sets out to reclaim the throne and harness his powers as He-Man, the legendary warrior destined to protect Eternia. Check out our <a href="https://www.tomsguide.com/entertainment/movies/masters-of-the-universe-review-has-the-power-to-scratch-that-fantasy-itch-but-little-else">“Masters of the Universe” review</a> for more.</p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/detail/0PN0QUSC4GJ66QGSQWBE70ERPU" target="_blank" rel="nofollow"><em><strong>"Masters of the Universe" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="the-map-that-leads-to-you-2025">'The Map That Leads to You' (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/FK9BQm471c0" allowfullscreen></iframe></div></div><p>"Obsession" and "Backrooms" may be hogging the headlines, but they're not the only stellar horror movies we've seen this year. Johannes Roberts’ "Primate" is a blood-soaked horror film aimed squarely at genre fans, and it's well worth a watch for some tense scares this weekend.</p><p>Set in a vacation home in Hawaii, Lucy (Johnny Sequoyah) and her friends plan to enjoy the empty house while her father is away on business. But their sunny getaway turns into a nightmare when an adopted pet chimpanzee gets bitten by a rabid mongoose and turns bloodthirsty. Trapped and outmatched, they’re forced to rely on their wits to survive the chimp's savage frenzy.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0G75D8R6R?lv=shuf&channelId=500&plpRedirect=mhFallback" target="_blank" rel="nofollow"><em><strong>"Primate" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-prime-video-top-10-movies-right-now"><span>Prime Video top 10 movies right now</span></h3><ol start="1"><li>"The Devil's Mouth" (2026)</li><li>"Masters of the Universe" (2026)</li><li>"Project Hail Mary" (2026)</li><li>"The Amateur" (2025)</li><li>"Moonfall" (2022)</li><li>"The Sheep Detectives" (2026)</li><li>"Primate" (2026)</li><li>"Ruthless" (2024)</li><li>"World War Z" (2013)</li><li>"Do Not Enter" (2026)</li></ol><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/streaming/3-best-tom-holland-movies-to-watch-after-spider-man-brand-new-day">3 best Tom Holland movies to watch after ‘Spider-Man: Brand New Day’</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/9-must-watch-shows-and-movies-to-stream-in-august-2026-ted-lasso-reacher-dcs-lanterns-and-more">9 must-watch shows and movies to stream in August 2026: ‘Ted Lasso,’ ‘Reacher,’ DC’s ‘Lanterns’ and more</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/netflix-just-added-39-new-movies-here-are-the-five-you-need-to-stream-right-now-august-1-2026">Netflix just added 39 new movies — here are the 5 you need to stream right now</a></li></ul><div data-model-name="Roku Streaming Stick 4K (2021),Roku Express 4K+,Google Chromecast with Google TV,Apple TV 4K (2022),Roku Express 4K+ (2021),Amazon Fire TV Stick 4K Max 2023" data-widget-type="multimodelreview" data-widget-title="Streaming device deals not to miss"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-heres-the-3-worth-watching-right-now-august-1-2</link>
                                                                            <description>
                            <![CDATA[ These are the best movies on Prime Video's top 10 list that are actually worth adding to your watchlist. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">RWUwQgQiGDu4kK47YTccYU</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/KFAWy2ARKTf8LL9yy3E8y3-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 02 Aug 2026 19:04:55 +0000</pubDate>                                                                                                                                <updated>Sun, 02 Aug 2026 19:06:43 +0000</updated>
                                                                                                                                            <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alyse Stanley ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/BxNnQuBWRHqkv5xWZsjrjc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alyse Stanley is a news editor at Tom’s Guide, overseeing weekend coverage and writing about the latest in tech, gaming, and entertainment. Before Tom’s Guide, Alyse worked as an editor for the Washington Post’s sunsetted video game section, Launcher, where she also wrote about indie games you shouldn’t miss, how to tackle your gaming backlog, and all things Nintendo. She previously led Gizmodo’s weekend news desk covering breaking tech news and has written game reviews and features for outlets like Polygon, Unwinnable, and Rock, Paper, Shotgun. A recent Chicago-area transplant born and raised in Virginia, Alyse is a big fan of horror movies, cartoons, and roller skating. She&#039;s also a puzzle fan and can often be found contributing to the NYT Connections coverage on Tom&#039;s Guide &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/KFAWy2ARKTf8LL9yy3E8y3-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on a orange film reel background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on a orange film reel background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on a orange film reel background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/KFAWy2ARKTf8LL9yy3E8y3-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's the start of a new month, and <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> is heating up with great new movies to curl up on the couch in the glorious AC this weekend. <a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-52-new-movies-here-are-the-5-im-streaming-first" target="_blank" rel="nofollow">Prime Video just added over 50 movies</a> in August, but not all of them are worth your precious streaming time. </p><p>To narrow down what to watch next, I make a beeline to the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a>'s list of the top 10 most-watched movies. Sure, it cuts through the noise, but how do you separate the movie night hits from the overhyped duds? Because let's be real, just because it's trending doesn't mean it merits a watch. Just look at Prime Video's lukewarm shark thriller at the #1 spot, which has an 18% audience score on Rotten Tomatoes. </p><p>To help you skip the scrolling and get to streaming, I've rounded up the standout picks from Prime Video's current top 10. That includes a slice of fantasy comfort food, a slept-on horror thriller, and Ryan Gosling's crowd-pleasing sci-fi adventure. So without further ado, let's dive into the best movies in Prime Video's top 10 that are worth adding to your watchlist.</p><p><em>This article is based on the global Prime Video top 10 list as of Sunday, August 2, 2026.</em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XmxxBO"></div>                            </div>                            <script src="https://kwizly.com/embed/XmxxBO.js" async></script><h3 class="article-body__section" id="section-best-movies-in-the-prime-video-top-10"><span>Best movies in the Prime Video top 10</span></h3><h2 id="project-hail-mary">'Project Hail Mary'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/m08TxIsFTRI" allowfullscreen></iframe></div></div><p>Amaze! Amaze! Amaze! The sci-fi sensation "Project Hail Mary" is just as phenomenal as everyone says. Ryan Gosling is in top form as the charming yet woefully out of his league Ryland Grace, a disgraced scientist now teaching middle school. He, like everyone else, is quietly ignoring the end of the world getting closer now that a star-eating microbe is chowing down on our sun.  </p><p>He wakes up on a spaceship with no memory of his identity or how he got there. As the pieces come together, he realizes he's been roped into a suicide mission to save Earth from annihilation. Thankfully, he's got a buddy to help: Rocky, the lovable alien brought to life through voice and puppetry by James Ortiz. Their friendship becomes the emotional core of the movie, fueling a story packed with heartfelt humor, high-stakes disaster drama, and tense spacewalk sequences that had me watching through my fingers in theaters. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0GHXTWRV2" target="_blank" rel="nofollow"><em><strong>"Project Hail Mary" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="masters-of-the-universe">'Masters of the Universe'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/X21JsHLHnY8" allowfullscreen></iframe></div></div><p>As far as scraping the bottom of the IP barrel goes, audiences at least seem to get a kick out of this latest unnecessary reboot. It's sitting at an 86% audience score on Rotten Tomatoes, warmer than its middling 67% from critics. I was a '90s kid and never watched He-man or She-ra — well, unless you count ND Stevenson's hella gay reboot — but I'm not above some popcorn fodder full of hunky actors to help a Sunday afternoon along. </p><p>Prince Adam (Nicholas Galitzine) is a young man who grew up on Earth and, after discovering the Sword of Power, learns of his true lineage: He's a prince on the distant planet of Eternia. When he returns, he finds his home has fallen under the control of the ruthless Skeletor (Jared Leto). Joined by allies Teela (Camila Mendes) and Duncan (Idris Elba), Adam sets out to reclaim the throne and harness his powers as He-Man, the legendary warrior destined to protect Eternia. Check out our <a href="https://www.tomsguide.com/entertainment/movies/masters-of-the-universe-review-has-the-power-to-scratch-that-fantasy-itch-but-little-else">“Masters of the Universe” review</a> for more.</p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/detail/0PN0QUSC4GJ66QGSQWBE70ERPU" target="_blank" rel="nofollow"><em><strong>"Masters of the Universe" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="the-map-that-leads-to-you-2025">'The Map That Leads to You' (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/FK9BQm471c0" allowfullscreen></iframe></div></div><p>"Obsession" and "Backrooms" may be hogging the headlines, but they're not the only stellar horror movies we've seen this year. Johannes Roberts’ "Primate" is a blood-soaked horror film aimed squarely at genre fans, and it's well worth a watch for some tense scares this weekend.</p><p>Set in a vacation home in Hawaii, Lucy (Johnny Sequoyah) and her friends plan to enjoy the empty house while her father is away on business. But their sunny getaway turns into a nightmare when an adopted pet chimpanzee gets bitten by a rabid mongoose and turns bloodthirsty. Trapped and outmatched, they’re forced to rely on their wits to survive the chimp's savage frenzy.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/dp/B0G75D8R6R?lv=shuf&channelId=500&plpRedirect=mhFallback" target="_blank" rel="nofollow"><em><strong>"Primate" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h3 class="article-body__section" id="section-prime-video-top-10-movies-right-now"><span>Prime Video top 10 movies right now</span></h3><ol start="1"><li>"The Devil's Mouth" (2026)</li><li>"Masters of the Universe" (2026)</li><li>"Project Hail Mary" (2026)</li><li>"The Amateur" (2025)</li><li>"Moonfall" (2022)</li><li>"The Sheep Detectives" (2026)</li><li>"Primate" (2026)</li><li>"Ruthless" (2024)</li><li>"World War Z" (2013)</li><li>"Do Not Enter" (2026)</li></ol><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/streaming/3-best-tom-holland-movies-to-watch-after-spider-man-brand-new-day">3 best Tom Holland movies to watch after ‘Spider-Man: Brand New Day’</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/9-must-watch-shows-and-movies-to-stream-in-august-2026-ted-lasso-reacher-dcs-lanterns-and-more">9 must-watch shows and movies to stream in August 2026: ‘Ted Lasso,’ ‘Reacher,’ DC’s ‘Lanterns’ and more</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/netflix-just-added-39-new-movies-here-are-the-five-you-need-to-stream-right-now-august-1-2026">Netflix just added 39 new movies — here are the 5 you need to stream right now</a></li></ul><div data-model-name="Roku Streaming Stick 4K (2021),Roku Express 4K+,Google Chromecast with Google TV,Apple TV 4K (2022),Roku Express 4K+ (2021),Amazon Fire TV Stick 4K Max 2023" data-widget-type="multimodelreview" data-widget-title="Streaming device deals not to miss"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 best new to Prime Video shows to binge-watch this weekend (July 31-Aug. 2) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>We've officially come to the end of July but luckily, in streaming as in life, the finish of one month brings the start of another and with it a fresh crop of new films and TV series for us to binge on our couches. (Because, really, what more do we need?) </p><p>One of the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">top streaming services</a> around, <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> regularly updates its already extensive streaming library every month and <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">August 2026</a> will be no exception, with buzzy shows and movies joining the platform in the weeks ahead. But before we say hello to all of those additions, let's use this weekend to catch up on some of the great titles that premiered in July. </p><p>Given the breadth of the Prime Video platform, we here at Tom's Guide have decided to make things easy and narrowed the list down to a trio of shows that we think you should check out next. They include action-adventure comedy "<a href="https://www.tomsguide.com/entertainment/streaming/how-to-watch-ride-or-die"><strong>Ride or Die</strong></a>," animated superhero noir "<a href="https://www.tomsguide.com/entertainment/prime-video/batman-caped-crusader-season-2-review-my-favorite-current-onscreen-batman-is-back-with-another-stylish-set-of-adventures"><strong>Batman: Caped Crusader</strong>"</a> and a beloved mother-daughter series that moved to Prime Video earlier in the month. (Hint: Friday night dinner!) Here are the 3 best new to Prime Video shows to binge this weekend. </p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="ride-or-die">'Ride or Die'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/QFGAxkTRAG8" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Buddy comedy/action-adventure</p><p><strong>What it's about:</strong> Besties Debbie (Octavia Spencer) and Judith (Hannah Waddingham) have the type of friendship that can withstand anything—but that trust gets majorly tested when it's revealed that the latter isn't actually a forensic accountant as Debbie always thought, but a highly trained, guns-blazing assassin. When Debbie and her MP husband David (Jamie Parker) get unwittingly roped into a scheme involving mob money and corrupt politics, the gal pals are forced on the run.</p><p><strong>Why you should watch it: </strong>Who doesn't want to hang out with Hannah Waddingham and Octavia Spencer — two of Hollywood's most talented and likeable stars — for eight hourlong episodes? Beyond the actresses' excellent onscreen chemistry, "Ride or Die" is a winning watch because it "maximizes its entertainment, humor, and fun through genuine performances and breezy writing," per the critics' consensus on Rotten Tomatoes, where the spy caper has a solid 96% approval rating. </p><p><em><strong>Stream "</strong></em><a href="https://www.amazon.com/gp/video/detail/B0H1MBNDTL?ref=dvm_us_dl_sl_go_t_rod26_mkw_p401-kw2855875-cr2855896-c&mrntrk=go_cmp-24033866851_adg-204000242288_ad-816707945232_kwd-2520170144084_dev-c_ext-" target="_blank" rel="nofollow"><em><strong>Ride or Die" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="batman-caped-crusader">'Batman: Caped Crusader'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/pNhijtUqyeg" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Superhero noir/animated series</p><p><strong>What it's about: </strong>Season 2 of this moody, film noir-inspired reimagining of the Batman mythos sees plenty more danger and drama ahead for our Bruce Wayne (voiced by Hamish Linklater as an adult and Santino Barnard as young Bruce). As Batman and his allies rally together to dismantle the criminal enterprise of reigning mob boss Rupert Thorne (Cedric Yarbrough), the masked vigilante will also have to contend with a whole host of iconic villains, including the Riddler, the Scarecrow and the Joker. </p><p><strong>Why you should watch it: </strong>If you like a broodingly stylized take on the superhero genre—think "<a href="https://www.tomsguide.com/entertainment/prime-video/spider-noir-review-nicolas-cage-excels-in-prime-videos-binge-worthy-new-superhero-show">Spider-Noir</a>," another Prime Video project—then you'll no doubt enjoy this Bruce Timm-developed drama, which earned a Critics' Choice nomination last year for Best Animated Series. </p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/detail/0M8A366P4I025R61REB4E3FVRE" target="_blank" rel="nofollow"><em><strong>"Batman: Caped Crusader" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="gilmore-girls">'Gilmore Girls' </h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/RkX-99jZAxc" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Family dramedy</p><p><strong>What it's about: </strong>At this point, we probably don't need to tell you what "Gilmore Girls" is about, but in case you haven't yet tuned into the classic mother-daughter dramedy, the WB throwback stars Lauren Graham as thirtysomething single mom Lorelai Gilmore and Alexis Bledel as her precociously smart teenage daughter Rory. Over seven seasons, the series chronicles their preternaturally close bond as they both grow and change in the charming New England town of Stars Hollow. </p><p><strong>Why you should watch it: </strong>If you've been missing the Gilmores' quick-witted repartee and Stars Hollow's small-town quirkiness ever since the series <a href="https://www.tomsguide.com/entertainment/netflix/gilmore-girls-leaves-netflix-in-just-2-weeks-so-start-your-binge-and-cry-now">shockingly departed Netflix</a>, don't fret: Prime Video picked up all seven seasons beginning on July 1. Because where the Gilmores lead, we will follow. </p><p><em><strong>Stream </strong></em><a href="https://www.primevideo.com/detail/0GQFRLSM1ARF3VTRFKWMBPJTQS" target="_blank" rel="nofollow"><em><strong>"Gilmore Girls" on Prime Video now</strong></em></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/entertainment/prime-video/prime-videos-upcoming-ai-makeover-could-completely-change-how-you-decide-what-to-watch-next">Prime Video's upcoming AI makeover could completely change how you decide what to watch next</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-videos-new-shark-thriller-movie-has-one-big-problem-lurking-beneath-the-surface-and-its-not-the-shark">Prime Video’s new shark thriller movie has one big problem lurking beneath the surface, and it’s not the shark</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-5-gripping-movies-you-can-stream-for-free-and-one-is-an-action-packed-western-film">Prime Video just added 5 gripping movies you can stream for free — and one is an action-packed western film</a></li></ul><div data-model-name="Amazon Prime Video,Hulu,Netflix,Paramount Plus,Peacock TV,Disney+,Apple TV" data-widget-type="multimodelreview" data-widget-title="Today's best streaming service deals"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-best-new-to-prime-video-shows-to-binge-watch-this-weekend-july-31-aug-2</link>
                                                                            <description>
                            <![CDATA[ Planning to binge-watch something new this weekend? Here's our weekly guide to the best new to Prime Video series you should be streaming right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">sSkZPT7TUEnYFFZkbzeNsR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aozP98atByMPCDdiMyJSPC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 31 Jul 2026 17:47:06 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Brittany Vincent ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/JDgb6vqXHys3nrFJpkRCub.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/aozP98atByMPCDdiMyJSPC-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on teal bubbles background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on teal bubbles background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on teal bubbles background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aozP98atByMPCDdiMyJSPC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We've officially come to the end of July but luckily, in streaming as in life, the finish of one month brings the start of another and with it a fresh crop of new films and TV series for us to binge on our couches. (Because, really, what more do we need?) </p><p>One of the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">top streaming services</a> around, <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> regularly updates its already extensive streaming library every month and <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">August 2026</a> will be no exception, with buzzy shows and movies joining the platform in the weeks ahead. But before we say hello to all of those additions, let's use this weekend to catch up on some of the great titles that premiered in July. </p><p>Given the breadth of the Prime Video platform, we here at Tom's Guide have decided to make things easy and narrowed the list down to a trio of shows that we think you should check out next. They include action-adventure comedy "<a href="https://www.tomsguide.com/entertainment/streaming/how-to-watch-ride-or-die"><strong>Ride or Die</strong></a>," animated superhero noir "<a href="https://www.tomsguide.com/entertainment/prime-video/batman-caped-crusader-season-2-review-my-favorite-current-onscreen-batman-is-back-with-another-stylish-set-of-adventures"><strong>Batman: Caped Crusader</strong>"</a> and a beloved mother-daughter series that moved to Prime Video earlier in the month. (Hint: Friday night dinner!) Here are the 3 best new to Prime Video shows to binge this weekend. </p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="ride-or-die">'Ride or Die'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/QFGAxkTRAG8" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Buddy comedy/action-adventure</p><p><strong>What it's about:</strong> Besties Debbie (Octavia Spencer) and Judith (Hannah Waddingham) have the type of friendship that can withstand anything—but that trust gets majorly tested when it's revealed that the latter isn't actually a forensic accountant as Debbie always thought, but a highly trained, guns-blazing assassin. When Debbie and her MP husband David (Jamie Parker) get unwittingly roped into a scheme involving mob money and corrupt politics, the gal pals are forced on the run.</p><p><strong>Why you should watch it: </strong>Who doesn't want to hang out with Hannah Waddingham and Octavia Spencer — two of Hollywood's most talented and likeable stars — for eight hourlong episodes? Beyond the actresses' excellent onscreen chemistry, "Ride or Die" is a winning watch because it "maximizes its entertainment, humor, and fun through genuine performances and breezy writing," per the critics' consensus on Rotten Tomatoes, where the spy caper has a solid 96% approval rating. </p><p><em><strong>Stream "</strong></em><a href="https://www.amazon.com/gp/video/detail/B0H1MBNDTL?ref=dvm_us_dl_sl_go_t_rod26_mkw_p401-kw2855875-cr2855896-c&mrntrk=go_cmp-24033866851_adg-204000242288_ad-816707945232_kwd-2520170144084_dev-c_ext-" target="_blank" rel="nofollow"><em><strong>Ride or Die" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="batman-caped-crusader">'Batman: Caped Crusader'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/pNhijtUqyeg" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Superhero noir/animated series</p><p><strong>What it's about: </strong>Season 2 of this moody, film noir-inspired reimagining of the Batman mythos sees plenty more danger and drama ahead for our Bruce Wayne (voiced by Hamish Linklater as an adult and Santino Barnard as young Bruce). As Batman and his allies rally together to dismantle the criminal enterprise of reigning mob boss Rupert Thorne (Cedric Yarbrough), the masked vigilante will also have to contend with a whole host of iconic villains, including the Riddler, the Scarecrow and the Joker. </p><p><strong>Why you should watch it: </strong>If you like a broodingly stylized take on the superhero genre—think "<a href="https://www.tomsguide.com/entertainment/prime-video/spider-noir-review-nicolas-cage-excels-in-prime-videos-binge-worthy-new-superhero-show">Spider-Noir</a>," another Prime Video project—then you'll no doubt enjoy this Bruce Timm-developed drama, which earned a Critics' Choice nomination last year for Best Animated Series. </p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/detail/0M8A366P4I025R61REB4E3FVRE" target="_blank" rel="nofollow"><em><strong>"Batman: Caped Crusader" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="gilmore-girls">'Gilmore Girls' </h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/RkX-99jZAxc" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Family dramedy</p><p><strong>What it's about: </strong>At this point, we probably don't need to tell you what "Gilmore Girls" is about, but in case you haven't yet tuned into the classic mother-daughter dramedy, the WB throwback stars Lauren Graham as thirtysomething single mom Lorelai Gilmore and Alexis Bledel as her precociously smart teenage daughter Rory. Over seven seasons, the series chronicles their preternaturally close bond as they both grow and change in the charming New England town of Stars Hollow. </p><p><strong>Why you should watch it: </strong>If you've been missing the Gilmores' quick-witted repartee and Stars Hollow's small-town quirkiness ever since the series <a href="https://www.tomsguide.com/entertainment/netflix/gilmore-girls-leaves-netflix-in-just-2-weeks-so-start-your-binge-and-cry-now">shockingly departed Netflix</a>, don't fret: Prime Video picked up all seven seasons beginning on July 1. Because where the Gilmores lead, we will follow. </p><p><em><strong>Stream </strong></em><a href="https://www.primevideo.com/detail/0GQFRLSM1ARF3VTRFKWMBPJTQS" target="_blank" rel="nofollow"><em><strong>"Gilmore Girls" on Prime Video now</strong></em></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/entertainment/prime-video/prime-videos-upcoming-ai-makeover-could-completely-change-how-you-decide-what-to-watch-next">Prime Video's upcoming AI makeover could completely change how you decide what to watch next</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-videos-new-shark-thriller-movie-has-one-big-problem-lurking-beneath-the-surface-and-its-not-the-shark">Prime Video’s new shark thriller movie has one big problem lurking beneath the surface, and it’s not the shark</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-5-gripping-movies-you-can-stream-for-free-and-one-is-an-action-packed-western-film">Prime Video just added 5 gripping movies you can stream for free — and one is an action-packed western film</a></li></ul><div data-model-name="Amazon Prime Video,Hulu,Netflix,Paramount Plus,Peacock TV,Disney+,Apple TV" data-widget-type="multimodelreview" data-widget-title="Today's best streaming service deals"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Shopping on Amazon or Walmart? Why you shouldn't rely on their AI assistants just yet ]]></title>
                                                                                                <dc:content><![CDATA[ <p>AI is rapidly becoming the new storefront. Instead of scrolling through pages of search results, more shoppers are asking AI assistants to recommend products, compare prices and narrow down options. But a new report argues that those same AI systems may also be quietly shaping what consumers never see.</p><p>Researchers at Columbia Law School's Center for Law and the Economy have published a report accusing Amazon and Walmart of using their<a href="https://www.tomsguide.com/ai/meet-rufus-amazons-new-ai-assistant-designed-to-help-you-shop"> AI shopping assistants</a> in ways that make American-made products harder to find, despite the systems appearing capable of identifying them.</p><p>The report, <a href="https://law-and-economy.law.columbia.edu/sites/law-and-economy.law.columbia.edu/files/content/Made%20in%20America%2C%20Hidden%20by%20AI.pdf" target="_blank">Made in America, Hidden by AI,</a> examined how Amazon's and Walmart's AI shopping tools responded to questions about products made in the United States. According to the researchers, <a href="https://www.tomsguide.com/ai/amazons-ai-chatbot-is-here-to-make-prime-day-shopping-easier">Amazon's chatbot</a> often declined to answer straightforward questions about American-made products while readily answering equivalent questions about products manufactured in China. After rephrasing the same request, however, the chatbot returned American-made products using information that had been available all along.</p><p>"We tested these systems the way an engineer would, and the refusals fell apart under basic testing," Erie Meyer, senior fellow at the Center for Law and the Economy and one of the report's authors, said. "The data was there, but the design was built to hide it."</p><h2 id="ai-shopping-assistants-are-becoming-gatekeepers">AI shopping assistants are becoming gatekeepers</h2><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="sWXS3838SMjeJknJJm3KRc" name="8 - 2026-07-30T095325.222" alt="alexa screenshot" src="https://cdn.mos.cms.futurecdn.net/sWXS3838SMjeJknJJm3KRc.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The report arrives as retailers increasingly push shoppers toward AI-powered recommendations instead of traditional keyword searches. Whether it's suggesting products, comparing alternatives or summarizing reviews, these assistants are becoming the first stop for many online purchases.</p><p>According to the report, neither Amazon nor Walmart currently offers shoppers a dedicated "Made in USA" filter, despite providing hundreds of other filtering options across many product categories. The researchers argue that if AI assistants become the primary interface for online shopping, the way they choose what information to surface, or withhold, could influence purchasing decisions on a massive scale.<br><br>I tried it by asking for a few common items like furniture and fishing poles, Alexa+ said it did not have access to the information. However, when I asked for American flags made in the U.S.A., it supplied a product that matched my query.</p><p>Lina Khan, director of the Center for Law and the Economy and former chair of the Federal Trade Commission, said the findings demonstrate that increasingly sophisticated AI systems are still shaped by the incentives behind them.</p><p>"Even as AI tools continue to grow in sophistication and capability, business incentives will shape how these advancements get deployed," Khan said. "Policymakers and enforcers have a vital role to play to ensure the public doesn't get the short end of the stick."</p><h2 id="the-systems-appear-capable-of-spotting-suspicious-claims">The systems appear capable of spotting suspicious claims</h2><p>One of the report's more interesting findings is that both companies' AI assistants appeared able to identify potentially misleading "Made in USA" claims.</p><p>According to the researchers, Amazon's chatbot identified listings where promotional material claimed products were American-made despite evidence suggesting they were imported. Walmart's chatbot reportedly ranked "Made in USA" claims by how suspicious they appeared based on factors including seller information and manufacturing footprints.</p><p>The authors argue this demonstrates the underlying AI systems have the technical capability to help identify questionable origin claims. However, the report does not establish that Amazon or Walmart internally use these capabilities for marketplace enforcement.</p><h2 id="amazon-responds">Amazon responds</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RzZN7gXnZ5rfnyvVLbAcKS" name="Amazon logo.shutterstock_2445780831" alt="Amazon building" src="https://cdn.mos.cms.futurecdn.net/RzZN7gXnZ5rfnyvVLbAcKS.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>In a statement to <a href="https://www.reuters.com/business/retail-consumer/amazon-walmart-ai-detect-made-usa-fraud-do-not-flag-it-study-says-2026-07-30">Reuters</a>, Amazon disputed the broader implication that it hides country-of-origin information from shoppers.</p><p>"Country-of-origin information, when available, is currently displayed on product detail pages, and we're continually working to improve Alexa for Shopping to make this information even more accessible for customers," an Amazon spokesperson said.</p><p>Walmart did not immediately respond to Reuters' request for comment. </p><h2 id="bottom-line-3">Bottom line </h2><p>The report highlights a question that is likely to become more important as AI shopping assistants continue to replace traditional search.  If consumers  rely on AI to decide what products to buy, the design choices behind those systems become far more consequential. </p><p>Decisions about which products are surfaced first, which attributes are emphasized and which questions receive complete answers could shape purchasing behavior in ways that are largely invisible to shoppers.</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/claude/i-just-learned-your-claude-ai-chats-could-show-up-in-google-heres-how-to-check-yours"><strong>I just learned your Claude AI chats could show up in Google — here's how to check yours</strong></a></li><li><a href="https://www.tomsguide.com/ai/i-searched-amazon-for-ai-written-books-and-it-was-much-harder-to-spot-them-than-i-expected"><strong>I searched Amazon for AI-written books — and it was much harder to spot them than I expected</strong></a></li><li><a href="https://www.tomsguide.com/ai/jimothy-the-viral-raccoon-is-100-percent-real-heres-whats-ai"><strong>Jimothy the viral raccoon is 100% real — here's what's AI</strong></a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/shopping-on-amazon-or-walmart-why-you-shouldnt-rely-on-their-ai-assistants-just-yet</link>
                                                                            <description>
                            <![CDATA[ A new Columbia Law School report claims Amazon and Walmart's AI shopping assistants make American-made products harder to find—and raises bigger questions about AI-powered shopping. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">FvRWvpCgMH965VBMUY9m7a</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/cUpYh7MML9dQLmES78DqZn-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 30 Jul 2026 15:16:42 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[AI]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/zYjevim2q7FjQiefqpjZRB.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/cUpYh7MML9dQLmES78DqZn-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Walmart sign]]></media:description>                                                            <media:text><![CDATA[Walmart sign]]></media:text>
                                <media:title type="plain"><![CDATA[Walmart sign]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/cUpYh7MML9dQLmES78DqZn-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>AI is rapidly becoming the new storefront. Instead of scrolling through pages of search results, more shoppers are asking AI assistants to recommend products, compare prices and narrow down options. But a new report argues that those same AI systems may also be quietly shaping what consumers never see.</p><p>Researchers at Columbia Law School's Center for Law and the Economy have published a report accusing Amazon and Walmart of using their<a href="https://www.tomsguide.com/ai/meet-rufus-amazons-new-ai-assistant-designed-to-help-you-shop"> AI shopping assistants</a> in ways that make American-made products harder to find, despite the systems appearing capable of identifying them.</p><p>The report, <a href="https://law-and-economy.law.columbia.edu/sites/law-and-economy.law.columbia.edu/files/content/Made%20in%20America%2C%20Hidden%20by%20AI.pdf" target="_blank">Made in America, Hidden by AI,</a> examined how Amazon's and Walmart's AI shopping tools responded to questions about products made in the United States. According to the researchers, <a href="https://www.tomsguide.com/ai/amazons-ai-chatbot-is-here-to-make-prime-day-shopping-easier">Amazon's chatbot</a> often declined to answer straightforward questions about American-made products while readily answering equivalent questions about products manufactured in China. After rephrasing the same request, however, the chatbot returned American-made products using information that had been available all along.</p><p>"We tested these systems the way an engineer would, and the refusals fell apart under basic testing," Erie Meyer, senior fellow at the Center for Law and the Economy and one of the report's authors, said. "The data was there, but the design was built to hide it."</p><h2 id="ai-shopping-assistants-are-becoming-gatekeepers">AI shopping assistants are becoming gatekeepers</h2><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="sWXS3838SMjeJknJJm3KRc" name="8 - 2026-07-30T095325.222" alt="alexa screenshot" src="https://cdn.mos.cms.futurecdn.net/sWXS3838SMjeJknJJm3KRc.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The report arrives as retailers increasingly push shoppers toward AI-powered recommendations instead of traditional keyword searches. Whether it's suggesting products, comparing alternatives or summarizing reviews, these assistants are becoming the first stop for many online purchases.</p><p>According to the report, neither Amazon nor Walmart currently offers shoppers a dedicated "Made in USA" filter, despite providing hundreds of other filtering options across many product categories. The researchers argue that if AI assistants become the primary interface for online shopping, the way they choose what information to surface, or withhold, could influence purchasing decisions on a massive scale.<br><br>I tried it by asking for a few common items like furniture and fishing poles, Alexa+ said it did not have access to the information. However, when I asked for American flags made in the U.S.A., it supplied a product that matched my query.</p><p>Lina Khan, director of the Center for Law and the Economy and former chair of the Federal Trade Commission, said the findings demonstrate that increasingly sophisticated AI systems are still shaped by the incentives behind them.</p><p>"Even as AI tools continue to grow in sophistication and capability, business incentives will shape how these advancements get deployed," Khan said. "Policymakers and enforcers have a vital role to play to ensure the public doesn't get the short end of the stick."</p><h2 id="the-systems-appear-capable-of-spotting-suspicious-claims">The systems appear capable of spotting suspicious claims</h2><p>One of the report's more interesting findings is that both companies' AI assistants appeared able to identify potentially misleading "Made in USA" claims.</p><p>According to the researchers, Amazon's chatbot identified listings where promotional material claimed products were American-made despite evidence suggesting they were imported. Walmart's chatbot reportedly ranked "Made in USA" claims by how suspicious they appeared based on factors including seller information and manufacturing footprints.</p><p>The authors argue this demonstrates the underlying AI systems have the technical capability to help identify questionable origin claims. However, the report does not establish that Amazon or Walmart internally use these capabilities for marketplace enforcement.</p><h2 id="amazon-responds">Amazon responds</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RzZN7gXnZ5rfnyvVLbAcKS" name="Amazon logo.shutterstock_2445780831" alt="Amazon building" src="https://cdn.mos.cms.futurecdn.net/RzZN7gXnZ5rfnyvVLbAcKS.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>In a statement to <a href="https://www.reuters.com/business/retail-consumer/amazon-walmart-ai-detect-made-usa-fraud-do-not-flag-it-study-says-2026-07-30">Reuters</a>, Amazon disputed the broader implication that it hides country-of-origin information from shoppers.</p><p>"Country-of-origin information, when available, is currently displayed on product detail pages, and we're continually working to improve Alexa for Shopping to make this information even more accessible for customers," an Amazon spokesperson said.</p><p>Walmart did not immediately respond to Reuters' request for comment. </p><h2 id="bottom-line-3">Bottom line </h2><p>The report highlights a question that is likely to become more important as AI shopping assistants continue to replace traditional search.  If consumers  rely on AI to decide what products to buy, the design choices behind those systems become far more consequential. </p><p>Decisions about which products are surfaced first, which attributes are emphasized and which questions receive complete answers could shape purchasing behavior in ways that are largely invisible to shoppers.</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/claude/i-just-learned-your-claude-ai-chats-could-show-up-in-google-heres-how-to-check-yours"><strong>I just learned your Claude AI chats could show up in Google — here's how to check yours</strong></a></li><li><a href="https://www.tomsguide.com/ai/i-searched-amazon-for-ai-written-books-and-it-was-much-harder-to-spot-them-than-i-expected"><strong>I searched Amazon for AI-written books — and it was much harder to spot them than I expected</strong></a></li><li><a href="https://www.tomsguide.com/ai/jimothy-the-viral-raccoon-is-100-percent-real-heres-whats-ai"><strong>Jimothy the viral raccoon is 100% real — here's what's AI</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ New on Prime Video in August 2026: Top picks and all the new movies and shows to watch ]]></title>
                                                                                                <dc:content><![CDATA[ <p>We’re right in the thick of summer, but <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> certainly isn’t hitting the brakes when it comes to new movies and shows. Even if August feels like the final true stretch of the sunny season, there’s still more than enough time to soak it all in, and streaming platforms are keeping the energy high with a fresh lineup of entertainment.</p><p>The full Prime Video slate for August 2026 is officially in, so I’ve picked the biggest titles on the radar alongside the fresh additions dropping at the start of the month. This month includes a new teen drama packed with mystery, the fourth season of the action-thriller “Reacher,” and a romance set during a summer in Mallorca.</p><p>Take a look at my top picks below and the complete calendar of what’s hitting Prime Video this August 2026.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XmxxBO"></div>                            </div>                            <script src="https://kwizly.com/embed/XmxxBO.js" async></script><h3 class="article-body__section" id="section-new-on-prime-video-in-august-2026-top-picks"><span>New on Prime Video in August 2026: Top picks</span></h3><h2 id="sterling-point-august-5">‘Sterling Point’ (August 5)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/bwwF3TuJQME" allowfullscreen></iframe></div></div><p>“Sterling Point” is a coming-of-age mystery drama series, based on an entirely original story conceived and written for the screen by Megan Park. It has a similar tone to shows like “We Were Liars” and “The Summer I Turned Pretty,” but with a distinctly Canadian setting. Set against the backdrop of a foggy island off the coast of Canada, the series is driven by a central mystery, but viewers tuning in for the romance will be pleased to know there’s also a love triangle at the heart of the story.</p><p>Seventeen-year-old Annie Jacobson (Ella Rubin) has always lived an ordinary life in New York with her twin brother Connor (Keen Ruffalo) and their adoptive father. Everything changes when the siblings unexpectedly inherit a remote island in Canada from the estranged grandfather they were never allowed to meet. Hoping to uncover the truth about their family’s past, Annie travels to the island, where she meets an unexpected sister named Ramona (Amélie Hoeferle) and a group of locals who are deeply connected to the property.</p><p><em><strong>Stream "Sterling Point" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H49C7NVH" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from August 5</strong></em></p><h2 id="reacher-season-4-august-12">‘Reacher’ season 4 (August 12)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/PCbp1FfipPg" allowfullscreen></iframe></div></div><p>It’s time to celebrate, because “Reacher” is finally back for season 4. This time around, the series adapts Lee Child’s novel Gone Tomorrow, which focuses on a conspiracy involving government cover-ups. From the trailer alone, this season appears to take heavy inspiration from classic neo-noir detective stories, with a much darker and more claustrophobic feel than what we’ve seen before. It’s an exciting time to be a “Reacher” fan, especially with the series already renewed for season 5.</p><p>“Reacher” season 4 begins when Reacher (Alan Ritchson) witnesses a woman behaving suspiciously on a late-night New York City subway train. Before he can question her, she dies, and what appears to be a straightforward suicide quickly proves far more complicated. Determined to uncover the truth, Reacher joins forces with the woman’s brother and an NYPD homicide detective, fighting to expose the truth before those responsible can silence him for good.</p><p><em><strong>Stream "Reacher" season 4 on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H8N9812R" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from August 12</strong></em></p><h2 id="the-last-sunrise-august-26">‘The Last Sunrise’ (August 26)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UMYXEABbCHbwg2FNnD2YW8" name="The Last Sunrise" alt="Maia Reficco (Ry) and Fernando Lindez (Julian) in "The Last Sunrise" coming soon to Prime Video" src="https://cdn.mos.cms.futurecdn.net/UMYXEABbCHbwg2FNnD2YW8.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Lucia Faraig / Prime Video)</span></figcaption></figure><p>Lastly, we have a romance flick perfect for summer, and that’s “The Last Sunrise.” The film is based on Anna Todd’s 2025 novel of the same name, with the bestselling author best known for creating the global “After” franchise. It’s also directed by Carlson Young, who previously helmed the films “Upgraded” and “The Map of Tiny Perfect Things,” so I have high hopes. As a romance fan, I’m eagerly awaiting the trailer, but even from the premise alone, I’m already intrigued.</p><p>Oriah “Ry” Pera (Maia Reficco) is a college student living with a chronic illness whose overprotective mother takes a new job in Mallorca. Hoping for a fresh start, Ry spends the summer exploring the island and meets Julián (Fernando Lindez), a charming local who introduces her to experiences she has never had before. Soon, Ry begins embracing her independence and imagining a different future. However, worsening health problems threaten to cut her journey short, forcing her to make difficult choices before the summer comes to an end.</p><p><em><strong>Stream "The Last Sunrise" on </strong></em><a href="https://www.amazon.com/gp/video/storefront" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from August 26</strong></em></p><h3 class="article-body__section" id="section-new-shows-on-prime-video-in-august-2026"><span>New shows on Prime Video in August 2026</span></h3><p><strong>August 5</strong></p><ul><li>Sterling Point (2026)</li></ul><p><strong>August 9</strong></p><ul><li>The Chosen in the Wild with Bear Grylls (2026)</li></ul><p><strong>August 12</strong></p><ul><li>Reacher S4 (2026)</li></ul><p><strong>August 14</strong></p><ul><li>ONE Championship on Prime (2026)</li></ul><p><strong>August 20</strong></p><ul><li>NOVAK DJOKOVIC: The Wolf in Winter (2026)</li></ul><h3 class="article-body__section" id="section-new-movies-on-prime-video-in-august-2026"><span>New movies on Prime Video in August 2026</span></h3><p><strong>August 1</strong></p><ul><li>Baby Boom (1987)</li><li>Back To School (1986)</li><li>Bandits (2001)</li><li>Barbershop (2002)</li><li>Barbershop 2: Back In Business (2004)</li><li>Barbershop: The Next Cut (2016)</li><li>Beauty Shop (2005)</li><li>Blue Velvet (1986)</li><li>Bridesmaids (Unrated) (2011)</li><li>Challengers (2024)</li><li>Colors (1988)</li><li>Cop Car (2015)</li><li>Everything, Everything (2017)</li><li>Fargo (1996)</li><li>Fighting With My Family (2019)</li><li>Hard Target (1993)</li><li>Hard Target 2 (2016)</li><li>Hercules (2014)</li><li>Hoodlum (1997)</li><li>Interstellar (2014)</li><li>Into The Blue (2005)</li><li>Joy Ride (2023)</li><li>Just Go With It (2011)</li><li>Killing Me Softly (2003)</li><li>Licorice Pizza (2021)</li><li>Moonstruck (1988)</li><li>Mystic Pizza (1988)</li><li>No Way Out (1987)</li><li>Oblivion (1994)</li><li>Operation Finale (2018)</li><li>Overboard (2018)</li><li>Primate (2026)</li><li>Pulp Fiction (1994)</li><li>Quigley Down Under (1990)</li><li>Return To Me (2000)</li><li>Robocop (1987)</li><li>Robocop (2014)</li><li>Robocop 2 (1990)</li><li>Robocop 3 (1993)</li><li>Small Soldiers (1998)</li><li>Sudden Death (1995)</li><li>The Adventures Of Buckaroo Banzai (1984)</li><li>The Gambler (2014)</li><li>The Hustle (2019)</li><li>The Silencing (2020)</li><li>The Thomas Crown Affair (1968)</li><li>The Thomas Crown Affair (1999)</li><li>The Usual Suspects (1995)</li><li>What's The Worst That Could Happen? (2001)</li><li>Women Talking (2022)</li><li>Yours, Mine, And Ours (1968)</li></ul><p><strong>August 2</strong></p><ul><li>Kingdom Of The Planet Of The Apes (2024)</li></ul><p><strong>August 7</strong></p><ul><li>Piece By Piece (2024)</li><li>The Gates (2026)</li></ul><p><strong>August 8</strong></p><ul><li>Journey To Bethlehem (2023)</li></ul><p><strong>August 17</strong></p><ul><li>Blue Beetle (2023)</li></ul><p><strong>August 19</strong></p><ul><li>Is God Is (2026)</li></ul><p><strong>August 21</strong></p><ul><li>Back to the 90s (2026)</li><li>Good Fortune (2025)</li></ul><p><strong>August 26</strong></p><ul><li>The Last Sunrise (2026)</li></ul><p><strong>August 27</strong></p><ul><li>Nickel Boys (2024)</li></ul><h3 class="article-body__section" id="section-live-sports"><span>Live sports</span></h3><p><strong>Yankees</strong></p><ul><li><strong>Wed Aug 5 at 7:05 p.m. ET</strong>: St. Louis Cardinals at New York Yankees</li><li><strong>Wed Aug 19 at 6:35 p.m. ET</strong>: New York Yankees at Baltimore Orioles</li><li><strong>Thu Aug 20 at 6:35 p.m. ET</strong>: New York Yankees at Baltimore Orioles</li><li><strong>Wed Aug 26 at 7:05 p.m. ET</strong>: Houston Astros at New York Yankees</li></ul><p><strong>WNBA</strong></p><ul><li><strong>Thu Aug 6 at 7 p.m. ET</strong>: Las Vegas Aces at Indiana Fever</li><li><strong>Thu Aug 6 at 9 p.m. ET</strong>: Los Angeles Sparks at Minnesota Lynx</li><li><strong>Thu Aug 13 at 8 p.m. ET</strong>: Los Angeles Sparks at New York Liberty</li><li><strong>Thu Aug 13 at 10 p.m. ET</strong>: Washington Mystics at Las Vegas Aces</li><li><strong>Thu Aug 20 at 8 p.m. ET</strong>: Indiana Fever at Dallas Wings</li><li><strong>Thu Aug 20 at 10 p.m. ET</strong>: Atlanta Dream at Los Angeles Sparks</li><li><strong>Sat Aug 22 at 7 p.m. ET</strong>: Indiana Fever at New York Liberty</li><li><strong>Sat Aug 22 at 9 p.m. ET</strong>: Connecticut Sun at Los Angeles Sparks</li><li><strong>Thu Aug 27 at 8 p.m. ET</strong>: Golden State Valkyries at New York Liberty</li><li><strong>Thu Aug 27 at 10 p.m. ET</strong>: Washington Mystics at Phoenix Mercury</li></ul><p><strong>NWSL</strong></p><ul><li><strong>Thu Aug 7 at 8 p.m. ET</strong>: Gotham FC vs. San Diego Wave</li><li><strong>Thu Aug 14 at 8 p.m. ET</strong>: Gotham FC vs. Kansas City Current</li><li><strong>Thu Aug 21 at 10 p.m. ET</strong>: San Diego Wave vs. Utah Royals FC</li><li><strong>Thu Aug 28 at 8 p.m. ET</strong>: Gotham FC vs. Portland Thorns</li></ul><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-videos-upcoming-ai-makeover-could-completely-change-how-you-decide-what-to-watch-next">Prime Video's AI makeover could change how you stream</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/5-best-new-netflix-movies-and-shows-to-stream-this-week-july-27-aug-2">5 best new Netflix movies and shows to stream this week</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/10-best-netflix-movies-and-shows-of-summer-2026-so-far-ranked-by-viewers-no-1-is-a-twisting-mystery-thriller-made-for-binge-watching">10 best Netflix movies and shows of summer 2026 (so far)</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-august-2026-top-picks-and-all-the-new-movies-and-shows-to-watch</link>
                                                                            <description>
                            <![CDATA[ Our guide to the best new movies and shows you can stream on Prime Video in August 2026. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">axnqmYjTLFbgSHvjBzAKFA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wVka6ze5Yd9LKVrf7wLuca-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 28 Jul 2026 09:48:47 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ alix.blackburn@futurenet.com (Alix Blackburn) ]]></author>                    <dc:creator><![CDATA[ Alix Blackburn ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/8UxyT2McanNFLYwQ6wC7di.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/wVka6ze5Yd9LKVrf7wLuca-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on a laser speed abstract background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on a laser speed abstract background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on a laser speed abstract background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wVka6ze5Yd9LKVrf7wLuca-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We’re right in the thick of summer, but <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> certainly isn’t hitting the brakes when it comes to new movies and shows. Even if August feels like the final true stretch of the sunny season, there’s still more than enough time to soak it all in, and streaming platforms are keeping the energy high with a fresh lineup of entertainment.</p><p>The full Prime Video slate for August 2026 is officially in, so I’ve picked the biggest titles on the radar alongside the fresh additions dropping at the start of the month. This month includes a new teen drama packed with mystery, the fourth season of the action-thriller “Reacher,” and a romance set during a summer in Mallorca.</p><p>Take a look at my top picks below and the complete calendar of what’s hitting Prime Video this August 2026.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XmxxBO"></div>                            </div>                            <script src="https://kwizly.com/embed/XmxxBO.js" async></script><h3 class="article-body__section" id="section-new-on-prime-video-in-august-2026-top-picks"><span>New on Prime Video in August 2026: Top picks</span></h3><h2 id="sterling-point-august-5">‘Sterling Point’ (August 5)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/bwwF3TuJQME" allowfullscreen></iframe></div></div><p>“Sterling Point” is a coming-of-age mystery drama series, based on an entirely original story conceived and written for the screen by Megan Park. It has a similar tone to shows like “We Were Liars” and “The Summer I Turned Pretty,” but with a distinctly Canadian setting. Set against the backdrop of a foggy island off the coast of Canada, the series is driven by a central mystery, but viewers tuning in for the romance will be pleased to know there’s also a love triangle at the heart of the story.</p><p>Seventeen-year-old Annie Jacobson (Ella Rubin) has always lived an ordinary life in New York with her twin brother Connor (Keen Ruffalo) and their adoptive father. Everything changes when the siblings unexpectedly inherit a remote island in Canada from the estranged grandfather they were never allowed to meet. Hoping to uncover the truth about their family’s past, Annie travels to the island, where she meets an unexpected sister named Ramona (Amélie Hoeferle) and a group of locals who are deeply connected to the property.</p><p><em><strong>Stream "Sterling Point" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H49C7NVH" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from August 5</strong></em></p><h2 id="reacher-season-4-august-12">‘Reacher’ season 4 (August 12)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/PCbp1FfipPg" allowfullscreen></iframe></div></div><p>It’s time to celebrate, because “Reacher” is finally back for season 4. This time around, the series adapts Lee Child’s novel Gone Tomorrow, which focuses on a conspiracy involving government cover-ups. From the trailer alone, this season appears to take heavy inspiration from classic neo-noir detective stories, with a much darker and more claustrophobic feel than what we’ve seen before. It’s an exciting time to be a “Reacher” fan, especially with the series already renewed for season 5.</p><p>“Reacher” season 4 begins when Reacher (Alan Ritchson) witnesses a woman behaving suspiciously on a late-night New York City subway train. Before he can question her, she dies, and what appears to be a straightforward suicide quickly proves far more complicated. Determined to uncover the truth, Reacher joins forces with the woman’s brother and an NYPD homicide detective, fighting to expose the truth before those responsible can silence him for good.</p><p><em><strong>Stream "Reacher" season 4 on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H8N9812R" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from August 12</strong></em></p><h2 id="the-last-sunrise-august-26">‘The Last Sunrise’ (August 26)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UMYXEABbCHbwg2FNnD2YW8" name="The Last Sunrise" alt="Maia Reficco (Ry) and Fernando Lindez (Julian) in "The Last Sunrise" coming soon to Prime Video" src="https://cdn.mos.cms.futurecdn.net/UMYXEABbCHbwg2FNnD2YW8.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Lucia Faraig / Prime Video)</span></figcaption></figure><p>Lastly, we have a romance flick perfect for summer, and that’s “The Last Sunrise.” The film is based on Anna Todd’s 2025 novel of the same name, with the bestselling author best known for creating the global “After” franchise. It’s also directed by Carlson Young, who previously helmed the films “Upgraded” and “The Map of Tiny Perfect Things,” so I have high hopes. As a romance fan, I’m eagerly awaiting the trailer, but even from the premise alone, I’m already intrigued.</p><p>Oriah “Ry” Pera (Maia Reficco) is a college student living with a chronic illness whose overprotective mother takes a new job in Mallorca. Hoping for a fresh start, Ry spends the summer exploring the island and meets Julián (Fernando Lindez), a charming local who introduces her to experiences she has never had before. Soon, Ry begins embracing her independence and imagining a different future. However, worsening health problems threaten to cut her journey short, forcing her to make difficult choices before the summer comes to an end.</p><p><em><strong>Stream "The Last Sunrise" on </strong></em><a href="https://www.amazon.com/gp/video/storefront" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from August 26</strong></em></p><h3 class="article-body__section" id="section-new-shows-on-prime-video-in-august-2026"><span>New shows on Prime Video in August 2026</span></h3><p><strong>August 5</strong></p><ul><li>Sterling Point (2026)</li></ul><p><strong>August 9</strong></p><ul><li>The Chosen in the Wild with Bear Grylls (2026)</li></ul><p><strong>August 12</strong></p><ul><li>Reacher S4 (2026)</li></ul><p><strong>August 14</strong></p><ul><li>ONE Championship on Prime (2026)</li></ul><p><strong>August 20</strong></p><ul><li>NOVAK DJOKOVIC: The Wolf in Winter (2026)</li></ul><h3 class="article-body__section" id="section-new-movies-on-prime-video-in-august-2026"><span>New movies on Prime Video in August 2026</span></h3><p><strong>August 1</strong></p><ul><li>Baby Boom (1987)</li><li>Back To School (1986)</li><li>Bandits (2001)</li><li>Barbershop (2002)</li><li>Barbershop 2: Back In Business (2004)</li><li>Barbershop: The Next Cut (2016)</li><li>Beauty Shop (2005)</li><li>Blue Velvet (1986)</li><li>Bridesmaids (Unrated) (2011)</li><li>Challengers (2024)</li><li>Colors (1988)</li><li>Cop Car (2015)</li><li>Everything, Everything (2017)</li><li>Fargo (1996)</li><li>Fighting With My Family (2019)</li><li>Hard Target (1993)</li><li>Hard Target 2 (2016)</li><li>Hercules (2014)</li><li>Hoodlum (1997)</li><li>Interstellar (2014)</li><li>Into The Blue (2005)</li><li>Joy Ride (2023)</li><li>Just Go With It (2011)</li><li>Killing Me Softly (2003)</li><li>Licorice Pizza (2021)</li><li>Moonstruck (1988)</li><li>Mystic Pizza (1988)</li><li>No Way Out (1987)</li><li>Oblivion (1994)</li><li>Operation Finale (2018)</li><li>Overboard (2018)</li><li>Primate (2026)</li><li>Pulp Fiction (1994)</li><li>Quigley Down Under (1990)</li><li>Return To Me (2000)</li><li>Robocop (1987)</li><li>Robocop (2014)</li><li>Robocop 2 (1990)</li><li>Robocop 3 (1993)</li><li>Small Soldiers (1998)</li><li>Sudden Death (1995)</li><li>The Adventures Of Buckaroo Banzai (1984)</li><li>The Gambler (2014)</li><li>The Hustle (2019)</li><li>The Silencing (2020)</li><li>The Thomas Crown Affair (1968)</li><li>The Thomas Crown Affair (1999)</li><li>The Usual Suspects (1995)</li><li>What's The Worst That Could Happen? (2001)</li><li>Women Talking (2022)</li><li>Yours, Mine, And Ours (1968)</li></ul><p><strong>August 2</strong></p><ul><li>Kingdom Of The Planet Of The Apes (2024)</li></ul><p><strong>August 7</strong></p><ul><li>Piece By Piece (2024)</li><li>The Gates (2026)</li></ul><p><strong>August 8</strong></p><ul><li>Journey To Bethlehem (2023)</li></ul><p><strong>August 17</strong></p><ul><li>Blue Beetle (2023)</li></ul><p><strong>August 19</strong></p><ul><li>Is God Is (2026)</li></ul><p><strong>August 21</strong></p><ul><li>Back to the 90s (2026)</li><li>Good Fortune (2025)</li></ul><p><strong>August 26</strong></p><ul><li>The Last Sunrise (2026)</li></ul><p><strong>August 27</strong></p><ul><li>Nickel Boys (2024)</li></ul><h3 class="article-body__section" id="section-live-sports"><span>Live sports</span></h3><p><strong>Yankees</strong></p><ul><li><strong>Wed Aug 5 at 7:05 p.m. ET</strong>: St. Louis Cardinals at New York Yankees</li><li><strong>Wed Aug 19 at 6:35 p.m. ET</strong>: New York Yankees at Baltimore Orioles</li><li><strong>Thu Aug 20 at 6:35 p.m. ET</strong>: New York Yankees at Baltimore Orioles</li><li><strong>Wed Aug 26 at 7:05 p.m. ET</strong>: Houston Astros at New York Yankees</li></ul><p><strong>WNBA</strong></p><ul><li><strong>Thu Aug 6 at 7 p.m. ET</strong>: Las Vegas Aces at Indiana Fever</li><li><strong>Thu Aug 6 at 9 p.m. ET</strong>: Los Angeles Sparks at Minnesota Lynx</li><li><strong>Thu Aug 13 at 8 p.m. ET</strong>: Los Angeles Sparks at New York Liberty</li><li><strong>Thu Aug 13 at 10 p.m. ET</strong>: Washington Mystics at Las Vegas Aces</li><li><strong>Thu Aug 20 at 8 p.m. ET</strong>: Indiana Fever at Dallas Wings</li><li><strong>Thu Aug 20 at 10 p.m. ET</strong>: Atlanta Dream at Los Angeles Sparks</li><li><strong>Sat Aug 22 at 7 p.m. ET</strong>: Indiana Fever at New York Liberty</li><li><strong>Sat Aug 22 at 9 p.m. ET</strong>: Connecticut Sun at Los Angeles Sparks</li><li><strong>Thu Aug 27 at 8 p.m. ET</strong>: Golden State Valkyries at New York Liberty</li><li><strong>Thu Aug 27 at 10 p.m. ET</strong>: Washington Mystics at Phoenix Mercury</li></ul><p><strong>NWSL</strong></p><ul><li><strong>Thu Aug 7 at 8 p.m. ET</strong>: Gotham FC vs. San Diego Wave</li><li><strong>Thu Aug 14 at 8 p.m. ET</strong>: Gotham FC vs. Kansas City Current</li><li><strong>Thu Aug 21 at 10 p.m. ET</strong>: San Diego Wave vs. Utah Royals FC</li><li><strong>Thu Aug 28 at 8 p.m. ET</strong>: Gotham FC vs. Portland Thorns</li></ul><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-videos-upcoming-ai-makeover-could-completely-change-how-you-decide-what-to-watch-next">Prime Video's AI makeover could change how you stream</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/5-best-new-netflix-movies-and-shows-to-stream-this-week-july-27-aug-2">5 best new Netflix movies and shows to stream this week</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/10-best-netflix-movies-and-shows-of-summer-2026-so-far-ranked-by-viewers-no-1-is-a-twisting-mystery-thriller-made-for-binge-watching">10 best Netflix movies and shows of summer 2026 (so far)</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I searched Amazon for AI-written books — and it was much harder to spot them than I expected ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When ChatGPT first launched, most of the conversation centered on <a href="https://www.tomsguide.com/ai/tired-of-being-flagged-by-ai-i-started-watermarking-my-writing-to-prove-im-human">AI-generated student essays</a>, <a href="https://www.tomsguide.com/ai/openai-to-launch-deepfake-detector-as-realism-of-ai-generated-content-grows">deepfake images </a>and the <a href="https://www.tomsguide.com/computing/online-security/from-misinformation-to-ai-powered-cyberattacks-the-top-cybersecurity-risks-for-2026">threat of automated fake news</a>. Books, however, felt different. </p><p>As someone who reads and reviews half a dozen books a month for ReaderViews, I've always found a certain comfort in the traditional publishing process. Bringing a book to market has historically required editors, designers, proofreaders, and, most importantly, <a href="https://www.tomsguide.com/ai/writing-a-novel-in-2026-heres-why-chatgpt-alone-wont-get-you-to-the-finish-line">an author who actually sat down and wrote it</a>. That barrier to entry gave books an inherent authority that standard websites and fleeting social media posts often lacked.</p><p>Then I read a recent <a href="https://www.nytimes.com/2026/07/16/technology/ai-slop-books-biography-amazon.html" target="_blank">New York Times investigation</a> into AI-generated biographies appearing on Amazon. These included books about living public figures that were riddled with factual mistakes and seemingly produced with zero human oversight.</p><p>I wondered: Could I actually spot one in the wild? I opened Amazon and started searching.</p><h2 id="most-of-the-listings-looked-completely-normal">Most of the listings looked completely normal</h2><p>The most surprising part of the whole experiment was at first glance, nothing looked unusual. All the books with AI-generated content featured professional-looking covers, convincing descriptions, reasonable price points, and even star ratings. Nothing immediately screamed "AI." If I hadn't intentionally gone looking for them, I probably would have assumed they were entirely legitimate.</p><p>Once I dug a little deeper, however, the facade started to crack — and the first thing that tipped me off was the author pages. I clicked on the name behind one biography and landed on the page of someone called <a href="https://www.nytimes.com/2026/07/16/technology/ai-slop-books-biography-amazon.html">John Crane Miller</a>, described as a "seasoned biographer and cultural analyst" with a stock-photo portrait. Miller had published ten biographies in a single week, all about journalists and public figures, and when <a href="https://www.nytimes.com/by/kashmir-hill?eafs_enabled=false" target="_blank">Kashmir Hill</a> left a public review on Amazon asking to speak with him, his books quietly vanished. He wasn't the only phantom. </p><p><a href="https://originality.ai/blog/likely-ai-success-self-help-book-study">A study by Originality.ai</a> found entire catalogs built by authors who appeared to be fabricated identities, one of whom had published 74 books in five months on topics ranging from porn addiction to solo parenting to toxic workplaces. No single person writes like that. These weren't prolific indie authors with a strong work ethic; they were fake names attached to automated output.</p><h2 id="marketing-copy-was-a-dead-giveaway">Marketing copy was a dead giveaway </h2><p>Blurb after blurb leaned on the same broad promises and eerily familiar phrasing — "delve into," "comprehensive guide," "unlock the secrets of" — without ever explaining what made the book worth reading over any other book on the same topic. </p><p>After half a dozen of these, I could practically predict the next sentence before I read it. The marketing copy wasn't just generic; it was interchangeable, as if the same prompt had been run through the same model with only the subject swapped out.</p><p>The biographies were the most troubling category, and the <a href="https://www.404media.co/ai-generated-kara-swisher-biographies-flood-amazon/" target="_blank">wave of books about tech journalist Kara Swisher</a> illustrated why. Multiple unauthorized biographies of Swisher appeared on Amazon around the release of her memoir "<a href="https://www.simonandschuster.com/books/Burn-Book/Kara-Swisher/9781982163907" target="_blank">Burn Book</a>," written by authors with no apparent journalism credentials and no indication they had ever spoken to Swisher or anyone in her orbit. </p><p>Political scientist Ian Bremmer <a href="https://www.npr.org/2024/03/13/1237888126/growing-number-ai-scam-books-amazon" target="_blank">encountered the same phenomenon</a>: books bearing his name as a subject, produced without his involvement, that simply scraped and summarized what was already freely available online. This is, of course, exactly what chatbots are built to do, that is, synthesize existing information into fluent, confident-sounding prose. The result is a product that looks and feels like a real book but contributes nothing a reader couldn't get from the source material itself.</p><h2 id="beyond-books">Beyond books </h2><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="JKuR2zNYoo68T66LtMcnLB" name="subtack" alt="Amanda Caswell's substack" src="https://cdn.mos.cms.futurecdn.net/JKuR2zNYoo68T66LtMcnLB.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future/Amanda Caswell)</span></figcaption></figure><p>Substack recently launched an AI detection feature in partnership with a company called <a href="https://www.tomsguide.com/ai/i-tested-pangram-the-black-light-of-ai-detection-built-by-ex-tesla-and-google-engineers-heres-how-well-it-worked">Pangram</a>, letting readers scan any post to see an estimate of how much was written by a human versus generated by AI. </p><p>Substack CEO Chris Best framed it as a way to keep the platform from becoming "like LinkedIn," <a href="https://www.pangram.com/blog/ai-in-your-feed" target="_blank">overrun with hollow AI content, </a>but even Substack acknowledges the tool isn't perfect. <a href="https://san.com/cc/substacks-new-ai-detection-tool-has-some-critics-worried-about-false-flags/" target="_blank">The Atlantic found</a> that Pangram's accuracy is far from bulletproof, and critics worry about false positives flagging legitimate human writers. </p><p>Still, the fact that a major publishing platform felt compelled to build this feature at all says something about how urgent the problem has become. Amazon, for its part, has no equivalent.</p><h2 id="the-takeaway-2">The takeaway </h2><p>As someone who absolutely loves to read, I found this to be a very interesting experiment. My takeaway is that now, instead of trusting a listing at face value, I take a few extra minutes to look up the author outside of Amazon to see if they have a credible publishing history elsewhere, and I specifically hunt down professional reviews rather than relying on standard star ratings. </p><p>I always preview the sample text to check if the writing feels robotic or relies on repetitive phrasing, and for nonfiction, I actively look for evidence of real human interviews and original citations. None of these steps individually guarantee a book was written by a human, but together, they make it much easier to separate thoughtful, researched work from automated content designed just to game search results.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-asked-chatgpt-to-improve-my-apple-notes-app-here-are-the-7-changes-i-actually-kept">I asked ChatGPT to improve my Apple Notes app — here are the 7 changes I actually kept</a></li><li><a href="https://www.tomsguide.com/ai/microsoft-copilots-free-deep-research-ai-tool-is-going-away-these-are-the-7-best-free-alternatives">Microsoft Copilot’s free Deep Research AI tool is going away — these are the 7 best free alternatives</a></li><li><a href="https://www.tomsguide.com/ai/i-always-recommend-the-chatgpt-escape-prompt-to-friends-looking-for-a-new-job-heres-why-it-works">I always recommend the ChatGPT 'Escape Prompt' to friends looking for a new job — here's why it works</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/i-searched-amazon-for-ai-written-books-and-it-was-much-harder-to-spot-them-than-i-expected</link>
                                                                            <description>
                            <![CDATA[ After reading reports about AI-generated biographies flooding Amazon, I decided to see how easy they were to find — and whether I could actually tell the difference. What I discovered made me rethink how I'll shop for books online. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">hcCgEeArwtL35dfeX2z4K8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/SzrvZwmC9roPvdzWXqpByE-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sun, 26 Jul 2026 05:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[AI]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/zYjevim2q7FjQiefqpjZRB.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/SzrvZwmC9roPvdzWXqpByE-1280-80.png">
                                                            <media:credit><![CDATA[Future/edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amanda&#039;s AI lab]]></media:description>                                                            <media:text><![CDATA[Amanda&#039;s AI lab]]></media:text>
                                <media:title type="plain"><![CDATA[Amanda&#039;s AI lab]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/SzrvZwmC9roPvdzWXqpByE-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When ChatGPT first launched, most of the conversation centered on <a href="https://www.tomsguide.com/ai/tired-of-being-flagged-by-ai-i-started-watermarking-my-writing-to-prove-im-human">AI-generated student essays</a>, <a href="https://www.tomsguide.com/ai/openai-to-launch-deepfake-detector-as-realism-of-ai-generated-content-grows">deepfake images </a>and the <a href="https://www.tomsguide.com/computing/online-security/from-misinformation-to-ai-powered-cyberattacks-the-top-cybersecurity-risks-for-2026">threat of automated fake news</a>. Books, however, felt different. </p><p>As someone who reads and reviews half a dozen books a month for ReaderViews, I've always found a certain comfort in the traditional publishing process. Bringing a book to market has historically required editors, designers, proofreaders, and, most importantly, <a href="https://www.tomsguide.com/ai/writing-a-novel-in-2026-heres-why-chatgpt-alone-wont-get-you-to-the-finish-line">an author who actually sat down and wrote it</a>. That barrier to entry gave books an inherent authority that standard websites and fleeting social media posts often lacked.</p><p>Then I read a recent <a href="https://www.nytimes.com/2026/07/16/technology/ai-slop-books-biography-amazon.html" target="_blank">New York Times investigation</a> into AI-generated biographies appearing on Amazon. These included books about living public figures that were riddled with factual mistakes and seemingly produced with zero human oversight.</p><p>I wondered: Could I actually spot one in the wild? I opened Amazon and started searching.</p><h2 id="most-of-the-listings-looked-completely-normal">Most of the listings looked completely normal</h2><p>The most surprising part of the whole experiment was at first glance, nothing looked unusual. All the books with AI-generated content featured professional-looking covers, convincing descriptions, reasonable price points, and even star ratings. Nothing immediately screamed "AI." If I hadn't intentionally gone looking for them, I probably would have assumed they were entirely legitimate.</p><p>Once I dug a little deeper, however, the facade started to crack — and the first thing that tipped me off was the author pages. I clicked on the name behind one biography and landed on the page of someone called <a href="https://www.nytimes.com/2026/07/16/technology/ai-slop-books-biography-amazon.html">John Crane Miller</a>, described as a "seasoned biographer and cultural analyst" with a stock-photo portrait. Miller had published ten biographies in a single week, all about journalists and public figures, and when <a href="https://www.nytimes.com/by/kashmir-hill?eafs_enabled=false" target="_blank">Kashmir Hill</a> left a public review on Amazon asking to speak with him, his books quietly vanished. He wasn't the only phantom. </p><p><a href="https://originality.ai/blog/likely-ai-success-self-help-book-study">A study by Originality.ai</a> found entire catalogs built by authors who appeared to be fabricated identities, one of whom had published 74 books in five months on topics ranging from porn addiction to solo parenting to toxic workplaces. No single person writes like that. These weren't prolific indie authors with a strong work ethic; they were fake names attached to automated output.</p><h2 id="marketing-copy-was-a-dead-giveaway">Marketing copy was a dead giveaway </h2><p>Blurb after blurb leaned on the same broad promises and eerily familiar phrasing — "delve into," "comprehensive guide," "unlock the secrets of" — without ever explaining what made the book worth reading over any other book on the same topic. </p><p>After half a dozen of these, I could practically predict the next sentence before I read it. The marketing copy wasn't just generic; it was interchangeable, as if the same prompt had been run through the same model with only the subject swapped out.</p><p>The biographies were the most troubling category, and the <a href="https://www.404media.co/ai-generated-kara-swisher-biographies-flood-amazon/" target="_blank">wave of books about tech journalist Kara Swisher</a> illustrated why. Multiple unauthorized biographies of Swisher appeared on Amazon around the release of her memoir "<a href="https://www.simonandschuster.com/books/Burn-Book/Kara-Swisher/9781982163907" target="_blank">Burn Book</a>," written by authors with no apparent journalism credentials and no indication they had ever spoken to Swisher or anyone in her orbit. </p><p>Political scientist Ian Bremmer <a href="https://www.npr.org/2024/03/13/1237888126/growing-number-ai-scam-books-amazon" target="_blank">encountered the same phenomenon</a>: books bearing his name as a subject, produced without his involvement, that simply scraped and summarized what was already freely available online. This is, of course, exactly what chatbots are built to do, that is, synthesize existing information into fluent, confident-sounding prose. The result is a product that looks and feels like a real book but contributes nothing a reader couldn't get from the source material itself.</p><h2 id="beyond-books">Beyond books </h2><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="JKuR2zNYoo68T66LtMcnLB" name="subtack" alt="Amanda Caswell's substack" src="https://cdn.mos.cms.futurecdn.net/JKuR2zNYoo68T66LtMcnLB.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future/Amanda Caswell)</span></figcaption></figure><p>Substack recently launched an AI detection feature in partnership with a company called <a href="https://www.tomsguide.com/ai/i-tested-pangram-the-black-light-of-ai-detection-built-by-ex-tesla-and-google-engineers-heres-how-well-it-worked">Pangram</a>, letting readers scan any post to see an estimate of how much was written by a human versus generated by AI. </p><p>Substack CEO Chris Best framed it as a way to keep the platform from becoming "like LinkedIn," <a href="https://www.pangram.com/blog/ai-in-your-feed" target="_blank">overrun with hollow AI content, </a>but even Substack acknowledges the tool isn't perfect. <a href="https://san.com/cc/substacks-new-ai-detection-tool-has-some-critics-worried-about-false-flags/" target="_blank">The Atlantic found</a> that Pangram's accuracy is far from bulletproof, and critics worry about false positives flagging legitimate human writers. </p><p>Still, the fact that a major publishing platform felt compelled to build this feature at all says something about how urgent the problem has become. Amazon, for its part, has no equivalent.</p><h2 id="the-takeaway-2">The takeaway </h2><p>As someone who absolutely loves to read, I found this to be a very interesting experiment. My takeaway is that now, instead of trusting a listing at face value, I take a few extra minutes to look up the author outside of Amazon to see if they have a credible publishing history elsewhere, and I specifically hunt down professional reviews rather than relying on standard star ratings. </p><p>I always preview the sample text to check if the writing feels robotic or relies on repetitive phrasing, and for nonfiction, I actively look for evidence of real human interviews and original citations. None of these steps individually guarantee a book was written by a human, but together, they make it much easier to separate thoughtful, researched work from automated content designed just to game search results.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-asked-chatgpt-to-improve-my-apple-notes-app-here-are-the-7-changes-i-actually-kept">I asked ChatGPT to improve my Apple Notes app — here are the 7 changes I actually kept</a></li><li><a href="https://www.tomsguide.com/ai/microsoft-copilots-free-deep-research-ai-tool-is-going-away-these-are-the-7-best-free-alternatives">Microsoft Copilot’s free Deep Research AI tool is going away — these are the 7 best free alternatives</a></li><li><a href="https://www.tomsguide.com/ai/i-always-recommend-the-chatgpt-escape-prompt-to-friends-looking-for-a-new-job-heres-why-it-works">I always recommend the ChatGPT 'Escape Prompt' to friends looking for a new job — here's why it works</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon Alexa was down: outage affecting security systems and more ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="live-content"><p>Amazon's Alexa voice assistant suffered an outage today. Starting around 11:30 a.m. Pacific, more than 2,000 reports suddenly hit the outage tracking site <a href="https://downdetector.com/status/amazon-alexa/" target="_blank">DownDetector</a>.</p><p>We also saw <a href="https://www.reddit.com/r/alexa/new/" target="_blank">reports on Reddit</a> with users asking if Alexa is down. My colleagues found delays in Alexa reporting announcements with Ring systems and the Alexa speakers weren't connecting. Some users on Reddit reported that newer Alexa devices were working but that older speakers were the main ones affected. </p></div><div class="live-content"><time datetime="2026-07-23T19:10:29+00:00">July 23, 2026 – 3:10 PM</time><h2 id="sudden-spike-on-down-detector">Sudden spike on Down Detector</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:680px;"><p class="vanilla-image-block" style="padding-top:56.62%;"><img id="8BcxjJE6FRgY9PQucL7JCn" name="Screenshot 2026-07-23 120726" alt="Alexa outage 7-23-26" src="https://cdn.mos.cms.futurecdn.net/8BcxjJE6FRgY9PQucL7JCn.png" mos="" align="middle" fullscreen="" width="680" height="385" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: DownDetector)</span></figcaption></figure><p>Starting around 11:30 am Pacific, a sudden spike of over 2,000 reports suddenly hit the outage tracking site on Down Detector.</p><p>Most users just reported it was down but a couple said that their Amazon speakers weren't working.</p><p>"No response to voice commands, lots of blue lights. affecting all 3 of my smart speakers," one person wrote.</p></div><div class="live-content"><time datetime="2026-07-23T19:12:07+00:00">July 23, 2026 – 3:12 PM</time><h2 id="relay-between-ring-and-alexa-is-down">Relay between Ring and Alexa is down</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:61.67%;"><img id="Rc4eYmTQ5QsoXuCkjBi9JB" name="Ring Battery Doorbell Pro (2nd gen)" alt="Ring Battery Doorbell Pro (2nd gen)" src="https://cdn.mos.cms.futurecdn.net/Rc4eYmTQ5QsoXuCkjBi9JB.jpg" mos="" align="middle" fullscreen="" width="1500" height="925" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ring)</span></figcaption></figure><p>My colleague John Velasco confirmed that he is getting a delay on announcements from his Ring cameras to Alexa. </p><p>"My Alexa speakers don't announce people when my Ring cameras detect them," he said.</p><p>He had a minute delay he said.</p></div><div class="live-content"><time datetime="2026-07-23T19:20:05+00:00">July 23, 2026 – 3:20 PM</time><h2 id="reports-dive-but-alexa-com-is-down">Reports dive but Alexa.com is down</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ENcHRNWoHMSJgLLu7xM6sh" name="amazon alexa event 2025" alt="Amazon Alexa+ graphic" src="https://cdn.mos.cms.futurecdn.net/ENcHRNWoHMSJgLLu7xM6sh.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon )</span></figcaption></figure><p>On DownDetector reports have taken a nose dive with people reporting things back up.</p><p>However, I've found that Alexa.com is currently inaccessible. Is it down for you?</p></div><div class="live-content"><time datetime="2026-07-23T19:23:39+00:00">July 23, 2026 – 3:23 PM</time><h2 id="multiple-reports-on-alexa-subreddit">Multiple reports on Alexa subreddit</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WXPMeDCBrXbRBUA2FYPddf" name="reddit logo 1.shutterstock_2459885999" alt="Reddit app logo on a phone with blue screens in background" src="https://cdn.mos.cms.futurecdn.net/WXPMeDCBrXbRBUA2FYPddf.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>On the<a href="https://www.reddit.com/r/alexa/new/" target="_blank"> Alexa subreddit</a>, I've seen multiple reports from Alexa users saying that the platform is down.</p><p>"My Alexa platform is unresponsive and the app interface isn't working on either my iPhone or iPad. I have performed basic troubleshooting (cold boot device and iPhone) but still unresponsive. I can ask Alexa to turn on the lights and the device lights indicate that it hears me but does not perform the task. I can also ask about the weather. Same result. Light on device acknowledging being spoken to but nothing is done. is anyone," said one post.</p><p>I have seen some people saying that the outage is only affecting their older devices but not the newer ones.</p></div><div class="live-content"><time datetime="2026-07-23T19:28:30+00:00">July 23, 2026 – 3:28 PM</time><h2 id="a-blip">A blip</h2><p>Well, it appears the outage is over. Lasting just about an hour, it's not clear what caused the Alexa platform to glitch today. </p><p>However, reports on DownDetector are at nearly zero and the systems we have  access to have started to receive normal announcements.</p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/news/live/amazon-outage-july-23-2026</link>
                                                                            <description>
                            <![CDATA[ Amazon's Alexa voice assistant appears to be suffering an outage affecting the ability to contact systems. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">iB5JtaesDBEns9aFtszgoT</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/5P7fpww3ZptYTqpHtaZvG4-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 19:08:08 +0000</pubDate>                                                                                                                                <updated>Thu, 23 Jul 2026 19:33:18 +0000</updated>
                                                                                                                                            <category><![CDATA[Home Security]]></category>
                                                    <category><![CDATA[Home]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ.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/5P7fpww3ZptYTqpHtaZvG4-1280-80.jpg">
                                                            <media:credit><![CDATA[Amazon/Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[An Echo Show 10 with the Alexa Plus logo displayed on screen]]></media:description>                                                            <media:text><![CDATA[An Echo Show 10 with the Alexa Plus logo displayed on screen]]></media:text>
                                <media:title type="plain"><![CDATA[An Echo Show 10 with the Alexa Plus logo displayed on screen]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/5P7fpww3ZptYTqpHtaZvG4-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="live-content"><p>Amazon's Alexa voice assistant suffered an outage today. Starting around 11:30 a.m. Pacific, more than 2,000 reports suddenly hit the outage tracking site <a href="https://downdetector.com/status/amazon-alexa/" target="_blank">DownDetector</a>.</p><p>We also saw <a href="https://www.reddit.com/r/alexa/new/" target="_blank">reports on Reddit</a> with users asking if Alexa is down. My colleagues found delays in Alexa reporting announcements with Ring systems and the Alexa speakers weren't connecting. Some users on Reddit reported that newer Alexa devices were working but that older speakers were the main ones affected. </p></div><div class="live-content"><time datetime="2026-07-23T19:10:29+00:00">July 23, 2026 – 3:10 PM</time><h2 id="sudden-spike-on-down-detector">Sudden spike on Down Detector</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:680px;"><p class="vanilla-image-block" style="padding-top:56.62%;"><img id="8BcxjJE6FRgY9PQucL7JCn" name="Screenshot 2026-07-23 120726" alt="Alexa outage 7-23-26" src="https://cdn.mos.cms.futurecdn.net/8BcxjJE6FRgY9PQucL7JCn.png" mos="" align="middle" fullscreen="" width="680" height="385" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: DownDetector)</span></figcaption></figure><p>Starting around 11:30 am Pacific, a sudden spike of over 2,000 reports suddenly hit the outage tracking site on Down Detector.</p><p>Most users just reported it was down but a couple said that their Amazon speakers weren't working.</p><p>"No response to voice commands, lots of blue lights. affecting all 3 of my smart speakers," one person wrote.</p></div><div class="live-content"><time datetime="2026-07-23T19:12:07+00:00">July 23, 2026 – 3:12 PM</time><h2 id="relay-between-ring-and-alexa-is-down">Relay between Ring and Alexa is down</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:61.67%;"><img id="Rc4eYmTQ5QsoXuCkjBi9JB" name="Ring Battery Doorbell Pro (2nd gen)" alt="Ring Battery Doorbell Pro (2nd gen)" src="https://cdn.mos.cms.futurecdn.net/Rc4eYmTQ5QsoXuCkjBi9JB.jpg" mos="" align="middle" fullscreen="" width="1500" height="925" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ring)</span></figcaption></figure><p>My colleague John Velasco confirmed that he is getting a delay on announcements from his Ring cameras to Alexa. </p><p>"My Alexa speakers don't announce people when my Ring cameras detect them," he said.</p><p>He had a minute delay he said.</p></div><div class="live-content"><time datetime="2026-07-23T19:20:05+00:00">July 23, 2026 – 3:20 PM</time><h2 id="reports-dive-but-alexa-com-is-down">Reports dive but Alexa.com is down</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ENcHRNWoHMSJgLLu7xM6sh" name="amazon alexa event 2025" alt="Amazon Alexa+ graphic" src="https://cdn.mos.cms.futurecdn.net/ENcHRNWoHMSJgLLu7xM6sh.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon )</span></figcaption></figure><p>On DownDetector reports have taken a nose dive with people reporting things back up.</p><p>However, I've found that Alexa.com is currently inaccessible. Is it down for you?</p></div><div class="live-content"><time datetime="2026-07-23T19:23:39+00:00">July 23, 2026 – 3:23 PM</time><h2 id="multiple-reports-on-alexa-subreddit">Multiple reports on Alexa subreddit</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WXPMeDCBrXbRBUA2FYPddf" name="reddit logo 1.shutterstock_2459885999" alt="Reddit app logo on a phone with blue screens in background" src="https://cdn.mos.cms.futurecdn.net/WXPMeDCBrXbRBUA2FYPddf.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>On the<a href="https://www.reddit.com/r/alexa/new/" target="_blank"> Alexa subreddit</a>, I've seen multiple reports from Alexa users saying that the platform is down.</p><p>"My Alexa platform is unresponsive and the app interface isn't working on either my iPhone or iPad. I have performed basic troubleshooting (cold boot device and iPhone) but still unresponsive. I can ask Alexa to turn on the lights and the device lights indicate that it hears me but does not perform the task. I can also ask about the weather. Same result. Light on device acknowledging being spoken to but nothing is done. is anyone," said one post.</p><p>I have seen some people saying that the outage is only affecting their older devices but not the newer ones.</p></div><div class="live-content"><time datetime="2026-07-23T19:28:30+00:00">July 23, 2026 – 3:28 PM</time><h2 id="a-blip">A blip</h2><p>Well, it appears the outage is over. Lasting just about an hour, it's not clear what caused the Alexa platform to glitch today. </p><p>However, reports on DownDetector are at nearly zero and the systems we have  access to have started to receive normal announcements.</p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Jeff Bezos reportedly pushing for Prime Video overhaul that puts AI front and center ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Prime Video could be getting an AI overhaul at the behest of Amazon founder Jeff Bezos, according to a new report. The redesign would put AI front and center under a new project allegedly dubbed Lighthouse.</p><p><a href="https://www.reuters.com/business/media-telecom/amazons-bezos-pushes-prime-video-redesign-focused-ai-2026-07-23/" target="_blank">Reuters</a> reports that the push from Bezos is meant as a way for Amazon to utilize its massive investments in AI and "elevate the company's stature in artificial intelligence." This comes as other investments, including improving the Alexa voice assistant, have provided mixed results and ongoing losses.</p><p>Bezos was "displeased" with a Prime Video presentation last fall where AI was not highlighted. The Lighthouse project was born out of this meeting.</p><h2 id="what-does-lighthouse-add-to-prime-video">What does Lighthouse add to Prime Video?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="drYYfdJ36CcqYV9vHHGK6g" name="thelighthouse.jpg" alt="Best movies on Amazon: The Lighthouse" src="https://cdn.mos.cms.futurecdn.net/drYYfdJ36CcqYV9vHHGK6g.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: A24)</span></figcaption></figure><p>Bezos is said to be personally involved in the overhaul, an unusual step considering he relinquished the CEO title in 2021 to focus on the Washington Post and his spaceflight company Blue Origin.</p><p>Per Reuters, Lighthouse would add a slew of new features that would use AI to improve film and TV show recommendations. This would be done by having the AI learn customer preferences and respond to spoken requests.</p><p>A homepage redesign is part of the project, but it's not finalized, so it's not known how it would look yet. </p><p>However, it was suggested that it could include AI-driven titles with viewing suggestions like "Christmas rom-coms" or "action movies from the 1980s." Reportedly, a current version doesn't include text-heavy titles, so that even that appears to still be in the air.</p><p>Programs and live events like Thursday Night Football would still be promoted in the upper portion of the platform alongside the traditional search bar.</p><p>Amazon is also supposedly attempting to integrate Alexa into Prime Video's search function as part of the redesign. Most recently, Alexa was <a href="https://www.tomsguide.com/ai/alexa-release-date-cost-devices-and-all-the-new-ai-features">overhauled into a generative AI version</a> last year and integrated into the <a href="https://www.tomsguide.com/ai/alexa-just-got-a-major-upgrade-for-the-holidays-here-are-the-new-shopping-and-home-features-im-most-excited-about">Amazon shopping platform</a> earlier this year.</p><h2 id="where-prime-video-stands">Where Prime Video stands</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zWqHCpTxYNgNF2cEkpZ93U" name="primevideo-logo-blueelectric" alt="Prime Video logo on blue electric currents background" src="https://cdn.mos.cms.futurecdn.net/zWqHCpTxYNgNF2cEkpZ93U.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Prime Video; Shutterstock)</span></figcaption></figure><p>Amazon last gave <a href="https://www.tomsguide.com/entertainment/streaming/prime-video-is-getting-a-massive-redesign-heres-whats-new">Prime Video a massive update </a>in July of 2024 that streamlined content curation and added AI recommendations.</p><p>The most r<a href="https://www.nielsen.com/news-center/2025/youtube-netflix-ride-the-wave-of-summer-streaming-highs-in-nielsens-media-distributor-gauge/">ecent Nielsen data from 2025</a> has Prime Video in a distant eighth place in TV viewing share behind YouTube, Netflix and Disney+ at 3.9% of viewers. Reuters reports that it's bumped up to 4.2% this year, though still behind Netflix and Disney.</p><p>An AI overhaul could be a way for the company to utilize both its artificial intelligence investments and increase viewership with more personalized recommendations.</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/amazon-prime-usd2-5-billion-settlement-deadline-is-days-away-heres-how-to-claim-your-share">Amazon Prime $2.5 billion settlement deadline is days away — here's how to claim your share</a></li><li><a href="https://www.tomsguide.com/us/best-e-readers,review-2766.html">Read anywhere with the best Kindle and e-readers we tested for books, comics and note-taking</a></li><li><a href="https://www.tomsguide.com/computing/e-readers/sorry-kindle-but-i-still-prefer-reading-comic-books-on-my-ipad">Sorry, Kindle — but I still prefer reading comic books on my iPad</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/jeff-bezos-reportedly-pushing-for-prime-video-overhaul-that-puts-ai-front-and-center</link>
                                                                            <description>
                            <![CDATA[ A new report claims Jeff Bezos is personally advocating for an AI-first overhaul of Prime Video. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">GCfR7zxVKusC2L8wiytg5n</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/fZ72AHPgRrZVefGKSdC9Zk-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 18:26:23 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></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/fZ72AHPgRrZVefGKSdC9Zk-1280-80.jpg">
                                                            <media:credit><![CDATA[Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Jeff Bezos speaking at a VATECH event]]></media:description>                                                            <media:text><![CDATA[Jeff Bezos speaking at a VATECH event]]></media:text>
                                <media:title type="plain"><![CDATA[Jeff Bezos speaking at a VATECH event]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/fZ72AHPgRrZVefGKSdC9Zk-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Prime Video could be getting an AI overhaul at the behest of Amazon founder Jeff Bezos, according to a new report. The redesign would put AI front and center under a new project allegedly dubbed Lighthouse.</p><p><a href="https://www.reuters.com/business/media-telecom/amazons-bezos-pushes-prime-video-redesign-focused-ai-2026-07-23/" target="_blank">Reuters</a> reports that the push from Bezos is meant as a way for Amazon to utilize its massive investments in AI and "elevate the company's stature in artificial intelligence." This comes as other investments, including improving the Alexa voice assistant, have provided mixed results and ongoing losses.</p><p>Bezos was "displeased" with a Prime Video presentation last fall where AI was not highlighted. The Lighthouse project was born out of this meeting.</p><h2 id="what-does-lighthouse-add-to-prime-video">What does Lighthouse add to Prime Video?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="drYYfdJ36CcqYV9vHHGK6g" name="thelighthouse.jpg" alt="Best movies on Amazon: The Lighthouse" src="https://cdn.mos.cms.futurecdn.net/drYYfdJ36CcqYV9vHHGK6g.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: A24)</span></figcaption></figure><p>Bezos is said to be personally involved in the overhaul, an unusual step considering he relinquished the CEO title in 2021 to focus on the Washington Post and his spaceflight company Blue Origin.</p><p>Per Reuters, Lighthouse would add a slew of new features that would use AI to improve film and TV show recommendations. This would be done by having the AI learn customer preferences and respond to spoken requests.</p><p>A homepage redesign is part of the project, but it's not finalized, so it's not known how it would look yet. </p><p>However, it was suggested that it could include AI-driven titles with viewing suggestions like "Christmas rom-coms" or "action movies from the 1980s." Reportedly, a current version doesn't include text-heavy titles, so that even that appears to still be in the air.</p><p>Programs and live events like Thursday Night Football would still be promoted in the upper portion of the platform alongside the traditional search bar.</p><p>Amazon is also supposedly attempting to integrate Alexa into Prime Video's search function as part of the redesign. Most recently, Alexa was <a href="https://www.tomsguide.com/ai/alexa-release-date-cost-devices-and-all-the-new-ai-features">overhauled into a generative AI version</a> last year and integrated into the <a href="https://www.tomsguide.com/ai/alexa-just-got-a-major-upgrade-for-the-holidays-here-are-the-new-shopping-and-home-features-im-most-excited-about">Amazon shopping platform</a> earlier this year.</p><h2 id="where-prime-video-stands">Where Prime Video stands</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zWqHCpTxYNgNF2cEkpZ93U" name="primevideo-logo-blueelectric" alt="Prime Video logo on blue electric currents background" src="https://cdn.mos.cms.futurecdn.net/zWqHCpTxYNgNF2cEkpZ93U.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Prime Video; Shutterstock)</span></figcaption></figure><p>Amazon last gave <a href="https://www.tomsguide.com/entertainment/streaming/prime-video-is-getting-a-massive-redesign-heres-whats-new">Prime Video a massive update </a>in July of 2024 that streamlined content curation and added AI recommendations.</p><p>The most r<a href="https://www.nielsen.com/news-center/2025/youtube-netflix-ride-the-wave-of-summer-streaming-highs-in-nielsens-media-distributor-gauge/">ecent Nielsen data from 2025</a> has Prime Video in a distant eighth place in TV viewing share behind YouTube, Netflix and Disney+ at 3.9% of viewers. Reuters reports that it's bumped up to 4.2% this year, though still behind Netflix and Disney.</p><p>An AI overhaul could be a way for the company to utilize both its artificial intelligence investments and increase viewership with more personalized recommendations.</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/amazon-prime-usd2-5-billion-settlement-deadline-is-days-away-heres-how-to-claim-your-share">Amazon Prime $2.5 billion settlement deadline is days away — here's how to claim your share</a></li><li><a href="https://www.tomsguide.com/us/best-e-readers,review-2766.html">Read anywhere with the best Kindle and e-readers we tested for books, comics and note-taking</a></li><li><a href="https://www.tomsguide.com/computing/e-readers/sorry-kindle-but-i-still-prefer-reading-comic-books-on-my-ipad">Sorry, Kindle — but I still prefer reading comic books on my iPad</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon Prime $2.5 billion settlement deadline is days away — here's how to claim your share ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Time is running out to grab your cut of Amazon’s massive $2.5 billion settlement with the Federal Trade Commission (FTC). </p><p>If you accidentally ended up paying for a Prime membership or struggled to cancel one, you could be owed up to $51, but <strong>the deadline to submit a claim is fast approaching on Monday, July 27</strong>.</p><p>The payout stems from an FTC lawsuit alleging Amazon used deceptive design tactics to trick customers into signing up for Prime subscriptions and intentionally made the cancellation process confusing. </p><p>While Amazon paid $1 billion in civil penalties, the remaining $1.5 billion was earmarked directly for affected consumers.</p><p>Automatic refunds were disbursed to the first wave of users <a href="https://www.tomsguide.com/computing/internet/how-to-claim-your-amazon-prime-settlement-refund-as-payments-start-going-out">late last year</a>, but millions of additional shoppers are eligible for the second payout phase, provided they act before the deadline.</p><h2 id="who-qualifies-for-a-refund">Who qualifies for a refund?</h2><p>You don't need to currently hold an active Prime account to file a claim, but you must meet all four of the following criteria:</p><ul><li>You must be a <strong>U.S. consumer</strong>.<br></li><li>You <strong>enrolled in Amazon Prime between June 23, 2019, and June 23, 2025</strong> through a challenged checkout page, OR attempted to cancel during that period and were unable to do so.<br></li><li>You <strong>used fewer than 10 Prime benefits</strong> (such as streaming Prime Video, using free shipping, or Prime Reading) <strong>during any 12-month period </strong>of your enrollment.<br></li><li><strong>You did not already receive an automatic refund during Phase 1</strong> (which was paid out in late 2025 to ultra-low usage customers who used 3 or fewer benefits).<br></li><li>If you used between 4 and 9 Prime benefits, you were not eligible for the automatic Phase 1 payment — meaning <strong>you must manually file a claim before the July 27 deadline </strong>to receive your payout.</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9q9uD2jmqJAPMpwiEHKe6E" name="prime video 2.jpg" alt="Amazon Prime Video logo on a phone being held by someone" src="https://cdn.mos.cms.futurecdn.net/9q9uD2jmqJAPMpwiEHKe6E.jpg" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Kicking Studio/Shutterstock)</span></figcaption></figure><h2 id="how-to-file-your-claim">How to file your claim </h2><p>Filing takes less than five minutes online through the official administrator at <a href="https://www.subscriptionmembershipsettlement.com/"><strong>SubscriptionMembershipSettlement.com</strong></a>. </p><p>First, <strong>check your inbox for a message sent from subscriptionmembershipsettlement.com in January</strong>, which contains a unique Claim ID and PIN to expedite the process. </p><p>If you can't find that notice, <strong>simply select the option stating "I DO NOT have a Claim ID and PIN"</strong> on the homepage to manually enter your name, address, and Amazon account details. </p><p><strong>You can choose to receive your payout via direct deposit, PayPal, Venmo, or check</strong>. Once the July 27 filing window closes, Amazon will review all submitted claims, with approved payouts expected to be disbursed in late 2026.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O9231X"></div>                            </div>                            <script src="https://kwizly.com/embed/O9231X.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/computing/internet/amazon-1-5-ftc-settlement-the-biggest-questions-answered">Amazon's $1.5 billion Prime settlement explained — your most common questions answered</a></li><li><a href="https://www.tomsguide.com/sales-events/amazon-has-a-hidden-button-that-connects-you-with-a-real-customer-service-agent-heres-where-to-find-it">Amazon has a hidden button that connects you with a real customer service agent — here's where to find it</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-is-paying-usd250-million-to-iphone-customers-over-delayed-ai-features-heres-how-to-get-your-share">Apple is paying $250 million to iPhone customers over delayed AI features — here's how to get your share</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/home/amazon-prime-usd2-5-billion-settlement-deadline-is-days-away-heres-how-to-claim-your-share</link>
                                                                            <description>
                            <![CDATA[ How to get your share of Amazon’s $2.5 billion FTC settlement before the deadline. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">j9koNBb3sq3k6GQuDwJszW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wmVm3TePyjJDn24ewHmcBh-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 23 Jul 2026 16:08:18 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Home]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/wmVm3TePyjJDn24ewHmcBh-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amazon logo on a building]]></media:description>                                                            <media:text><![CDATA[Amazon logo on a building]]></media:text>
                                <media:title type="plain"><![CDATA[Amazon logo on a building]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wmVm3TePyjJDn24ewHmcBh-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Time is running out to grab your cut of Amazon’s massive $2.5 billion settlement with the Federal Trade Commission (FTC). </p><p>If you accidentally ended up paying for a Prime membership or struggled to cancel one, you could be owed up to $51, but <strong>the deadline to submit a claim is fast approaching on Monday, July 27</strong>.</p><p>The payout stems from an FTC lawsuit alleging Amazon used deceptive design tactics to trick customers into signing up for Prime subscriptions and intentionally made the cancellation process confusing. </p><p>While Amazon paid $1 billion in civil penalties, the remaining $1.5 billion was earmarked directly for affected consumers.</p><p>Automatic refunds were disbursed to the first wave of users <a href="https://www.tomsguide.com/computing/internet/how-to-claim-your-amazon-prime-settlement-refund-as-payments-start-going-out">late last year</a>, but millions of additional shoppers are eligible for the second payout phase, provided they act before the deadline.</p><h2 id="who-qualifies-for-a-refund">Who qualifies for a refund?</h2><p>You don't need to currently hold an active Prime account to file a claim, but you must meet all four of the following criteria:</p><ul><li>You must be a <strong>U.S. consumer</strong>.<br></li><li>You <strong>enrolled in Amazon Prime between June 23, 2019, and June 23, 2025</strong> through a challenged checkout page, OR attempted to cancel during that period and were unable to do so.<br></li><li>You <strong>used fewer than 10 Prime benefits</strong> (such as streaming Prime Video, using free shipping, or Prime Reading) <strong>during any 12-month period </strong>of your enrollment.<br></li><li><strong>You did not already receive an automatic refund during Phase 1</strong> (which was paid out in late 2025 to ultra-low usage customers who used 3 or fewer benefits).<br></li><li>If you used between 4 and 9 Prime benefits, you were not eligible for the automatic Phase 1 payment — meaning <strong>you must manually file a claim before the July 27 deadline </strong>to receive your payout.</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9q9uD2jmqJAPMpwiEHKe6E" name="prime video 2.jpg" alt="Amazon Prime Video logo on a phone being held by someone" src="https://cdn.mos.cms.futurecdn.net/9q9uD2jmqJAPMpwiEHKe6E.jpg" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Kicking Studio/Shutterstock)</span></figcaption></figure><h2 id="how-to-file-your-claim">How to file your claim </h2><p>Filing takes less than five minutes online through the official administrator at <a href="https://www.subscriptionmembershipsettlement.com/"><strong>SubscriptionMembershipSettlement.com</strong></a>. </p><p>First, <strong>check your inbox for a message sent from subscriptionmembershipsettlement.com in January</strong>, which contains a unique Claim ID and PIN to expedite the process. </p><p>If you can't find that notice, <strong>simply select the option stating "I DO NOT have a Claim ID and PIN"</strong> on the homepage to manually enter your name, address, and Amazon account details. </p><p><strong>You can choose to receive your payout via direct deposit, PayPal, Venmo, or check</strong>. Once the July 27 filing window closes, Amazon will review all submitted claims, with approved payouts expected to be disbursed in late 2026.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O9231X"></div>                            </div>                            <script src="https://kwizly.com/embed/O9231X.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/computing/internet/amazon-1-5-ftc-settlement-the-biggest-questions-answered">Amazon's $1.5 billion Prime settlement explained — your most common questions answered</a></li><li><a href="https://www.tomsguide.com/sales-events/amazon-has-a-hidden-button-that-connects-you-with-a-real-customer-service-agent-heres-where-to-find-it">Amazon has a hidden button that connects you with a real customer service agent — here's where to find it</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-is-paying-usd250-million-to-iphone-customers-over-delayed-ai-features-heres-how-to-get-your-share">Apple is paying $250 million to iPhone customers over delayed AI features — here's how to get your share</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 new to Prime Video thriller movies to stream this week — including a $150 million disaster movie about the moon falling out of orbit (July 21-27) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Prime Video is always adding new movies to its library, and typically these drops include several arrivals in the thriller genre. After all, thrillers are persistently popular across streaming services, so it only makes sense that Prime Video would meet this demand. </p><p>I’ve taken a look through all the recently added movies for July 2026, and found a trio of thrillers worth adding to your watchlist. My picks this week range from a globe-trotting quest for revenge, a guilty pleasure option from a veteran of the disaster subgenre, and a survival drama that is made all the more engaging because it’s based on a shocking true story.</p><p>These are the latest thriller movies on Prime Video. Add them to your watchlist if you want to add some excitement, tension, and adrenaline-pumping action to your weekly streaming.</p><h2 id="the-amateur-2025-2">‘The Amateur’ (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/DCWcK4c-F8Q" allowfullscreen></iframe></div></div><p>“The Amateur” is an excellent spy thriller that I believe falls into the slightly underrated category. Based on Robert Littell’s novel and starring Oscar winner Rami Malek, it draws clear inspiration from the Bourne film series in its tone and aesthetics. One of its biggest strengths is its compelling protagonist, who takes a brain-over-brawls approach; rather than outgunning his enemies, he outthinks them with his superior intellect. </p><p>Malek plays a CIA analyst whose world is shattered when his wife is killed in a terrorist attack. Using his skills, he identifies those responsible for his wife's murder and blackmails his superiors into giving him a license to hunt them down and get cold-blooded revenge. A novice in the field, Charlie (Malek) is shown the ropes by a gruff mentor, Hendo (Laurence Fishburne). Building to a satisfying conclusion, “The Amateur” is a consistently thrilling ride.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/Amateur-James-Hawes/dp/B0D48BW2HT/" target="_blank" rel="nofollow"><em><strong>"The Amateur" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="moonfall-2022">‘Moonfall’ (2022)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/ivIwdQBlS10" allowfullscreen></iframe></div></div><p>“Moonfall” is definitely more of a guilty pleasure flick. This sci-fi disaster-thriller comes from Roland Emmerich, known for “Independence Day,” “Godzilla,” and “The Day After Tomorrow.” It’s unashamedly silly with corny dialogue and a high-concept plot that goes to some ludicrous places. You could certainly pick at its seams, and the whole movie will quickly unravel, but if you switch your brain off for 130 minutes, it can offer throwaway fun.</p><p>As the name suggests, “Moonfall” sees the moon literally fall out of orbit, setting it on a devastating collision course with Earth. Former astronaut Jocinda Fowler (Halle Berry) believes she knows the key to saving humanity. With time running out, she has to rely on a disgraced former colleague (Patrick Wilson) and a conspiracy theorist (John Bradley) for help. If you can handle cheesy B-movie vibes, you might enjoy this one.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0DLRLS3V7" target="_blank" rel="nofollow"><em><strong>"Moonfall" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="death-race-2008">'Death Race' (2008)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/C8bxcJZrus0" allowfullscreen></iframe></div></div><p>Jason Statham stars in this 2000s remake of 1975’s “Death Race.” From director Paul W. S. Anderson, most known for his sprawling but largely subpar “Resident Evil” series, it was no critical darling, but I have a soft spot for this brash action flick. Its narrative is flimsy, and many of the characters aren’t particularly likeable, but the action comes thick and fast, and the concept of a high-speed race to the death leads to thrilling sequences. </p><p>Set in an alternative United States where economic downturn and rising crime rates have demanded a radical solution, Warden Claire Hennessey (Joan Allen) creates “Death Race.” A three-day live-streamed event in which prisoners race in weaponized cars for a shot at freedom. Forced to compete is Jensen Ames (Statham), an industrial worker framed for the murder of his wife. The tournament is petrol-fuelled mayhem, where the only rule is to drive fast and do whatever it takes to cross the finish line.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B00D5UGA10/" target="_blank" rel="nofollow"><em><strong>"Death Race" on Prime Video</strong></em></a><em><strong> now</strong></em></p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="">New on Prime Video in July 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-must-watch-classic-movies-just-added-to-prime-video-including-clint-eastwoods-iconic-western-trilogy">5 must-watch classic movies just added to Prime Video</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-5-gripping-movies-you-can-stream-for-free-and-one-is-an-action-packed-western-film">Prime Video just added these top movies you can stream for free</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-new-to-prime-video-thriller-movies-to-stream-this-week-including-a-usd150-million-disaster-movie-about-the-moon-falling-out-of-orbit-july-21-27</link>
                                                                            <description>
                            <![CDATA[ These are the latest thriller movies on Prime Video, including a $150 million disaster flick, an action pick with Jason Statham, and more ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nwPQp57Wue32VsucRuZpdJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/zWqHCpTxYNgNF2cEkpZ93U-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 21 Jul 2026 11:34:16 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ rory.mellon@futurenet.com (Rory Mellon) ]]></author>                    <dc:creator><![CDATA[ Rory Mellon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5Rv6LtQXMj5JB4Eu8Lt4Sn.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/zWqHCpTxYNgNF2cEkpZ93U-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on blue electric currents background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on blue electric currents background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on blue electric currents background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/zWqHCpTxYNgNF2cEkpZ93U-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Prime Video is always adding new movies to its library, and typically these drops include several arrivals in the thriller genre. After all, thrillers are persistently popular across streaming services, so it only makes sense that Prime Video would meet this demand. </p><p>I’ve taken a look through all the recently added movies for July 2026, and found a trio of thrillers worth adding to your watchlist. My picks this week range from a globe-trotting quest for revenge, a guilty pleasure option from a veteran of the disaster subgenre, and a survival drama that is made all the more engaging because it’s based on a shocking true story.</p><p>These are the latest thriller movies on Prime Video. Add them to your watchlist if you want to add some excitement, tension, and adrenaline-pumping action to your weekly streaming.</p><h2 id="the-amateur-2025-2">‘The Amateur’ (2025)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/DCWcK4c-F8Q" allowfullscreen></iframe></div></div><p>“The Amateur” is an excellent spy thriller that I believe falls into the slightly underrated category. Based on Robert Littell’s novel and starring Oscar winner Rami Malek, it draws clear inspiration from the Bourne film series in its tone and aesthetics. One of its biggest strengths is its compelling protagonist, who takes a brain-over-brawls approach; rather than outgunning his enemies, he outthinks them with his superior intellect. </p><p>Malek plays a CIA analyst whose world is shattered when his wife is killed in a terrorist attack. Using his skills, he identifies those responsible for his wife's murder and blackmails his superiors into giving him a license to hunt them down and get cold-blooded revenge. A novice in the field, Charlie (Malek) is shown the ropes by a gruff mentor, Hendo (Laurence Fishburne). Building to a satisfying conclusion, “The Amateur” is a consistently thrilling ride.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/Amateur-James-Hawes/dp/B0D48BW2HT/" target="_blank" rel="nofollow"><em><strong>"The Amateur" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="moonfall-2022">‘Moonfall’ (2022)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/ivIwdQBlS10" allowfullscreen></iframe></div></div><p>“Moonfall” is definitely more of a guilty pleasure flick. This sci-fi disaster-thriller comes from Roland Emmerich, known for “Independence Day,” “Godzilla,” and “The Day After Tomorrow.” It’s unashamedly silly with corny dialogue and a high-concept plot that goes to some ludicrous places. You could certainly pick at its seams, and the whole movie will quickly unravel, but if you switch your brain off for 130 minutes, it can offer throwaway fun.</p><p>As the name suggests, “Moonfall” sees the moon literally fall out of orbit, setting it on a devastating collision course with Earth. Former astronaut Jocinda Fowler (Halle Berry) believes she knows the key to saving humanity. With time running out, she has to rely on a disgraced former colleague (Patrick Wilson) and a conspiracy theorist (John Bradley) for help. If you can handle cheesy B-movie vibes, you might enjoy this one.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0DLRLS3V7" target="_blank" rel="nofollow"><em><strong>"Moonfall" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="death-race-2008">'Death Race' (2008)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/C8bxcJZrus0" allowfullscreen></iframe></div></div><p>Jason Statham stars in this 2000s remake of 1975’s “Death Race.” From director Paul W. S. Anderson, most known for his sprawling but largely subpar “Resident Evil” series, it was no critical darling, but I have a soft spot for this brash action flick. Its narrative is flimsy, and many of the characters aren’t particularly likeable, but the action comes thick and fast, and the concept of a high-speed race to the death leads to thrilling sequences. </p><p>Set in an alternative United States where economic downturn and rising crime rates have demanded a radical solution, Warden Claire Hennessey (Joan Allen) creates “Death Race.” A three-day live-streamed event in which prisoners race in weaponized cars for a shot at freedom. Forced to compete is Jensen Ames (Statham), an industrial worker framed for the murder of his wife. The tournament is petrol-fuelled mayhem, where the only rule is to drive fast and do whatever it takes to cross the finish line.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B00D5UGA10/" target="_blank" rel="nofollow"><em><strong>"Death Race" on Prime Video</strong></em></a><em><strong> now</strong></em></p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="">New on Prime Video in July 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-must-watch-classic-movies-just-added-to-prime-video-including-clint-eastwoods-iconic-western-trilogy">5 must-watch classic movies just added to Prime Video</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-5-gripping-movies-you-can-stream-for-free-and-one-is-an-action-packed-western-film">Prime Video just added these top movies you can stream for free</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Sorry, Kindle — but I still prefer reading comic books on my iPad ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/us/best-e-readers,review-2766.html">best Kindles</a> have been my primary way to read books for the better part of a decade. Thanks to Amazon’s e-reader, I’ve read more books in the past seven years than in the nearly four decades prior. Not only is the device easy to hold and read on, but its integration with the Kindle app and store gives me more books than I could read in a single lifetime.</p><p>Though I adore my Kindles, I don’t read comic books on them. Even after the introduction of the <a href="https://www.tomsguide.com/tablets/e-readers/kindle-colorsoft-review">Kindle Colorsoft</a>, which finally let me read comics in color, I still can’t bring myself to read comics full-time on Amazon's hardware. Why? Because, as a lifelong comic book fan, I get a much better experience on the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>. Here’s why.</p><h2 id="display-size">Display size</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UHkmwSnbLfaJpaVj6YYqxT" name="iPad Pro M4 comic books-4.jpg" alt="A comic book on an iPad Pro 2024" src="https://cdn.mos.cms.futurecdn.net/UHkmwSnbLfaJpaVj6YYqxT.jpg" mos="" align="middle" fullscreen="" width="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>Digital comic apps like <a href="https://www.tomsguide.com/computing/mobile-apps/marvel-unlimited-heres-the-5-best-classic-comic-books-to-read-first">Marvel Unlimited</a> and DC Universe Infinite offer a guided view mode that zooms in on individual panels and text. This can be immersive, especially for those new to the medium. While guided mode works as advertised, I prefer seeing an entire comic page rather than breaking it up piece by piece.</p><p>On the <a href="https://www.tomsguide.com/tablets/e-readers/kindle-2024-review">base Kindle</a> and <a href="https://www.tomsguide.com/tablets/e-readers/kindle-paperwhite-2024-review">Kindle Paperwhite</a>, you almost have to use guided mode because of their small screens. For comics, I prefer reading on the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro</a>. The 13-inch model’s screen is slightly larger than a physical comic book page. Not only do single pages look fantastic, but double-page spreads look incredible when you rotate the tablet to landscape orientation.</p><p>Another problem with using guided view or pinch-to-zoom on Kindles is the device’s low refresh rate. This causes the e-reader to lag and flash to clear previous image artifacts (ghosting). While this has improved with the latest Kindle models, the refresh rate is still sluggish compared to iPads, which handle panning and zooming instantly and smoothly.</p><p>Returning to screen size, the Kindle Scribe features a roomier 10.2-inch display. While that’s still smaller than the 11-inch iPad Pro and <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air</a> models, it’s a good size for reading full comic book pages. There’s a specific reason I don’t use the Scribe for traditional color comics (which I’ll cover next), but for black-and-white manga, it’s legitimately great. However, since I don’t read much manga, that point is mostly moot for me.</p><p>When it comes to reading single pages and double-page spreads of a traditional American comic book, the iPad is simply the way to go.</p><h2 id="colorsoft-is-still-too-muted">Colorsoft is still too muted</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5172px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9B3xTqSpguT2kzFa28Lryn" name="Kindle Scribe Colorsoft (2025) review" alt="Kindle Scribe Colorsoft review unit in action" src="https://cdn.mos.cms.futurecdn.net/9B3xTqSpguT2kzFa28Lryn.jpg" mos="" align="middle" fullscreen="" width="5172" height="2909" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Kindle Colorsoft and <a href="https://www.tomsguide.com/computing/e-readers/kindle-scribe-colorsoft-2025-review">Kindle Scribe Colorsoft</a> are arguably the best color e-readers out there right now. If you mainly read traditional novels, having full-color book covers, maps, and other design elements is a nice perk. Naturally, comics are in color on these devices, but there is one major drawback—the hues are decidedly muted.</p><p>In fairness, muted colors can sometimes be preferable. For instance, if you’re reading older comics printed before the late ‘90s, the e-reader screen delivers an experience closer to reading them on original newsprint, which is much duller than the glossy paper used today. If you’re a comic purist who doesn’t like how vibrant classic comics look on modern paper or on an iPad, you might actually prefer the Colorsoft's presentation.</p><p>With all that said, I want my comics, classic and modern, to look as bright and bold as possible, which is why I prefer the iPad's display. Again, the color Kindles do a decent job, but the presentation is far too washed out for my tastes.</p><h2 id="ecosystems-and-storage">Ecosystems and storage</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="vea5JJviUmSAQfjRSpMeUD" name="marvel-unlimited.jpg" alt="marvel unlimited comic book reader apps" src="https://cdn.mos.cms.futurecdn.net/vea5JJviUmSAQfjRSpMeUD.jpg" mos="" align="middle" fullscreen="" width="1024" height="768" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Marvel)</span></figcaption></figure><p>iPads give you access to excellent dedicated comic reader apps like Panels and Chunky, along with major subscription platforms like Marvel Unlimited, DC Universe Infinite, and Shonen Jump. Conversely, Kindles mostly confine you to Amazon’s storefront, Comixology, and Kindle Unlimited. Sideloading your own files can also be a chore.</p><p>On that note, if you have a large library of digital comic files (.CBR, .CBZ, and high-res PDFs), you’re going to hit a storage cap much faster on a Kindle than on an iPad. Apple’s tablets offer storage tiers up to 1TB and can easily connect to cloud storage like Google Drive or iCloud to offload your libraries. Kindles top out at 64GB of storage on the Scribe and don’t natively support common comic book formats without converting the files first.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEqoge"></div>                            </div>                            <script src="https://kwizly.com/embed/eEqoge.js" async></script><h2 id="bottom-line-4">Bottom line</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HBb9cZdUkhtu6c62nxUJWC" name="iPad Pro M4 comic books-5.jpg" alt="Conan the Barbarian comic book on an iPad Pro 2024" src="https://cdn.mos.cms.futurecdn.net/HBb9cZdUkhtu6c62nxUJWC.jpg" mos="" align="middle" fullscreen="" width="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>Don't get me wrong — Kindles still hold the crown for battery life and portability. Throwing a lightweight Paperwhite into a bag for a week-long trip without needing to pack a charger is fantastic, and it remains my go-to choice for novels.</p><p>But while Kindles are perfectly serviceable for most everyday reading, I get a much richer experience reading comics on the iPad. With a larger display for viewing full layouts, bolder colors, and seamless performance, I'll choose Apple's tablet for my graphic novels every single time.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/ipads/first-oled-ipad-mini-tipped-for-october-launch-heres-why-im-excited-and-worried">First OLED iPad mini tipped for October launch — here's why I'm excited (and worried)</a></li><li><a href="https://www.tomsguide.com/best-picks/best-tablet">We've tested the best tablets for entertainment and productivity, and these are the 8 I recommend right now</a></li><li><a href="https://www.tomsguide.com/computing/ipads/ipados-27-hands-on-preview">iPadOS 27 hands-on preview: Siri AI and all the big features</a></li></ul><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=tablets&brands=Apple&min_discount_ratio=0.95&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = this.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += this.getRowsLimit();                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');               document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/e-readers/sorry-kindle-but-i-still-prefer-reading-comic-books-on-my-ipad</link>
                                                                            <description>
                            <![CDATA[ Reading comic books on Kindle can be enjoyable, but the experience is more enjoyable on iPads — here's why. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LQaA7fMFHXLsyQ7b8qxJfN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qnqgJC53NXVyfCmKKVC2y5-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 18 Jul 2026 19:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[E-Readers]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Tablets]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD.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/qnqgJC53NXVyfCmKKVC2y5-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Comic books on an iPad Pro 2024]]></media:description>                                                            <media:text><![CDATA[Comic books on an iPad Pro 2024]]></media:text>
                                <media:title type="plain"><![CDATA[Comic books on an iPad Pro 2024]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qnqgJC53NXVyfCmKKVC2y5-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/us/best-e-readers,review-2766.html">best Kindles</a> have been my primary way to read books for the better part of a decade. Thanks to Amazon’s e-reader, I’ve read more books in the past seven years than in the nearly four decades prior. Not only is the device easy to hold and read on, but its integration with the Kindle app and store gives me more books than I could read in a single lifetime.</p><p>Though I adore my Kindles, I don’t read comic books on them. Even after the introduction of the <a href="https://www.tomsguide.com/tablets/e-readers/kindle-colorsoft-review">Kindle Colorsoft</a>, which finally let me read comics in color, I still can’t bring myself to read comics full-time on Amazon's hardware. Why? Because, as a lifelong comic book fan, I get a much better experience on the <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>. Here’s why.</p><h2 id="display-size">Display size</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UHkmwSnbLfaJpaVj6YYqxT" name="iPad Pro M4 comic books-4.jpg" alt="A comic book on an iPad Pro 2024" src="https://cdn.mos.cms.futurecdn.net/UHkmwSnbLfaJpaVj6YYqxT.jpg" mos="" align="middle" fullscreen="" width="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>Digital comic apps like <a href="https://www.tomsguide.com/computing/mobile-apps/marvel-unlimited-heres-the-5-best-classic-comic-books-to-read-first">Marvel Unlimited</a> and DC Universe Infinite offer a guided view mode that zooms in on individual panels and text. This can be immersive, especially for those new to the medium. While guided mode works as advertised, I prefer seeing an entire comic page rather than breaking it up piece by piece.</p><p>On the <a href="https://www.tomsguide.com/tablets/e-readers/kindle-2024-review">base Kindle</a> and <a href="https://www.tomsguide.com/tablets/e-readers/kindle-paperwhite-2024-review">Kindle Paperwhite</a>, you almost have to use guided mode because of their small screens. For comics, I prefer reading on the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro</a>. The 13-inch model’s screen is slightly larger than a physical comic book page. Not only do single pages look fantastic, but double-page spreads look incredible when you rotate the tablet to landscape orientation.</p><p>Another problem with using guided view or pinch-to-zoom on Kindles is the device’s low refresh rate. This causes the e-reader to lag and flash to clear previous image artifacts (ghosting). While this has improved with the latest Kindle models, the refresh rate is still sluggish compared to iPads, which handle panning and zooming instantly and smoothly.</p><p>Returning to screen size, the Kindle Scribe features a roomier 10.2-inch display. While that’s still smaller than the 11-inch iPad Pro and <a href="https://www.tomsguide.com/computing/ipads/apple-ipad-air-m4-review-small-tweaks-to-the-gold-standard">iPad Air</a> models, it’s a good size for reading full comic book pages. There’s a specific reason I don’t use the Scribe for traditional color comics (which I’ll cover next), but for black-and-white manga, it’s legitimately great. However, since I don’t read much manga, that point is mostly moot for me.</p><p>When it comes to reading single pages and double-page spreads of a traditional American comic book, the iPad is simply the way to go.</p><h2 id="colorsoft-is-still-too-muted">Colorsoft is still too muted</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5172px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9B3xTqSpguT2kzFa28Lryn" name="Kindle Scribe Colorsoft (2025) review" alt="Kindle Scribe Colorsoft review unit in action" src="https://cdn.mos.cms.futurecdn.net/9B3xTqSpguT2kzFa28Lryn.jpg" mos="" align="middle" fullscreen="" width="5172" height="2909" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Kindle Colorsoft and <a href="https://www.tomsguide.com/computing/e-readers/kindle-scribe-colorsoft-2025-review">Kindle Scribe Colorsoft</a> are arguably the best color e-readers out there right now. If you mainly read traditional novels, having full-color book covers, maps, and other design elements is a nice perk. Naturally, comics are in color on these devices, but there is one major drawback—the hues are decidedly muted.</p><p>In fairness, muted colors can sometimes be preferable. For instance, if you’re reading older comics printed before the late ‘90s, the e-reader screen delivers an experience closer to reading them on original newsprint, which is much duller than the glossy paper used today. If you’re a comic purist who doesn’t like how vibrant classic comics look on modern paper or on an iPad, you might actually prefer the Colorsoft's presentation.</p><p>With all that said, I want my comics, classic and modern, to look as bright and bold as possible, which is why I prefer the iPad's display. Again, the color Kindles do a decent job, but the presentation is far too washed out for my tastes.</p><h2 id="ecosystems-and-storage">Ecosystems and storage</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:75.00%;"><img id="vea5JJviUmSAQfjRSpMeUD" name="marvel-unlimited.jpg" alt="marvel unlimited comic book reader apps" src="https://cdn.mos.cms.futurecdn.net/vea5JJviUmSAQfjRSpMeUD.jpg" mos="" align="middle" fullscreen="" width="1024" height="768" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Marvel)</span></figcaption></figure><p>iPads give you access to excellent dedicated comic reader apps like Panels and Chunky, along with major subscription platforms like Marvel Unlimited, DC Universe Infinite, and Shonen Jump. Conversely, Kindles mostly confine you to Amazon’s storefront, Comixology, and Kindle Unlimited. Sideloading your own files can also be a chore.</p><p>On that note, if you have a large library of digital comic files (.CBR, .CBZ, and high-res PDFs), you’re going to hit a storage cap much faster on a Kindle than on an iPad. Apple’s tablets offer storage tiers up to 1TB and can easily connect to cloud storage like Google Drive or iCloud to offload your libraries. Kindles top out at 64GB of storage on the Scribe and don’t natively support common comic book formats without converting the files first.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eEqoge"></div>                            </div>                            <script src="https://kwizly.com/embed/eEqoge.js" async></script><h2 id="bottom-line-4">Bottom line</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HBb9cZdUkhtu6c62nxUJWC" name="iPad Pro M4 comic books-5.jpg" alt="Conan the Barbarian comic book on an iPad Pro 2024" src="https://cdn.mos.cms.futurecdn.net/HBb9cZdUkhtu6c62nxUJWC.jpg" mos="" align="middle" fullscreen="" width="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>Don't get me wrong — Kindles still hold the crown for battery life and portability. Throwing a lightweight Paperwhite into a bag for a week-long trip without needing to pack a charger is fantastic, and it remains my go-to choice for novels.</p><p>But while Kindles are perfectly serviceable for most everyday reading, I get a much richer experience reading comics on the iPad. With a larger display for viewing full layouts, bolder colors, and seamless performance, I'll choose Apple's tablet for my graphic novels every single time.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/computing/ipads/first-oled-ipad-mini-tipped-for-october-launch-heres-why-im-excited-and-worried">First OLED iPad mini tipped for October launch — here's why I'm excited (and worried)</a></li><li><a href="https://www.tomsguide.com/best-picks/best-tablet">We've tested the best tablets for entertainment and productivity, and these are the 8 I recommend right now</a></li><li><a href="https://www.tomsguide.com/computing/ipads/ipados-27-hands-on-preview">iPadOS 27 hands-on preview: Siri AI and all the big features</a></li></ul><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=tablets&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[ I tested the ultra-affordable Amazon Ember 4-Series TV and I wasn’t disappointed — here’s how it stacks up ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Amazon Ember 4-Series (2025) is an admirable entry-level TV. The 43-inch and 55-inch models launched at $329 and $459, respectively, and they can now be found for as little as $269 and $379 when they’re on sale. So could the 4-Series be one of the <a href="https://www.tomsguide.com/tvs/best-tvs-under-500">best TVs under $500</a> we’ve ever tested? If you value affordability above all, it could be a contender.</p><p>The general performance of the Ember 4-Series is around what I’d expect given its budget sticker price. However, due to the lack of full-array local dimming, black levels weren’t as dark as I’d have liked, and the TV’s lower brightness threshold hurt the overall contrast.</p><p>It’s not going to make our list of the <a href="https://www.tomsguide.com/us/best-tvs,review-2224.html">best TVs</a> and I wouldn’t recommend the Ember 4-Series for serious home cinema lovers, but for people on a budget, it could be one to watch. To find out why, keep reading my Amazon Ember 4-Series review. </p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-specs"><span>Amazon Ember 4-Series review: Specs</span></h2><div ><table><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p><a href="https://www.amazon.com/Fire-TV-4-Series-43-inch/dp/B0DFNFX2K7" target="_blank" rel="nofollow">$329 (43”) - $459 (55”)</a> / <a href="https://www.amazon.co.uk/fire-tv-4-series/dp/B0DFNB2JCM" target="_blank" rel="nofollow">£439 (43”) - £549 (55”)</a></p></td></tr><tr><td class="firstcol " ><p><strong>Screen size</strong></p></td><td  ><p>43”, 50”, 55”</p></td></tr><tr><td class="firstcol " ><p><strong>Model</strong></p></td><td  ><p>Amazon Ember 4-Series 2025</p></td></tr><tr><td class="firstcol " ><p><strong>Resolution</strong></p></td><td  ><p>3840 x 2160</p></td></tr><tr><td class="firstcol " ><p><strong>HDR</strong></p></td><td  ><p>HDR 10+, HLG</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh rate</strong></p></td><td  ><p>60Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Ports</strong></p></td><td  ><p>3 HDMI 2.0 + 1 HDMI eARC 2.1, 1 x UBC-A, 1 x Optical</p></td></tr><tr><td class="firstcol " ><p><strong>Audio</strong></p></td><td  ><p>2.0 channel</p></td></tr><tr><td class="firstcol " ><p><strong>Smart TV software</strong></p></td><td  ><p>Amazon Fire</p></td></tr><tr><td class="firstcol " ><p><strong>Size (without stand)</strong></p></td><td  ><p>43: 37.7 in x 22.2 in x 3.2 in</p><p>50: 43.7 in x 25.6 in x 3.2 in</p><p>55: 48.3 in x 28.2 in x 3.2 in</p></td></tr><tr><td class="firstcol " ><p><strong>Weight (without stand)</strong></p></td><td  ><p>43: 14.1 lbs</p><p>50: 18.3 lbs</p><p>55: 21.6 lbs</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-amazon-ember-4-series-review-price-availability"><span>Amazon Ember 4-Series review: Price & 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cTLUGSnHNXLVRGpRZHtMeN" name="Amazon Ember 4-Series.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/cTLUGSnHNXLVRGpRZHtMeN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Amazon Ember 4-Series is the second-cheapest TV under Amazon’s belt. The 4-Series (2025) launched at <a href="https://www.amazon.com/Fire-TV-4-Series-43-inch/dp/B0DFNPK1D3" target="_blank" rel="nofollow">$329 for the 43-inch model</a> and <a href="https://www.amazon.com/Fire-TV-4-Series-43-inch/dp/B0DFNFX2K7" target="_blank" rel="nofollow">$459 for the 55-inch</a>. Unlike the Ember QLED, the 4-Series’ biggest size is 55 inches. (Amazon Ember QLED is $479 for 50” and provides a brighter screen — but it’s still not perfect.)</p><p>In the U.K., the Ember 4-Series is <a href="https://www.amazon.co.uk/fire-tv-4-series/dp/B0DFNW3BRR" target="_blank" rel="nofollow">£439 for the 43-incher</a> and <a href="https://www.amazon.co.uk/fire-tv-4-series/dp/B0DFP1VLZ2" target="_blank" rel="nofollow">£549 for 55 inches</a>, but is often on sale for around £300-£400 depending on the model. </p><p>If you’re wondering why your searches for “Amazon Fire TV” only seem to bring up old models, that’s because Amazon recently updated its naming conventions. Amazon TVs are now called “Ember”, not “Fire”. The OS is still called “Fire TV”, though. </p><p>Keep in mind that the Ember 4-Series is a traditional LED-LCD rather than a newer Mini-LED or a QLED. There’s no Mini-LED lighting for higher brightness and better contrast, nor is there a quantum dot filter for more vibrant colors in HDR. If those features sound appealing, you might want to check out the <a href="https://www.tomsguide.com/tvs/qled-tvs/hisense-qd7-qled-tv-review">Hisense QD7</a> ($339 for the 50” QLED) or the <a href="https://www.tomsguide.com/tvs/qled-tvs/samsung-q7f-qled-tv-review">Samsung Q7F</a> ($379 for 43” QLED).</p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-design-and-ports"><span>Amazon Ember 4-Series review: Design and ports</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vkHahc4wLsZuRwGW6a72bN" name="Amazon Ember 4-Series 14.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/vkHahc4wLsZuRwGW6a72bN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Like the Amazon Ember QLED, the 4-Series looks pretty great from an aesthetic perspective for such a cheap TV. It’s just 3 inches deep, has two dual-pronged feet — much closer together than the Ember QLED, so better for smaller TV stands — and an attractive black bezel. </p><p>The ports are hidden on the back of the TV. Here you’ll find four HDMI ports, only one of which is a 2.1 with eARC, so if you’ve got a soundbar and a game console, you’ll need to choose which one gets the 2.1 connection. There’s also an optical port and a USB-A port if you have devices that require those connectivity types. </p><p>Although its limited port selection won’t win any design awards, the Ember 4-Series’ utilitarian functionality does the trick. </p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-how-we-test-tvs"><span>Amazon Ember 4-Series review: How we test TVs </span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="oV562mSqwTFT5pjbszxVeN" name="Amazon Ember 4-Series 8.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/oV562mSqwTFT5pjbszxVeN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We follow a standard testing protocol for every TV we review at Tom’s Guide. Our benchmarks include a series of technical and subject tests designed to rate the set’s performance.</p><p>For technical benchmarking tests, we use a Jeti SpectraVal 1501-HiRes spectroradiometer, a Klein K10-A colorimeter, a Murideo 8K-SIX-G Metal pattern generator. We measure using Portrait Displays’ Calman TV calibration software. </p><p>We use a Leo Bodnar 4K Input Lag Tester to determine whether it’s one of the <a href="https://www.tomsguide.com/tvs/qled-tvs/i-played-tons-of-games-on-tvs-this-year-heres-the-top-gaming-tvs-worth-buying-for-your-ps5-xbox-switch-and-more">best gaming TVs</a>. For a more detailed look at what we do and how we do it, check out our “<a href="https://www.tomsguide.com/us/how-we-test-tvs,review-2478.html">How we test TVs</a>” page. </p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-test-results"><span>Amazon Ember 4-Series review: Test results</span></h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Amazon Ember 4-Series</strong></p></th><th  ><p><strong>Amazon Ember QLED</strong></p></th><th  ><p>Roku Select Series</p></th><th  ><p>Hisense QD7</p></th><th  ><p>Vizio VQM65-C</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>SDR Brightness (10%, in nits)</strong></p></td><td  ><p>304</p></td><td  ><p>439</p></td><td  ><p>335</p></td><td  ><p>402</p></td><td  ><p>789</p></td></tr><tr><td class="firstcol " ><p><strong>Delta-E (lower is better)</strong></p></td><td  ><p>7.1</p></td><td  ><p>4.62</p></td><td  ><p>2.45</p></td><td  ><p>1.75</p></td><td  ><p>4.99</p></td></tr><tr><td class="firstcol " ><p><strong>Rec. 709 Gamut Coverage</strong></p></td><td  ><p>99.3%</p></td><td  ><p>99.8%</p></td><td  ><p>93.85%</p></td><td  ><p>99.56%</p></td><td  ><p>97.87%</p></td></tr><tr><td class="firstcol " ><p><strong>HDR Brightness (10%, in nits)</strong></p></td><td  ><p>287</p></td><td  ><p>251</p></td><td  ><p>335</p></td><td  ><p>659</p></td><td  ><p>779</p></td></tr><tr><td class="firstcol " ><p><strong>UHDA-P3 Gamut Coverage</strong></p></td><td  ><p>94.10%</p></td><td  ><p>96.19%</p></td><td  ><p>91.59%</p></td><td  ><p>94.33%</p></td><td  ><p>92.89%</p></td></tr><tr><td class="firstcol " ><p><strong>Rec. 2020 Gamut Coverage</strong></p></td><td  ><p>70.13%</p></td><td  ><p>72.31%</p></td><td  ><p>72.36%</p></td><td  ><p>74.73%</p></td><td  ><p>71.34%</p></td></tr><tr><td class="firstcol " ><p><strong>Input latency (in milliseconds)</strong></p></td><td  ><p>13</p></td><td  ><p>13</p></td><td  ><p>9.6</p></td><td  ><p>9.4</p></td><td  ><p>9.9</p></td></tr></tbody></table></div><p>The Ember 4-Series outputs only 304 nits in SDR and a measly 287 nits in HDR. The Delta-E score (color accuracy) was 7.1, which is pretty poor. </p><p>Compared to the more advanced Amazon Ember QLED, the 4-Series is going to be dimmer in SDR and will have noticeably skewed colors. This demonstrates exactly why QLED TVs have become so popular in the last few years — they offer better brightness and color. </p><p>If you’re willing to spend a bit more on the Hisense QD7, you’ll see a significant improvement across the board. Shows and movies recorded in HDR will look much punchier on the Hisense thanks to its higher peak brightness (659 nits vs 287 on the 4-Series) and better contrast.</p><p>If you’re a home cinema enthusiast, I don’t think you’d be overly impressed with the Amazon Ember 4-Series — but for the most casual of viewers, it’s not the worst TV we’ve ever tested.</p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-performance"><span>Amazon Ember 4-Series review: 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fbzQT6zDwJWHmexFSCwVKN" name="Amazon Ember 4-Series 16.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/fbzQT6zDwJWHmexFSCwVKN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I expected to dislike the Ember 4-Series based on the test results, but I actually enjoyed using this TV during my subjective tests. </p><p>When watching “Top Gun: Maverick” on 4K Blu-ray, colors were bright in outdoor scenes, but a little dim in indoor scenes. Blues look particularly vibrant on the 4-Series, so images of clear skies were standouts. </p><p>Scenes with a lot of warm colors — like the beach football scene — appeared a little washed out, especially when compared to the blue ocean. The TV has much better saturation for cooler colors. </p><p>I noticed a lot of motion smoothing and ghosting during dogfighting scenes in “Top Gun: Maverick” — it made me feel a little motion sick in some long sequences — but this wasn’t noticeable while watching TV on Netflix. </p><p>Speaking of TV, I also watched “Yellowjackets.” The snow scenes looked great, and I didn’t notice any white blooming. The colors looked striking in a dark room, but in daylight, warm tones especially had a tendency to undersaturate. </p><p>Gaming might be an issue if you play demanding games; the max refresh rate is 60Hz, so you might want to spend more on a 120Hz TV if that’s the most important area to you.</p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-audio"><span>Amazon Ember 4-Series review: Audio</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MYXvLPNLKdCXvAzZLajeNN" name="Amazon Ember 4-Series 13.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/MYXvLPNLKdCXvAzZLajeNN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Ember 4-Series has two 10W speakers. I would best describe this sound as “thin” and possibly also “tinny”. As someone who’s been using a soundbar for years now, I don’t think I could ever go back to standard TV speakers. </p><p>You don’t have to spend a lot to get a great-sounding soundbar. One of the best soundbars we’ve tested, the <a href="https://www.tomsguide.com/audio/soundbars/sony-ht-s100f-review">Sony HT-S100F</a> is $99 (often on sale) and has fantastic clarity and a rich sound profile.</p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-interface-and-apps"><span>Amazon Ember 4-Series review: Interface and apps</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="doXqJZEfcHGkuyYrRM7nbN" name="Amazon Ember 4-Series 11.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/doXqJZEfcHGkuyYrRM7nbN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As we all know, Amazon Fire TV interface is incredibly easy to use. However, I did notice it took longer to respond on the Ember QLED compared to a dedicated streaming stick., </p><p>Sometimes, title cards didn’t load for a few seconds and when apps loaded, they could be a little jerky. This is something I’ve found with a variety of Fire-powered TVs — my old Toshiba and my parents’ old Panasonic also suffer from this. </p><p>One of the biggest upgrades from previous Fire TV models is the updated Alexa+ functionality. With the purchase of the TV, you get a year of free Alexa+. When I asked, “Show me a high school drama”, it obeyed. Easy commands like “sci-fi movie” and “thriller TV series” bring up a range of suggestions. </p><p>Better still, if you have more Amazon devices like the Amazon Echo Studio or Amazon Echo Dot, you can link the TV up with them and they will behave as an external speaker.</p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-remote"><span>Amazon Ember 4-Series review: Remote</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9ugLWyLaXQTxxsHfZnMwaM" name="Amazon Ember 4-Series 9.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/9ugLWyLaXQTxxsHfZnMwaM.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As with every other Amazon TV, you get the classic ‘Fire TV’ remote. It’s easy to hold and is long and slender. There are four buttons on the bottom: <a href="https://www.tomsguide.com/reviews/disney-plus">Disney+</a>, <a href="https://www.tomsguide.com/uk/entertainment/streaming/netflix">Netflix</a>, Freely, and <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a>. I wish one of these could be programmable, however. On other platforms, this is a common feature, and I usually configure the remote to quick-start YouTube. </p><p>The remote uses two AAA batteries, so not as innovative as Samsung’s solar-powered remotes, but it’s not a deal-breaker at this price point. </p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-verdict"><span>Amazon Ember 4-Series review: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gZpaSHbfSisYfEJeLwJExM" name="Amazon Ember 4-Series 7.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/gZpaSHbfSisYfEJeLwJExM.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Even though the Amazon Ember 4-Series didn’t perform well in our benchmarking tests, I actually think it’s a decent budget option. In 4K Blu-rays, I noticed a few issues with motion handling and color accuracy; however, when I was watching TV on Netflix and YouTube, the performance was great.</p><p>If you’re on a serious budget and want a 55-inch screen for well under $500, there are some other options like the <a href="https://www.tomsguide.com/tvs/qled-tvs/hisense-qd7-qled-tv-review">Hisense QD7</a>. It’s more expensive, but it offers both quantum dot colors and better overall brightness. </p><p>Still, if price is the ultimate factor in your buying decision, I still recommend the Ember 4-Series. Those looking for an entry-level, easy-to-use model with a huge variety of downloadable apps and built-in Alexa will find it here. </p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/tvs/amazon-ember-4-series-review</link>
                                                                            <description>
                            <![CDATA[ Although it’s not as bright or color-accurate as pricier alternatives, for around $300, the Amazon Ember 4-Series is a decent option. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">7Z9JRG3oY9GEsNmHNehchh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/zP9UyaHq8ZhJBzNx6FQGKN-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 15 Jul 2026 11:26:05 +0000</pubDate>                                                                                                                                <updated>Wed, 15 Jul 2026 13:45:22 +0000</updated>
                                                                                                                                            <category><![CDATA[TVs]]></category>
                                                                                                <author><![CDATA[ erin.bashford@futurenet.com (Erin Bashford) ]]></author>                    <dc:creator><![CDATA[ Erin Bashford ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/rLvJvJVZx43hEzSsJy3BpL.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Erin Bashford is a senior reviews writer at Tom’s Guide. She has a Master’s in Broadcast and Digital Journalism from the University of East Anglia and 7 years of experience reviewing music and events for various publications. She has edited publications such as Outline Magazine’s Guide to Norwich, and she has written for a number of music magazines and websites such as Clash Magazine, Outline Magazine and Dork Magazine. She has a strong interest in audio gear and the music world. &lt;/p&gt;&lt;p&gt;As an ex-barista, Erin is passionate about coffee tech. She also loves finding the best cooking hacks and kitchen appliances, including her beloved Instant Pot. &lt;/p&gt;&lt;p&gt;In her spare time, you can find her reading, practising yoga, hiking, writing fantasy novels, or stressing over NYT Games.&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/zP9UyaHq8ZhJBzNx6FQGKN-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[the amazon ember 4-series TV photographed against the blue tom&#039;s guide background]]></media:description>                                                            <media:text><![CDATA[the amazon ember 4-series TV photographed against the blue tom&#039;s guide background]]></media:text>
                                <media:title type="plain"><![CDATA[the amazon ember 4-series TV photographed against the blue tom&#039;s guide background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/zP9UyaHq8ZhJBzNx6FQGKN-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Amazon Ember 4-Series (2025) is an admirable entry-level TV. The 43-inch and 55-inch models launched at $329 and $459, respectively, and they can now be found for as little as $269 and $379 when they’re on sale. So could the 4-Series be one of the <a href="https://www.tomsguide.com/tvs/best-tvs-under-500">best TVs under $500</a> we’ve ever tested? If you value affordability above all, it could be a contender.</p><p>The general performance of the Ember 4-Series is around what I’d expect given its budget sticker price. However, due to the lack of full-array local dimming, black levels weren’t as dark as I’d have liked, and the TV’s lower brightness threshold hurt the overall contrast.</p><p>It’s not going to make our list of the <a href="https://www.tomsguide.com/us/best-tvs,review-2224.html">best TVs</a> and I wouldn’t recommend the Ember 4-Series for serious home cinema lovers, but for people on a budget, it could be one to watch. To find out why, keep reading my Amazon Ember 4-Series review. </p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-specs"><span>Amazon Ember 4-Series review: Specs</span></h2><div ><table><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p><a href="https://www.amazon.com/Fire-TV-4-Series-43-inch/dp/B0DFNFX2K7" target="_blank" rel="nofollow">$329 (43”) - $459 (55”)</a> / <a href="https://www.amazon.co.uk/fire-tv-4-series/dp/B0DFNB2JCM" target="_blank" rel="nofollow">£439 (43”) - £549 (55”)</a></p></td></tr><tr><td class="firstcol " ><p><strong>Screen size</strong></p></td><td  ><p>43”, 50”, 55”</p></td></tr><tr><td class="firstcol " ><p><strong>Model</strong></p></td><td  ><p>Amazon Ember 4-Series 2025</p></td></tr><tr><td class="firstcol " ><p><strong>Resolution</strong></p></td><td  ><p>3840 x 2160</p></td></tr><tr><td class="firstcol " ><p><strong>HDR</strong></p></td><td  ><p>HDR 10+, HLG</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh rate</strong></p></td><td  ><p>60Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Ports</strong></p></td><td  ><p>3 HDMI 2.0 + 1 HDMI eARC 2.1, 1 x UBC-A, 1 x Optical</p></td></tr><tr><td class="firstcol " ><p><strong>Audio</strong></p></td><td  ><p>2.0 channel</p></td></tr><tr><td class="firstcol " ><p><strong>Smart TV software</strong></p></td><td  ><p>Amazon Fire</p></td></tr><tr><td class="firstcol " ><p><strong>Size (without stand)</strong></p></td><td  ><p>43: 37.7 in x 22.2 in x 3.2 in</p><p>50: 43.7 in x 25.6 in x 3.2 in</p><p>55: 48.3 in x 28.2 in x 3.2 in</p></td></tr><tr><td class="firstcol " ><p><strong>Weight (without stand)</strong></p></td><td  ><p>43: 14.1 lbs</p><p>50: 18.3 lbs</p><p>55: 21.6 lbs</p></td></tr></tbody></table></div><h2 class="article-body__section" id="section-amazon-ember-4-series-review-price-availability"><span>Amazon Ember 4-Series review: Price & 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cTLUGSnHNXLVRGpRZHtMeN" name="Amazon Ember 4-Series.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/cTLUGSnHNXLVRGpRZHtMeN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Amazon Ember 4-Series is the second-cheapest TV under Amazon’s belt. The 4-Series (2025) launched at <a href="https://www.amazon.com/Fire-TV-4-Series-43-inch/dp/B0DFNPK1D3" target="_blank" rel="nofollow">$329 for the 43-inch model</a> and <a href="https://www.amazon.com/Fire-TV-4-Series-43-inch/dp/B0DFNFX2K7" target="_blank" rel="nofollow">$459 for the 55-inch</a>. Unlike the Ember QLED, the 4-Series’ biggest size is 55 inches. (Amazon Ember QLED is $479 for 50” and provides a brighter screen — but it’s still not perfect.)</p><p>In the U.K., the Ember 4-Series is <a href="https://www.amazon.co.uk/fire-tv-4-series/dp/B0DFNW3BRR" target="_blank" rel="nofollow">£439 for the 43-incher</a> and <a href="https://www.amazon.co.uk/fire-tv-4-series/dp/B0DFP1VLZ2" target="_blank" rel="nofollow">£549 for 55 inches</a>, but is often on sale for around £300-£400 depending on the model. </p><p>If you’re wondering why your searches for “Amazon Fire TV” only seem to bring up old models, that’s because Amazon recently updated its naming conventions. Amazon TVs are now called “Ember”, not “Fire”. The OS is still called “Fire TV”, though. </p><p>Keep in mind that the Ember 4-Series is a traditional LED-LCD rather than a newer Mini-LED or a QLED. There’s no Mini-LED lighting for higher brightness and better contrast, nor is there a quantum dot filter for more vibrant colors in HDR. If those features sound appealing, you might want to check out the <a href="https://www.tomsguide.com/tvs/qled-tvs/hisense-qd7-qled-tv-review">Hisense QD7</a> ($339 for the 50” QLED) or the <a href="https://www.tomsguide.com/tvs/qled-tvs/samsung-q7f-qled-tv-review">Samsung Q7F</a> ($379 for 43” QLED).</p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-design-and-ports"><span>Amazon Ember 4-Series review: Design and ports</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vkHahc4wLsZuRwGW6a72bN" name="Amazon Ember 4-Series 14.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/vkHahc4wLsZuRwGW6a72bN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Like the Amazon Ember QLED, the 4-Series looks pretty great from an aesthetic perspective for such a cheap TV. It’s just 3 inches deep, has two dual-pronged feet — much closer together than the Ember QLED, so better for smaller TV stands — and an attractive black bezel. </p><p>The ports are hidden on the back of the TV. Here you’ll find four HDMI ports, only one of which is a 2.1 with eARC, so if you’ve got a soundbar and a game console, you’ll need to choose which one gets the 2.1 connection. There’s also an optical port and a USB-A port if you have devices that require those connectivity types. </p><p>Although its limited port selection won’t win any design awards, the Ember 4-Series’ utilitarian functionality does the trick. </p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-how-we-test-tvs"><span>Amazon Ember 4-Series review: How we test TVs </span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="oV562mSqwTFT5pjbszxVeN" name="Amazon Ember 4-Series 8.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/oV562mSqwTFT5pjbszxVeN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We follow a standard testing protocol for every TV we review at Tom’s Guide. Our benchmarks include a series of technical and subject tests designed to rate the set’s performance.</p><p>For technical benchmarking tests, we use a Jeti SpectraVal 1501-HiRes spectroradiometer, a Klein K10-A colorimeter, a Murideo 8K-SIX-G Metal pattern generator. We measure using Portrait Displays’ Calman TV calibration software. </p><p>We use a Leo Bodnar 4K Input Lag Tester to determine whether it’s one of the <a href="https://www.tomsguide.com/tvs/qled-tvs/i-played-tons-of-games-on-tvs-this-year-heres-the-top-gaming-tvs-worth-buying-for-your-ps5-xbox-switch-and-more">best gaming TVs</a>. For a more detailed look at what we do and how we do it, check out our “<a href="https://www.tomsguide.com/us/how-we-test-tvs,review-2478.html">How we test TVs</a>” page. </p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-test-results"><span>Amazon Ember 4-Series review: Test results</span></h2><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>Amazon Ember 4-Series</strong></p></th><th  ><p><strong>Amazon Ember QLED</strong></p></th><th  ><p>Roku Select Series</p></th><th  ><p>Hisense QD7</p></th><th  ><p>Vizio VQM65-C</p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>SDR Brightness (10%, in nits)</strong></p></td><td  ><p>304</p></td><td  ><p>439</p></td><td  ><p>335</p></td><td  ><p>402</p></td><td  ><p>789</p></td></tr><tr><td class="firstcol " ><p><strong>Delta-E (lower is better)</strong></p></td><td  ><p>7.1</p></td><td  ><p>4.62</p></td><td  ><p>2.45</p></td><td  ><p>1.75</p></td><td  ><p>4.99</p></td></tr><tr><td class="firstcol " ><p><strong>Rec. 709 Gamut Coverage</strong></p></td><td  ><p>99.3%</p></td><td  ><p>99.8%</p></td><td  ><p>93.85%</p></td><td  ><p>99.56%</p></td><td  ><p>97.87%</p></td></tr><tr><td class="firstcol " ><p><strong>HDR Brightness (10%, in nits)</strong></p></td><td  ><p>287</p></td><td  ><p>251</p></td><td  ><p>335</p></td><td  ><p>659</p></td><td  ><p>779</p></td></tr><tr><td class="firstcol " ><p><strong>UHDA-P3 Gamut Coverage</strong></p></td><td  ><p>94.10%</p></td><td  ><p>96.19%</p></td><td  ><p>91.59%</p></td><td  ><p>94.33%</p></td><td  ><p>92.89%</p></td></tr><tr><td class="firstcol " ><p><strong>Rec. 2020 Gamut Coverage</strong></p></td><td  ><p>70.13%</p></td><td  ><p>72.31%</p></td><td  ><p>72.36%</p></td><td  ><p>74.73%</p></td><td  ><p>71.34%</p></td></tr><tr><td class="firstcol " ><p><strong>Input latency (in milliseconds)</strong></p></td><td  ><p>13</p></td><td  ><p>13</p></td><td  ><p>9.6</p></td><td  ><p>9.4</p></td><td  ><p>9.9</p></td></tr></tbody></table></div><p>The Ember 4-Series outputs only 304 nits in SDR and a measly 287 nits in HDR. The Delta-E score (color accuracy) was 7.1, which is pretty poor. </p><p>Compared to the more advanced Amazon Ember QLED, the 4-Series is going to be dimmer in SDR and will have noticeably skewed colors. This demonstrates exactly why QLED TVs have become so popular in the last few years — they offer better brightness and color. </p><p>If you’re willing to spend a bit more on the Hisense QD7, you’ll see a significant improvement across the board. Shows and movies recorded in HDR will look much punchier on the Hisense thanks to its higher peak brightness (659 nits vs 287 on the 4-Series) and better contrast.</p><p>If you’re a home cinema enthusiast, I don’t think you’d be overly impressed with the Amazon Ember 4-Series — but for the most casual of viewers, it’s not the worst TV we’ve ever tested.</p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-performance"><span>Amazon Ember 4-Series review: 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fbzQT6zDwJWHmexFSCwVKN" name="Amazon Ember 4-Series 16.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/fbzQT6zDwJWHmexFSCwVKN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I expected to dislike the Ember 4-Series based on the test results, but I actually enjoyed using this TV during my subjective tests. </p><p>When watching “Top Gun: Maverick” on 4K Blu-ray, colors were bright in outdoor scenes, but a little dim in indoor scenes. Blues look particularly vibrant on the 4-Series, so images of clear skies were standouts. </p><p>Scenes with a lot of warm colors — like the beach football scene — appeared a little washed out, especially when compared to the blue ocean. The TV has much better saturation for cooler colors. </p><p>I noticed a lot of motion smoothing and ghosting during dogfighting scenes in “Top Gun: Maverick” — it made me feel a little motion sick in some long sequences — but this wasn’t noticeable while watching TV on Netflix. </p><p>Speaking of TV, I also watched “Yellowjackets.” The snow scenes looked great, and I didn’t notice any white blooming. The colors looked striking in a dark room, but in daylight, warm tones especially had a tendency to undersaturate. </p><p>Gaming might be an issue if you play demanding games; the max refresh rate is 60Hz, so you might want to spend more on a 120Hz TV if that’s the most important area to you.</p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-audio"><span>Amazon Ember 4-Series review: Audio</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MYXvLPNLKdCXvAzZLajeNN" name="Amazon Ember 4-Series 13.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/MYXvLPNLKdCXvAzZLajeNN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Ember 4-Series has two 10W speakers. I would best describe this sound as “thin” and possibly also “tinny”. As someone who’s been using a soundbar for years now, I don’t think I could ever go back to standard TV speakers. </p><p>You don’t have to spend a lot to get a great-sounding soundbar. One of the best soundbars we’ve tested, the <a href="https://www.tomsguide.com/audio/soundbars/sony-ht-s100f-review">Sony HT-S100F</a> is $99 (often on sale) and has fantastic clarity and a rich sound profile.</p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-interface-and-apps"><span>Amazon Ember 4-Series review: Interface and apps</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="doXqJZEfcHGkuyYrRM7nbN" name="Amazon Ember 4-Series 11.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/doXqJZEfcHGkuyYrRM7nbN.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As we all know, Amazon Fire TV interface is incredibly easy to use. However, I did notice it took longer to respond on the Ember QLED compared to a dedicated streaming stick., </p><p>Sometimes, title cards didn’t load for a few seconds and when apps loaded, they could be a little jerky. This is something I’ve found with a variety of Fire-powered TVs — my old Toshiba and my parents’ old Panasonic also suffer from this. </p><p>One of the biggest upgrades from previous Fire TV models is the updated Alexa+ functionality. With the purchase of the TV, you get a year of free Alexa+. When I asked, “Show me a high school drama”, it obeyed. Easy commands like “sci-fi movie” and “thriller TV series” bring up a range of suggestions. </p><p>Better still, if you have more Amazon devices like the Amazon Echo Studio or Amazon Echo Dot, you can link the TV up with them and they will behave as an external speaker.</p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-remote"><span>Amazon Ember 4-Series review: Remote</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9ugLWyLaXQTxxsHfZnMwaM" name="Amazon Ember 4-Series 9.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/9ugLWyLaXQTxxsHfZnMwaM.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As with every other Amazon TV, you get the classic ‘Fire TV’ remote. It’s easy to hold and is long and slender. There are four buttons on the bottom: <a href="https://www.tomsguide.com/reviews/disney-plus">Disney+</a>, <a href="https://www.tomsguide.com/uk/entertainment/streaming/netflix">Netflix</a>, Freely, and <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a>. I wish one of these could be programmable, however. On other platforms, this is a common feature, and I usually configure the remote to quick-start YouTube. </p><p>The remote uses two AAA batteries, so not as innovative as Samsung’s solar-powered remotes, but it’s not a deal-breaker at this price point. </p><h2 class="article-body__section" id="section-amazon-ember-4-series-review-verdict"><span>Amazon Ember 4-Series review: Verdict</span></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gZpaSHbfSisYfEJeLwJExM" name="Amazon Ember 4-Series 7.JPG" alt="the amazon ember 4-series TV photographed against the blue tom's guide background" src="https://cdn.mos.cms.futurecdn.net/gZpaSHbfSisYfEJeLwJExM.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Even though the Amazon Ember 4-Series didn’t perform well in our benchmarking tests, I actually think it’s a decent budget option. In 4K Blu-rays, I noticed a few issues with motion handling and color accuracy; however, when I was watching TV on Netflix and YouTube, the performance was great.</p><p>If you’re on a serious budget and want a 55-inch screen for well under $500, there are some other options like the <a href="https://www.tomsguide.com/tvs/qled-tvs/hisense-qd7-qled-tv-review">Hisense QD7</a>. It’s more expensive, but it offers both quantum dot colors and better overall brightness. </p><p>Still, if price is the ultimate factor in your buying decision, I still recommend the Ember 4-Series. Those looking for an entry-level, easy-to-use model with a huge variety of downloadable apps and built-in Alexa will find it here. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Nintendo's Switch 2 price hike is less than 7 weeks away, but this Prime Day deal lets you save big ]]></title>
                                                                                                <dc:content><![CDATA[ <p>While consoles used to get cheaper a year or two into their life cycle, this generation’s gone the other way. RAM and component shortages have pushed manufacturers to raise prices instead of drop them, which makes any genuine saving on new hardware feel a lot sweeter than it used to.</p><p>This <a href="https://www.amazon.com.au/dp/B0FB33FW8J" target="_blank">Nintendo Switch 2 deal for Prime Day</a> is a good example — the console’s down to <a href="https://www.amazon.com.au/dp/B0FB33FW8J">AU$624</a>, beating the EOFY price of AU$629 and sitting well below its usual AU$699.95. It’s a modest discount on paper, but the timing matters: Nintendo plans to lift the Switch 2 to AU$769.95 on September 1.</p><p>That means grabbing it now saves you AU$145.95 compared to its upcoming price, and right now AU$624 is the lowest Switch 2 price we’ve seen.</p><p>Whether another sale pops up before September is anyone’s guess, but this is a straightforward chance to lock in the cheapest price before the hike.</p><div class="product"><a data-dimension112="95383ca0-7c13-11f1-b183-19fada43bd42" data-action="Deal Block" data-label="Switch 2" data-dimension48="Switch 2" data-dimension25="$624" href="https://www.amazon.com.au/dp/B0FB33FW8J" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="LtAkZvsaYgnMPNNj9PuvEU" name="nintendo switch 2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LtAkZvsaYgnMPNNj9PuvEU.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Right now, Amazon has discounted the Nintendo Switch 2 by AU$75.95 for Prime Day, bringing it down to AU$624 — Amazon's lowest price on the console to date. That may seem like a small discount now, but with the console's price set to increase to AU$769.95 from September 1, that makes its current price a whopping AU$145.95 more affordable than it will be in a few months time. <a class="view-deal button" href="https://www.amazon.com.au/dp/B0FB33FW8J" target="_blank" rel="nofollow" data-dimension112="95383ca0-7c13-11f1-b183-19fada43bd42" data-action="Deal Block" data-label="Switch 2" data-dimension48="Switch 2" data-dimension25="$624">View Deal</a></p></div><p>As someone who bought his Switch 2 at launch, I can say that the handheld/console hybrid is really coming into its own now that we're over a year into its life cycle. </p><p>Its growing library of games has some genuine first-party bangers in it, like <a href="https://www.tomsguide.com/gaming/nintendo/star-fox-review">Star Fox</a>, <a href="https://www.tomsguide.com/gaming/nintendo/donkey-kong-bananza-review">Donkey Kong Bananza</a> and <a href="https://www.tomsguide.com/gaming/i-played-metroid-prime-4-and-this-switch-2-shooter-was-absolutely-worth-the-wait">Metroid Prime 4: Beyond</a>, and we have <a href="https://www.tomsguide.com/gaming/splatoon-raiders-combines-ink-splatting-and-treasure-hunting-and-im-already-hooked">Splatoon Raiders</a> arriving later this month. Additionally, developers are squeezing some terrific performance out of the Switch 2 on third-party titles like <a href="https://www.tomsguide.com/gaming/nintendo/i-just-played-final-fantasy-vii-rebirth-on-switch-2-and-this-huge-rpg-pushes-nintendos-hybrid-console-to-its-limit">Final Fantasy VII Rebirth</a> and <a href="https://www.tomsguide.com/gaming/ive-played-pragmata-on-ps5-pro-and-nintendo-switch-2-and-its-a-must-play-on-both">Pragmata</a>.</p><p>Seriously, you don’t want to sit this one out — it’s the best Switch 2 deal we’ve seen so far, and once the price hike lands, waiting will feel like a mistake.</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/gaming/nintendo/nintendo-switch-2-console-review">Nintendo Switch 2 review — no gimmicks here, just a fantastic hybrid console</a></li><li><a href="https://www.tomsguide.com/gaming/a-playstation-6-without-a-disc-drive-im-done-with-sony">A PlayStation 6 without a disc drive? I’m done with Sony</a></li><li><a href="https://www.tomsguide.com/news/live/gta-6-pre-orders-news-and-live-updates">Here’s how to secure your copy of Grand Theft Auto VI today</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/nintendo/nintendos-switch-2-price-hike-is-less-than-7-weeks-away-but-this-prime-day-deal-lets-you-save-big</link>
                                                                            <description>
                            <![CDATA[ Nintendo's jacking up the Switch 2 price in September, but you can still score a sweet discount on the old price if you're quick ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Txw9Lp3Mw8BuFRN8eefTZU</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/a7pGjNup549RCzoXCBqc45-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 10 Jul 2026 04:35:46 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Nintendo]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Stephen Lambrechts ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/JN3jEQpqyyt32as8AJJqXe.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Stephen Lambrechts is the Managing Editor of Tom&#039;s Guide AU and has written professionally across the categories of tech, film, television and gaming for the last 15 years. Before Tom&#039;s Guide, he spent several years as a Senior Journalist at TechRadar, had a brief stint as Editor in Chief at Official Xbox Magazine Australia, and worked at IGN. He&#039;s also written for such mags and sites as APC, TechLife Australia, T3, FilmInk, Daily Telegraph and AskMen. Additionally, he&#039;s a Tomatometer-approved critic on Rotten Tomatoes, and has offered his tech advice on radio and television.&lt;/p&gt;&lt;p&gt;He&#039;s an expert when it comes to smartphones, TVs, gaming and streaming, having contributed many reviews in each of those categories over the years. Despite his many articles on streaming, he&#039;s a passionate collector of physical media who enjoys listening to vinyl records and acquiring obscure horror movies from the &#039;60s, &#039;70s and 80s. He can usually be seen rocking the latest retro sneaker releases, particularly Air Jordans and Reebok Pumps. Occasionally, he also indulges in other non-hipster stuff, like hiking.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/a7pGjNup549RCzoXCBqc45-1280-80.jpg">
                                                            <media:credit><![CDATA[Future/Nintendo]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Nintendo Switch 2 with Mario ]]></media:description>                                                            <media:text><![CDATA[Nintendo Switch 2 with Mario ]]></media:text>
                                <media:title type="plain"><![CDATA[Nintendo Switch 2 with Mario ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/a7pGjNup549RCzoXCBqc45-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>While consoles used to get cheaper a year or two into their life cycle, this generation’s gone the other way. RAM and component shortages have pushed manufacturers to raise prices instead of drop them, which makes any genuine saving on new hardware feel a lot sweeter than it used to.</p><p>This <a href="https://www.amazon.com.au/dp/B0FB33FW8J" target="_blank">Nintendo Switch 2 deal for Prime Day</a> is a good example — the console’s down to <a href="https://www.amazon.com.au/dp/B0FB33FW8J">AU$624</a>, beating the EOFY price of AU$629 and sitting well below its usual AU$699.95. It’s a modest discount on paper, but the timing matters: Nintendo plans to lift the Switch 2 to AU$769.95 on September 1.</p><p>That means grabbing it now saves you AU$145.95 compared to its upcoming price, and right now AU$624 is the lowest Switch 2 price we’ve seen.</p><p>Whether another sale pops up before September is anyone’s guess, but this is a straightforward chance to lock in the cheapest price before the hike.</p><div class="product"><a data-dimension112="95383ca0-7c13-11f1-b183-19fada43bd42" data-action="Deal Block" data-label="Switch 2" data-dimension48="Switch 2" data-dimension25="$624" href="https://www.amazon.com.au/dp/B0FB33FW8J" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="LtAkZvsaYgnMPNNj9PuvEU" name="nintendo switch 2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LtAkZvsaYgnMPNNj9PuvEU.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Right now, Amazon has discounted the Nintendo Switch 2 by AU$75.95 for Prime Day, bringing it down to AU$624 — Amazon's lowest price on the console to date. That may seem like a small discount now, but with the console's price set to increase to AU$769.95 from September 1, that makes its current price a whopping AU$145.95 more affordable than it will be in a few months time. <a class="view-deal button" href="https://www.amazon.com.au/dp/B0FB33FW8J" target="_blank" rel="nofollow" data-dimension112="95383ca0-7c13-11f1-b183-19fada43bd42" data-action="Deal Block" data-label="Switch 2" data-dimension48="Switch 2" data-dimension25="$624">View Deal</a></p></div><p>As someone who bought his Switch 2 at launch, I can say that the handheld/console hybrid is really coming into its own now that we're over a year into its life cycle. </p><p>Its growing library of games has some genuine first-party bangers in it, like <a href="https://www.tomsguide.com/gaming/nintendo/star-fox-review">Star Fox</a>, <a href="https://www.tomsguide.com/gaming/nintendo/donkey-kong-bananza-review">Donkey Kong Bananza</a> and <a href="https://www.tomsguide.com/gaming/i-played-metroid-prime-4-and-this-switch-2-shooter-was-absolutely-worth-the-wait">Metroid Prime 4: Beyond</a>, and we have <a href="https://www.tomsguide.com/gaming/splatoon-raiders-combines-ink-splatting-and-treasure-hunting-and-im-already-hooked">Splatoon Raiders</a> arriving later this month. Additionally, developers are squeezing some terrific performance out of the Switch 2 on third-party titles like <a href="https://www.tomsguide.com/gaming/nintendo/i-just-played-final-fantasy-vii-rebirth-on-switch-2-and-this-huge-rpg-pushes-nintendos-hybrid-console-to-its-limit">Final Fantasy VII Rebirth</a> and <a href="https://www.tomsguide.com/gaming/ive-played-pragmata-on-ps5-pro-and-nintendo-switch-2-and-its-a-must-play-on-both">Pragmata</a>.</p><p>Seriously, you don’t want to sit this one out — it’s the best Switch 2 deal we’ve seen so far, and once the price hike lands, waiting will feel like a mistake.</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/gaming/nintendo/nintendo-switch-2-console-review">Nintendo Switch 2 review — no gimmicks here, just a fantastic hybrid console</a></li><li><a href="https://www.tomsguide.com/gaming/a-playstation-6-without-a-disc-drive-im-done-with-sony">A PlayStation 6 without a disc drive? I’m done with Sony</a></li><li><a href="https://www.tomsguide.com/news/live/gta-6-pre-orders-news-and-live-updates">Here’s how to secure your copy of Grand Theft Auto VI today</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget fad appliances — I’ve found 24 Prime Day discounts on kitchen accessories & utensils that will streamline your culinary creations ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I love my kitchen, but there are some days when I want to replace every single utensil I own. I'm talking mismatched cutlery and crockery, a hard-to-clean stainless steel pan, and some ageing kitchen scales that have served me and my baking skills well over the last few years. </p><p>Upgrades like these are ones I've been putting off, simply because I don't have the means to replace everything. And I'm sure most of us would agree that it's easier to shove an old can opener or chipped plate back into the kitchen drawer than try to find a replacement. </p><p>Thankfully, it's <a href="https://www.tomsguide.com/live/news/amazon-prime-day-2026-au" target="_blank">Prime Day</a>, and I've found 24 discounts on kitchen accessories, utensils and small appliances that will upgrade your kitchen for under AU$150 on Amazon. Granted, there's one item on this list — <a href="https://www.amazon.com.au/dp/B07QCD5QX2/ref=sspa_dk_detail_0" target="_blank">namely, the Corelle Portofino 18-piece dinner set</a> — that is a bit above this price, at AU$159.20; however, I've had my eye on it for a while, and it's finally within my reach at AU$40 off RRP. And for an 18-piece set, that's only AU$8.80 per piece, which is a big win in my books. </p><p>Another great deal I've spotted is on <a href="https://www.amazon.com.au/Shark-Cordfree-Handheld-WV203-Graphite/dp/B07X82QCY7/" target="_blank">Shark's Cordfree Handheld vacuum, now AU$135.85</a>. While it may be a bit odd to put on a kitchen deals round up, I swear by my handheld vacuum for all the teeny crumbs and coffee grinds in my kitchen. Trust me, it is <em>life-changing</em>. </p><p>Don't just take my word for it, though — all these products come with 4+ star ratings, including those of my colleagues at Tom's Guide. Better yet, these deals are exclusive to Prime members, and if you're not signed up already, you can get a <a href="https://www.amazon.com.au/tryprimefree" target="_blank">free 30-day trial here</a>. You'll need to act fast to nab any of these kitchen deals, though, as they will expire on <strong>Monday, July 13, at 11:59pm. </strong></p>        <div class="featured_product_block featured_block_hero" data-id="ee965c88-7c08-11f1-a318-d1b673bf5819">            <a href="https://www.amazon.com.au/Wireless-Thermometer-INT-11I-B-Bluetooth-Waterproof/dp/B0F3XHR5Q6" data-model-name="Mini Wireless Meat Thermometer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/GDpGqAWeoHB669CnbKsU7g.jpg" alt="Inkbird Mini Wireless Meat Thermometer Int-11i-B Bluetooth 5.4 Bbq Food Probe Ip67 Waterproof Led Display for Bbq Grill Oven Smoker Outdoor Camping Kitchen"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Inkbird</div>                                        <div class="featured__title">Mini Wireless Meat Thermometer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965cf6-7c08-11f1-b53b-6937dc3e2575">            <a href="https://www.amazon.com.au/BRITA-Filter-PRO-Performance-Cartridge/dp/B0D7M7ZCJX" data-model-name="Flow Cask Water Filter Dispenser" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/yKfpnyJveQosy5QQgiKUsa.jpg" alt="Brita Flow Cask Water Filter Dispenser, Blue, 8.2l Capacity, Bpa-Free With Tap and 1 Maxtra Pro Cartridge"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>BRITA</div>                                        <div class="featured__title">Flow Cask Water Filter Dispenser</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965d64-7c08-11f1-9619-7548055619ba">            <a href="https://www.amazon.com.au/Automatic-Preservation-Cleaning-Stainless-Indicator/dp/B08LCXZYLK" data-model-name="Vacuum Sealer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:85.20%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/b9LpQumfcZSCNmy4Hrs7xa.jpg" alt="Inkbird Vacuum Sealer Automatic Sealing Machine for Food Preservation Dry Moist Sealing Modes With Built-In Cutter Starter Kit Easy Cleaning Stainless Steel Panel Compact Design Led Indicator Lights"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Inkbird</div>                                        <div class="featured__title">Vacuum Sealer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965dbe-7c08-11f1-a070-61669ed4fc92">            <a href="https://www.amazon.com.au/AmazonBasics-Stainless-Digital-Batteries-Included/dp/B06X9NQ8GX/" data-model-name="Digital Kitchen Scale With LCD Display" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jD5qV6iEvWHnumfLsaTnFg.jpg" alt="Amazon Basics Digital Kitchen Scale With Lcd Display, Batteries Included, Weighs Up to 4.9 Kgs, Black and Stainless Steel"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Amazon Basics</div>                                        <div class="featured__title">Digital Kitchen Scale With LCD Display</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_standard" data-id="ee965e22-7c08-11f1-bc5a-5daa4a14db74">            <a href="https://www.amazon.com.au/Shark-Cordfree-Handheld-WV203-Graphite/dp/B07X82QCY7/" data-model-name="Cordfree Handheld Vacuum" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xdPTMjpXZRrHy3vujHFYKW.jpg" alt="Shark Cordfree Handheld Vacuum, Ultra-Lightweight and Portable With Powerful Suction & Tools for Pets, Designed for Car and Home, Grey, Wv203"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shark</div>                                        <div class="featured__title">Cordfree Handheld Vacuum</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_standard" data-id="ee965e86-7c08-11f1-8825-6746df393c77">            <a href="https://www.amazon.com.au/CIRCLE-JOY-Rechargeable-Cappuccino-Chocolate/dp/B0DPG6SNV1/" data-model-name="Double Whisk Milk Frother" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/JWecjk8LDzWwGR8MjkDYNW.jpg" alt="Circle Joy Powerful Double Whisk Milk Frother Handheld Rechargeable Milk Foamer Coffee Frother Drink Mixer With Cover, Portable for Coffee, Cappuccino, Lattes, Frappe, Matcha and Hot Chocolate, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CIRCLE JOY</div>                                        <div class="featured__title">Double Whisk Milk Frother</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965eea-7c08-11f1-b50a-df232d73edc1">            <a href="https://www.amazon.com.au/Corelle-18-Piece-Dinnerware-Resistant-Lightweight/dp/B0119IOPIY" data-model-name="Dinnerware Set, Country Cottage (18-Piece Set)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/sa8hsWZmrjDRGWinKRyyAb.jpg" alt="Corelle Dinnerware Set, Country Cottage (18-Piece Set)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CORELLE</div>                                        <div class="featured__title">Dinnerware Set, Country Cottage (18-Piece Set)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965f44-7c08-11f1-bc9d-3f2737d0db5b">            <a href="https://www.amazon.com.au/AmazonBasics-Enameled-Cast-Iron-Dutch/dp/B073Q9K2H3" data-model-name="Enamelled Cast Iron Covered Round Dutch Oven" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/f2rA3bavQLLoYE2s6aUCQb.jpg" alt="Amazon Basics Enameled Cast Iron Covered Round Dutch Oven, 5.7 Liters / 6 Quart, Red"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Amazon Basics</div>                                        <div class="featured__title">Enamelled Cast Iron Covered Round Dutch Oven</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965fa8-7c08-11f1-b660-97e8fd267227">            <a href="https://www.amazon.com.au/Pyrex-Fryer-Glass-Baking-Piece/dp/B0DK38BPP7/" data-model-name="Air Fryer Glass Baking Cups 4 Piece Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/WPrByfmBrYZ52YYx7LaD2b.jpg" alt="Pyrex Air Fryer Glass Baking Cups 4 Piece Set – Borosilicate Glass Bakeware and Silicone Grip Pad – Microwave, Oven, Air Fryer, Freezer & Dishwasher Safe"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Pyrex</div>                                        <div class="featured__title">Air Fryer Glass Baking Cups 4 Piece Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966002-7c08-11f1-8d1b-f727d3c6c704">            <a href="https://www.amazon.com.au/Tefal-Non-Stick-C2890402-Aluminium-Technology/dp/B0CDQFTXZT" data-model-name="Daily Expert Red Non-Stick Frypan" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KqSK9KsxMBGJpwKc5h2iJb.jpg" alt="Tefal Daily Expert Red Non-Stick Frypan, 24cm, C2890402, Fixed Handle Aluminium, Titanium Non-Stick Coating, Thermo Signal Technology for Easier Cooking, Suitable for All Cooktops, Oven Safe"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Tefal</div>                                        <div class="featured__title">Daily Expert Red Non-Stick Frypan</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee96605c-7c08-11f1-8914-1921d3c7160e">            <a href="https://www.amazon.com.au/dp/B07QCD5QX2/ref=sspa_dk_detail_0" data-model-name="Portofino 18 Piece Dinnerware Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/zui8FFA2tqr9EogiBbd57b.jpg" alt="Corelle Portofino 18 Piece Dinnerware Set – Lightweight and Chip-Resistant Glass – Microwave and Dishwasher Safe – 6 X 26cm Dinner Plate, 6 X 17cm Side Plate, 4 X 532ml Soup/cereal Bowl"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CORELLE</div>                                        <div class="featured__title">Portofino 18 Piece Dinnerware Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee9660c0-7c08-11f1-a70c-03556db61140">            <a href="https://www.amazon.com.au/Scanpan-Impact-Saucepan-Quality-Stainless/dp/B075LDQZMQ/" data-model-name="Impact 3-Piece Stainless Steel Saucepan Set With Tempered Glass Lids" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:93.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RvFDeAUyTYH6Jcqc9UzH4g.jpg" alt="Scanpan Impact 3-Piece Stainless Steel Saucepan Set With Tempered Glass Lids,silver"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Scanpan</div>                                        <div class="featured__title">Impact 3-Piece Stainless Steel Saucepan Set With Tempered Glass Lids</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee96611a-7c08-11f1-8c4d-7be995c89c14">            <a href="https://www.amazon.com.au/Tefal-Non-Stick-Indicator-Recycled-G2933202/dp/B0D87HTGR6" data-model-name="Delight Sauté Pan, non stick" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:62.80%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/hxzNAHZaVGPyD47nrnPhmf.jpg" alt="Tefal Delight Sauté Pan 24 Cm, Non-Stick Coating, Heat Indicator, 100% Recycled Aluminum Body, G2933202"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Tefal</div>                                        <div class="featured__title">Delight Sauté Pan, non stick</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966174-7c08-11f1-8ee0-559a039e5c40">            <a href="https://www.amazon.com.au/Joseph-4-piece-Chopping-Storage-Regular/dp/B07YGJMNVK" data-model-name="Folio 4-Piece Chopping Board Set With Storage Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:75.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/VBUaFWiKupvKdmyTh95oHb.jpg" alt="Joseph Joseph Folio 4-Piece Chopping Board Set With Storage Case (regular) - Graphite"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Joseph Joseph</div>                                        <div class="featured__title">Folio 4-Piece Chopping Board Set With Storage Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee9661d8-7c08-11f1-a85c-0b6a48335e4e">            <a href="https://www.amazon.com.au/GreenLife-Artisan-Healthy-Ceramic-Nonstick/dp/B098FGB5XC" data-model-name="Artisan Healthy Ceramic Nonstick Frying Pan" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ddGTw2viSjbAKQsKj6BwLb.jpg" alt="Greenlife Artisan Healthy Ceramic Nonstick, Frying Pan/skillet Set, 8" and 10", Yellow"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GreenLife</div>                                        <div class="featured__title">Artisan Healthy Ceramic Nonstick Frying Pan</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966232-7c08-11f1-ae8f-4d12651e9b9b">            <a href="https://www.amazon.com.au/Pyrex-Deep-Baking-6-Piece-BPA-Free/dp/B07K14QNCC" data-model-name="Deep Dish Glass Baking Dishes With Sage Lids" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/tqCYcGNY6qZ4ahtWMNbVjf.jpg" alt="Pyrex 1135014 Deep Dish Glass Baking Dishes With Sage Lids – Extra Deep Design and Durable Tempered Glass – Dishwasher, Microwave, Freezer Safe – 6 Piece Set"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Pyrex</div>                                        <div class="featured__title">Deep Dish Glass Baking Dishes With Sage Lids</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966296-7c08-11f1-b321-ff9e9676d1b8">            <a href="https://www.amazon.com.au/Stainless-Steel-Griddle-Scraper-Chopper/dp/B072MTB9H8/" data-model-name="Stainless Steel Metal Griddle Scraper" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/rzBsWFaevc6g3xWBEGPEgL.jpg" alt="Stainless Steel Metal Griddle Scraper Chopper - Great as Dough Cutter for Bread and Pizza Dough - Multipurpose Kitchen Utensil for Flat Top Griddle - Commercial Quality"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Anmarko</div>                                        <div class="featured__title">Stainless Steel Metal Griddle Scraper</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee9662f0-7c08-11f1-a6b4-b7367ced3f80">            <a href="https://www.amazon.com.au/Joseph-Editions-9-piece-compact-preparation/dp/B07TT79CYC/" data-model-name="Editions Nest 9 Plus Preparation set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/pfubmd2GqJaXFrTyLnndcL.jpg" alt="Joseph Joseph Editions Nest 9 Plus, 9-Piece Compact Food Preparation Set - Sky"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Joseph Joseph</div>                                        <div class="featured__title">Editions Nest 9 Plus Preparation set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966354-7c08-11f1-89cd-7fb9b45d7ac7">            <a href="https://www.amazon.com.au/Wiltshire-Bakeware-Smart-Stack-Rose/dp/B0B65T2D6Z/" data-model-name=" 7 Piece Smart Stack Bakeware Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:140.45%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ez74US7CH2egDafsuQMvkL.jpg" alt="Wiltshire 7 Piece Smart Stack Bakeware Set Rose Gold – Non-Stick Baking Trays, Cake Tins, Muffin Pan and Roasting Pan. Space-Saving Storage Solution in Gift Box"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wiltshire</div>                                        <div class="featured__title"> 7 Piece Smart Stack Bakeware Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee9663ae-7c08-11f1-be36-63127958b76e">            <a href="https://www.amazon.com.au/Joseph-Scoop-Plus-Colander-Large/dp/B07FMB4RN8/" data-model-name="Scoop Plus " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:54.40%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/FyL8FBNheXdotvZWKHhdaL.jpg" alt="Joseph Joseph Scoop Plus Large - Grey/green"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Joseph Joseph</div>                                        <div class="featured__title">Scoop Plus </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966408-7c08-11f1-80c7-211da0ab45c4">            <a href="https://www.amazon.com.au/JOSEPH-20101-Juicer-Citrus-Yellow/dp/B01N2Y8QK1" data-model-name="Helix Citrus Press" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:62.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/N47YaJSC3xzpHQpWCL6iWL.jpg" alt="Joseph Joseph Helix Citrus Press,yellow and Green"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Joseph Joseph</div>                                        <div class="featured__title">Helix Citrus Press</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee96646c-7c08-11f1-bc10-f7ecfcfea2b3">            <a href="https://www.amazon.com.au/D%C3%A9cor-Cook-Refillable-Oil-Sprayer/dp/B07C5S3LHD" data-model-name="Refillable Oil Sprayer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:150%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qWbtL8UkZj69VUjAo2Lzen.jpg" alt="Décor Décor Cook Refillable Oil Sprayer,white"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Décor</div>                                        <div class="featured__title">Refillable Oil Sprayer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee9664c6-7c08-11f1-92c1-63f875c81c00">            <a href="https://www.amazon.com.au/Magnetic-Measuring-Stainless-Stackable-Ingredients/dp/B09W9Z52B2" data-model-name="Magnetic Measuring Spoons Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/hgJEsk8hgJXxSiBhHZTGiL.jpg" alt="Magnetic Measuring Spoons Set, 7 Measuring Spoons and Cups 1 Leveler Stainless Steel Dual Sided Stackable Teaspoon for Liquid and Dry Ingredients"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Hushnow</div>                                        <div class="featured__title">Magnetic Measuring Spoons Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966520-7c08-11f1-bea9-6b7dff875bd3">            <a href="https://www.amazon.com.au/Amazon-Basics-Baking-Bread-24-13/dp/B073P52PPR" data-model-name="Baking Bread Loaf Pan, 2pk" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:57.20%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QhRNuojdFRcW24A9Bxknid.jpg" alt="Amazon Basics Baking Bread Loaf Pan, 24.1 X 12.7 Cm, Set of 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Amazon Basics</div>                                        <div class="featured__title">Baking Bread Loaf Pan, 2pk</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/home/kitchen-dining/forget-fad-appliances-ive-found-24-prime-day-discounts-on-kitchen-accessories-and-utensils-that-will-streamline-your-culinary-creations</link>
                                                                            <description>
                            <![CDATA[ Looking to upgrade your kitchen for less? I've found some top-rated kitchen accessories that are on sale for Prime Day — and they're all under AU$150. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">9NsC49bjCP9JQVpix39oTk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/C6yXKeqm2Lhdhh9Qq68X8a-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 10 Jul 2026 03:42:56 +0000</pubDate>                                                                                                                                <updated>Fri, 10 Jul 2026 04:18:01 +0000</updated>
                                                                                                                                            <category><![CDATA[Kitchen & Dining]]></category>
                                                    <category><![CDATA[Home]]></category>
                                                    <category><![CDATA[Home Appliances]]></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/C6yXKeqm2Lhdhh9Qq68X8a-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[kitchen items on gradient background]]></media:description>                                                            <media:text><![CDATA[kitchen items on gradient background]]></media:text>
                                <media:title type="plain"><![CDATA[kitchen items on gradient background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/C6yXKeqm2Lhdhh9Qq68X8a-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I love my kitchen, but there are some days when I want to replace every single utensil I own. I'm talking mismatched cutlery and crockery, a hard-to-clean stainless steel pan, and some ageing kitchen scales that have served me and my baking skills well over the last few years. </p><p>Upgrades like these are ones I've been putting off, simply because I don't have the means to replace everything. And I'm sure most of us would agree that it's easier to shove an old can opener or chipped plate back into the kitchen drawer than try to find a replacement. </p><p>Thankfully, it's <a href="https://www.tomsguide.com/live/news/amazon-prime-day-2026-au" target="_blank">Prime Day</a>, and I've found 24 discounts on kitchen accessories, utensils and small appliances that will upgrade your kitchen for under AU$150 on Amazon. Granted, there's one item on this list — <a href="https://www.amazon.com.au/dp/B07QCD5QX2/ref=sspa_dk_detail_0" target="_blank">namely, the Corelle Portofino 18-piece dinner set</a> — that is a bit above this price, at AU$159.20; however, I've had my eye on it for a while, and it's finally within my reach at AU$40 off RRP. And for an 18-piece set, that's only AU$8.80 per piece, which is a big win in my books. </p><p>Another great deal I've spotted is on <a href="https://www.amazon.com.au/Shark-Cordfree-Handheld-WV203-Graphite/dp/B07X82QCY7/" target="_blank">Shark's Cordfree Handheld vacuum, now AU$135.85</a>. While it may be a bit odd to put on a kitchen deals round up, I swear by my handheld vacuum for all the teeny crumbs and coffee grinds in my kitchen. Trust me, it is <em>life-changing</em>. </p><p>Don't just take my word for it, though — all these products come with 4+ star ratings, including those of my colleagues at Tom's Guide. Better yet, these deals are exclusive to Prime members, and if you're not signed up already, you can get a <a href="https://www.amazon.com.au/tryprimefree" target="_blank">free 30-day trial here</a>. You'll need to act fast to nab any of these kitchen deals, though, as they will expire on <strong>Monday, July 13, at 11:59pm. </strong></p>        <div class="featured_product_block featured_block_hero" data-id="ee965c88-7c08-11f1-a318-d1b673bf5819">            <a href="https://www.amazon.com.au/Wireless-Thermometer-INT-11I-B-Bluetooth-Waterproof/dp/B0F3XHR5Q6" data-model-name="Mini Wireless Meat Thermometer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/GDpGqAWeoHB669CnbKsU7g.jpg" alt="Inkbird Mini Wireless Meat Thermometer Int-11i-B Bluetooth 5.4 Bbq Food Probe Ip67 Waterproof Led Display for Bbq Grill Oven Smoker Outdoor Camping Kitchen"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Inkbird</div>                                        <div class="featured__title">Mini Wireless Meat Thermometer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965cf6-7c08-11f1-b53b-6937dc3e2575">            <a href="https://www.amazon.com.au/BRITA-Filter-PRO-Performance-Cartridge/dp/B0D7M7ZCJX" data-model-name="Flow Cask Water Filter Dispenser" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/yKfpnyJveQosy5QQgiKUsa.jpg" alt="Brita Flow Cask Water Filter Dispenser, Blue, 8.2l Capacity, Bpa-Free With Tap and 1 Maxtra Pro Cartridge"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>BRITA</div>                                        <div class="featured__title">Flow Cask Water Filter Dispenser</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965d64-7c08-11f1-9619-7548055619ba">            <a href="https://www.amazon.com.au/Automatic-Preservation-Cleaning-Stainless-Indicator/dp/B08LCXZYLK" data-model-name="Vacuum Sealer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:85.20%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/b9LpQumfcZSCNmy4Hrs7xa.jpg" alt="Inkbird Vacuum Sealer Automatic Sealing Machine for Food Preservation Dry Moist Sealing Modes With Built-In Cutter Starter Kit Easy Cleaning Stainless Steel Panel Compact Design Led Indicator Lights"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Inkbird</div>                                        <div class="featured__title">Vacuum Sealer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965dbe-7c08-11f1-a070-61669ed4fc92">            <a href="https://www.amazon.com.au/AmazonBasics-Stainless-Digital-Batteries-Included/dp/B06X9NQ8GX/" data-model-name="Digital Kitchen Scale With LCD Display" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jD5qV6iEvWHnumfLsaTnFg.jpg" alt="Amazon Basics Digital Kitchen Scale With Lcd Display, Batteries Included, Weighs Up to 4.9 Kgs, Black and Stainless Steel"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Amazon Basics</div>                                        <div class="featured__title">Digital Kitchen Scale With LCD Display</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_standard" data-id="ee965e22-7c08-11f1-bc5a-5daa4a14db74">            <a href="https://www.amazon.com.au/Shark-Cordfree-Handheld-WV203-Graphite/dp/B07X82QCY7/" data-model-name="Cordfree Handheld Vacuum" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xdPTMjpXZRrHy3vujHFYKW.jpg" alt="Shark Cordfree Handheld Vacuum, Ultra-Lightweight and Portable With Powerful Suction & Tools for Pets, Designed for Car and Home, Grey, Wv203"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shark</div>                                        <div class="featured__title">Cordfree Handheld Vacuum</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_standard" data-id="ee965e86-7c08-11f1-8825-6746df393c77">            <a href="https://www.amazon.com.au/CIRCLE-JOY-Rechargeable-Cappuccino-Chocolate/dp/B0DPG6SNV1/" data-model-name="Double Whisk Milk Frother" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/JWecjk8LDzWwGR8MjkDYNW.jpg" alt="Circle Joy Powerful Double Whisk Milk Frother Handheld Rechargeable Milk Foamer Coffee Frother Drink Mixer With Cover, Portable for Coffee, Cappuccino, Lattes, Frappe, Matcha and Hot Chocolate, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CIRCLE JOY</div>                                        <div class="featured__title">Double Whisk Milk Frother</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965eea-7c08-11f1-b50a-df232d73edc1">            <a href="https://www.amazon.com.au/Corelle-18-Piece-Dinnerware-Resistant-Lightweight/dp/B0119IOPIY" data-model-name="Dinnerware Set, Country Cottage (18-Piece Set)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/sa8hsWZmrjDRGWinKRyyAb.jpg" alt="Corelle Dinnerware Set, Country Cottage (18-Piece Set)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CORELLE</div>                                        <div class="featured__title">Dinnerware Set, Country Cottage (18-Piece Set)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965f44-7c08-11f1-bc9d-3f2737d0db5b">            <a href="https://www.amazon.com.au/AmazonBasics-Enameled-Cast-Iron-Dutch/dp/B073Q9K2H3" data-model-name="Enamelled Cast Iron Covered Round Dutch Oven" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/f2rA3bavQLLoYE2s6aUCQb.jpg" alt="Amazon Basics Enameled Cast Iron Covered Round Dutch Oven, 5.7 Liters / 6 Quart, Red"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Amazon Basics</div>                                        <div class="featured__title">Enamelled Cast Iron Covered Round Dutch Oven</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee965fa8-7c08-11f1-b660-97e8fd267227">            <a href="https://www.amazon.com.au/Pyrex-Fryer-Glass-Baking-Piece/dp/B0DK38BPP7/" data-model-name="Air Fryer Glass Baking Cups 4 Piece Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/WPrByfmBrYZ52YYx7LaD2b.jpg" alt="Pyrex Air Fryer Glass Baking Cups 4 Piece Set – Borosilicate Glass Bakeware and Silicone Grip Pad – Microwave, Oven, Air Fryer, Freezer & Dishwasher Safe"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Pyrex</div>                                        <div class="featured__title">Air Fryer Glass Baking Cups 4 Piece Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966002-7c08-11f1-8d1b-f727d3c6c704">            <a href="https://www.amazon.com.au/Tefal-Non-Stick-C2890402-Aluminium-Technology/dp/B0CDQFTXZT" data-model-name="Daily Expert Red Non-Stick Frypan" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KqSK9KsxMBGJpwKc5h2iJb.jpg" alt="Tefal Daily Expert Red Non-Stick Frypan, 24cm, C2890402, Fixed Handle Aluminium, Titanium Non-Stick Coating, Thermo Signal Technology for Easier Cooking, Suitable for All Cooktops, Oven Safe"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Tefal</div>                                        <div class="featured__title">Daily Expert Red Non-Stick Frypan</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee96605c-7c08-11f1-8914-1921d3c7160e">            <a href="https://www.amazon.com.au/dp/B07QCD5QX2/ref=sspa_dk_detail_0" data-model-name="Portofino 18 Piece Dinnerware Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/zui8FFA2tqr9EogiBbd57b.jpg" alt="Corelle Portofino 18 Piece Dinnerware Set – Lightweight and Chip-Resistant Glass – Microwave and Dishwasher Safe – 6 X 26cm Dinner Plate, 6 X 17cm Side Plate, 4 X 532ml Soup/cereal Bowl"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CORELLE</div>                                        <div class="featured__title">Portofino 18 Piece Dinnerware Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee9660c0-7c08-11f1-a70c-03556db61140">            <a href="https://www.amazon.com.au/Scanpan-Impact-Saucepan-Quality-Stainless/dp/B075LDQZMQ/" data-model-name="Impact 3-Piece Stainless Steel Saucepan Set With Tempered Glass Lids" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:93.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RvFDeAUyTYH6Jcqc9UzH4g.jpg" alt="Scanpan Impact 3-Piece Stainless Steel Saucepan Set With Tempered Glass Lids,silver"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Scanpan</div>                                        <div class="featured__title">Impact 3-Piece Stainless Steel Saucepan Set With Tempered Glass Lids</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee96611a-7c08-11f1-8c4d-7be995c89c14">            <a href="https://www.amazon.com.au/Tefal-Non-Stick-Indicator-Recycled-G2933202/dp/B0D87HTGR6" data-model-name="Delight Sauté Pan, non stick" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:62.80%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/hxzNAHZaVGPyD47nrnPhmf.jpg" alt="Tefal Delight Sauté Pan 24 Cm, Non-Stick Coating, Heat Indicator, 100% Recycled Aluminum Body, G2933202"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Tefal</div>                                        <div class="featured__title">Delight Sauté Pan, non stick</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966174-7c08-11f1-8ee0-559a039e5c40">            <a href="https://www.amazon.com.au/Joseph-4-piece-Chopping-Storage-Regular/dp/B07YGJMNVK" data-model-name="Folio 4-Piece Chopping Board Set With Storage Case" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:75.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/VBUaFWiKupvKdmyTh95oHb.jpg" alt="Joseph Joseph Folio 4-Piece Chopping Board Set With Storage Case (regular) - Graphite"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Joseph Joseph</div>                                        <div class="featured__title">Folio 4-Piece Chopping Board Set With Storage Case</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee9661d8-7c08-11f1-a85c-0b6a48335e4e">            <a href="https://www.amazon.com.au/GreenLife-Artisan-Healthy-Ceramic-Nonstick/dp/B098FGB5XC" data-model-name="Artisan Healthy Ceramic Nonstick Frying Pan" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ddGTw2viSjbAKQsKj6BwLb.jpg" alt="Greenlife Artisan Healthy Ceramic Nonstick, Frying Pan/skillet Set, 8" and 10", Yellow"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GreenLife</div>                                        <div class="featured__title">Artisan Healthy Ceramic Nonstick Frying Pan</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966232-7c08-11f1-ae8f-4d12651e9b9b">            <a href="https://www.amazon.com.au/Pyrex-Deep-Baking-6-Piece-BPA-Free/dp/B07K14QNCC" data-model-name="Deep Dish Glass Baking Dishes With Sage Lids" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/tqCYcGNY6qZ4ahtWMNbVjf.jpg" alt="Pyrex 1135014 Deep Dish Glass Baking Dishes With Sage Lids – Extra Deep Design and Durable Tempered Glass – Dishwasher, Microwave, Freezer Safe – 6 Piece Set"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Pyrex</div>                                        <div class="featured__title">Deep Dish Glass Baking Dishes With Sage Lids</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966296-7c08-11f1-b321-ff9e9676d1b8">            <a href="https://www.amazon.com.au/Stainless-Steel-Griddle-Scraper-Chopper/dp/B072MTB9H8/" data-model-name="Stainless Steel Metal Griddle Scraper" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/rzBsWFaevc6g3xWBEGPEgL.jpg" alt="Stainless Steel Metal Griddle Scraper Chopper - Great as Dough Cutter for Bread and Pizza Dough - Multipurpose Kitchen Utensil for Flat Top Griddle - Commercial Quality"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Anmarko</div>                                        <div class="featured__title">Stainless Steel Metal Griddle Scraper</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee9662f0-7c08-11f1-a6b4-b7367ced3f80">            <a href="https://www.amazon.com.au/Joseph-Editions-9-piece-compact-preparation/dp/B07TT79CYC/" data-model-name="Editions Nest 9 Plus Preparation set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/pfubmd2GqJaXFrTyLnndcL.jpg" alt="Joseph Joseph Editions Nest 9 Plus, 9-Piece Compact Food Preparation Set - Sky"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Joseph Joseph</div>                                        <div class="featured__title">Editions Nest 9 Plus Preparation set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966354-7c08-11f1-89cd-7fb9b45d7ac7">            <a href="https://www.amazon.com.au/Wiltshire-Bakeware-Smart-Stack-Rose/dp/B0B65T2D6Z/" data-model-name=" 7 Piece Smart Stack Bakeware Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:140.45%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ez74US7CH2egDafsuQMvkL.jpg" alt="Wiltshire 7 Piece Smart Stack Bakeware Set Rose Gold – Non-Stick Baking Trays, Cake Tins, Muffin Pan and Roasting Pan. Space-Saving Storage Solution in Gift Box"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Wiltshire</div>                                        <div class="featured__title"> 7 Piece Smart Stack Bakeware Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee9663ae-7c08-11f1-be36-63127958b76e">            <a href="https://www.amazon.com.au/Joseph-Scoop-Plus-Colander-Large/dp/B07FMB4RN8/" data-model-name="Scoop Plus " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:54.40%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/FyL8FBNheXdotvZWKHhdaL.jpg" alt="Joseph Joseph Scoop Plus Large - Grey/green"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Joseph Joseph</div>                                        <div class="featured__title">Scoop Plus </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966408-7c08-11f1-80c7-211da0ab45c4">            <a href="https://www.amazon.com.au/JOSEPH-20101-Juicer-Citrus-Yellow/dp/B01N2Y8QK1" data-model-name="Helix Citrus Press" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:62.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/N47YaJSC3xzpHQpWCL6iWL.jpg" alt="Joseph Joseph Helix Citrus Press,yellow and Green"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Joseph Joseph</div>                                        <div class="featured__title">Helix Citrus Press</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee96646c-7c08-11f1-bc10-f7ecfcfea2b3">            <a href="https://www.amazon.com.au/D%C3%A9cor-Cook-Refillable-Oil-Sprayer/dp/B07C5S3LHD" data-model-name="Refillable Oil Sprayer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:150%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qWbtL8UkZj69VUjAo2Lzen.jpg" alt="Décor Décor Cook Refillable Oil Sprayer,white"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Décor</div>                                        <div class="featured__title">Refillable Oil Sprayer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee9664c6-7c08-11f1-92c1-63f875c81c00">            <a href="https://www.amazon.com.au/Magnetic-Measuring-Stainless-Stackable-Ingredients/dp/B09W9Z52B2" data-model-name="Magnetic Measuring Spoons Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/hgJEsk8hgJXxSiBhHZTGiL.jpg" alt="Magnetic Measuring Spoons Set, 7 Measuring Spoons and Cups 1 Leveler Stainless Steel Dual Sided Stackable Teaspoon for Liquid and Dry Ingredients"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Hushnow</div>                                        <div class="featured__title">Magnetic Measuring Spoons Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ee966520-7c08-11f1-bea9-6b7dff875bd3">            <a href="https://www.amazon.com.au/Amazon-Basics-Baking-Bread-24-13/dp/B073P52PPR" data-model-name="Baking Bread Loaf Pan, 2pk" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:57.20%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QhRNuojdFRcW24A9Bxknid.jpg" alt="Amazon Basics Baking Bread Loaf Pan, 24.1 X 12.7 Cm, Set of 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Amazon Basics</div>                                        <div class="featured__title">Baking Bread Loaf Pan, 2pk</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget professional photos — as a fun photography lover, I can’t recommend these 6 Prime Day cameras deals enough for any trigger-happy enthusiasts ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I'm a photography and content creator novice, so while some may take photos much more seriously than I do, I must admit I enjoy taking a quick snap. Whether it's my surroundings, a selfie or just another pic of my dog being cute, I find joy in fun photos.</p><p>Equally so, I find joy in fun cameras, which may not be classed as traditional point-and-shoots, but still grasp the essence of any moment. And right now, during <a href="https://www.tomsguide.com/live/news/amazon-prime-day-2026-au" target="_blank">Amazon Prime Day</a>, some of my top-rated fun cameras are on sale, with up to 32% off. </p><p>Earlier this year, I nabbed the cutest cam in business – the <a href="https://www.amazon.com.au/CHARMERA-Keychain-Digital-Camera-Collectable/dp/B0FKBDT8FR" target="_blank">Kodak Charmera for AU$60, but now it's down to just AU$44</a>. I adore my <a href="https://www.tomsguide.com/cameras-photography/kodak-charmera-review">Kodak Charmera</a>. It's permanently attached to my keys (and me, by extension), and while it doesn't take the best photos or videos quality-wise, it is a fun way to capture everyday moments. </p><p>I've also just gotten my hands on the <a href="https://www.tomsguide.com/cameras-photography/gopro-action-cameras/insta360-go-3s-review">Insta360 Go 3S</a>, which has been a nice addition to my content creator set-up. I'm still a newbie, but the Go 3S is really easy to use and helps me when I'm filming solo in public or picture a gorgeous landscape in full panoramic view. Better yet, it's also <a href="https://www.amazon.com.au/Insta360-GO-Hands-Free-Stabilization-Waterproof/dp/B0D3WLV9Q1" target="_blank">discounted for Prime Day, now just AU$524.99</a>.</p><p>In addition, I've included 4 more of the best fun camera deals worth shopping on Amazon right now below, in case you're anything like me and love a fun camera. These cameras all live in the "cute", not serious photography category, and if you're after more serious recommendations, I'd suggest checking out our <a href="https://www.tomsguide.com/us/best-cameras,review-2196.html">best cameras guide</a>. </p><p>It's also worth mentioning that these deals are exclusive to Prime members, and if you're not signed up already, you can get a <a href="https://www.amazon.com.au/tryprimefree" target="_blank">free 30-day trial here</a>. You'll need to act fast to nab any of these cute Prime Day camera bargains, though, as these deals are set to expire on <strong>Monday, July 13, at 11:59pm. </strong></p><h3 class="article-body__section" id="section-best-fun-camera-deals"><span>Best fun camera deals</span></h3><div class="product"><a data-dimension112="9ed57654-7bfc-11f1-a9fe-71756773db15" data-action="Deal Block" data-label="Charmera" data-dimension48="Charmera" data-dimension25="$44" href="https://www.amazon.com.au/CHARMERA-Keychain-Digital-Camera-Collectable/dp/B0FKBDT8FR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:465px;"><p class="vanilla-image-block" style="padding-top:71.83%;"><img id="PNVrXXCrD7c25oW9EFB4Hm" name="Screenshot 2026-01-08 at 11.12.23" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PNVrXXCrD7c25oW9EFB4Hm.png" mos="" align="middle" fullscreen="" width="465" height="334" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Love the thrill of a blindbox keyring? The Kodak Charmera is worth getting your hands on. We gave it 4 stars in our review, as it is, simply put, "cute, cheap and lo-fi". You're not going to get high-definition quality out of it, but you'll get a cute keyring camera with vintage aesthetic photos and videos. The Charmera has 11 different filters and frames to choose from, and comes with a USB-C cord for easy charging. You'll only need to add a microSD card in a GB capacity of your choice to transfer your pics. Oh, and your selected colourway? That's anyone's guess, as the Charmera comes in seven mystery colours, including a "secret", rare transparent green cover. <a class="view-deal button" href="https://www.amazon.com.au/CHARMERA-Keychain-Digital-Camera-Collectable/dp/B0FKBDT8FR" target="_blank" rel="nofollow" data-dimension112="9ed57654-7bfc-11f1-a9fe-71756773db15" data-action="Deal Block" data-label="Charmera" data-dimension48="Charmera" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="9ed576c2-7bfc-11f1-a36c-2b3c85585807" data-action="Deal Block" data-label="Go 3S (128 GB)" data-dimension48="Go 3S (128 GB)" data-dimension25="$524.99" href="https://www.amazon.com.au/Insta360-GO-Hands-Free-Stabilization-Waterproof/dp/B0D3WLV9Q1" 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="TLsFVoVyyJ4orkwY3cYceH" name="insta360-go-3s--128-gb-black-4k-tiny-por-7b8476e7-c419-4649-9706-fd95eea98f22.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TLsFVoVyyJ4orkwY3cYceH.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Insta360-GO-Hands-Free-Stabilization-Waterproof/dp/B0D3WLV9Q1" target="_blank" rel="nofollow" data-dimension112="9ed576c2-7bfc-11f1-a36c-2b3c85585807" data-action="Deal Block" data-label="Go 3S (128 GB)" data-dimension48="Go 3S (128 GB)" data-dimension25="$524.99">Go 3S (128 GB): was $769.99 now $524.99</a></strong><br>Capturing 4K content just got cuter with this tiny Insta360 Go 3S camera. It's totally magnetic, so you can stick it to most surfaces and capture 360-degree POVs. Now discounted on Amazon, this bundle is great for budding content creators, adventurers, and risk-takers on the go.<a class="view-deal button" href="https://www.amazon.com.au/Insta360-GO-Hands-Free-Stabilization-Waterproof/dp/B0D3WLV9Q1" target="_blank" rel="nofollow" data-dimension112="9ed576c2-7bfc-11f1-a36c-2b3c85585807" data-action="Deal Block" data-label="Go 3S (128 GB)" data-dimension48="Go 3S (128 GB)" data-dimension25="$524.99">View Deal</a></p></div><div class="product"><a data-dimension112="9ed5773a-7bfc-11f1-8768-811319a3307e" data-action="Deal Block" data-label="Instax SQ1" data-dimension48="Instax SQ1" data-dimension25="$169" href="https://www.amazon.com.au/Fujifilm-Instax-SQ1-Glacier-Instant/dp/B08H89FP2P" 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:85.20%;"><img id="X2Zd6opS32PLuCAmuHeePY" name="Instax SQUARE SQ1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/X2Zd6opS32PLuCAmuHeePY.jpg" mos="" align="middle" fullscreen="" width="1500" height="1278" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Slashing a nice 15% off, this Instax SQ1 would be a fun gift for those snap-happy folks in your life. As part of the Square lineup of Instax cameras, it produces square prints as opposed to the credit card-sized ones of the Mini 12.<a class="view-deal button" href="https://www.amazon.com.au/Fujifilm-Instax-SQ1-Glacier-Instant/dp/B08H89FP2P" target="_blank" rel="nofollow" data-dimension112="9ed5773a-7bfc-11f1-8768-811319a3307e" data-action="Deal Block" data-label="Instax SQ1" data-dimension48="Instax SQ1" data-dimension25="$169">View Deal</a></p></div><div class="product"><a data-dimension112="9ed5785c-7bfc-11f1-b4d1-11a1302beddf" data-action="Deal Block" data-label="Go Gen 2" data-dimension48="Go Gen 2" data-dimension25="$99" href="https://www.amazon.com.au/Polaroid-Generation-Instant-Camera-Compatible/dp/B0F5HXJGDY" 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:110.00%;"><img id="zYw4RMKimdXeWMstT2Cqe4" name="Polaroid Go Gen 2 GRID" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zYw4RMKimdXeWMstT2Cqe4.jpg" mos="" align="middle" fullscreen="" width="500" height="550" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Scoring a <a href="https://www.tomsguide.com/cameras-photography/polaroid-go-gen-2-review" data-dimension112="9ed5785c-7bfc-11f1-b4d1-11a1302beddf" data-action="Deal Block" data-label="Go Gen 2" data-dimension48="Go Gen 2" data-dimension25="$99">nice 4.5 stars in our review</a>, the Polaroid Go Gen 2 is a cute, easy-to-use camera. Improving on the first-generation model, the Go Gen 2 introduces a new double-exposure mode for creative shots, has a self-timer and a selfie mirror, and has a decent battery life. Plus, it's supposedly so small, it'll fit in your pocket, and you can take it everywhere. The only caveat? You'll need to purchase Polaroid's compatible Go film separately, which is <a href="https://www.amazon.com.au/Polaroid-Originals-Color-Film-Compatible/dp/B096MJ9LYK" target="_blank">AU$31.41 on Amazon for a double pack</a>. <a class="view-deal button" href="https://www.amazon.com.au/Polaroid-Generation-Instant-Camera-Compatible/dp/B0F5HXJGDY" target="_blank" rel="nofollow" data-dimension112="9ed5785c-7bfc-11f1-b4d1-11a1302beddf" data-action="Deal Block" data-label="Go Gen 2" data-dimension48="Go Gen 2" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="9ed57942-7bfc-11f1-bb87-13b7bd1d2c52" data-action="Deal Block" data-label="Pixpro C1 Digital Camera" data-dimension48="Pixpro C1 Digital Camera" data-dimension25="$147.36" href="https://www.amazon.com.au/KODAK-Pixpro-C1-Ultra-Compact-Digital/dp/B0DY8BRMM5" 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:86.20%;"><img id="oqywc5qJBxrLyDQK4Aq5uW" name="kodak-pixpro-c1--ultracompact-digital-ca-7d0ea747-5dcc-413d-a6bf-e0ca8ebc1dbe.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/oqywc5qJBxrLyDQK4Aq5uW.jpg" mos="" align="middle" fullscreen="" width="500" height="431" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/KODAK-Pixpro-C1-Ultra-Compact-Digital/dp/B0DY8BRMM5" target="_blank" rel="nofollow" data-dimension112="9ed57942-7bfc-11f1-bb87-13b7bd1d2c52" data-action="Deal Block" data-label="Pixpro C1 Digital Camera" data-dimension48="Pixpro C1 Digital Camera" data-dimension25="$147.36">Pixpro C1 Digital Camera: was $200 now $147.36</a></strong><br>The Kodak PIXPRO C1 is a highly compact digital camera and it's portable, so you can take it anywhere. There’s a dedicated flip-up screen for taking selfies, and it's perfect for anyone who wants to take pictures without taking up their phone storage. <a class="view-deal button" href="https://www.amazon.com.au/KODAK-Pixpro-C1-Ultra-Compact-Digital/dp/B0DY8BRMM5" target="_blank" rel="nofollow" data-dimension112="9ed57942-7bfc-11f1-bb87-13b7bd1d2c52" data-action="Deal Block" data-label="Pixpro C1 Digital Camera" data-dimension48="Pixpro C1 Digital Camera" data-dimension25="$147.36">View Deal</a></p></div><div class="product"><a data-dimension112="9ed579b0-7bfc-11f1-b699-a9293ae6f487" data-action="Deal Block" data-label="Snap" data-dimension48="Snap" data-dimension25="$89" href="https://www.amazon.com.au/Camp-Snap-Digital-Screen-Free-Adventure/dp/B0FTF8XFM2/ref=sr_1_5" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="9KYhxDw5B7di6S6Mrb8FCa" name="Camp Snap" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9KYhxDw5B7di6S6Mrb8FCa.jpg" mos="" align="middle" fullscreen="" width="1600" height="1600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I was introduced to this camera during a family trip, and frankly, I fell in love with it. In a design similar to disposable cameras, <a href="https://www.tomsguide.com/cameras-photography/camp-snap-screen-free-digital-camera-review" data-dimension112="9ed579b0-7bfc-11f1-b699-a9293ae6f487" data-action="Deal Block" data-label="Snap" data-dimension48="Snap" data-dimension25="$89">Camp Snap</a> is a digital point-and-shoot without a viewfinder. It also takes photos with a similar, disposable film feel, all without needing to send the roll away for developing. What's more, it can save up to 2,000 photos with its included SD card and comes with a USB-C charging and transfer cord. <a class="view-deal button" href="https://www.amazon.com.au/Camp-Snap-Digital-Screen-Free-Adventure/dp/B0FTF8XFM2/ref=sr_1_5" target="_blank" rel="nofollow" data-dimension112="9ed579b0-7bfc-11f1-b699-a9293ae6f487" data-action="Deal Block" data-label="Snap" data-dimension48="Snap" data-dimension25="$89">View Deal</a></p></div><div data-widget-type="multimodelreview" data-model-name="FujiFilm Instax Mini 9,Kodak Charmera,Camp Snap" data-widget-title="Today's best cheap camera deals"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/cameras-photography/forget-professional-photos-as-a-fun-photography-lover-i-cant-recommend-these-6-prime-day-cameras-deals-enough-for-any-trigger-happy-enthusiasts</link>
                                                                            <description>
                            <![CDATA[ After a fun camera to take everywhere with you? These Prime Day camera deals may be worth your while. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mPYuBgDrYqw6TQvErWWtGW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qvLfgN9N9LNzCWLDpso3jM-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 10 Jul 2026 01:52:08 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Cameras & Photography]]></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/qvLfgN9N9LNzCWLDpso3jM-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Lucy Scotting]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Hand holding kodak charmera with tom&#039;s guide deal badge]]></media:description>                                                            <media:text><![CDATA[Hand holding kodak charmera with tom&#039;s guide deal badge]]></media:text>
                                <media:title type="plain"><![CDATA[Hand holding kodak charmera with tom&#039;s guide deal badge]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qvLfgN9N9LNzCWLDpso3jM-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I'm a photography and content creator novice, so while some may take photos much more seriously than I do, I must admit I enjoy taking a quick snap. Whether it's my surroundings, a selfie or just another pic of my dog being cute, I find joy in fun photos.</p><p>Equally so, I find joy in fun cameras, which may not be classed as traditional point-and-shoots, but still grasp the essence of any moment. And right now, during <a href="https://www.tomsguide.com/live/news/amazon-prime-day-2026-au" target="_blank">Amazon Prime Day</a>, some of my top-rated fun cameras are on sale, with up to 32% off. </p><p>Earlier this year, I nabbed the cutest cam in business – the <a href="https://www.amazon.com.au/CHARMERA-Keychain-Digital-Camera-Collectable/dp/B0FKBDT8FR" target="_blank">Kodak Charmera for AU$60, but now it's down to just AU$44</a>. I adore my <a href="https://www.tomsguide.com/cameras-photography/kodak-charmera-review">Kodak Charmera</a>. It's permanently attached to my keys (and me, by extension), and while it doesn't take the best photos or videos quality-wise, it is a fun way to capture everyday moments. </p><p>I've also just gotten my hands on the <a href="https://www.tomsguide.com/cameras-photography/gopro-action-cameras/insta360-go-3s-review">Insta360 Go 3S</a>, which has been a nice addition to my content creator set-up. I'm still a newbie, but the Go 3S is really easy to use and helps me when I'm filming solo in public or picture a gorgeous landscape in full panoramic view. Better yet, it's also <a href="https://www.amazon.com.au/Insta360-GO-Hands-Free-Stabilization-Waterproof/dp/B0D3WLV9Q1" target="_blank">discounted for Prime Day, now just AU$524.99</a>.</p><p>In addition, I've included 4 more of the best fun camera deals worth shopping on Amazon right now below, in case you're anything like me and love a fun camera. These cameras all live in the "cute", not serious photography category, and if you're after more serious recommendations, I'd suggest checking out our <a href="https://www.tomsguide.com/us/best-cameras,review-2196.html">best cameras guide</a>. </p><p>It's also worth mentioning that these deals are exclusive to Prime members, and if you're not signed up already, you can get a <a href="https://www.amazon.com.au/tryprimefree" target="_blank">free 30-day trial here</a>. You'll need to act fast to nab any of these cute Prime Day camera bargains, though, as these deals are set to expire on <strong>Monday, July 13, at 11:59pm. </strong></p><h3 class="article-body__section" id="section-best-fun-camera-deals"><span>Best fun camera deals</span></h3><div class="product"><a data-dimension112="9ed57654-7bfc-11f1-a9fe-71756773db15" data-action="Deal Block" data-label="Charmera" data-dimension48="Charmera" data-dimension25="$44" href="https://www.amazon.com.au/CHARMERA-Keychain-Digital-Camera-Collectable/dp/B0FKBDT8FR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:465px;"><p class="vanilla-image-block" style="padding-top:71.83%;"><img id="PNVrXXCrD7c25oW9EFB4Hm" name="Screenshot 2026-01-08 at 11.12.23" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PNVrXXCrD7c25oW9EFB4Hm.png" mos="" align="middle" fullscreen="" width="465" height="334" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Love the thrill of a blindbox keyring? The Kodak Charmera is worth getting your hands on. We gave it 4 stars in our review, as it is, simply put, "cute, cheap and lo-fi". You're not going to get high-definition quality out of it, but you'll get a cute keyring camera with vintage aesthetic photos and videos. The Charmera has 11 different filters and frames to choose from, and comes with a USB-C cord for easy charging. You'll only need to add a microSD card in a GB capacity of your choice to transfer your pics. Oh, and your selected colourway? That's anyone's guess, as the Charmera comes in seven mystery colours, including a "secret", rare transparent green cover. <a class="view-deal button" href="https://www.amazon.com.au/CHARMERA-Keychain-Digital-Camera-Collectable/dp/B0FKBDT8FR" target="_blank" rel="nofollow" data-dimension112="9ed57654-7bfc-11f1-a9fe-71756773db15" data-action="Deal Block" data-label="Charmera" data-dimension48="Charmera" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="9ed576c2-7bfc-11f1-a36c-2b3c85585807" data-action="Deal Block" data-label="Go 3S (128 GB)" data-dimension48="Go 3S (128 GB)" data-dimension25="$524.99" href="https://www.amazon.com.au/Insta360-GO-Hands-Free-Stabilization-Waterproof/dp/B0D3WLV9Q1" 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="TLsFVoVyyJ4orkwY3cYceH" name="insta360-go-3s--128-gb-black-4k-tiny-por-7b8476e7-c419-4649-9706-fd95eea98f22.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TLsFVoVyyJ4orkwY3cYceH.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Insta360-GO-Hands-Free-Stabilization-Waterproof/dp/B0D3WLV9Q1" target="_blank" rel="nofollow" data-dimension112="9ed576c2-7bfc-11f1-a36c-2b3c85585807" data-action="Deal Block" data-label="Go 3S (128 GB)" data-dimension48="Go 3S (128 GB)" data-dimension25="$524.99">Go 3S (128 GB): was $769.99 now $524.99</a></strong><br>Capturing 4K content just got cuter with this tiny Insta360 Go 3S camera. It's totally magnetic, so you can stick it to most surfaces and capture 360-degree POVs. Now discounted on Amazon, this bundle is great for budding content creators, adventurers, and risk-takers on the go.<a class="view-deal button" href="https://www.amazon.com.au/Insta360-GO-Hands-Free-Stabilization-Waterproof/dp/B0D3WLV9Q1" target="_blank" rel="nofollow" data-dimension112="9ed576c2-7bfc-11f1-a36c-2b3c85585807" data-action="Deal Block" data-label="Go 3S (128 GB)" data-dimension48="Go 3S (128 GB)" data-dimension25="$524.99">View Deal</a></p></div><div class="product"><a data-dimension112="9ed5773a-7bfc-11f1-8768-811319a3307e" data-action="Deal Block" data-label="Instax SQ1" data-dimension48="Instax SQ1" data-dimension25="$169" href="https://www.amazon.com.au/Fujifilm-Instax-SQ1-Glacier-Instant/dp/B08H89FP2P" 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:85.20%;"><img id="X2Zd6opS32PLuCAmuHeePY" name="Instax SQUARE SQ1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/X2Zd6opS32PLuCAmuHeePY.jpg" mos="" align="middle" fullscreen="" width="1500" height="1278" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Slashing a nice 15% off, this Instax SQ1 would be a fun gift for those snap-happy folks in your life. As part of the Square lineup of Instax cameras, it produces square prints as opposed to the credit card-sized ones of the Mini 12.<a class="view-deal button" href="https://www.amazon.com.au/Fujifilm-Instax-SQ1-Glacier-Instant/dp/B08H89FP2P" target="_blank" rel="nofollow" data-dimension112="9ed5773a-7bfc-11f1-8768-811319a3307e" data-action="Deal Block" data-label="Instax SQ1" data-dimension48="Instax SQ1" data-dimension25="$169">View Deal</a></p></div><div class="product"><a data-dimension112="9ed5785c-7bfc-11f1-b4d1-11a1302beddf" data-action="Deal Block" data-label="Go Gen 2" data-dimension48="Go Gen 2" data-dimension25="$99" href="https://www.amazon.com.au/Polaroid-Generation-Instant-Camera-Compatible/dp/B0F5HXJGDY" 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:110.00%;"><img id="zYw4RMKimdXeWMstT2Cqe4" name="Polaroid Go Gen 2 GRID" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zYw4RMKimdXeWMstT2Cqe4.jpg" mos="" align="middle" fullscreen="" width="500" height="550" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Scoring a <a href="https://www.tomsguide.com/cameras-photography/polaroid-go-gen-2-review" data-dimension112="9ed5785c-7bfc-11f1-b4d1-11a1302beddf" data-action="Deal Block" data-label="Go Gen 2" data-dimension48="Go Gen 2" data-dimension25="$99">nice 4.5 stars in our review</a>, the Polaroid Go Gen 2 is a cute, easy-to-use camera. Improving on the first-generation model, the Go Gen 2 introduces a new double-exposure mode for creative shots, has a self-timer and a selfie mirror, and has a decent battery life. Plus, it's supposedly so small, it'll fit in your pocket, and you can take it everywhere. The only caveat? You'll need to purchase Polaroid's compatible Go film separately, which is <a href="https://www.amazon.com.au/Polaroid-Originals-Color-Film-Compatible/dp/B096MJ9LYK" target="_blank">AU$31.41 on Amazon for a double pack</a>. <a class="view-deal button" href="https://www.amazon.com.au/Polaroid-Generation-Instant-Camera-Compatible/dp/B0F5HXJGDY" target="_blank" rel="nofollow" data-dimension112="9ed5785c-7bfc-11f1-b4d1-11a1302beddf" data-action="Deal Block" data-label="Go Gen 2" data-dimension48="Go Gen 2" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="9ed57942-7bfc-11f1-bb87-13b7bd1d2c52" data-action="Deal Block" data-label="Pixpro C1 Digital Camera" data-dimension48="Pixpro C1 Digital Camera" data-dimension25="$147.36" href="https://www.amazon.com.au/KODAK-Pixpro-C1-Ultra-Compact-Digital/dp/B0DY8BRMM5" 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:86.20%;"><img id="oqywc5qJBxrLyDQK4Aq5uW" name="kodak-pixpro-c1--ultracompact-digital-ca-7d0ea747-5dcc-413d-a6bf-e0ca8ebc1dbe.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/oqywc5qJBxrLyDQK4Aq5uW.jpg" mos="" align="middle" fullscreen="" width="500" height="431" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/KODAK-Pixpro-C1-Ultra-Compact-Digital/dp/B0DY8BRMM5" target="_blank" rel="nofollow" data-dimension112="9ed57942-7bfc-11f1-bb87-13b7bd1d2c52" data-action="Deal Block" data-label="Pixpro C1 Digital Camera" data-dimension48="Pixpro C1 Digital Camera" data-dimension25="$147.36">Pixpro C1 Digital Camera: was $200 now $147.36</a></strong><br>The Kodak PIXPRO C1 is a highly compact digital camera and it's portable, so you can take it anywhere. There’s a dedicated flip-up screen for taking selfies, and it's perfect for anyone who wants to take pictures without taking up their phone storage. <a class="view-deal button" href="https://www.amazon.com.au/KODAK-Pixpro-C1-Ultra-Compact-Digital/dp/B0DY8BRMM5" target="_blank" rel="nofollow" data-dimension112="9ed57942-7bfc-11f1-bb87-13b7bd1d2c52" data-action="Deal Block" data-label="Pixpro C1 Digital Camera" data-dimension48="Pixpro C1 Digital Camera" data-dimension25="$147.36">View Deal</a></p></div><div class="product"><a data-dimension112="9ed579b0-7bfc-11f1-b699-a9293ae6f487" data-action="Deal Block" data-label="Snap" data-dimension48="Snap" data-dimension25="$89" href="https://www.amazon.com.au/Camp-Snap-Digital-Screen-Free-Adventure/dp/B0FTF8XFM2/ref=sr_1_5" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1600px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="9KYhxDw5B7di6S6Mrb8FCa" name="Camp Snap" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9KYhxDw5B7di6S6Mrb8FCa.jpg" mos="" align="middle" fullscreen="" width="1600" height="1600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I was introduced to this camera during a family trip, and frankly, I fell in love with it. In a design similar to disposable cameras, <a href="https://www.tomsguide.com/cameras-photography/camp-snap-screen-free-digital-camera-review" data-dimension112="9ed579b0-7bfc-11f1-b699-a9293ae6f487" data-action="Deal Block" data-label="Snap" data-dimension48="Snap" data-dimension25="$89">Camp Snap</a> is a digital point-and-shoot without a viewfinder. It also takes photos with a similar, disposable film feel, all without needing to send the roll away for developing. What's more, it can save up to 2,000 photos with its included SD card and comes with a USB-C charging and transfer cord. <a class="view-deal button" href="https://www.amazon.com.au/Camp-Snap-Digital-Screen-Free-Adventure/dp/B0FTF8XFM2/ref=sr_1_5" target="_blank" rel="nofollow" data-dimension112="9ed579b0-7bfc-11f1-b699-a9293ae6f487" data-action="Deal Block" data-label="Snap" data-dimension48="Snap" data-dimension25="$89">View Deal</a></p></div><div data-widget-type="multimodelreview" data-model-name="FujiFilm Instax Mini 9,Kodak Charmera,Camp Snap" data-widget-title="Today's best cheap camera deals"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Skip the café: I've found 15 piping-hot Prime Day coffee machine deals for barista-quality brews at home ]]></title>
                                                                                                <dc:content><![CDATA[ <p>ICYMI, it's <a href="https://www.tomsguide.com/au/news/best-prime-day-deals-and-sales" target="_blank">Amazon Prime Day</a>, and that means all the best deals can be found at the e-commerce retailer. Prices have been sliced across almost every category, including some of the <a href="https://www.tomsguide.com/home/coffee-makers/ive-tested-43-coffeemakers-in-two-years-but-id-only-spend-my-own-money-on-these-nine">best coffee machines</a>. </p><p>Now, I don't necessarily consider myself a coffee snob, but I cannot begin to express how vital it is to start your day with a good cup o' joe. What's even more important, though, is having an excellent machine that does the job — and does it well. </p><p>Whether you prefer a fully automatic machine, with a built-in grinder and steam wand, or something a bit more manual, I've got you covered with my handpicked Prime Day coffee machine deals below. I've even listed some top-rated pod machines for those who prefer that one-touch convenience in the mornings. </p><p>Personally, I cannot live without my Ninja Luxe Cafe machine, and while it is currently out of stock, during Prime Day, it reached an all-time low price of <a href="https://www.amazon.com.au/dp/B0FLDT92Q6/" target="_blank"><del>AU$799.99</del> AU$524.20 in the Stainless Steel colourway</a>. There's also a <a href="https://www.amazon.com.au/DeLonghi-ENV90-Y-Single-Serve-Centrifusion-Technology/dp/B0BSXQ6SYD" target="_blank">huge 62% off the beloved Nespresso Vertuo Pop in Mango Yellow</a>, bringing it down to just AU$88. </p><p>I've also spotted some nice discounts on coffee-focused accessories, like a tidy <a href="https://www.amazon.com.au/Creuset-Stoneware-Cafeti%C3%A8re-Stainless-60706082200003/dp/B0DT1LSC81" target="_blank">34% off a Le Creuset French Press</a>, and <a href="https://www.amazon.com.au/Breville-Bcg600Sil-Control-Grinder-Stainless/dp/B00MNJM1RG" target="_blank">31% off Breville's Pro Control coffee grinder</a>. If none of the deals below tickle your caffeine-fuelled fancy, make sure to check out our <a href="https://www.tomsguide.com/live/news/amazon-prime-day-2026-au" target="_blank"><strong>live Prime Day coverage</strong></a> to find more of the best coffee machine bargains available. </p><p>You'll need to act fast to secure these discounts, though, as Prime Day will come to an end on <strong>Monday, July 13, </strong>and these deals won't stick around long after. </p><h3 class="article-body__section" id="section-best-coffee-machine-deals"><span>Best coffee machine deals</span></h3><div class="product"><a data-dimension112="521fc9cc-7b2f-11f1-85ac-ddde7bd9e6d4" data-action="Deal Block" data-label="the Aroma Style" data-dimension48="the Aroma Style" data-dimension25="$92.65" href="https://www.amazon.com.au/Breville-LCM700BSS2JAN1-Aroma-Style-Electronic/dp/B08VD7779D/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1892px;"><p class="vanilla-image-block" style="padding-top:99.95%;"><img id="PkWe9TEwuiU4a2AZcFHnET" name="Breville_The_Aroma_Style" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PkWe9TEwuiU4a2AZcFHnET.jpg" mos="" align="middle" fullscreen="" width="1892" height="1891" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Breville-LCM700BSS2JAN1-Aroma-Style-Electronic/dp/B08VD7779D/" target="_blank" rel="nofollow" data-dimension112="521fc9cc-7b2f-11f1-85ac-ddde7bd9e6d4" data-action="Deal Block" data-label="the Aroma Style" data-dimension48="the Aroma Style" data-dimension25="$92.65">the Aroma Style: was $109.95 now $92.65</a></strong><br>Wake up to a freshly brewed pot of coffee every morning with this programmable drip-style coffee maker. You can set it to brew at a specific time and even customise the strength of your coffee. For those cold days working from home, it will also keep your coffee warm throughout the morning. <a class="view-deal button" href="https://www.amazon.com.au/Breville-LCM700BSS2JAN1-Aroma-Style-Electronic/dp/B08VD7779D/" target="_blank" rel="nofollow" data-dimension112="521fc9cc-7b2f-11f1-85ac-ddde7bd9e6d4" data-action="Deal Block" data-label="the Aroma Style" data-dimension48="the Aroma Style" data-dimension25="$92.65">View Deal</a></p></div><div class="product"><a data-dimension112="521fca3a-7b2f-11f1-89fe-cb8a2a0cee98" data-action="Deal Block" data-label="Barista Express" data-dimension48="Barista Express" data-dimension25="$588" href="https://www.amazon.com.au/Breville-Barista-Espresso-Charcoal-BES870CHR/dp/B09DP4PSX1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="jxMpvdkU6vrpYK8p5NY8LM" name="breville-barista-express" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jxMpvdkU6vrpYK8p5NY8LM.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With a nice saving, it's hard to dismiss this Breville coffee machine deal. The Barista Express has a built-in grinder, tamper, and bean hopper, so there's no need to buy a separate grinder or hand tamp. Available in a few colourways under the same listing.<a class="view-deal button" href="https://www.amazon.com.au/Breville-Barista-Espresso-Charcoal-BES870CHR/dp/B09DP4PSX1" target="_blank" rel="nofollow" data-dimension112="521fca3a-7b2f-11f1-89fe-cb8a2a0cee98" data-action="Deal Block" data-label="Barista Express" data-dimension48="Barista Express" data-dimension25="$588">View Deal</a></p></div><div class="product"><a data-dimension112="521fca9e-7b2f-11f1-a275-0bbdbfb76371" data-action="Deal Block" data-label="Barista Touch Impress" data-dimension48="Barista Touch Impress" data-dimension25="$1895" href="https://www.amazon.com.au/Breville-Barista-Espresso-Stainless-BES881BSS/dp/B0BYSMHQ7L" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="rJyR2ijSj3KsiYRam57xo9" name="breville barista touch" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rJyR2ijSj3KsiYRam57xo9.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Breville's Barista Touch Impress does most of the work of making a coffee for you (however you take it), with a few simple touches of the digital touchscreen. The result is beautiful, consistently delicious coffee time after time. This isn't an all-time low price, but this is a fair price to pay for this powerhouse little unit.<a class="view-deal button" href="https://www.amazon.com.au/Breville-Barista-Espresso-Stainless-BES881BSS/dp/B0BYSMHQ7L" target="_blank" rel="nofollow" data-dimension112="521fca9e-7b2f-11f1-a275-0bbdbfb76371" data-action="Deal Block" data-label="Barista Touch Impress" data-dimension48="Barista Touch Impress" data-dimension25="$1895">View Deal</a></p></div><div class="product"><a data-dimension112="521fcb0c-7b2f-11f1-af47-ffdf44a36cc6" data-action="Deal Block" data-label="Dedica Duo" data-dimension48="Dedica Duo" data-dimension25="$276.95" href="https://www.amazon.com.au/dp/B0GN8JY7C5/ref=sspa_dk_detail_0" 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="m4NjxUXJrDKtmtskSm9BnL" name="delonghi-dedica-duo--manual-espresso-mac-5c6884d6-893e-4a52-87db-c2af916c8332.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/m4NjxUXJrDKtmtskSm9BnL.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Brew two shots of perfect espresso with De'Longhi's Dedica Duo machine. It's a little more manual than others on this list, and takes up a smaller footprint too, so it would be better suited to those who want a more hands-on brewing experience. <a class="view-deal button" href="https://www.amazon.com.au/dp/B0GN8JY7C5/ref=sspa_dk_detail_0" target="_blank" rel="nofollow" data-dimension112="521fcb0c-7b2f-11f1-af47-ffdf44a36cc6" data-action="Deal Block" data-label="Dedica Duo" data-dimension48="Dedica Duo" data-dimension25="$276.95">View Deal</a></p></div><div class="product"><a data-dimension112="521fcb70-7b2f-11f1-9161-fb38403c33bf" data-action="Deal Block" data-label="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension48="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension25="$1399" href="https://www.amazon.com.au/dp/B0H6ZX8YTV/ref=sspa_dk_detail_7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:347px;"><p class="vanilla-image-block" style="padding-top:144.09%;"><img id="72QcazUZQULTwi3DcwobhL" name="kitchenaid-kf6-fully-automatic-espresso--829652eb-b136-4885-8878-6e38fa796641.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/72QcazUZQULTwi3DcwobhL.jpg" mos="" align="middle" fullscreen="" width="347" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0H6ZX8YTV/ref=sspa_dk_detail_7" target="_blank" rel="nofollow" data-dimension112="521fcb70-7b2f-11f1-9161-fb38403c33bf" data-action="Deal Block" data-label="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension48="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension25="$1399">KF6 Fully Automatic Espresso Machine (Porcelain): was $1799 now $1399</a></strong><br>One touch coffee coming right up! KitchenAid's fully automatic machine takes the guesswork out of your perfect cup, with 20+ recipe presets available in one press of the touchscreen. Plus, with its milk container, you can steam or foam your milk to your preferred texture.<a class="view-deal button" href="https://www.amazon.com.au/dp/B0H6ZX8YTV/ref=sspa_dk_detail_7" target="_blank" rel="nofollow" data-dimension112="521fcb70-7b2f-11f1-9161-fb38403c33bf" data-action="Deal Block" data-label="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension48="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension25="$1399">View Deal</a></p></div><div class="product"><a data-dimension112="521fcbd4-7b2f-11f1-b239-03e250e19dea" data-action="Deal Block" data-label="Luxe Café Premier" data-dimension48="Luxe Café Premier" data-dimension25="$524.2" href="https://www.amazon.com.au/dp/B0FLDT92Q6/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1080px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="N9atrWpibfr6Z8oyr3nYB5" name="Ninja Luxe Cafe Pro" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/N9atrWpibfr6Z8oyr3nYB5.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0FLDT92Q6/" target="_blank" rel="nofollow" data-dimension112="521fcbd4-7b2f-11f1-b239-03e250e19dea" data-action="Deal Block" data-label="Luxe Café Premier" data-dimension48="Luxe Café Premier" data-dimension25="$524.2">Luxe Café Premier: was $799.99 now $524.2</a></strong><br>This 3-in-1 coffee machine brews quality espresso, drip coffee and even fast cold brew using its Barista Assist technology, an integrated grinder and weight-based dosing. As an iced coffee all-year-round enjoyer, the Ninja Luxe Cafe has changed my life, thanks to its cold-pressed espresso presets and its specialty Dual Froth system with a cold-foam setting. <a class="view-deal button" href="https://www.amazon.com.au/dp/B0FLDT92Q6/" target="_blank" rel="nofollow" data-dimension112="521fcbd4-7b2f-11f1-b239-03e250e19dea" data-action="Deal Block" data-label="Luxe Café Premier" data-dimension48="Luxe Café Premier" data-dimension25="$524.2">View Deal</a></p></div><div class="product"><a data-dimension112="521fcc38-7b2f-11f1-8cfb-6d4851cfaa32" data-action="Deal Block" data-label="Vertuo Up Bundle (Ink Black)" data-dimension48="Vertuo Up Bundle (Ink Black)" data-dimension25="$299" href="https://www.amazon.com.au/Nespresso-Vertuo-Bundle-Breville-BNV650BLK4IAN1/dp/B0GQBLW7WT" 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="FNpZ3mTXserYZLV8R5p5hX" name="nespresso-vertuo-up-bundle-by-breville-i-afb3e027-65e0-48f0-92f9-437a812b5dd5.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FNpZ3mTXserYZLV8R5p5hX.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Nespresso-Vertuo-Bundle-Breville-BNV650BLK4IAN1/dp/B0GQBLW7WT" target="_blank" rel="nofollow" data-dimension112="521fcc38-7b2f-11f1-8cfb-6d4851cfaa32" data-action="Deal Block" data-label="Vertuo Up Bundle (Ink Black)" data-dimension48="Vertuo Up Bundle (Ink Black)" data-dimension25="$299">Vertuo Up Bundle (Ink Black): was $439 now $299</a></strong><br>I love a Nespresso Vertuo pod machine for ease, and this new sleek design has me considering an upgrade this Prime Day. The Nespresso Vertuo Up uses the larger mug-sized pods, and this bundle has a sample pack of 12 to try. It also comes with an Aeroccino3 milk frother for total peace of mind when it comes to your morning brew. <a class="view-deal button" href="https://www.amazon.com.au/Nespresso-Vertuo-Bundle-Breville-BNV650BLK4IAN1/dp/B0GQBLW7WT" target="_blank" rel="nofollow" data-dimension112="521fcc38-7b2f-11f1-8cfb-6d4851cfaa32" data-action="Deal Block" data-label="Vertuo Up Bundle (Ink Black)" data-dimension48="Vertuo Up Bundle (Ink Black)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="521fcca6-7b2f-11f1-b2cb-4d276c41ab8a" data-action="Deal Block" data-label="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension48="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension25="$255.18" href="https://www.amazon.com.au/Nespresso-Machine-Breville-Aeroccino3-Frother/dp/B0BYSNWY9R/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="H39w9EPZGsxdbkNLhky97T" name="nespresso-vertuo-pop-coconut.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/H39w9EPZGsxdbkNLhky97T.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Nespresso-Machine-Breville-Aeroccino3-Frother/dp/B0BYSNWY9R/" target="_blank" rel="nofollow" data-dimension112="521fcca6-7b2f-11f1-b2cb-4d276c41ab8a" data-action="Deal Block" data-label="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension48="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension25="$255.18">Vertuo Pop and Aeroccino3 Bundle (Coconut White): was $319 now $255.18</a></strong><br>While we've seen this machine for cheaper, you can't surpass the one-touch convenience of a Nespresso Vertuo Pop. Now available in this Coconut White colourway at Amazon with a complimentary coffee pod sample kit and milk frother. <a class="view-deal button" href="https://www.amazon.com.au/Nespresso-Machine-Breville-Aeroccino3-Frother/dp/B0BYSNWY9R/" target="_blank" rel="nofollow" data-dimension112="521fcca6-7b2f-11f1-b2cb-4d276c41ab8a" data-action="Deal Block" data-label="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension48="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension25="$255.18">View Deal</a></p></div><div class="product"><a data-dimension112="521fcd0a-7b2f-11f1-9d14-71ad4e7627e6" data-action="Deal Block" data-label="Vertuo Pop (Mango Yellow)" data-dimension48="Vertuo Pop (Mango Yellow)" data-dimension25="$88" href="https://www.amazon.com.au/DeLonghi-ENV90-Y-Single-Serve-Centrifusion-Technology/dp/B0BSXQ6SYD" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FEi2bRH6CRffWSeK7XtQuk" name="Untitled-1" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FEi2bRH6CRffWSeK7XtQuk.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/DeLonghi-ENV90-Y-Single-Serve-Centrifusion-Technology/dp/B0BSXQ6SYD" target="_blank" rel="nofollow" data-dimension112="521fcd0a-7b2f-11f1-9d14-71ad4e7627e6" data-action="Deal Block" data-label="Vertuo Pop (Mango Yellow)" data-dimension48="Vertuo Pop (Mango Yellow)" data-dimension25="$88">Vertuo Pop (Mango Yellow): was $229 now $88</a></strong><br>This Nespresso Vertuo Pop machine is hard to pass up at a considerable 62% off in this fun Mango Yellow colourway. With one-touch convenience, you can brew up to four different cup sizes from a range of great Nespresso coffee pods. You'll also receive a 12-pack of coffee capsule samples to try. <a class="view-deal button" href="https://www.amazon.com.au/DeLonghi-ENV90-Y-Single-Serve-Centrifusion-Technology/dp/B0BSXQ6SYD" target="_blank" rel="nofollow" data-dimension112="521fcd0a-7b2f-11f1-9d14-71ad4e7627e6" data-action="Deal Block" data-label="Vertuo Pop (Mango Yellow)" data-dimension48="Vertuo Pop (Mango Yellow)" data-dimension25="$88">View Deal</a></p></div><div class="product"><a data-dimension112="521fcd6e-7b2f-11f1-a830-f99aa36cd78f" data-action="Deal Block" data-label="Vertuo Creatista capsule coffee machine" data-dimension48="Vertuo Creatista capsule coffee machine" data-dimension25="$747" href="https://www.amazon.com.au/Nespresso-Creatista-Espresso-Machine-Breville/dp/B0CG13HT92" 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="BFo5YmpdXeCDdA5deUs4CK" name="creatista" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BFo5YmpdXeCDdA5deUs4CK.png" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Nespresso-Creatista-Espresso-Machine-Breville/dp/B0CG13HT92" target="_blank" rel="nofollow" data-dimension112="521fcd6e-7b2f-11f1-a830-f99aa36cd78f" data-action="Deal Block" data-label="Vertuo Creatista capsule coffee machine" data-dimension48="Vertuo Creatista capsule coffee machine" data-dimension25="$747">Vertuo Creatista capsule coffee machine: was $1099 now $747</a></strong><br>While our <a href="https://www.tomsguide.com/home/coffee-makers/nespresso-vertuo-creatista-review">Nespresso Vertuo Creatista review</a> noted that its price was a concern, this discount significantly lessens that issue. We praised the machine's integrated milk frother and its use of Vertuo pods, which offer various cup and mug sizes. The Creatista is also an excellent performer, capable of brewing your morning coffee exceptionally fast. <a class="view-deal button" href="https://www.amazon.com.au/Nespresso-Creatista-Espresso-Machine-Breville/dp/B0CG13HT92" target="_blank" rel="nofollow" data-dimension112="521fcd6e-7b2f-11f1-a830-f99aa36cd78f" data-action="Deal Block" data-label="Vertuo Creatista capsule coffee machine" data-dimension48="Vertuo Creatista capsule coffee machine" data-dimension25="$747">View Deal</a></p></div><div class="product"><a data-dimension112="521fcdd2-7b2f-11f1-912f-6fcbf46dc927" data-action="Deal Block" data-label="Baristina Espresso Machine" data-dimension48="Baristina Espresso Machine" data-dimension25="$418.99" href="https://www.amazon.com.au/dp/B0GJTM6353/ref=sspa_dk_detail_0" 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="7NhTNsWqtUXeHAmhoQexsL" name="philips-baristina-espresso-machine-grind-e10f856e-739c-4e05-9c6b-bc4bb8eeb15d.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7NhTNsWqtUXeHAmhoQexsL.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0GJTM6353/ref=sspa_dk_detail_0" target="_blank" rel="nofollow" data-dimension112="521fcdd2-7b2f-11f1-912f-6fcbf46dc927" data-action="Deal Block" data-label="Baristina Espresso Machine" data-dimension48="Baristina Espresso Machine" data-dimension25="$418.99">Baristina Espresso Machine: was $599 now $418.99</a></strong><br>I have never been more gobsmacked than watching this machine do its thing (a.k.a pull an espresso shot) and do it well, without any human intervention. Simply insert the portafilter, and the machine will grind, tamp and brew your coffee. The way it moves from one side to the other is simply magic, and while we haven't reviewed it just yet, I'm sure any coffee from the Philips Baristina machine would be pretty fantastic too. <a class="view-deal button" href="https://www.amazon.com.au/dp/B0GJTM6353/ref=sspa_dk_detail_0" target="_blank" rel="nofollow" data-dimension112="521fcdd2-7b2f-11f1-912f-6fcbf46dc927" data-action="Deal Block" data-label="Baristina Espresso Machine" data-dimension48="Baristina Espresso Machine" data-dimension25="$418.99">View Deal</a></p></div><div class="product"><a data-dimension112="521fce40-7b2f-11f1-a9c2-737594befe59" data-action="Deal Block" data-label="Barista Max Coffee Machine" data-dimension48="Barista Max Coffee Machine" data-dimension25="$414.99" href="https://www.amazon.com.au/dp/B088NNSF8P/ref=sspa_dk_detail_4" 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="tnHcXQwz26ANKGHJCvwqpL" name="sunbeam-barista-max-coffee-machine--manu-5ec1adb2-91a4-406c-979f-9637661308aa.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tnHcXQwz26ANKGHJCvwqpL.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B088NNSF8P/ref=sspa_dk_detail_4" target="_blank" rel="nofollow" data-dimension112="521fce40-7b2f-11f1-a9c2-737594befe59" data-action="Deal Block" data-label="Barista Max Coffee Machine" data-dimension48="Barista Max Coffee Machine" data-dimension25="$414.99">Barista Max Coffee Machine: was $649 now $414.99</a></strong><br>We haven't reviewed this particular coffee machine from Sunbeam, but based on a wealth of positive customer reviews, we feel we're able to recommend it. Not least because of its (already) low price that has now been discounted further. Offering similar specs to competitors, you get a 15 bar pump, integrated bean grinder and milk frother, and a 58mm group head. If your kitchen is missing a cafe-style home coffee machine, this could be the one to fill the gap.<a class="view-deal button" href="https://www.amazon.com.au/dp/B088NNSF8P/ref=sspa_dk_detail_4" target="_blank" rel="nofollow" data-dimension112="521fce40-7b2f-11f1-a9c2-737594befe59" data-action="Deal Block" data-label="Barista Max Coffee Machine" data-dimension48="Barista Max Coffee Machine" data-dimension25="$414.99">View Deal</a></p></div><h3 class="article-body__section" id="section-best-coffee-machine-accessories"><span>Best coffee machine accessories</span></h3><div class="product"><a data-dimension112="521fcf08-7b2f-11f1-8de4-0303d796e66d" data-action="Deal Block" data-label="Stoneware French Press" data-dimension48="Stoneware French Press" data-dimension25="$85.80" href="https://www.amazon.com.au/Creuset-Stoneware-Cafeti%C3%A8re-Stainless-60706082200003/dp/B0DT1LSC81" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:128.13%;"><img id="nd3m6GvEiXWtn4QE9RMEzb" name="51WTZfp5mdL._AC_SX679_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nd3m6GvEiXWtn4QE9RMEzb.jpg" mos="" align="middle" fullscreen="" width="679" height="870" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Creuset-Stoneware-Cafeti%C3%A8re-Stainless-60706082200003/dp/B0DT1LSC81" target="_blank" rel="nofollow" data-dimension112="521fcf08-7b2f-11f1-8de4-0303d796e66d" data-action="Deal Block" data-label="Stoneware French Press" data-dimension48="Stoneware French Press" data-dimension25="$85.80">Stoneware French Press: was $130 now $85.80</a></strong><br>Look, you could probably get a French press for a fraction of the price, but I can't dismiss a 34% discount on the coveted brand that is Le Creuset. Available in a range of colours at varying discounts under the same listing, this French press is long-lasting, sturdy and dishwasher safe, thanks to its stoneware construction. <a class="view-deal button" href="https://www.amazon.com.au/Creuset-Stoneware-Cafeti%C3%A8re-Stainless-60706082200003/dp/B0DT1LSC81" target="_blank" rel="nofollow" data-dimension112="521fcf08-7b2f-11f1-8de4-0303d796e66d" data-action="Deal Block" data-label="Stoneware French Press" data-dimension48="Stoneware French Press" data-dimension25="$85.80">View Deal</a></p></div><div class="product"><a data-dimension112="521fcf6c-7b2f-11f1-8c84-edcc1b77e297" data-action="Deal Block" data-label="Baristina Milk Frother" data-dimension48="Baristina Milk Frother" data-dimension25="$119.2" href="https://www.amazon.com.au/Philips-Baristina-Milk-Frother-Perfectly/dp/B0GJTPBSMP/" 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="rH2CNUf7wBHSMtbQdFYqiL" name="philips-baristina-milk-frother--foam-mil-581704a0-7896-4401-90ac-2ab1ddf39888.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rH2CNUf7wBHSMtbQdFYqiL.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Partnering perfectly with any Philips coffee machine (or any machine without a steam wand), this Baristina milk frother is stylish, speedy and simple to use. Just pour in your preferred milk, touch the button and you'll be taken to foamy heaven. <a class="view-deal button" href="https://www.amazon.com.au/Philips-Baristina-Milk-Frother-Perfectly/dp/B0GJTPBSMP/" target="_blank" rel="nofollow" data-dimension112="521fcf6c-7b2f-11f1-8c84-edcc1b77e297" data-action="Deal Block" data-label="Baristina Milk Frother" data-dimension48="Baristina Milk Frother" data-dimension25="$119.2">View Deal</a></p></div><div class="product"><a data-dimension112="521fcfd0-7b2f-11f1-8777-192aa13a8a08" data-action="Deal Block" data-label="Dose Control Pro Coffee Grinder" data-dimension48="Dose Control Pro Coffee Grinder" data-dimension25="$198" href="https://www.amazon.com.au/Breville-Bcg600Sil-Control-Grinder-Stainless/dp/B00MNJM1RG" 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="3iybAJZ6tLg6fN5Pedcg9m" name="Breville Dose Control Pro" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3iybAJZ6tLg6fN5Pedcg9m.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Breville-Bcg600Sil-Control-Grinder-Stainless/dp/B00MNJM1RG" target="_blank" rel="nofollow" data-dimension112="521fcfd0-7b2f-11f1-8777-192aa13a8a08" data-action="Deal Block" data-label="Dose Control Pro Coffee Grinder" data-dimension48="Dose Control Pro Coffee Grinder" data-dimension25="$198">Dose Control Pro Coffee Grinder: was $289 now $198</a></strong><br>If you've already got an elite coffee set up but need a grinder to make all your grinding dreams come true, I'd suggest this one from Breville. The <a href="https://www.tomsguide.com/home/home-appliances/breville-sage-dose-control-pro-review" target="_blank">Breville Dose Control Pro</a> machine has over 60 grind settings for precise control over how fine you want your grounds. We gave it 4 stars in our review, as it does exactly what it says on the tin — and that's grind coffee beans.<a class="view-deal button" href="https://www.amazon.com.au/Breville-Bcg600Sil-Control-Grinder-Stainless/dp/B00MNJM1RG" target="_blank" rel="nofollow" data-dimension112="521fcfd0-7b2f-11f1-8777-192aa13a8a08" data-action="Deal Block" data-label="Dose Control Pro Coffee Grinder" data-dimension48="Dose Control Pro Coffee Grinder" data-dimension25="$198">View Deal</a></p></div><ul><li><a href="#main">Back to the top ⤴</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/home/coffee-makers/skip-the-cafe-ive-found-15-piping-hot-prime-day-coffee-machine-deals-for-barista-quality-brews-at-home</link>
                                                                            <description>
                            <![CDATA[ Shopping for a new espresso machine this Prime Day? I've got you covered with coffee makers and accessories from Breville, De'Longhi, Nespresso, Ninja and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">u4xkYXu9JiMSYzcXyUBxcG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/3rx235Xy8ok3WCsa2aGeUN-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 09 Jul 2026 03:00:55 +0000</pubDate>                                                                                                                                <updated>Fri, 10 Jul 2026 00:01:44 +0000</updated>
                                                                                                                                            <category><![CDATA[Coffee Makers]]></category>
                                                    <category><![CDATA[Home]]></category>
                                                    <category><![CDATA[Home Appliances]]></category>
                                                    <category><![CDATA[Kitchen & Dining]]></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/3rx235Xy8ok3WCsa2aGeUN-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[ninja cafe luxe pro prime day]]></media:description>                                                            <media:text><![CDATA[ninja cafe luxe pro prime day]]></media:text>
                                <media:title type="plain"><![CDATA[ninja cafe luxe pro prime day]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/3rx235Xy8ok3WCsa2aGeUN-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>ICYMI, it's <a href="https://www.tomsguide.com/au/news/best-prime-day-deals-and-sales" target="_blank">Amazon Prime Day</a>, and that means all the best deals can be found at the e-commerce retailer. Prices have been sliced across almost every category, including some of the <a href="https://www.tomsguide.com/home/coffee-makers/ive-tested-43-coffeemakers-in-two-years-but-id-only-spend-my-own-money-on-these-nine">best coffee machines</a>. </p><p>Now, I don't necessarily consider myself a coffee snob, but I cannot begin to express how vital it is to start your day with a good cup o' joe. What's even more important, though, is having an excellent machine that does the job — and does it well. </p><p>Whether you prefer a fully automatic machine, with a built-in grinder and steam wand, or something a bit more manual, I've got you covered with my handpicked Prime Day coffee machine deals below. I've even listed some top-rated pod machines for those who prefer that one-touch convenience in the mornings. </p><p>Personally, I cannot live without my Ninja Luxe Cafe machine, and while it is currently out of stock, during Prime Day, it reached an all-time low price of <a href="https://www.amazon.com.au/dp/B0FLDT92Q6/" target="_blank"><del>AU$799.99</del> AU$524.20 in the Stainless Steel colourway</a>. There's also a <a href="https://www.amazon.com.au/DeLonghi-ENV90-Y-Single-Serve-Centrifusion-Technology/dp/B0BSXQ6SYD" target="_blank">huge 62% off the beloved Nespresso Vertuo Pop in Mango Yellow</a>, bringing it down to just AU$88. </p><p>I've also spotted some nice discounts on coffee-focused accessories, like a tidy <a href="https://www.amazon.com.au/Creuset-Stoneware-Cafeti%C3%A8re-Stainless-60706082200003/dp/B0DT1LSC81" target="_blank">34% off a Le Creuset French Press</a>, and <a href="https://www.amazon.com.au/Breville-Bcg600Sil-Control-Grinder-Stainless/dp/B00MNJM1RG" target="_blank">31% off Breville's Pro Control coffee grinder</a>. If none of the deals below tickle your caffeine-fuelled fancy, make sure to check out our <a href="https://www.tomsguide.com/live/news/amazon-prime-day-2026-au" target="_blank"><strong>live Prime Day coverage</strong></a> to find more of the best coffee machine bargains available. </p><p>You'll need to act fast to secure these discounts, though, as Prime Day will come to an end on <strong>Monday, July 13, </strong>and these deals won't stick around long after. </p><h3 class="article-body__section" id="section-best-coffee-machine-deals"><span>Best coffee machine deals</span></h3><div class="product"><a data-dimension112="521fc9cc-7b2f-11f1-85ac-ddde7bd9e6d4" data-action="Deal Block" data-label="the Aroma Style" data-dimension48="the Aroma Style" data-dimension25="$92.65" href="https://www.amazon.com.au/Breville-LCM700BSS2JAN1-Aroma-Style-Electronic/dp/B08VD7779D/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1892px;"><p class="vanilla-image-block" style="padding-top:99.95%;"><img id="PkWe9TEwuiU4a2AZcFHnET" name="Breville_The_Aroma_Style" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PkWe9TEwuiU4a2AZcFHnET.jpg" mos="" align="middle" fullscreen="" width="1892" height="1891" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Breville-LCM700BSS2JAN1-Aroma-Style-Electronic/dp/B08VD7779D/" target="_blank" rel="nofollow" data-dimension112="521fc9cc-7b2f-11f1-85ac-ddde7bd9e6d4" data-action="Deal Block" data-label="the Aroma Style" data-dimension48="the Aroma Style" data-dimension25="$92.65">the Aroma Style: was $109.95 now $92.65</a></strong><br>Wake up to a freshly brewed pot of coffee every morning with this programmable drip-style coffee maker. You can set it to brew at a specific time and even customise the strength of your coffee. For those cold days working from home, it will also keep your coffee warm throughout the morning. <a class="view-deal button" href="https://www.amazon.com.au/Breville-LCM700BSS2JAN1-Aroma-Style-Electronic/dp/B08VD7779D/" target="_blank" rel="nofollow" data-dimension112="521fc9cc-7b2f-11f1-85ac-ddde7bd9e6d4" data-action="Deal Block" data-label="the Aroma Style" data-dimension48="the Aroma Style" data-dimension25="$92.65">View Deal</a></p></div><div class="product"><a data-dimension112="521fca3a-7b2f-11f1-89fe-cb8a2a0cee98" data-action="Deal Block" data-label="Barista Express" data-dimension48="Barista Express" data-dimension25="$588" href="https://www.amazon.com.au/Breville-Barista-Espresso-Charcoal-BES870CHR/dp/B09DP4PSX1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="jxMpvdkU6vrpYK8p5NY8LM" name="breville-barista-express" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jxMpvdkU6vrpYK8p5NY8LM.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With a nice saving, it's hard to dismiss this Breville coffee machine deal. The Barista Express has a built-in grinder, tamper, and bean hopper, so there's no need to buy a separate grinder or hand tamp. Available in a few colourways under the same listing.<a class="view-deal button" href="https://www.amazon.com.au/Breville-Barista-Espresso-Charcoal-BES870CHR/dp/B09DP4PSX1" target="_blank" rel="nofollow" data-dimension112="521fca3a-7b2f-11f1-89fe-cb8a2a0cee98" data-action="Deal Block" data-label="Barista Express" data-dimension48="Barista Express" data-dimension25="$588">View Deal</a></p></div><div class="product"><a data-dimension112="521fca9e-7b2f-11f1-a275-0bbdbfb76371" data-action="Deal Block" data-label="Barista Touch Impress" data-dimension48="Barista Touch Impress" data-dimension25="$1895" href="https://www.amazon.com.au/Breville-Barista-Espresso-Stainless-BES881BSS/dp/B0BYSMHQ7L" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="rJyR2ijSj3KsiYRam57xo9" name="breville barista touch" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rJyR2ijSj3KsiYRam57xo9.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Breville's Barista Touch Impress does most of the work of making a coffee for you (however you take it), with a few simple touches of the digital touchscreen. The result is beautiful, consistently delicious coffee time after time. This isn't an all-time low price, but this is a fair price to pay for this powerhouse little unit.<a class="view-deal button" href="https://www.amazon.com.au/Breville-Barista-Espresso-Stainless-BES881BSS/dp/B0BYSMHQ7L" target="_blank" rel="nofollow" data-dimension112="521fca9e-7b2f-11f1-a275-0bbdbfb76371" data-action="Deal Block" data-label="Barista Touch Impress" data-dimension48="Barista Touch Impress" data-dimension25="$1895">View Deal</a></p></div><div class="product"><a data-dimension112="521fcb0c-7b2f-11f1-af47-ffdf44a36cc6" data-action="Deal Block" data-label="Dedica Duo" data-dimension48="Dedica Duo" data-dimension25="$276.95" href="https://www.amazon.com.au/dp/B0GN8JY7C5/ref=sspa_dk_detail_0" 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="m4NjxUXJrDKtmtskSm9BnL" name="delonghi-dedica-duo--manual-espresso-mac-5c6884d6-893e-4a52-87db-c2af916c8332.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/m4NjxUXJrDKtmtskSm9BnL.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Brew two shots of perfect espresso with De'Longhi's Dedica Duo machine. It's a little more manual than others on this list, and takes up a smaller footprint too, so it would be better suited to those who want a more hands-on brewing experience. <a class="view-deal button" href="https://www.amazon.com.au/dp/B0GN8JY7C5/ref=sspa_dk_detail_0" target="_blank" rel="nofollow" data-dimension112="521fcb0c-7b2f-11f1-af47-ffdf44a36cc6" data-action="Deal Block" data-label="Dedica Duo" data-dimension48="Dedica Duo" data-dimension25="$276.95">View Deal</a></p></div><div class="product"><a data-dimension112="521fcb70-7b2f-11f1-9161-fb38403c33bf" data-action="Deal Block" data-label="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension48="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension25="$1399" href="https://www.amazon.com.au/dp/B0H6ZX8YTV/ref=sspa_dk_detail_7" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:347px;"><p class="vanilla-image-block" style="padding-top:144.09%;"><img id="72QcazUZQULTwi3DcwobhL" name="kitchenaid-kf6-fully-automatic-espresso--829652eb-b136-4885-8878-6e38fa796641.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/72QcazUZQULTwi3DcwobhL.jpg" mos="" align="middle" fullscreen="" width="347" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0H6ZX8YTV/ref=sspa_dk_detail_7" target="_blank" rel="nofollow" data-dimension112="521fcb70-7b2f-11f1-9161-fb38403c33bf" data-action="Deal Block" data-label="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension48="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension25="$1399">KF6 Fully Automatic Espresso Machine (Porcelain): was $1799 now $1399</a></strong><br>One touch coffee coming right up! KitchenAid's fully automatic machine takes the guesswork out of your perfect cup, with 20+ recipe presets available in one press of the touchscreen. Plus, with its milk container, you can steam or foam your milk to your preferred texture.<a class="view-deal button" href="https://www.amazon.com.au/dp/B0H6ZX8YTV/ref=sspa_dk_detail_7" target="_blank" rel="nofollow" data-dimension112="521fcb70-7b2f-11f1-9161-fb38403c33bf" data-action="Deal Block" data-label="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension48="KF6 Fully Automatic Espresso Machine (Porcelain)" data-dimension25="$1399">View Deal</a></p></div><div class="product"><a data-dimension112="521fcbd4-7b2f-11f1-b239-03e250e19dea" data-action="Deal Block" data-label="Luxe Café Premier" data-dimension48="Luxe Café Premier" data-dimension25="$524.2" href="https://www.amazon.com.au/dp/B0FLDT92Q6/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1080px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="N9atrWpibfr6Z8oyr3nYB5" name="Ninja Luxe Cafe Pro" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/N9atrWpibfr6Z8oyr3nYB5.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0FLDT92Q6/" target="_blank" rel="nofollow" data-dimension112="521fcbd4-7b2f-11f1-b239-03e250e19dea" data-action="Deal Block" data-label="Luxe Café Premier" data-dimension48="Luxe Café Premier" data-dimension25="$524.2">Luxe Café Premier: was $799.99 now $524.2</a></strong><br>This 3-in-1 coffee machine brews quality espresso, drip coffee and even fast cold brew using its Barista Assist technology, an integrated grinder and weight-based dosing. As an iced coffee all-year-round enjoyer, the Ninja Luxe Cafe has changed my life, thanks to its cold-pressed espresso presets and its specialty Dual Froth system with a cold-foam setting. <a class="view-deal button" href="https://www.amazon.com.au/dp/B0FLDT92Q6/" target="_blank" rel="nofollow" data-dimension112="521fcbd4-7b2f-11f1-b239-03e250e19dea" data-action="Deal Block" data-label="Luxe Café Premier" data-dimension48="Luxe Café Premier" data-dimension25="$524.2">View Deal</a></p></div><div class="product"><a data-dimension112="521fcc38-7b2f-11f1-8cfb-6d4851cfaa32" data-action="Deal Block" data-label="Vertuo Up Bundle (Ink Black)" data-dimension48="Vertuo Up Bundle (Ink Black)" data-dimension25="$299" href="https://www.amazon.com.au/Nespresso-Vertuo-Bundle-Breville-BNV650BLK4IAN1/dp/B0GQBLW7WT" 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="FNpZ3mTXserYZLV8R5p5hX" name="nespresso-vertuo-up-bundle-by-breville-i-afb3e027-65e0-48f0-92f9-437a812b5dd5.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FNpZ3mTXserYZLV8R5p5hX.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Nespresso-Vertuo-Bundle-Breville-BNV650BLK4IAN1/dp/B0GQBLW7WT" target="_blank" rel="nofollow" data-dimension112="521fcc38-7b2f-11f1-8cfb-6d4851cfaa32" data-action="Deal Block" data-label="Vertuo Up Bundle (Ink Black)" data-dimension48="Vertuo Up Bundle (Ink Black)" data-dimension25="$299">Vertuo Up Bundle (Ink Black): was $439 now $299</a></strong><br>I love a Nespresso Vertuo pod machine for ease, and this new sleek design has me considering an upgrade this Prime Day. The Nespresso Vertuo Up uses the larger mug-sized pods, and this bundle has a sample pack of 12 to try. It also comes with an Aeroccino3 milk frother for total peace of mind when it comes to your morning brew. <a class="view-deal button" href="https://www.amazon.com.au/Nespresso-Vertuo-Bundle-Breville-BNV650BLK4IAN1/dp/B0GQBLW7WT" target="_blank" rel="nofollow" data-dimension112="521fcc38-7b2f-11f1-8cfb-6d4851cfaa32" data-action="Deal Block" data-label="Vertuo Up Bundle (Ink Black)" data-dimension48="Vertuo Up Bundle (Ink Black)" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="521fcca6-7b2f-11f1-b2cb-4d276c41ab8a" data-action="Deal Block" data-label="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension48="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension25="$255.18" href="https://www.amazon.com.au/Nespresso-Machine-Breville-Aeroccino3-Frother/dp/B0BYSNWY9R/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="H39w9EPZGsxdbkNLhky97T" name="nespresso-vertuo-pop-coconut.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/H39w9EPZGsxdbkNLhky97T.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Nespresso-Machine-Breville-Aeroccino3-Frother/dp/B0BYSNWY9R/" target="_blank" rel="nofollow" data-dimension112="521fcca6-7b2f-11f1-b2cb-4d276c41ab8a" data-action="Deal Block" data-label="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension48="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension25="$255.18">Vertuo Pop and Aeroccino3 Bundle (Coconut White): was $319 now $255.18</a></strong><br>While we've seen this machine for cheaper, you can't surpass the one-touch convenience of a Nespresso Vertuo Pop. Now available in this Coconut White colourway at Amazon with a complimentary coffee pod sample kit and milk frother. <a class="view-deal button" href="https://www.amazon.com.au/Nespresso-Machine-Breville-Aeroccino3-Frother/dp/B0BYSNWY9R/" target="_blank" rel="nofollow" data-dimension112="521fcca6-7b2f-11f1-b2cb-4d276c41ab8a" data-action="Deal Block" data-label="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension48="Vertuo Pop and Aeroccino3 Bundle (Coconut White)" data-dimension25="$255.18">View Deal</a></p></div><div class="product"><a data-dimension112="521fcd0a-7b2f-11f1-9d14-71ad4e7627e6" data-action="Deal Block" data-label="Vertuo Pop (Mango Yellow)" data-dimension48="Vertuo Pop (Mango Yellow)" data-dimension25="$88" href="https://www.amazon.com.au/DeLonghi-ENV90-Y-Single-Serve-Centrifusion-Technology/dp/B0BSXQ6SYD" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FEi2bRH6CRffWSeK7XtQuk" name="Untitled-1" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FEi2bRH6CRffWSeK7XtQuk.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/DeLonghi-ENV90-Y-Single-Serve-Centrifusion-Technology/dp/B0BSXQ6SYD" target="_blank" rel="nofollow" data-dimension112="521fcd0a-7b2f-11f1-9d14-71ad4e7627e6" data-action="Deal Block" data-label="Vertuo Pop (Mango Yellow)" data-dimension48="Vertuo Pop (Mango Yellow)" data-dimension25="$88">Vertuo Pop (Mango Yellow): was $229 now $88</a></strong><br>This Nespresso Vertuo Pop machine is hard to pass up at a considerable 62% off in this fun Mango Yellow colourway. With one-touch convenience, you can brew up to four different cup sizes from a range of great Nespresso coffee pods. You'll also receive a 12-pack of coffee capsule samples to try. <a class="view-deal button" href="https://www.amazon.com.au/DeLonghi-ENV90-Y-Single-Serve-Centrifusion-Technology/dp/B0BSXQ6SYD" target="_blank" rel="nofollow" data-dimension112="521fcd0a-7b2f-11f1-9d14-71ad4e7627e6" data-action="Deal Block" data-label="Vertuo Pop (Mango Yellow)" data-dimension48="Vertuo Pop (Mango Yellow)" data-dimension25="$88">View Deal</a></p></div><div class="product"><a data-dimension112="521fcd6e-7b2f-11f1-a830-f99aa36cd78f" data-action="Deal Block" data-label="Vertuo Creatista capsule coffee machine" data-dimension48="Vertuo Creatista capsule coffee machine" data-dimension25="$747" href="https://www.amazon.com.au/Nespresso-Creatista-Espresso-Machine-Breville/dp/B0CG13HT92" 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="BFo5YmpdXeCDdA5deUs4CK" name="creatista" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BFo5YmpdXeCDdA5deUs4CK.png" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Nespresso-Creatista-Espresso-Machine-Breville/dp/B0CG13HT92" target="_blank" rel="nofollow" data-dimension112="521fcd6e-7b2f-11f1-a830-f99aa36cd78f" data-action="Deal Block" data-label="Vertuo Creatista capsule coffee machine" data-dimension48="Vertuo Creatista capsule coffee machine" data-dimension25="$747">Vertuo Creatista capsule coffee machine: was $1099 now $747</a></strong><br>While our <a href="https://www.tomsguide.com/home/coffee-makers/nespresso-vertuo-creatista-review">Nespresso Vertuo Creatista review</a> noted that its price was a concern, this discount significantly lessens that issue. We praised the machine's integrated milk frother and its use of Vertuo pods, which offer various cup and mug sizes. The Creatista is also an excellent performer, capable of brewing your morning coffee exceptionally fast. <a class="view-deal button" href="https://www.amazon.com.au/Nespresso-Creatista-Espresso-Machine-Breville/dp/B0CG13HT92" target="_blank" rel="nofollow" data-dimension112="521fcd6e-7b2f-11f1-a830-f99aa36cd78f" data-action="Deal Block" data-label="Vertuo Creatista capsule coffee machine" data-dimension48="Vertuo Creatista capsule coffee machine" data-dimension25="$747">View Deal</a></p></div><div class="product"><a data-dimension112="521fcdd2-7b2f-11f1-912f-6fcbf46dc927" data-action="Deal Block" data-label="Baristina Espresso Machine" data-dimension48="Baristina Espresso Machine" data-dimension25="$418.99" href="https://www.amazon.com.au/dp/B0GJTM6353/ref=sspa_dk_detail_0" 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="7NhTNsWqtUXeHAmhoQexsL" name="philips-baristina-espresso-machine-grind-e10f856e-739c-4e05-9c6b-bc4bb8eeb15d.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7NhTNsWqtUXeHAmhoQexsL.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0GJTM6353/ref=sspa_dk_detail_0" target="_blank" rel="nofollow" data-dimension112="521fcdd2-7b2f-11f1-912f-6fcbf46dc927" data-action="Deal Block" data-label="Baristina Espresso Machine" data-dimension48="Baristina Espresso Machine" data-dimension25="$418.99">Baristina Espresso Machine: was $599 now $418.99</a></strong><br>I have never been more gobsmacked than watching this machine do its thing (a.k.a pull an espresso shot) and do it well, without any human intervention. Simply insert the portafilter, and the machine will grind, tamp and brew your coffee. The way it moves from one side to the other is simply magic, and while we haven't reviewed it just yet, I'm sure any coffee from the Philips Baristina machine would be pretty fantastic too. <a class="view-deal button" href="https://www.amazon.com.au/dp/B0GJTM6353/ref=sspa_dk_detail_0" target="_blank" rel="nofollow" data-dimension112="521fcdd2-7b2f-11f1-912f-6fcbf46dc927" data-action="Deal Block" data-label="Baristina Espresso Machine" data-dimension48="Baristina Espresso Machine" data-dimension25="$418.99">View Deal</a></p></div><div class="product"><a data-dimension112="521fce40-7b2f-11f1-a9c2-737594befe59" data-action="Deal Block" data-label="Barista Max Coffee Machine" data-dimension48="Barista Max Coffee Machine" data-dimension25="$414.99" href="https://www.amazon.com.au/dp/B088NNSF8P/ref=sspa_dk_detail_4" 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="tnHcXQwz26ANKGHJCvwqpL" name="sunbeam-barista-max-coffee-machine--manu-5ec1adb2-91a4-406c-979f-9637661308aa.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tnHcXQwz26ANKGHJCvwqpL.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B088NNSF8P/ref=sspa_dk_detail_4" target="_blank" rel="nofollow" data-dimension112="521fce40-7b2f-11f1-a9c2-737594befe59" data-action="Deal Block" data-label="Barista Max Coffee Machine" data-dimension48="Barista Max Coffee Machine" data-dimension25="$414.99">Barista Max Coffee Machine: was $649 now $414.99</a></strong><br>We haven't reviewed this particular coffee machine from Sunbeam, but based on a wealth of positive customer reviews, we feel we're able to recommend it. Not least because of its (already) low price that has now been discounted further. Offering similar specs to competitors, you get a 15 bar pump, integrated bean grinder and milk frother, and a 58mm group head. If your kitchen is missing a cafe-style home coffee machine, this could be the one to fill the gap.<a class="view-deal button" href="https://www.amazon.com.au/dp/B088NNSF8P/ref=sspa_dk_detail_4" target="_blank" rel="nofollow" data-dimension112="521fce40-7b2f-11f1-a9c2-737594befe59" data-action="Deal Block" data-label="Barista Max Coffee Machine" data-dimension48="Barista Max Coffee Machine" data-dimension25="$414.99">View Deal</a></p></div><h3 class="article-body__section" id="section-best-coffee-machine-accessories"><span>Best coffee machine accessories</span></h3><div class="product"><a data-dimension112="521fcf08-7b2f-11f1-8de4-0303d796e66d" data-action="Deal Block" data-label="Stoneware French Press" data-dimension48="Stoneware French Press" data-dimension25="$85.80" href="https://www.amazon.com.au/Creuset-Stoneware-Cafeti%C3%A8re-Stainless-60706082200003/dp/B0DT1LSC81" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:128.13%;"><img id="nd3m6GvEiXWtn4QE9RMEzb" name="51WTZfp5mdL._AC_SX679_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/nd3m6GvEiXWtn4QE9RMEzb.jpg" mos="" align="middle" fullscreen="" width="679" height="870" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Creuset-Stoneware-Cafeti%C3%A8re-Stainless-60706082200003/dp/B0DT1LSC81" target="_blank" rel="nofollow" data-dimension112="521fcf08-7b2f-11f1-8de4-0303d796e66d" data-action="Deal Block" data-label="Stoneware French Press" data-dimension48="Stoneware French Press" data-dimension25="$85.80">Stoneware French Press: was $130 now $85.80</a></strong><br>Look, you could probably get a French press for a fraction of the price, but I can't dismiss a 34% discount on the coveted brand that is Le Creuset. Available in a range of colours at varying discounts under the same listing, this French press is long-lasting, sturdy and dishwasher safe, thanks to its stoneware construction. <a class="view-deal button" href="https://www.amazon.com.au/Creuset-Stoneware-Cafeti%C3%A8re-Stainless-60706082200003/dp/B0DT1LSC81" target="_blank" rel="nofollow" data-dimension112="521fcf08-7b2f-11f1-8de4-0303d796e66d" data-action="Deal Block" data-label="Stoneware French Press" data-dimension48="Stoneware French Press" data-dimension25="$85.80">View Deal</a></p></div><div class="product"><a data-dimension112="521fcf6c-7b2f-11f1-8c84-edcc1b77e297" data-action="Deal Block" data-label="Baristina Milk Frother" data-dimension48="Baristina Milk Frother" data-dimension25="$119.2" href="https://www.amazon.com.au/Philips-Baristina-Milk-Frother-Perfectly/dp/B0GJTPBSMP/" 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="rH2CNUf7wBHSMtbQdFYqiL" name="philips-baristina-milk-frother--foam-mil-581704a0-7896-4401-90ac-2ab1ddf39888.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rH2CNUf7wBHSMtbQdFYqiL.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Partnering perfectly with any Philips coffee machine (or any machine without a steam wand), this Baristina milk frother is stylish, speedy and simple to use. Just pour in your preferred milk, touch the button and you'll be taken to foamy heaven. <a class="view-deal button" href="https://www.amazon.com.au/Philips-Baristina-Milk-Frother-Perfectly/dp/B0GJTPBSMP/" target="_blank" rel="nofollow" data-dimension112="521fcf6c-7b2f-11f1-8c84-edcc1b77e297" data-action="Deal Block" data-label="Baristina Milk Frother" data-dimension48="Baristina Milk Frother" data-dimension25="$119.2">View Deal</a></p></div><div class="product"><a data-dimension112="521fcfd0-7b2f-11f1-8777-192aa13a8a08" data-action="Deal Block" data-label="Dose Control Pro Coffee Grinder" data-dimension48="Dose Control Pro Coffee Grinder" data-dimension25="$198" href="https://www.amazon.com.au/Breville-Bcg600Sil-Control-Grinder-Stainless/dp/B00MNJM1RG" 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="3iybAJZ6tLg6fN5Pedcg9m" name="Breville Dose Control Pro" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3iybAJZ6tLg6fN5Pedcg9m.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Breville-Bcg600Sil-Control-Grinder-Stainless/dp/B00MNJM1RG" target="_blank" rel="nofollow" data-dimension112="521fcfd0-7b2f-11f1-8777-192aa13a8a08" data-action="Deal Block" data-label="Dose Control Pro Coffee Grinder" data-dimension48="Dose Control Pro Coffee Grinder" data-dimension25="$198">Dose Control Pro Coffee Grinder: was $289 now $198</a></strong><br>If you've already got an elite coffee set up but need a grinder to make all your grinding dreams come true, I'd suggest this one from Breville. The <a href="https://www.tomsguide.com/home/home-appliances/breville-sage-dose-control-pro-review" target="_blank">Breville Dose Control Pro</a> machine has over 60 grind settings for precise control over how fine you want your grounds. We gave it 4 stars in our review, as it does exactly what it says on the tin — and that's grind coffee beans.<a class="view-deal button" href="https://www.amazon.com.au/Breville-Bcg600Sil-Control-Grinder-Stainless/dp/B00MNJM1RG" target="_blank" rel="nofollow" data-dimension112="521fcfd0-7b2f-11f1-8777-192aa13a8a08" data-action="Deal Block" data-label="Dose Control Pro Coffee Grinder" data-dimension48="Dose Control Pro Coffee Grinder" data-dimension25="$198">View Deal</a></p></div><ul><li><a href="#main">Back to the top ⤴</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Don’t waste your money: I'm a hair tool reviewer and these 21 dryer, straightener and curler Prime Day deals are the ones that actually make the cut ]]></title>
                                                                                                <dc:content><![CDATA[ <p>As a beauty tech reviewer and lover of a great hair day, I understand the intrinsic link between the best hair tools and overly inflated price tags. Some of the most well-known haircare brands (cough, Dyson) can often cost a pretty penny, despite delivering flawless, frizz-free results after every use. </p><p>That said, there's no better time than the present to secure your dream styler than right now. It's officially <a href="https://www.tomsguide.com/live/news/amazon-prime-day-2026-au" target="_blank">Amazon Prime Day</a>, from now until next Monday, meaning prices are slashed across big-name hair tool brands, including Dyson, Shark, GHD, Panasonic, Remington and more. </p><p>I've gathered 21 of the best hair tool deals available during <a href="https://www.amazon.com.au/primeday?ref_=nav_cs_td_pd_dt_cr&bubble-id=deals-collection-beauty" target="_blank">Amazon Prime Day</a>. From hairdryers to straighteners and curling wands, there's something for every type of hairstyle and hair type. If you're concerned about heat damage or hair breakage, I've also selected some great air stylers that will alleviate any worries and perform just as well as traditional hair tools without risk of further harm. </p><p>All of the deals below come with Tom's Guide tick of approval — including the <a href="https://www.tomsguide.com/home/home-appliances/shark-glam-hair-styler-review">Shark Glam</a> and the <a href="https://www.tomsguide.com/home/personal-grooming/dyson-airstrait-review">Dyson Airstrait</a>, both earning 4+ stars in our expert-rated reviews. I've even included some of my daily tools that have truly made every day a good hair day — a.k.a. my beloved <a href="https://www.tomsguide.com/reviews/shark-flexstyle">Shark Flexstyle</a> — to the mix.</p><p>Don't just take my word for it, though — all of these items have thousands of 4-star reviews on Amazon, which is certainly no mean feat. Plus, thanks to Amazon's super-speedy shipping, you can get same-day or expedited shipping with a <a href="https://www.amazon.com.au/tryprimefree">Prime membership</a>, making your Prime Day shopping totally seamless and stress-free. If you haven't tried Prime before, you can sign up for a <a href="https://www.amazon.com.au/tryprimefree" target="_blank">free 30-day trial</a>. </p><p>I'll stop waffling — here are the best Prime Day hair tool deals you can buy right now. You'll need to act fast, though, as these deals will expire next <strong>Monday, July 13.</strong></p>        <div class="featured_product_block featured_block_hero" data-id="a9569830-7a79-11f1-93cf-810a0591ab2b">            <a href="https://www.amazon.com.au/ghd-Platinum-Styler-Professional-Straightener/dp/B07GGFXKJ2/" data-model-name="Platinum+ Hair Straightener" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:59.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aHwuZNeQuuvSokjBzrzR7f.jpg" alt="Ghd Platinum+ Hair Straightener, a Smarter Hair Straightening and Curling Tool for Stronger Hair and Colour Protection, on All Hair Types, Lengths and Textures, Universal Voltage, Au Plug - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ghd</div>                                        <div class="featured__title">Platinum+ Hair Straightener</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a95698d0-7a79-11f1-ad33-43656035a0f8">            <a href="https://www.amazon.com.au/gp/aw/d/B0FCFPQLHN/" data-model-name="Flexstyle (Black)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/SgSbHNWTS7AFjEmZ8oTrue.jpg" alt="Shark Flexstyle 2-In-1 Professional Hair Dryer & Styling System, 4 Attachments, 4 Heat and 3 Airflow Settings, Heat Damage Protection, Lightweight 700g, Hd421anz, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shark</div>                                        <div class="featured__title">Flexstyle (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569966-7a79-11f1-ae7a-51ec549793a6">            <a href="https://www.amazon.com.au/Dyson-AirstraitTM-dryer-straightener-Ceramic/dp/B0CHXFKDH9/" data-model-name="Airstrait Dryer and Straightener (Ceramic Pink/Rose Gold) ​" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xL88r4aXrPJXm8PiLrdgVf.jpg" alt="Dyson Airstrait™ Dryer and Straightener (ceramic Pink/rose Gold) ​"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Dyson</div>                                        <div class="featured__title">Airstrait Dryer and Straightener (Ceramic Pink/Rose Gold) ​</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a95699fc-7a79-11f1-8312-13d26e272a1c">            <a href="https://www.amazon.com.au/Remington-Multistyler-Interchangeable-Variable-Technology/dp/B09VKNSY4F/" data-model-name="3 in 1 Multistyler Curl and Wave" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jkEvdkCvydtyeNkSDvVvbT.jpg" alt="Remington 3 in 1 Multistyler Curl and Wave, Ci97ms3au, Curling Iron With 3 Interchangeable Ceramic Barrels, Variable Heat Up to 220°c, Ionic Technology for Smooth and Shiny Hair - Rose Gold"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMINGTON</div>                                        <div class="featured__title">3 in 1 Multistyler Curl and Wave</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569aba-7a79-11f1-80aa-29ee1d21398c">            <a href="https://www.amazon.com.au/High-Speed-Brushless-Negative-Ion-Professional-Temperature/dp/B0F1YNYCGJ" data-model-name="Hair Gleam Hair Dryer (Pink)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/9UCEyxgNyQKvuD45emmqDf.jpg" alt="Dreame Hair Gleam Hair Dryer Pink, 110000 Rpm High-Speed Brushless Motor Au Version, 200 Million Negative-Ion Hair Dryer With Magnetic Nozzle, Professional Blow Dryer With Constant Temperature Control"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Dreame</div>                                        <div class="featured__title">Hair Gleam Hair Dryer (Pink)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569b1e-7a79-11f1-bdc5-654ea4400927">            <a href="https://www.amazon.com.au/Remington-D3190AU-Aero-2000-Dryer/dp/B077P9HLGC" data-model-name="Aero 2000 Hair Dryer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/uMJusGJF6TQxgrKceNmBZT.jpg" alt="Remington Aero 2000 Hair Dryer D3190au, Personalises Heat to Your Hair, 2000w, Fast Drying and Styling, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMINGTON</div>                                        <div class="featured__title">Aero 2000 Hair Dryer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569b78-7a79-11f1-b5b9-6724e2be5b34">            <a href="https://www.amazon.com.au/Shark-Glossi-Glosser-Peony-HT302PKANZ/dp/B0GXKZ7CMG/ref=sr_1_3" data-model-name="Glossi 2-In-1 Hot Tool and Air Glosser" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PXwtgtZ4oUTkHv5bTsjCXk.jpg" alt="Shark Glossi 2-In-1 Hot Tool and Air Glosser, Peony Pink, Ht302pkanz"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shark</div>                                        <div class="featured__title">Glossi 2-In-1 Hot Tool and Air Glosser</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569bd2-7a79-11f1-b4ad-6da2e439e243">            <a href="https://www.amazon.com.au/Shark-FlexStyle-Styling-Drying-System/dp/B0GF7MPDDX/" data-model-name="Glam Flexstyle Air Styling & Drying System" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/HCG5Ezspd4jwh8dPeA9Wck.jpg" alt="Shark Glam Flexstyle Air Styling & Drying System, French Gold"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shark</div>                                        <div class="featured__title">Glam Flexstyle Air Styling & Drying System</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569c2c-7a79-11f1-a934-db4cfee93d2d">            <a href="https://www.amazon.com.au/dp/B0DJBFWDL8/" data-model-name="Supersonic Nural Intelligent Hair Dryer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:107.99%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ggPLkuwAmtvnVaYRdViRZk.jpg" alt="Dyson Supersonic Nural™ Intelligent Hair Dryer"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Dyson</div>                                        <div class="featured__title">Supersonic Nural Intelligent Hair Dryer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569c90-7a79-11f1-af55-dfd16e1d813e">            <a href="https://www.amazon.com.au/BondiBoost-Blowout-Brush-Hair-Dryer/dp/B0BJ8FFDXZ" data-model-name="Blowout Brush Pro Hair Dryer & Hair Brush" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/yfweThA5udzgw84M8NSrSf.jpg" alt="Bondiboost Blowout Brush Pro Hair Dryer & Hair Brush [75mm] - Oval Shape Hair Styler & Volumizer for Smooth/frizz-Free Results - Great for All Hair Types - 3x Heat/speed Options - 360° Airflow Vents"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Bondi Boost</div>                                        <div class="featured__title">Blowout Brush Pro Hair Dryer & Hair Brush</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="828c9118-7a7a-11f1-a8d6-95d01f91c7bc">            <a href="https://www.amazon.com.au/dreame-AirStyle-Pro-Hair-Dryer/dp/B0F9P2XJNZ" data-model-name="Dazzle Hair Dryer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/rtCrpeeKzhGEWWCV9fstYG.jpg" alt="Dreame Dazzle Hair Dryer, Intelligent Nozzle Recognition, Smart Screen, Fast Drying, 110,000rpm Motor, 5 Magnetic Nozzles, Ntc, 300,000,000 Negative Lons, 3 Cutomizable Modes, Removable Air Inlet"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DREAME</div>                                        <div class="featured__title">Dazzle Hair Dryer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569cea-7a79-11f1-923d-79dee61ab83e">            <a href="https://www.amazon.com.au/Straightener-ThermoShield-Straightening-Temperature-BHS510/dp/B09TPL32RQ" data-model-name="5000 Series Straightener" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/53fh79Jmk9c4DZLPSM7jm7.jpg" alt="Philips 5000 Series Straightener, Thermoshield Technology, 50% Faster Straightening With Ionic Care, Argan Oil Infused Floating Plates, Temperature Display, Bhs510/50, Pearl Peach"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Philips</div>                                        <div class="featured__title">5000 Series Straightener</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569d44-7a79-11f1-a023-55ee7e5b1dac">            <a href="https://www.amazon.com.au/Dyson-AirwrapTM-Origin-multi-styler-Nickel/dp/B0FHTFM1JG" data-model-name="Airwrap Origin Multi-Styler and Dryer (nickel/copper)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/n9SDvmG82EoyB2b4tvaHr7.jpg" alt="Dyson Airwrap™ Origin Multi-Styler and Dryer (nickel/copper)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Dyson</div>                                        <div class="featured__title">Airwrap Origin Multi-Styler and Dryer (nickel/copper)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569d9e-7a79-11f1-8e3c-33a03d5e54e7">            <a href="https://www.amazon.com.au/Remington-AIRviveTM-AS8930AU-Technology-Ultra-Smooth/dp/B0FS11Z833" data-model-name="Airvive 2-In-1 Air Styler" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/TA2yJhDHzb5vg5Sk8zuwRf.jpg" alt="Remington Airvive air styler"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMINGTON</div>                                        <div class="featured__title">Airvive 2-In-1 Air Styler</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569df8-7a79-11f1-9a00-9509374fc8e2">            <a href="https://www.amazon.com.au/110000RPM-Foldable-Compact-Lightweight-Technology/dp/B0GSQ27RS5" data-model-name="Pocket Uni Pure Hair Dryer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/XZ4cUynRVERXLK3UDvYyf7.jpg" alt="Dreame Pocket Uni Pure Hair Dryer, 110000rpm High Speed, Foldable Compact Lightweight Design, Dual Voltage Travel Hair Dryer With Ionic Technology"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DREAME</div>                                        <div class="featured__title">Pocket Uni Pure Hair Dryer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569e52-7a79-11f1-8ee5-83a214d1c6cf">            <a href="https://www.amazon.com.au/ghd-duet-blowdry-Dryer-Brush/dp/B0F1T2Y6WR" data-model-name="Duet Blowdry 2-In-1 Blow Dryer Brush" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:53.40%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/nxiNiYS4wPrhrxseYMu7b7.jpg" alt="Ghd Duet Blowdry 2-In-1 Blow Dryer Brush - Revolutionary Hair Dryer and Volumizer for Effortless Blowouts - Hot Air Brush to Dry & Style Simultaneously - No Heat Damage - Black (au Plug)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ghd</div>                                        <div class="featured__title">Duet Blowdry 2-In-1 Blow Dryer Brush</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569f06-7a79-11f1-85f7-8dc3a95c52b4">            <a href="https://www.amazon.com.au/Remington-Pro-Ceramic-Straightener-Replaces-Temperature/dp/B0CYGRLZFF" data-model-name="Pro-Ceramic Extra Wide Plate Straightener" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KwKRVy8KLncQC3ssxQcWR7.jpg" alt="Remington Pro-Ceramic Extra Wide Plate Straightener, Digital Temperature Control, Quick Heat Up, 9 Temperature Settings"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMINGTON</div>                                        <div class="featured__title">Pro-Ceramic Extra Wide Plate Straightener</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569f60-7a79-11f1-8383-75edacbd7e4f">            <a href="https://www.amazon.com.au/Laifen-SE-Brushless-High-Speed-Attachments/dp/B0DD2TWFR1" data-model-name="SE hair dryer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/4xt8M2VYLUptPphm9Mxqo7.jpg" alt="Laifen Hair Dryer Se, 200 Million Negative Ionic Blow Dryer With 105,000 Rpm Brushless Motor 1500w Powerful Fast Drying High-Speed Low Noise Hairdryer With Magnetic Attachments"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Laifen</div>                                        <div class="featured__title">SE hair dryer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a956a0a0-7a79-11f1-833b-f76a2a4975ed">            <a href="https://www.amazon.com.au/dp/B0GWC6F1B6/ref=sspa_dk_detail_0" data-model-name="Hair Straightener in Matcha Green" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.20%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xShQ9dDi4qJDL5NpdLkid7.jpg" alt="Panasonic Hair Straightener in Matcha Green, Instant Heat 185°c, 6 Heat Settings, Ceramic Floating Plates, Led Display, Anti-Burn Design, 2.7m Cord, Auto Shut-Off and Lockable (eh-Hv31-G541)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Panasonic</div>                                        <div class="featured__title">Hair Straightener in Matcha Green</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a956a140-7a79-11f1-880d-d17401f55783">            <a href="https://www.amazon.com.au/Remington-AIRviveTM-Technology-Ultra-Smooth-Ultra-Fast/dp/B0FS11S2F1" data-model-name="Airvive Rotating Curling Wand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/LK3MpMHPYQt84tMXfNE4i7.jpg" alt="Remington Airvive™ Rotating Curling Wand, Ci8930au, Ionic Air Technology, Curl Direction Selector, Ultra-Smooth Ceramic Coating, Ultra-Fast Heat Up"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMINGTON</div>                                        <div class="featured__title">Airvive Rotating Curling Wand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a956a24e-7a79-11f1-9b35-4f2f6fa95bc6">            <a href="https://www.amazon.com.au/dp/B08KH763Y6/" data-model-name="the Touch Iron Hair Straightener" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:150%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/HTzebukCrhPt23KwZbcrT7.jpg" alt="Cloud Nine the Touch Iron Hair Straightener | Variable Temperature Control Quick Heat Touch Technology Ceramic Floating Plates Spring Flex Styling | Perfect for Smooth Sleek Results"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CLOUD NINE</div>                                        <div class="featured__title">the Touch Iron Hair Straightener</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/wellness/im-a-hair-tool-reviewer-these-are-the-top-21-hair-dryers-straighteners-and-curlers-to-add-to-your-cart-this-amazon-prime-day</link>
                                                                            <description>
                            <![CDATA[ Looking for a new hair tool this Prime Day? I've found 21 great deals on Amazon. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Mi5YDeAdtEcdE4WhMprW9Y</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/PUjDPqrcwU35zzvBR3oxKi-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 08 Jul 2026 03:44:09 +0000</pubDate>                                                                                                                                <updated>Wed, 08 Jul 2026 03:44:36 +0000</updated>
                                                                                                                                            <category><![CDATA[Wellness]]></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/PUjDPqrcwU35zzvBR3oxKi-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Hair tools on pink background]]></media:description>                                                            <media:text><![CDATA[Hair tools on pink background]]></media:text>
                                <media:title type="plain"><![CDATA[Hair tools on pink background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/PUjDPqrcwU35zzvBR3oxKi-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As a beauty tech reviewer and lover of a great hair day, I understand the intrinsic link between the best hair tools and overly inflated price tags. Some of the most well-known haircare brands (cough, Dyson) can often cost a pretty penny, despite delivering flawless, frizz-free results after every use. </p><p>That said, there's no better time than the present to secure your dream styler than right now. It's officially <a href="https://www.tomsguide.com/live/news/amazon-prime-day-2026-au" target="_blank">Amazon Prime Day</a>, from now until next Monday, meaning prices are slashed across big-name hair tool brands, including Dyson, Shark, GHD, Panasonic, Remington and more. </p><p>I've gathered 21 of the best hair tool deals available during <a href="https://www.amazon.com.au/primeday?ref_=nav_cs_td_pd_dt_cr&bubble-id=deals-collection-beauty" target="_blank">Amazon Prime Day</a>. From hairdryers to straighteners and curling wands, there's something for every type of hairstyle and hair type. If you're concerned about heat damage or hair breakage, I've also selected some great air stylers that will alleviate any worries and perform just as well as traditional hair tools without risk of further harm. </p><p>All of the deals below come with Tom's Guide tick of approval — including the <a href="https://www.tomsguide.com/home/home-appliances/shark-glam-hair-styler-review">Shark Glam</a> and the <a href="https://www.tomsguide.com/home/personal-grooming/dyson-airstrait-review">Dyson Airstrait</a>, both earning 4+ stars in our expert-rated reviews. I've even included some of my daily tools that have truly made every day a good hair day — a.k.a. my beloved <a href="https://www.tomsguide.com/reviews/shark-flexstyle">Shark Flexstyle</a> — to the mix.</p><p>Don't just take my word for it, though — all of these items have thousands of 4-star reviews on Amazon, which is certainly no mean feat. Plus, thanks to Amazon's super-speedy shipping, you can get same-day or expedited shipping with a <a href="https://www.amazon.com.au/tryprimefree">Prime membership</a>, making your Prime Day shopping totally seamless and stress-free. If you haven't tried Prime before, you can sign up for a <a href="https://www.amazon.com.au/tryprimefree" target="_blank">free 30-day trial</a>. </p><p>I'll stop waffling — here are the best Prime Day hair tool deals you can buy right now. You'll need to act fast, though, as these deals will expire next <strong>Monday, July 13.</strong></p>        <div class="featured_product_block featured_block_hero" data-id="a9569830-7a79-11f1-93cf-810a0591ab2b">            <a href="https://www.amazon.com.au/ghd-Platinum-Styler-Professional-Straightener/dp/B07GGFXKJ2/" data-model-name="Platinum+ Hair Straightener" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:59.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aHwuZNeQuuvSokjBzrzR7f.jpg" alt="Ghd Platinum+ Hair Straightener, a Smarter Hair Straightening and Curling Tool for Stronger Hair and Colour Protection, on All Hair Types, Lengths and Textures, Universal Voltage, Au Plug - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ghd</div>                                        <div class="featured__title">Platinum+ Hair Straightener</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a95698d0-7a79-11f1-ad33-43656035a0f8">            <a href="https://www.amazon.com.au/gp/aw/d/B0FCFPQLHN/" data-model-name="Flexstyle (Black)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/SgSbHNWTS7AFjEmZ8oTrue.jpg" alt="Shark Flexstyle 2-In-1 Professional Hair Dryer & Styling System, 4 Attachments, 4 Heat and 3 Airflow Settings, Heat Damage Protection, Lightweight 700g, Hd421anz, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shark</div>                                        <div class="featured__title">Flexstyle (Black)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569966-7a79-11f1-ae7a-51ec549793a6">            <a href="https://www.amazon.com.au/Dyson-AirstraitTM-dryer-straightener-Ceramic/dp/B0CHXFKDH9/" data-model-name="Airstrait Dryer and Straightener (Ceramic Pink/Rose Gold) ​" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xL88r4aXrPJXm8PiLrdgVf.jpg" alt="Dyson Airstrait™ Dryer and Straightener (ceramic Pink/rose Gold) ​"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Dyson</div>                                        <div class="featured__title">Airstrait Dryer and Straightener (Ceramic Pink/Rose Gold) ​</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a95699fc-7a79-11f1-8312-13d26e272a1c">            <a href="https://www.amazon.com.au/Remington-Multistyler-Interchangeable-Variable-Technology/dp/B09VKNSY4F/" data-model-name="3 in 1 Multistyler Curl and Wave" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jkEvdkCvydtyeNkSDvVvbT.jpg" alt="Remington 3 in 1 Multistyler Curl and Wave, Ci97ms3au, Curling Iron With 3 Interchangeable Ceramic Barrels, Variable Heat Up to 220°c, Ionic Technology for Smooth and Shiny Hair - Rose Gold"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMINGTON</div>                                        <div class="featured__title">3 in 1 Multistyler Curl and Wave</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569aba-7a79-11f1-80aa-29ee1d21398c">            <a href="https://www.amazon.com.au/High-Speed-Brushless-Negative-Ion-Professional-Temperature/dp/B0F1YNYCGJ" data-model-name="Hair Gleam Hair Dryer (Pink)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/9UCEyxgNyQKvuD45emmqDf.jpg" alt="Dreame Hair Gleam Hair Dryer Pink, 110000 Rpm High-Speed Brushless Motor Au Version, 200 Million Negative-Ion Hair Dryer With Magnetic Nozzle, Professional Blow Dryer With Constant Temperature Control"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Dreame</div>                                        <div class="featured__title">Hair Gleam Hair Dryer (Pink)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569b1e-7a79-11f1-bdc5-654ea4400927">            <a href="https://www.amazon.com.au/Remington-D3190AU-Aero-2000-Dryer/dp/B077P9HLGC" data-model-name="Aero 2000 Hair Dryer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/uMJusGJF6TQxgrKceNmBZT.jpg" alt="Remington Aero 2000 Hair Dryer D3190au, Personalises Heat to Your Hair, 2000w, Fast Drying and Styling, Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMINGTON</div>                                        <div class="featured__title">Aero 2000 Hair Dryer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569b78-7a79-11f1-b5b9-6724e2be5b34">            <a href="https://www.amazon.com.au/Shark-Glossi-Glosser-Peony-HT302PKANZ/dp/B0GXKZ7CMG/ref=sr_1_3" data-model-name="Glossi 2-In-1 Hot Tool and Air Glosser" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PXwtgtZ4oUTkHv5bTsjCXk.jpg" alt="Shark Glossi 2-In-1 Hot Tool and Air Glosser, Peony Pink, Ht302pkanz"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shark</div>                                        <div class="featured__title">Glossi 2-In-1 Hot Tool and Air Glosser</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569bd2-7a79-11f1-b4ad-6da2e439e243">            <a href="https://www.amazon.com.au/Shark-FlexStyle-Styling-Drying-System/dp/B0GF7MPDDX/" data-model-name="Glam Flexstyle Air Styling & Drying System" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/HCG5Ezspd4jwh8dPeA9Wck.jpg" alt="Shark Glam Flexstyle Air Styling & Drying System, French Gold"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shark</div>                                        <div class="featured__title">Glam Flexstyle Air Styling & Drying System</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569c2c-7a79-11f1-a934-db4cfee93d2d">            <a href="https://www.amazon.com.au/dp/B0DJBFWDL8/" data-model-name="Supersonic Nural Intelligent Hair Dryer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:107.99%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ggPLkuwAmtvnVaYRdViRZk.jpg" alt="Dyson Supersonic Nural™ Intelligent Hair Dryer"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Dyson</div>                                        <div class="featured__title">Supersonic Nural Intelligent Hair Dryer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569c90-7a79-11f1-af55-dfd16e1d813e">            <a href="https://www.amazon.com.au/BondiBoost-Blowout-Brush-Hair-Dryer/dp/B0BJ8FFDXZ" data-model-name="Blowout Brush Pro Hair Dryer & Hair Brush" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/yfweThA5udzgw84M8NSrSf.jpg" alt="Bondiboost Blowout Brush Pro Hair Dryer & Hair Brush [75mm] - Oval Shape Hair Styler & Volumizer for Smooth/frizz-Free Results - Great for All Hair Types - 3x Heat/speed Options - 360° Airflow Vents"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Bondi Boost</div>                                        <div class="featured__title">Blowout Brush Pro Hair Dryer & Hair Brush</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="828c9118-7a7a-11f1-a8d6-95d01f91c7bc">            <a href="https://www.amazon.com.au/dreame-AirStyle-Pro-Hair-Dryer/dp/B0F9P2XJNZ" data-model-name="Dazzle Hair Dryer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/rtCrpeeKzhGEWWCV9fstYG.jpg" alt="Dreame Dazzle Hair Dryer, Intelligent Nozzle Recognition, Smart Screen, Fast Drying, 110,000rpm Motor, 5 Magnetic Nozzles, Ntc, 300,000,000 Negative Lons, 3 Cutomizable Modes, Removable Air Inlet"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DREAME</div>                                        <div class="featured__title">Dazzle Hair Dryer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569cea-7a79-11f1-923d-79dee61ab83e">            <a href="https://www.amazon.com.au/Straightener-ThermoShield-Straightening-Temperature-BHS510/dp/B09TPL32RQ" data-model-name="5000 Series Straightener" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/53fh79Jmk9c4DZLPSM7jm7.jpg" alt="Philips 5000 Series Straightener, Thermoshield Technology, 50% Faster Straightening With Ionic Care, Argan Oil Infused Floating Plates, Temperature Display, Bhs510/50, Pearl Peach"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Philips</div>                                        <div class="featured__title">5000 Series Straightener</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569d44-7a79-11f1-a023-55ee7e5b1dac">            <a href="https://www.amazon.com.au/Dyson-AirwrapTM-Origin-multi-styler-Nickel/dp/B0FHTFM1JG" data-model-name="Airwrap Origin Multi-Styler and Dryer (nickel/copper)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/n9SDvmG82EoyB2b4tvaHr7.jpg" alt="Dyson Airwrap™ Origin Multi-Styler and Dryer (nickel/copper)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Dyson</div>                                        <div class="featured__title">Airwrap Origin Multi-Styler and Dryer (nickel/copper)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569d9e-7a79-11f1-8e3c-33a03d5e54e7">            <a href="https://www.amazon.com.au/Remington-AIRviveTM-AS8930AU-Technology-Ultra-Smooth/dp/B0FS11Z833" data-model-name="Airvive 2-In-1 Air Styler" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/TA2yJhDHzb5vg5Sk8zuwRf.jpg" alt="Remington Airvive air styler"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMINGTON</div>                                        <div class="featured__title">Airvive 2-In-1 Air Styler</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569df8-7a79-11f1-9a00-9509374fc8e2">            <a href="https://www.amazon.com.au/110000RPM-Foldable-Compact-Lightweight-Technology/dp/B0GSQ27RS5" data-model-name="Pocket Uni Pure Hair Dryer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/XZ4cUynRVERXLK3UDvYyf7.jpg" alt="Dreame Pocket Uni Pure Hair Dryer, 110000rpm High Speed, Foldable Compact Lightweight Design, Dual Voltage Travel Hair Dryer With Ionic Technology"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DREAME</div>                                        <div class="featured__title">Pocket Uni Pure Hair Dryer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569e52-7a79-11f1-8ee5-83a214d1c6cf">            <a href="https://www.amazon.com.au/ghd-duet-blowdry-Dryer-Brush/dp/B0F1T2Y6WR" data-model-name="Duet Blowdry 2-In-1 Blow Dryer Brush" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:53.40%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/nxiNiYS4wPrhrxseYMu7b7.jpg" alt="Ghd Duet Blowdry 2-In-1 Blow Dryer Brush - Revolutionary Hair Dryer and Volumizer for Effortless Blowouts - Hot Air Brush to Dry & Style Simultaneously - No Heat Damage - Black (au Plug)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ghd</div>                                        <div class="featured__title">Duet Blowdry 2-In-1 Blow Dryer Brush</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569f06-7a79-11f1-85f7-8dc3a95c52b4">            <a href="https://www.amazon.com.au/Remington-Pro-Ceramic-Straightener-Replaces-Temperature/dp/B0CYGRLZFF" data-model-name="Pro-Ceramic Extra Wide Plate Straightener" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/KwKRVy8KLncQC3ssxQcWR7.jpg" alt="Remington Pro-Ceramic Extra Wide Plate Straightener, Digital Temperature Control, Quick Heat Up, 9 Temperature Settings"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMINGTON</div>                                        <div class="featured__title">Pro-Ceramic Extra Wide Plate Straightener</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a9569f60-7a79-11f1-8383-75edacbd7e4f">            <a href="https://www.amazon.com.au/Laifen-SE-Brushless-High-Speed-Attachments/dp/B0DD2TWFR1" data-model-name="SE hair dryer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/4xt8M2VYLUptPphm9Mxqo7.jpg" alt="Laifen Hair Dryer Se, 200 Million Negative Ionic Blow Dryer With 105,000 Rpm Brushless Motor 1500w Powerful Fast Drying High-Speed Low Noise Hairdryer With Magnetic Attachments"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Laifen</div>                                        <div class="featured__title">SE hair dryer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a956a0a0-7a79-11f1-833b-f76a2a4975ed">            <a href="https://www.amazon.com.au/dp/B0GWC6F1B6/ref=sspa_dk_detail_0" data-model-name="Hair Straightener in Matcha Green" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.20%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xShQ9dDi4qJDL5NpdLkid7.jpg" alt="Panasonic Hair Straightener in Matcha Green, Instant Heat 185°c, 6 Heat Settings, Ceramic Floating Plates, Led Display, Anti-Burn Design, 2.7m Cord, Auto Shut-Off and Lockable (eh-Hv31-G541)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Panasonic</div>                                        <div class="featured__title">Hair Straightener in Matcha Green</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a956a140-7a79-11f1-880d-d17401f55783">            <a href="https://www.amazon.com.au/Remington-AIRviveTM-Technology-Ultra-Smooth-Ultra-Fast/dp/B0FS11S2F1" data-model-name="Airvive Rotating Curling Wand" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/LK3MpMHPYQt84tMXfNE4i7.jpg" alt="Remington Airvive™ Rotating Curling Wand, Ci8930au, Ionic Air Technology, Curl Direction Selector, Ultra-Smooth Ceramic Coating, Ultra-Fast Heat Up"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REMINGTON</div>                                        <div class="featured__title">Airvive Rotating Curling Wand</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a956a24e-7a79-11f1-9b35-4f2f6fa95bc6">            <a href="https://www.amazon.com.au/dp/B08KH763Y6/" data-model-name="the Touch Iron Hair Straightener" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:150%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/HTzebukCrhPt23KwZbcrT7.jpg" alt="Cloud Nine the Touch Iron Hair Straightener | Variable Temperature Control Quick Heat Touch Technology Ceramic Floating Plates Spring Flex Styling | Perfect for Smooth Sleek Results"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CLOUD NINE</div>                                        <div class="featured__title">the Touch Iron Hair Straightener</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon quietly upgrades Fire HD 10 tablet — make sure you buy the right one ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Amazon released its most recent update to the <a href="https://www.tomsguide.com/reviews/amazon-fire-hd-10-2023">Fire HD 10 tablet in 2023</a>, and it was starting to feel pretty dated with only 3GB of RAM under the hood. Amazon, deciding to forgo the fanfare, has quietly released a <a href="https://www.amazon.com/dp/B0GVTPKJVT?" target="_blank" rel="nofollow">new version of the tablet with an extra 1GB of RAM</a>, bringing it more in line with modern budget-friendly tablets.</p><p>Of course, with a new model and more memory comes a slightly higher price tag. Instead of $139.99, Amazon has pushed the price to $154.99. While $15 isn't necessarily enough to break the bank, for an <a href="https://www.tomsguide.com/best-picks/best-cheap-tablets">affordable tablet</a> like this, it could be the difference between being within someone's budget and not.</p><p>There's a bit of confusion on Amazon's website. You can see the new Fire HD 10 on the company's website, and everything looks normal there. But if you go to the <a href="https://www.amazon.com/dp/B0BHZT5S12" target="_blank" rel="nofollow">older model</a>, it says, "You’re viewing the newest model of this product — see what's new" right on the front page.</p><div class="product"><a data-dimension112="d3465fbb-18ce-4da1-9770-28a6200d1fcc" data-action="Deal Block" data-label="Fire HD 10 (4GB version)" data-dimension48="Fire HD 10 (4GB version)" data-dimension25="$154" href="https://www.amazon.com/dp/B0GVTPKJVT" 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:62.13%;"><img id="B64PduMnXMUfe2yrjFngQQ" name="Fire HD 10 (4GB version)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/B64PduMnXMUfe2yrjFngQQ.png" mos="" align="middle" fullscreen="" width="1500" height="932" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0GVTPKJVT" target="_blank" rel="nofollow" data-dimension112="d3465fbb-18ce-4da1-9770-28a6200d1fcc" data-action="Deal Block" data-label="Fire HD 10 (4GB version)" data-dimension48="Fire HD 10 (4GB version)" data-dimension25="$154">Fire HD 10 (4GB version): $154</a></strong><br>This is the correct model to buy if you want the most available RAM on Amazon's large-screen, affordable tablet. It is $15 more than the 2023 version, but with the extra memory, it's worth it to ensure the device can run the (somewhat limited) selection of apps available on Amazon tablets for the long haul.<a class="view-deal button" href="https://www.amazon.com/dp/B0GVTPKJVT" target="_blank" rel="nofollow" data-dimension112="d3465fbb-18ce-4da1-9770-28a6200d1fcc" data-action="Deal Block" data-label="Fire HD 10 (4GB version)" data-dimension48="Fire HD 10 (4GB version)" data-dimension25="$154">View Deal</a></p></div><p>Lots of potential buyers aren't looking at the latest tech news to see when Amazon quietly launches upgraded tablets, so they might just search for Fire HD 10 (or even a cheap tablet) on Amazon and stumble on the three-year-old version and think it's the newest one. That extra 1GB of RAM could significantly improve overall performance. </p><p>It's possible Amazon still considers the 2023 version to be the newest model, since it's the only one that offers 3GB of RAM, and it's showing the 4GB version as a separate model, not a replacement, but that would be an odd distinction to have between models, and I have to assume the 3GB version will be phased out.</p><p>Both tablets have 32GB of storage, and the <a href="https://www.amazon.com/dp/B0BHZWT2FR" target="_blank" rel="nofollow">64GB upgrade is only available on the older model</a>. Perhaps Amazon has decided that the extra space isn't needed in a tablet at this low price point. </p><p>If you're in the market for an affordable Amazon device, and you think you'll benefit from the extra memory (and I'm pretty sure you will), be sure to get the <em>actual </em>latest version. Hopefully, Amazon removes the "newest model" tag from the 2023 Fire HD 10 to avoid confusion, as I'm sure this was just an error and not an attempt to trick shoppers. But even if it's a mistake, it could still lead to confusion and wasted money. </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/opinion/i-use-these-3-tricks-with-all-my-tablets-so-they-dont-just-feel-like-a-bigger-phone">I use these 3 tricks with all my tablets so they don’t just feel like a bigger phone</a></li><li><a href="https://www.tomsguide.com/best-picks/best-tablets-under-dollar500">These are the best budget tablets under $500</a></li><li><a href="https://www.tomsguide.com/computing/tablets/samsung-galaxy-tab-s11-ultra-vs-ipad-pro-m5-which-tablet-should-you-buy">Samsung Galaxy Tab S11 Ultra vs. iPad Pro M5 — which tablet should you buy?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/tablets/amazon-quietly-upgrades-fire-hd-10-tablet-make-sure-you-buy-the-right-one</link>
                                                                            <description>
                            <![CDATA[ It's a bit confusing: Amazon released a new Fire HD 10, but the old model still shows as the 'newest model' on Amazon. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kxio9XVBatUsn3gESV33QP</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Ezbb5DL7vYM5VDTjq2Wafn-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 04 Jul 2026 13:40:42 +0000</pubDate>                                                                                                                                <updated>Sat, 04 Jul 2026 13:42:57 +0000</updated>
                                                                                                                                            <category><![CDATA[Tablets]]></category>
                                                    <category><![CDATA[Computing]]></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 Managing News Editor for Tom&#039;s Guide, keeping his finger on the pulse of all things technology. He loves taking the complicated happenings in the tech world and explaining why they matter. Whether Apple is announcing the next big thing in the mobile space or a small startup advancing generative AI, Dave will apply his experience to help you figure out what&#039;s happening and why it&#039;s relevant to your life.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Before Tom&#039;s Guide, Dave worked for publications like PCMag, Pocket-lint, MUO, How-To Geek, Digital Trends, and others. He started writing about technology professionally for MUO in 2011 and hasn&#039;t looked back since. In addition to news, you can find reviews, how-to pieces, shopping guides, and many other types of content with Dave&#039;s name attached.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Ezbb5DL7vYM5VDTjq2Wafn-1280-80.jpg">
                                                            <media:credit><![CDATA[Amazon]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amazon Fire HD 10]]></media:description>                                                            <media:text><![CDATA[Amazon Fire HD 10]]></media:text>
                                <media:title type="plain"><![CDATA[Amazon Fire HD 10]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Ezbb5DL7vYM5VDTjq2Wafn-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Amazon released its most recent update to the <a href="https://www.tomsguide.com/reviews/amazon-fire-hd-10-2023">Fire HD 10 tablet in 2023</a>, and it was starting to feel pretty dated with only 3GB of RAM under the hood. Amazon, deciding to forgo the fanfare, has quietly released a <a href="https://www.amazon.com/dp/B0GVTPKJVT?" target="_blank" rel="nofollow">new version of the tablet with an extra 1GB of RAM</a>, bringing it more in line with modern budget-friendly tablets.</p><p>Of course, with a new model and more memory comes a slightly higher price tag. Instead of $139.99, Amazon has pushed the price to $154.99. While $15 isn't necessarily enough to break the bank, for an <a href="https://www.tomsguide.com/best-picks/best-cheap-tablets">affordable tablet</a> like this, it could be the difference between being within someone's budget and not.</p><p>There's a bit of confusion on Amazon's website. You can see the new Fire HD 10 on the company's website, and everything looks normal there. But if you go to the <a href="https://www.amazon.com/dp/B0BHZT5S12" target="_blank" rel="nofollow">older model</a>, it says, "You’re viewing the newest model of this product — see what's new" right on the front page.</p><div class="product"><a data-dimension112="d3465fbb-18ce-4da1-9770-28a6200d1fcc" data-action="Deal Block" data-label="Fire HD 10 (4GB version)" data-dimension48="Fire HD 10 (4GB version)" data-dimension25="$154" href="https://www.amazon.com/dp/B0GVTPKJVT" 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:62.13%;"><img id="B64PduMnXMUfe2yrjFngQQ" name="Fire HD 10 (4GB version)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/B64PduMnXMUfe2yrjFngQQ.png" mos="" align="middle" fullscreen="" width="1500" height="932" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0GVTPKJVT" target="_blank" rel="nofollow" data-dimension112="d3465fbb-18ce-4da1-9770-28a6200d1fcc" data-action="Deal Block" data-label="Fire HD 10 (4GB version)" data-dimension48="Fire HD 10 (4GB version)" data-dimension25="$154">Fire HD 10 (4GB version): $154</a></strong><br>This is the correct model to buy if you want the most available RAM on Amazon's large-screen, affordable tablet. It is $15 more than the 2023 version, but with the extra memory, it's worth it to ensure the device can run the (somewhat limited) selection of apps available on Amazon tablets for the long haul.<a class="view-deal button" href="https://www.amazon.com/dp/B0GVTPKJVT" target="_blank" rel="nofollow" data-dimension112="d3465fbb-18ce-4da1-9770-28a6200d1fcc" data-action="Deal Block" data-label="Fire HD 10 (4GB version)" data-dimension48="Fire HD 10 (4GB version)" data-dimension25="$154">View Deal</a></p></div><p>Lots of potential buyers aren't looking at the latest tech news to see when Amazon quietly launches upgraded tablets, so they might just search for Fire HD 10 (or even a cheap tablet) on Amazon and stumble on the three-year-old version and think it's the newest one. That extra 1GB of RAM could significantly improve overall performance. </p><p>It's possible Amazon still considers the 2023 version to be the newest model, since it's the only one that offers 3GB of RAM, and it's showing the 4GB version as a separate model, not a replacement, but that would be an odd distinction to have between models, and I have to assume the 3GB version will be phased out.</p><p>Both tablets have 32GB of storage, and the <a href="https://www.amazon.com/dp/B0BHZWT2FR" target="_blank" rel="nofollow">64GB upgrade is only available on the older model</a>. Perhaps Amazon has decided that the extra space isn't needed in a tablet at this low price point. </p><p>If you're in the market for an affordable Amazon device, and you think you'll benefit from the extra memory (and I'm pretty sure you will), be sure to get the <em>actual </em>latest version. Hopefully, Amazon removes the "newest model" tag from the 2023 Fire HD 10 to avoid confusion, as I'm sure this was just an error and not an attempt to trick shoppers. But even if it's a mistake, it could still lead to confusion and wasted money. </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/opinion/i-use-these-3-tricks-with-all-my-tablets-so-they-dont-just-feel-like-a-bigger-phone">I use these 3 tricks with all my tablets so they don’t just feel like a bigger phone</a></li><li><a href="https://www.tomsguide.com/best-picks/best-tablets-under-dollar500">These are the best budget tablets under $500</a></li><li><a href="https://www.tomsguide.com/computing/tablets/samsung-galaxy-tab-s11-ultra-vs-ipad-pro-m5-which-tablet-should-you-buy">Samsung Galaxy Tab S11 Ultra vs. iPad Pro M5 — which tablet should you buy?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 best new to Prime Video movies to stream this weekend (July 3-5) ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/entertainment/streaming/prime-video"><strong>Prime Video</strong></a> is a great <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a> for finding your next favorite movie. While Amazon doesn't have the deepest library of original movies, it adds dozens of movies to its streaming service each month. In fact, it <a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-69-new-movies-and-shows-here-are-the-5-im-streaming-first">just added 69 new movies and shows on July 1</a> alone.</p><p>This week, I've scoured the list of what's on Prime, and I've landed on three must-watch films. At the top of the list is "<strong>Project Hail Mary</strong>," which is making its Prime Video debut this weekend. Then, there's "<strong>Gladiator</strong>," a movie that needs no excuse to be watched. Finally, I'm ending things on a high note with "<strong>Tropic Thunder</strong>," which absolutely would not get made today, yet remains a comedy classic.</p><p>So, here are the three new to Prime Video movies that you need to be streaming this weekend. If you need more recommendations, check out our full guide to <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-july-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">everything new on Prime Video in July 2026</a>.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="project-hail-mary-2026-3">'Project Hail Mary' (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/m08TxIsFTRI" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Science fiction movie</p><p><strong>What's it about? </strong>"<a href="https://www.tomsguide.com/entertainment/movies/project-hail-mary-review-ryan-gosling-shines-in-the-best-movie-of-the-year-so-far">Project Hail Mary</a>" stars Ryan Gosling as Grace, a school teacher who awakes to find himself in space, where he meets the alien, Rocky (James Ortiz). Together, they try to solve why an alien dubbed "Astrophage" is killing nearly every sun in the galaxy, while Grace starts to remember who he is and how he ended up as part of Project Hail Mary.</p><p><strong>Why you need to watch it: </strong>This was my best movie of 2026 until it was finally beaten out by "<a href="https://www.tomsguide.com/entertainment/movies/the-invite-review">The Invite</a>" at the end of June. It's an incredible display of technical filmmaking skill, anchored by Oscar-worthy performances from Gosling and Ortiz, who is both the puppeteer for the alien Rocky and the voice.</p><p><em>Stream </em><a href="https://www.amazon.com/" target="_blank" rel="nofollow"><em>"Project Hail Mary" on Prime Video</em></a><em> now</em></p><h2 id="gladiator-2000">'Gladiator' (2000)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/P5ieIbInFpg" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Epic historical fiction movie</p><p><strong>What's it about? </strong>"Gladiator" tells the tale of Maximus Decimus Meridius (Russell Crowe). Commander of the Armies of the North, General of the Felix Legions. Loyal servant to the true emperor, Marcus Aurelius (Richard Harris). Father to a murdered son (Giorgio Cantarini), husband to a murdered wife (Ginnina Facio). He will have his vengeance, in this life or the next.</p><p><strong>Why you need to watch it: </strong>This movie is always worth a rewatch. If you've never seen it before, go watch it now. If you don't like it, I'll give you your money back (but not really).</p><p><em>Stream </em><a href="https://www.amazon.com/" target="_blank" rel="nofollow"><em>"Gladiator" on Prime Video</em></a><em> now</em></p><h2 id="tropic-thunder-2008">'Tropic Thunder' (2008)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/9Pl4JNnqNaE" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Action comedy movie</p><p><strong>What's it about? </strong>"Tropic Thunder" stars Ben Stiller as action star Tugg Speedman, who, along with Jeff Portnoy (Jack Black), Kirk Lazarus (Robert Downey Jr.) and many other (fictional) stars, heads to Vietnam to film a war movie. But when the film's director (Steve Coogan) explodes, stepping on a land mine, and Tugg gets captured by rebels, everything becomes chaos.</p><p><strong>Why you need to watch it: </strong>This movie is, simply put, hysterical. The cast is excellent, especially Downey Jr., whose Kirk Lazarus is in Blackface as Lincoln Osiris for nearly the entire movie. Even though it's a satirical performance, it almost certainly would stop this movie from getting made today, despite earning the Marvel star an Oscar nomination.</p><p><em>Stream </em><a href="https://www.amazon.com/" target="_blank" rel="nofollow"><em>"Tropic Thunder" on Prime Video</em></a><em> now</em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/streaming/missed-it-in-theaters-heres-every-movie-finally-arriving-on-streaming-in-july-2026">Missed it in theaters? Here's every movie finally arriving on streaming in July 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/netflix-just-added-tk-new-shows-and-movies-heres-5-id-stream-right-now-july-1-2026">Netflix just added 37 new shows and movies — here's 5 I'd stream right now</a></li><li><a href="https://www.tomsguide.com/entertainment/movies/minions-and-monsters-is-no-toy-story-5-but-youll-still-have-a-blast">'Minions and Monsters' is no 'Toy Story 5,' but you'll still have a blast</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-best-new-to-prime-video-movies-to-stream-this-weekend-july-3-5-2026</link>
                                                                            <description>
                            <![CDATA[ Prime Video is always adding more movies, and these three recently added films are worthy of a spot in your watchlist this weekend. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">q3T6fjLFeAp4cdsgAQx6tP</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/jei6mM4DzGfkzn9S6Ezz7U-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 03 Jul 2026 14:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Movies]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ malcolm.mcmillan@futurenet.com (Malcolm McMillan) ]]></author>                    <dc:creator><![CDATA[ Malcolm McMillan ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/sSDLEbNEgBXf86HpujaWZ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Malcolm McMillan is a Streaming Editor for Tom&#039;s Guide, covering all the latest in streaming TV shows and movies. That means news, analysis, recommendations, reviews and more for just about anything you can watch, including sports! If it can be seen on a screen, he can write about it. &lt;/p&gt;&lt;p&gt;Malcolm has been with Tom&#039;s Guide since June 2022, starting as a staff writer covering breaking news. Since then, he&#039;s transitioned to cover artificial intelligence (AI), A/V tech and VR headsets. Since late 2023 he has almost exclusively covered streaming and entertainment for Tom&#039;s Guide.&lt;/p&gt;&lt;p&gt;Before writing for Tom&#039;s Guide, Malcolm worked as a fantasy football analyst writing for several sites and also had a brief stint working for Microsoft selling laptops, Xbox products and even the ill-fated Windows phone. He is passionate about video games and sports, though both cause him to yell at the TV frequently. He proudly sports many tattoos, including an Arsenal tattoo, in honor of the team that causes him to yell at the TV the most.&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/jei6mM4DzGfkzn9S6Ezz7U-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on a yellow popcorn background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on a yellow popcorn background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on a yellow popcorn background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/jei6mM4DzGfkzn9S6Ezz7U-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/entertainment/streaming/prime-video"><strong>Prime Video</strong></a> is a great <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a> for finding your next favorite movie. While Amazon doesn't have the deepest library of original movies, it adds dozens of movies to its streaming service each month. In fact, it <a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-just-added-69-new-movies-and-shows-here-are-the-5-im-streaming-first">just added 69 new movies and shows on July 1</a> alone.</p><p>This week, I've scoured the list of what's on Prime, and I've landed on three must-watch films. At the top of the list is "<strong>Project Hail Mary</strong>," which is making its Prime Video debut this weekend. Then, there's "<strong>Gladiator</strong>," a movie that needs no excuse to be watched. Finally, I'm ending things on a high note with "<strong>Tropic Thunder</strong>," which absolutely would not get made today, yet remains a comedy classic.</p><p>So, here are the three new to Prime Video movies that you need to be streaming this weekend. If you need more recommendations, check out our full guide to <a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-july-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">everything new on Prime Video in July 2026</a>.</p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h2 id="project-hail-mary-2026-3">'Project Hail Mary' (2026)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/m08TxIsFTRI" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Science fiction movie</p><p><strong>What's it about? </strong>"<a href="https://www.tomsguide.com/entertainment/movies/project-hail-mary-review-ryan-gosling-shines-in-the-best-movie-of-the-year-so-far">Project Hail Mary</a>" stars Ryan Gosling as Grace, a school teacher who awakes to find himself in space, where he meets the alien, Rocky (James Ortiz). Together, they try to solve why an alien dubbed "Astrophage" is killing nearly every sun in the galaxy, while Grace starts to remember who he is and how he ended up as part of Project Hail Mary.</p><p><strong>Why you need to watch it: </strong>This was my best movie of 2026 until it was finally beaten out by "<a href="https://www.tomsguide.com/entertainment/movies/the-invite-review">The Invite</a>" at the end of June. It's an incredible display of technical filmmaking skill, anchored by Oscar-worthy performances from Gosling and Ortiz, who is both the puppeteer for the alien Rocky and the voice.</p><p><em>Stream </em><a href="https://www.amazon.com/" target="_blank" rel="nofollow"><em>"Project Hail Mary" on Prime Video</em></a><em> now</em></p><h2 id="gladiator-2000">'Gladiator' (2000)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/P5ieIbInFpg" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Epic historical fiction movie</p><p><strong>What's it about? </strong>"Gladiator" tells the tale of Maximus Decimus Meridius (Russell Crowe). Commander of the Armies of the North, General of the Felix Legions. Loyal servant to the true emperor, Marcus Aurelius (Richard Harris). Father to a murdered son (Giorgio Cantarini), husband to a murdered wife (Ginnina Facio). He will have his vengeance, in this life or the next.</p><p><strong>Why you need to watch it: </strong>This movie is always worth a rewatch. If you've never seen it before, go watch it now. If you don't like it, I'll give you your money back (but not really).</p><p><em>Stream </em><a href="https://www.amazon.com/" target="_blank" rel="nofollow"><em>"Gladiator" on Prime Video</em></a><em> now</em></p><h2 id="tropic-thunder-2008">'Tropic Thunder' (2008)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/9Pl4JNnqNaE" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Action comedy movie</p><p><strong>What's it about? </strong>"Tropic Thunder" stars Ben Stiller as action star Tugg Speedman, who, along with Jeff Portnoy (Jack Black), Kirk Lazarus (Robert Downey Jr.) and many other (fictional) stars, heads to Vietnam to film a war movie. But when the film's director (Steve Coogan) explodes, stepping on a land mine, and Tugg gets captured by rebels, everything becomes chaos.</p><p><strong>Why you need to watch it: </strong>This movie is, simply put, hysterical. The cast is excellent, especially Downey Jr., whose Kirk Lazarus is in Blackface as Lincoln Osiris for nearly the entire movie. Even though it's a satirical performance, it almost certainly would stop this movie from getting made today, despite earning the Marvel star an Oscar nomination.</p><p><em>Stream </em><a href="https://www.amazon.com/" target="_blank" rel="nofollow"><em>"Tropic Thunder" on Prime Video</em></a><em> now</em></p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/streaming/missed-it-in-theaters-heres-every-movie-finally-arriving-on-streaming-in-july-2026">Missed it in theaters? Here's every movie finally arriving on streaming in July 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/netflix-just-added-tk-new-shows-and-movies-heres-5-id-stream-right-now-july-1-2026">Netflix just added 37 new shows and movies — here's 5 I'd stream right now</a></li><li><a href="https://www.tomsguide.com/entertainment/movies/minions-and-monsters-is-no-toy-story-5-but-youll-still-have-a-blast">'Minions and Monsters' is no 'Toy Story 5,' but you'll still have a blast</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon could follow in Apple's footsteps by building its own processors — here's what that means for future Kindles and Fire TVs ]]></title>
                                                                                                <dc:content><![CDATA[ <p>With AI causing skyrocketing production and data costs across the industry, Amazon could be taking the Apple route of bringing processor design in-house in an attempt to save money.</p><p>The leak comes from supply chain analyst <a href="https://x.com/mingchikuo/status/2072530907941175631" target="_blank">Ming-Chi Kuo</a> who claims that Amazon is "moving away from externally sourced processors and adopting a COT (customer-owned model)." According to Kuo, this decision was made because of the rapid expansion of AI compute and Amazon is responding by streamlining and changing things in its "non-AI businesses."</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4399px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="j2wxLq5wc5pHWe758SdqCF" name="kindle colorsoft 2026 5" alt="the kindle colorsoft 2026 photographed in direct sunlight" src="https://cdn.mos.cms.futurecdn.net/j2wxLq5wc5pHWe758SdqCF.jpg" mos="" align="middle" fullscreen="" width="4399" height="2475" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Erin Bashford)</span></figcaption></figure><p>Part of that is a gradual shift away from external sourcing and taking control of processor development. Kuo says that Amazon is tapping AIchip for back-end design and testing with this strategy starting in earnest in 2027.</p><p>AIchip is 23 year old companny based out of Taipei, Taiwan that designs silicon for other companies, specifically application-specific integrated cricuit (ASIC) chips. In general, these chips are designed, as the name implies for very specific functions. In recent years AIchip has developed 3nm chips used in AI servers for customers that include Amazon and Intel, per<a href="https://www.taipeitimes.com/News/biz/archives/2025/11/07/2003846767" target="_blank"> Taipei Times</a>.</p><p>Kuo claims that silicon designed by AIchip could appear in Amazon's devices, including the Kindle, Fire TV, Echo, Blink, Ring and Alexa-enabled products. </p><h2 id="why-it-matters">Why it matters</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3442px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XZh9AXumiewa2tpxR6bpwe" name="Apple-Silicon-M5-feature-v2-5" alt="Graphic of a wafer of Apple M2 chips seen from above" src="https://cdn.mos.cms.futurecdn.net/XZh9AXumiewa2tpxR6bpwe.jpg" mos="" align="middle" fullscreen="" width="3442" height="1936" attribution="" endorsement="" class="inline"></p></div></div></figure><p>If Kuo's claims turn out to be true, this could take Amazon down a more Apple path. Until 2020, Apple used Intel silicon in its Macs before <a href="https://www.tomsguide.com/computing/cpus/apples-m-series-chip-gamble-5-years-later-how-ditching-intel-revolutionized-computing-and-whats-next">introducing the M1 CPU</a> in November of that year.</p><p>Meanwhile, the company had been using its own in-house A-series chips in the iPhone and iPad since 2010 with the introduction of the A4 chip. That silicon debuted on the iPhone 4 and the original iPad. </p><p>Designing the chip in-house, even if itis built by partners like Samsung TSMC, gives Apple more control over integration and optimization leading to improved performance.</p><h2 id="what-amazon-is-already-doing">What Amazon is already doing</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ozuX3sU7ddiZaEUUmFw2pC" name="Echo Dot Max and Studio.jpg" alt="Echo Dot Max and Studio" src="https://cdn.mos.cms.futurecdn.net/ozuX3sU7ddiZaEUUmFw2pC.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p>Notably, Amazon may have already started this transition with the new <a href="https://www.tomsguide.com/audio/smart-speakers/amazon-unveils-new-echo-dot-max-and-studio-speakers-with-atmos-and-alexa-support">Echo speakers launched in October 2025</a>. Those speakers feature two custom-designed chips; the AZ3 or the AZ3 Pro, which are specifically meant for ambient AI tasks. </p><p>Per an <a href="https://www.aboutamazon.com/news/devices/amazon-new-echo-devices-alexa-plus" target="_blank">Amazon blog post</a>, the Echo Dot Max uses the AZ3 for detecting conversations, which is how the Echo enables users from anywhere in the room to talk to Alexa Plus AI. The Echo Studio, Echo Show 8 and Echo Show 11 all have the AZ3 Pro, which adds support for more language models and "vision transformers." </p><p>Tom's Guide reached out to Amazon to confirm Kuo's report and was told no comment.</p><h2 id="panos-panay-confirms-custom-chips">Panos Panay confirms custom chips</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:50.95%;"><img id="Kfyy5WnhmpwunL5q6MTncf" name="panos-surface.jpeg" alt="Panos Panay at surface event" src="https://cdn.mos.cms.futurecdn.net/Kfyy5WnhmpwunL5q6MTncf.jpeg" mos="" align="middle" fullscreen="" width="2000" height="1019" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Microsoft)</span></figcaption></figure><p>However, today, Amazon's hardware head Panos Panay indicated to <a href="https://www.cnbc.com/2026/07/02/amazon-ai-chips-devices.html" target="_blank">CNBC </a>on its "The Tech Download" podcasts that the company is designing its own AI chips. </p><p>“On some of the more critical devices right now, our focus is end-to-end silicon, because to your point," Panay said and pointed out the Echo devices released last year and the Fire TV. "We definitely need to think about how that end-to-end delivery of hardware comes together," he added. </p><p>Per CNBC, the focus seems to be on custom AI chips but also Panay said that the company is developing a "whole roadmap of on-the-go devices." He claimed that "you won't have to wait long" to see these new devices.</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/online-security/amazon-put-identity-theft-victims-through-a-kafkaesque-ordeal-ftc-issues-usd2-5-million-fine-over-denying-requests">'Amazon put identity theft victims through a Kafkaesque ordeal': FTC issues $2.5 million fine over denying requests</a></li><li><a href="https://www.tomsguide.com/us/best-e-readers,review-2766.html">The best Kindles: Our top picks tested and rated</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming-devices/amazon-kills-fire-stick-sideloading-apparently-malware-and-piracy-are-to-blame">Amazon kills Fire Stick sideloading — apparently, malware and piracy are to blame</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/amazon-could-follow-in-apples-footsteps-by-building-its-own-processors-heres-what-that-means-for-future-kindles-and-fire-tvs</link>
                                                                            <description>
                            <![CDATA[ A supply analyst is claiming that Amazon is looking to bring processor design in-house to save money. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">MKAQHFmpGxp8gqrSxiVw9o</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/9C2G7Q42d87CR9vwz8eabU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 02 Jul 2026 19:46:59 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Computing]]></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/9C2G7Q42d87CR9vwz8eabU-1280-80.jpg">
                                                            <media:credit><![CDATA[Bluestok / Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amazon sign outside a building]]></media:description>                                                            <media:text><![CDATA[Amazon sign outside a building]]></media:text>
                                <media:title type="plain"><![CDATA[Amazon sign outside a building]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/9C2G7Q42d87CR9vwz8eabU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>With AI causing skyrocketing production and data costs across the industry, Amazon could be taking the Apple route of bringing processor design in-house in an attempt to save money.</p><p>The leak comes from supply chain analyst <a href="https://x.com/mingchikuo/status/2072530907941175631" target="_blank">Ming-Chi Kuo</a> who claims that Amazon is "moving away from externally sourced processors and adopting a COT (customer-owned model)." According to Kuo, this decision was made because of the rapid expansion of AI compute and Amazon is responding by streamlining and changing things in its "non-AI businesses."</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4399px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="j2wxLq5wc5pHWe758SdqCF" name="kindle colorsoft 2026 5" alt="the kindle colorsoft 2026 photographed in direct sunlight" src="https://cdn.mos.cms.futurecdn.net/j2wxLq5wc5pHWe758SdqCF.jpg" mos="" align="middle" fullscreen="" width="4399" height="2475" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Erin Bashford)</span></figcaption></figure><p>Part of that is a gradual shift away from external sourcing and taking control of processor development. Kuo says that Amazon is tapping AIchip for back-end design and testing with this strategy starting in earnest in 2027.</p><p>AIchip is 23 year old companny based out of Taipei, Taiwan that designs silicon for other companies, specifically application-specific integrated cricuit (ASIC) chips. In general, these chips are designed, as the name implies for very specific functions. In recent years AIchip has developed 3nm chips used in AI servers for customers that include Amazon and Intel, per<a href="https://www.taipeitimes.com/News/biz/archives/2025/11/07/2003846767" target="_blank"> Taipei Times</a>.</p><p>Kuo claims that silicon designed by AIchip could appear in Amazon's devices, including the Kindle, Fire TV, Echo, Blink, Ring and Alexa-enabled products. </p><h2 id="why-it-matters">Why it matters</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3442px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XZh9AXumiewa2tpxR6bpwe" name="Apple-Silicon-M5-feature-v2-5" alt="Graphic of a wafer of Apple M2 chips seen from above" src="https://cdn.mos.cms.futurecdn.net/XZh9AXumiewa2tpxR6bpwe.jpg" mos="" align="middle" fullscreen="" width="3442" height="1936" attribution="" endorsement="" class="inline"></p></div></div></figure><p>If Kuo's claims turn out to be true, this could take Amazon down a more Apple path. Until 2020, Apple used Intel silicon in its Macs before <a href="https://www.tomsguide.com/computing/cpus/apples-m-series-chip-gamble-5-years-later-how-ditching-intel-revolutionized-computing-and-whats-next">introducing the M1 CPU</a> in November of that year.</p><p>Meanwhile, the company had been using its own in-house A-series chips in the iPhone and iPad since 2010 with the introduction of the A4 chip. That silicon debuted on the iPhone 4 and the original iPad. </p><p>Designing the chip in-house, even if itis built by partners like Samsung TSMC, gives Apple more control over integration and optimization leading to improved performance.</p><h2 id="what-amazon-is-already-doing">What Amazon is already doing</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ozuX3sU7ddiZaEUUmFw2pC" name="Echo Dot Max and Studio.jpg" alt="Echo Dot Max and Studio" src="https://cdn.mos.cms.futurecdn.net/ozuX3sU7ddiZaEUUmFw2pC.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p>Notably, Amazon may have already started this transition with the new <a href="https://www.tomsguide.com/audio/smart-speakers/amazon-unveils-new-echo-dot-max-and-studio-speakers-with-atmos-and-alexa-support">Echo speakers launched in October 2025</a>. Those speakers feature two custom-designed chips; the AZ3 or the AZ3 Pro, which are specifically meant for ambient AI tasks. </p><p>Per an <a href="https://www.aboutamazon.com/news/devices/amazon-new-echo-devices-alexa-plus" target="_blank">Amazon blog post</a>, the Echo Dot Max uses the AZ3 for detecting conversations, which is how the Echo enables users from anywhere in the room to talk to Alexa Plus AI. The Echo Studio, Echo Show 8 and Echo Show 11 all have the AZ3 Pro, which adds support for more language models and "vision transformers." </p><p>Tom's Guide reached out to Amazon to confirm Kuo's report and was told no comment.</p><h2 id="panos-panay-confirms-custom-chips">Panos Panay confirms custom chips</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:50.95%;"><img id="Kfyy5WnhmpwunL5q6MTncf" name="panos-surface.jpeg" alt="Panos Panay at surface event" src="https://cdn.mos.cms.futurecdn.net/Kfyy5WnhmpwunL5q6MTncf.jpeg" mos="" align="middle" fullscreen="" width="2000" height="1019" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Microsoft)</span></figcaption></figure><p>However, today, Amazon's hardware head Panos Panay indicated to <a href="https://www.cnbc.com/2026/07/02/amazon-ai-chips-devices.html" target="_blank">CNBC </a>on its "The Tech Download" podcasts that the company is designing its own AI chips. </p><p>“On some of the more critical devices right now, our focus is end-to-end silicon, because to your point," Panay said and pointed out the Echo devices released last year and the Fire TV. "We definitely need to think about how that end-to-end delivery of hardware comes together," he added. </p><p>Per CNBC, the focus seems to be on custom AI chips but also Panay said that the company is developing a "whole roadmap of on-the-go devices." He claimed that "you won't have to wait long" to see these new devices.</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/online-security/amazon-put-identity-theft-victims-through-a-kafkaesque-ordeal-ftc-issues-usd2-5-million-fine-over-denying-requests">'Amazon put identity theft victims through a Kafkaesque ordeal': FTC issues $2.5 million fine over denying requests</a></li><li><a href="https://www.tomsguide.com/us/best-e-readers,review-2766.html">The best Kindles: Our top picks tested and rated</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming-devices/amazon-kills-fire-stick-sideloading-apparently-malware-and-piracy-are-to-blame">Amazon kills Fire Stick sideloading — apparently, malware and piracy are to blame</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 'Amazon put identity theft victims through a Kafkaesque ordeal': FTC issues $2.5 million fine over denying requests ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The Federal Trade Commission is fining Amazon $2.25 million over allegations that the <strong>retail giant regularly denied records requests from identity theft victims</strong>. The U.S. agency accused Amazon of violating the Fair Credit Reporting Act. </p><p>Per an <a href="https://www.ftc.gov/news-events/news/press-releases/2026/06/ftc-requires-amazon-pay-225-million-resolve-charges-it-knowingly-violated-fair-credit-reporting-act">FTC press release</a>, a complaint was filed by the Department of Justice as a referral from the FTC. It alleged that Amazon failed to comply with <a href="https://www.ftc.gov/business-guidance/resources/businesses-must-provide-victims-law-enforcement-transaction-records-relating-identity-theft" target="_blank">Section 609(e) of the FCRA</a>, which requires companies to provide victims of identity theft with records about transactions made in their name within 30 days of a consumer's request. </p><h2 id="ftc-accusations-against-amazon">FTC accusations against Amazon</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1050px;"><p class="vanilla-image-block" style="padding-top:65.81%;"><img id="8TpRNq27mEgGpZN8JRsuUD" name="ftc-hq-loc.jpg" alt="Federal Trade Commission building" src="https://cdn.mos.cms.futurecdn.net/8TpRNq27mEgGpZN8JRsuUD.jpg" mos="" align="middle" fullscreen="" width="1050" height="691" attribution="" endorsement="" class="inline"></p></div></div></figure><p>Amazon apparently did not have a written policy for responding to 609(e) requests until last year.</p><div><blockquote><p>Amazon often put identity theft victims through a Kafkaesque ordeal by demanding they identify the thief who stole their information before Amazon would release the records.</p><p>Christopher Mufarrige, FTC</p></blockquote></div><p>“Amazon often put identity theft victims through a Kafkaesque ordeal by demanding they identify the thief who stole their information before Amazon would release the records the law entitles them to—records that could help victims protect themselves and recover from the fraudulent conduct,” said Christopher Mufarrige, Director of the FTC’s Bureau of Consumer Protection said in the release.</p><p><strong>The complaint claims that customers who reached out to Amazon were often told that the requested records could not be provided for "security" or "privacy" reasons. </strong>In one provided example, a consumer tried to get business records related to unauthorized charges from a fraudulent account. However, Amazon reportedly refused for security reasons unless the consumer "guessed the name on the [fraudulent] account," which they were unable to do.</p><h2 id="penalties-and-resolution">Penalties and resolution</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="n7naznf6XXby7f2TzxcSt3" name="Amazon Tips.jpg" alt="Amazon app logo" src="https://cdn.mos.cms.futurecdn.net/n7naznf6XXby7f2TzxcSt3.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Alongside the $2.25 million civial penalty, <strong>the </strong><a href="https://www.ftc.gov/system/files/ftc_gov/pdf/Amazon-ConsentMotionforOrder.pdf" target="_blank"><strong>DOJ's proposed order</strong></a><strong> requires Amazon to provide records lawfully requested by identity theft victim</strong>s and law enforcement agencies. It also requires the company to provide notice to customers about how they can request FCRA records.</p><p>Additionally, Amazon is required to contact any customers who requested records since April 2024. </p><p><strong>An Amazon spokesperson told Tom's Guide that it has implemented process improvements and resolved the matter with the FTC.</strong></p><p>“We are committed to providing customers with their detailed account information when they need it most. We've resolved this matter with the FTC and have implemented process improvements for customers who believe they may be victims of identity theft. Customers who need assistance requesting their records can visit our <a href="https://www.amazon.com/gp/help/customer/display.html?nodeId=TJxMd8vqN3YHz8DNEo" target="_blank">Help Page</a> to learn more."</p><h2 id="how-to-contact-amazon-for-identity-theft-records">How to contact Amazon for Identity Theft records</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XQaBKuYTokum8CcLXPetj3" name="Amazon sale.jpg" alt="Amazon Summer Sale" src="https://cdn.mos.cms.futurecdn.net/XQaBKuYTokum8CcLXPetj3.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Amazon has a portal for Identity theft called "<a href="https://account-status.amazon.com/uaa-account-unauthorized-activity-report" target="_blank">Report Suspicious Activity</a>." There you can report unrecognized orders, chargers to your payment methods that aren't from your Amazon account and other unauthorized activity.</p><p><strong>You can request records relating to fraudulent transactions via the </strong><a href="https://www.amazon.com/hz/privacy-central/data-requests/preview.html" target="_blank"><strong>Request Your Data</strong></a><strong> portal. </strong>If that's not enough you can also send an email or physical mail: </p><p><strong>By Email: </strong>fcra-requests@amazon.com</p><p><strong>By Mail: </strong>Amazon Legal Department <br>Attn: FCRA Records Requests <br>P.O. Box 80161Seattle, WA 98108-9990</p><p>You will need to provide a copy of a government ID, a copy of a police report concerning identity theft, or a government-issued Identity Theft Report, found at <a href="https://www.identitytheft.gov/" target="_blank">IdentityTheft.gov</a>. You'll also need relevant details about the fraudulent transaction and contact information so Amazon can reach out.</p><p>Amazon says that it will fulfill your requests within 30 days unless more information is needed.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/streaming-devices/amazon-kills-fire-stick-sideloading-apparently-malware-and-piracy-are-to-blame">Amazon kills Fire Stick sideloading — apparently, malware and piracy are to blame</a></li><li><a href="https://www.tomsguide.com/sales-events/amazon-has-a-hidden-button-that-connects-you-with-a-real-customer-service-agent-heres-where-to-find-it">Amazon has a hidden button that connects you with a real customer service agent — here's where to find it</a></li><li><a href="https://www.tomsguide.com/ai/i-never-shop-on-amazon-without-chatgpt-heres-how-i-use-it-to-find-the-best-products">Still shopping blind on Amazon? This ChatGPT trick helps me avoid bad buys — and it works every time</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/online-security/amazon-put-identity-theft-victims-through-a-kafkaesque-ordeal-ftc-issues-usd2-5-million-fine-over-denying-requests</link>
                                                                            <description>
                            <![CDATA[ The Federal Trade Commission accused Amazon of making it difficult for identity theft victims to actually get records of fraudulent transactions. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">EADeR4L7JTYdAtzNK7K7rQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wmVm3TePyjJDn24ewHmcBh-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Jul 2026 20:48:38 +0000</pubDate>                                                                                                                                <updated>Wed, 01 Jul 2026 20:58:49 +0000</updated>
                                                                                                                                            <category><![CDATA[Online Security]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Internet]]></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/wmVm3TePyjJDn24ewHmcBh-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amazon logo on a building]]></media:description>                                                            <media:text><![CDATA[Amazon logo on a building]]></media:text>
                                <media:title type="plain"><![CDATA[Amazon logo on a building]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wmVm3TePyjJDn24ewHmcBh-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Federal Trade Commission is fining Amazon $2.25 million over allegations that the <strong>retail giant regularly denied records requests from identity theft victims</strong>. The U.S. agency accused Amazon of violating the Fair Credit Reporting Act. </p><p>Per an <a href="https://www.ftc.gov/news-events/news/press-releases/2026/06/ftc-requires-amazon-pay-225-million-resolve-charges-it-knowingly-violated-fair-credit-reporting-act">FTC press release</a>, a complaint was filed by the Department of Justice as a referral from the FTC. It alleged that Amazon failed to comply with <a href="https://www.ftc.gov/business-guidance/resources/businesses-must-provide-victims-law-enforcement-transaction-records-relating-identity-theft" target="_blank">Section 609(e) of the FCRA</a>, which requires companies to provide victims of identity theft with records about transactions made in their name within 30 days of a consumer's request. </p><h2 id="ftc-accusations-against-amazon">FTC accusations against Amazon</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1050px;"><p class="vanilla-image-block" style="padding-top:65.81%;"><img id="8TpRNq27mEgGpZN8JRsuUD" name="ftc-hq-loc.jpg" alt="Federal Trade Commission building" src="https://cdn.mos.cms.futurecdn.net/8TpRNq27mEgGpZN8JRsuUD.jpg" mos="" align="middle" fullscreen="" width="1050" height="691" attribution="" endorsement="" class="inline"></p></div></div></figure><p>Amazon apparently did not have a written policy for responding to 609(e) requests until last year.</p><div><blockquote><p>Amazon often put identity theft victims through a Kafkaesque ordeal by demanding they identify the thief who stole their information before Amazon would release the records.</p><p>Christopher Mufarrige, FTC</p></blockquote></div><p>“Amazon often put identity theft victims through a Kafkaesque ordeal by demanding they identify the thief who stole their information before Amazon would release the records the law entitles them to—records that could help victims protect themselves and recover from the fraudulent conduct,” said Christopher Mufarrige, Director of the FTC’s Bureau of Consumer Protection said in the release.</p><p><strong>The complaint claims that customers who reached out to Amazon were often told that the requested records could not be provided for "security" or "privacy" reasons. </strong>In one provided example, a consumer tried to get business records related to unauthorized charges from a fraudulent account. However, Amazon reportedly refused for security reasons unless the consumer "guessed the name on the [fraudulent] account," which they were unable to do.</p><h2 id="penalties-and-resolution">Penalties and resolution</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="n7naznf6XXby7f2TzxcSt3" name="Amazon Tips.jpg" alt="Amazon app logo" src="https://cdn.mos.cms.futurecdn.net/n7naznf6XXby7f2TzxcSt3.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Alongside the $2.25 million civial penalty, <strong>the </strong><a href="https://www.ftc.gov/system/files/ftc_gov/pdf/Amazon-ConsentMotionforOrder.pdf" target="_blank"><strong>DOJ's proposed order</strong></a><strong> requires Amazon to provide records lawfully requested by identity theft victim</strong>s and law enforcement agencies. It also requires the company to provide notice to customers about how they can request FCRA records.</p><p>Additionally, Amazon is required to contact any customers who requested records since April 2024. </p><p><strong>An Amazon spokesperson told Tom's Guide that it has implemented process improvements and resolved the matter with the FTC.</strong></p><p>“We are committed to providing customers with their detailed account information when they need it most. We've resolved this matter with the FTC and have implemented process improvements for customers who believe they may be victims of identity theft. Customers who need assistance requesting their records can visit our <a href="https://www.amazon.com/gp/help/customer/display.html?nodeId=TJxMd8vqN3YHz8DNEo" target="_blank">Help Page</a> to learn more."</p><h2 id="how-to-contact-amazon-for-identity-theft-records">How to contact Amazon for Identity Theft records</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XQaBKuYTokum8CcLXPetj3" name="Amazon sale.jpg" alt="Amazon Summer Sale" src="https://cdn.mos.cms.futurecdn.net/XQaBKuYTokum8CcLXPetj3.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Amazon has a portal for Identity theft called "<a href="https://account-status.amazon.com/uaa-account-unauthorized-activity-report" target="_blank">Report Suspicious Activity</a>." There you can report unrecognized orders, chargers to your payment methods that aren't from your Amazon account and other unauthorized activity.</p><p><strong>You can request records relating to fraudulent transactions via the </strong><a href="https://www.amazon.com/hz/privacy-central/data-requests/preview.html" target="_blank"><strong>Request Your Data</strong></a><strong> portal. </strong>If that's not enough you can also send an email or physical mail: </p><p><strong>By Email: </strong>fcra-requests@amazon.com</p><p><strong>By Mail: </strong>Amazon Legal Department <br>Attn: FCRA Records Requests <br>P.O. Box 80161Seattle, WA 98108-9990</p><p>You will need to provide a copy of a government ID, a copy of a police report concerning identity theft, or a government-issued Identity Theft Report, found at <a href="https://www.identitytheft.gov/" target="_blank">IdentityTheft.gov</a>. You'll also need relevant details about the fraudulent transaction and contact information so Amazon can reach out.</p><p>Amazon says that it will fulfill your requests within 30 days unless more information is needed.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/streaming-devices/amazon-kills-fire-stick-sideloading-apparently-malware-and-piracy-are-to-blame">Amazon kills Fire Stick sideloading — apparently, malware and piracy are to blame</a></li><li><a href="https://www.tomsguide.com/sales-events/amazon-has-a-hidden-button-that-connects-you-with-a-real-customer-service-agent-heres-where-to-find-it">Amazon has a hidden button that connects you with a real customer service agent — here's where to find it</a></li><li><a href="https://www.tomsguide.com/ai/i-never-shop-on-amazon-without-chatgpt-heres-how-i-use-it-to-find-the-best-products">Still shopping blind on Amazon? This ChatGPT trick helps me avoid bad buys — and it works every time</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon kills Fire Stick sideloading — apparently, malware and piracy are to blame ]]></title>
                                                                                                <dc:content><![CDATA[ <p>In the back half of 2025, Amazon introduced its new proprietary, Linux-based operating system, <a href="https://www.tomsguide.com/entertainment/streaming-devices/amazons-new-usd40-fire-stick-is-the-illegal-streamers-nightmare-heres-why">Vega OS </a>which replaces the Fire OS. The old platform was an Android fork based on the Android Open Source Project. </p><p>Controversially, the new OS is more locked down lacking sideloading support. In a sprawling interview with the UK-based <a href="https://www.cordbusters.co.uk/amazon-fire-tv-boss-vega-sideloading-freely/" target="_blank">Cord Busters</a>, Amazon's vice president of Fire TV, Aidan Marcuss, finally explains why the switch was made.</p><h2 id="an-opportunity-to-innovate">An opportunity to 'innovate'</h2><p>Marcuss told Cord Busters that Vega OS is an opportunity for Amazon to "innovate and deliver more capabilities, even on the least expensive devices.” He also said that it would make things more secure and private for users, which was "sort of utmost in my mind." </p><p>That's a somewhat ironic statement since Vega OS blocks the ability to sideload third-party adblockers, in addition to launchers.</p><p>“Apps that facilitate piracy, and other apps, can carry malware,” Marcuss said when asked if sideloading actually causes harm. Marcuss also said that there is “a good amount of evidence that apps can carry unwanted code and behavior on them when they’re sideloaded.”</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVmNW"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVmNW.js" async></script><h2 id="piracy-and-malware-are-legit">Piracy and malware are legit</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="U8acSqAjfR4FTCZqNtQpQi" name="Piracy" alt="White keyboard key with a black skull and swords pirate symbol" src="https://cdn.mos.cms.futurecdn.net/U8acSqAjfR4FTCZqNtQpQi.jpg" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sitade / Getty Images)</span></figcaption></figure><p>For the unfamiliar, sideloading is the ability for Fire Sticks owners to add modified Android apps to the streaming device. When Vega OS was introduced in October 2025, we noted that it would be <a href="https://www.tomsguide.com/entertainment/streaming-devices/amazons-new-usd40-fire-stick-is-the-illegal-streamers-nightmare-heres-why">the illegal streamer's nightmare</a>.</p><p>Notably, soccer streamers like <a href="https://www.nytimes.com/athletic/6161947/2025/02/26/sports-streaming-piracy-premier-league/" target="_blank">DAZN and Sky Sports</a>, which stream top-league soccer matches, have accused Fire Sticks of enabling piracy. In May 2025, Enders Analysis, a media research firm, <a href="https://www.endersanalysis.com/reports/video-piracy-big-tech-clearly-unwilling-address-problem" target="_blank">released a report</a> that specifically blamed the Fire Stick for easily enabling streaming piracy.</p><p>Additionally, malware and fraud have been a problem. In November, <a href="https://www.malwarebytes.com/blog/news/2025/11/illegal-streaming-is-costing-people-real-money-research-finds" target="_blank">Malwarebytes reported</a> that 1 in 3 people who illegally stream in the UK have been victims of fraud or scams. The Fire TV focused <a href="https://www.aftvnews.com/additional-streaming-piracy-apps-blocked-by-amazon-on-fire-tv-devices/">AFTVNews</a>  found a number of blacklisted apps that could "put your personal data risk." The <a href="https://www.amazonforum.com/s/question/0D56Q00008WBcJ8SAL/cryptocurrency-malware-virus-on-fire-tv-stick-4k" target="_blank">Amazon support forums </a>are littered with posts about strange cryptocurrency malware or other strange malware.</p><p>That said, the blacklist also features apps that let users get around the Fire homescreen, which is increasingly an ad fest. </p><h2 id="vega-os-isn-t-quite-ready">Vega OS isn't quite ready</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TaRoJjZujqHfqqVSYaYKX5" name="Amazon Fire TV 4K Select-12" alt="Wall mounted TV streaming with Amazon Fire TV Stick 4K Select" src="https://cdn.mos.cms.futurecdn.net/TaRoJjZujqHfqqVSYaYKX5.jpg" mos="" align="middle" fullscreen="" width="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>Vega OS isn't as robust as Fire OS lacking support for things like Dolby Vision or USB storage. As we found in our review of the <a href="https://www.tomsguide.com/tvs/amazon-fire-tv-stick-4k-select-streaming-stick-review#section-fire-tv-select-review-performance-and-interface">Fire TV 4K Streaming Stick Select</a> it isn't quite ready for primetime. </p><p>"it feels more like a proof-of-concept at this point rather than a full release when it comes to app integration and other assorted features," we said at the time.</p><p>Cord Busters asked Marcuss about the difference between the 3,000 supported apps on Vega OS Fire sticks versus 40,000 on Fire OS ones.</p><p>“No customer is actually downloading 50,000 apps. The question is whether the apps they want to watch, the content that they’re looking for are there,” Marcuss said. He added that customers can stream “the vast, vast, vast majority of content” on Vega-OS Fire Sticks. </p><p>For most people, the difference between Vega and Fire OS won't matter, but as with <a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">many decisions to close down platforms</a> recently, it's more about taking away the choice, not whether or not people are using it.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/sales-events/amazon-has-a-hidden-button-that-connects-you-with-a-real-customer-service-agent-heres-where-to-find-it">Amazon has a hidden button that connects you with a real customer service agent — here's where to find it</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/3-new-to-prime-video-thriller-movies-to-stream-this-week-including-a-dark-romance-with-timothee-chalamet-playing-a-cannibal-june-30-july-6">3 new to Prime Video thriller movies to stream this week — including a dark romance with Timothée Chalamet playing a cannibal (June 30-July 6)</a></li><li><a href="https://www.tomsguide.com/us/best-e-readers,review-2766.html">The best Kindles in 2026: Our top picks tested and rated</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/streaming-devices/amazon-kills-fire-stick-sideloading-apparently-malware-and-piracy-are-to-blame</link>
                                                                            <description>
                            <![CDATA[ Amazon explains why it made the switch from Fire OS to Vega OS on its streaming devices. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">L6pu3WVZT2wCoe8kieHuPn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Q5RUVzBq77zy5pyVx8JMHa-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Jul 2026 18:06:50 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Streaming Devices]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></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/Q5RUVzBq77zy5pyVx8JMHa-1280-80.jpg">
                                                            <media:credit><![CDATA[Amazon]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amazon Fire Stick TV]]></media:description>                                                            <media:text><![CDATA[Amazon Fire Stick TV]]></media:text>
                                <media:title type="plain"><![CDATA[Amazon Fire Stick TV]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Q5RUVzBq77zy5pyVx8JMHa-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>In the back half of 2025, Amazon introduced its new proprietary, Linux-based operating system, <a href="https://www.tomsguide.com/entertainment/streaming-devices/amazons-new-usd40-fire-stick-is-the-illegal-streamers-nightmare-heres-why">Vega OS </a>which replaces the Fire OS. The old platform was an Android fork based on the Android Open Source Project. </p><p>Controversially, the new OS is more locked down lacking sideloading support. In a sprawling interview with the UK-based <a href="https://www.cordbusters.co.uk/amazon-fire-tv-boss-vega-sideloading-freely/" target="_blank">Cord Busters</a>, Amazon's vice president of Fire TV, Aidan Marcuss, finally explains why the switch was made.</p><h2 id="an-opportunity-to-innovate">An opportunity to 'innovate'</h2><p>Marcuss told Cord Busters that Vega OS is an opportunity for Amazon to "innovate and deliver more capabilities, even on the least expensive devices.” He also said that it would make things more secure and private for users, which was "sort of utmost in my mind." </p><p>That's a somewhat ironic statement since Vega OS blocks the ability to sideload third-party adblockers, in addition to launchers.</p><p>“Apps that facilitate piracy, and other apps, can carry malware,” Marcuss said when asked if sideloading actually causes harm. Marcuss also said that there is “a good amount of evidence that apps can carry unwanted code and behavior on them when they’re sideloaded.”</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVmNW"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVmNW.js" async></script><h2 id="piracy-and-malware-are-legit">Piracy and malware are legit</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="U8acSqAjfR4FTCZqNtQpQi" name="Piracy" alt="White keyboard key with a black skull and swords pirate symbol" src="https://cdn.mos.cms.futurecdn.net/U8acSqAjfR4FTCZqNtQpQi.jpg" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sitade / Getty Images)</span></figcaption></figure><p>For the unfamiliar, sideloading is the ability for Fire Sticks owners to add modified Android apps to the streaming device. When Vega OS was introduced in October 2025, we noted that it would be <a href="https://www.tomsguide.com/entertainment/streaming-devices/amazons-new-usd40-fire-stick-is-the-illegal-streamers-nightmare-heres-why">the illegal streamer's nightmare</a>.</p><p>Notably, soccer streamers like <a href="https://www.nytimes.com/athletic/6161947/2025/02/26/sports-streaming-piracy-premier-league/" target="_blank">DAZN and Sky Sports</a>, which stream top-league soccer matches, have accused Fire Sticks of enabling piracy. In May 2025, Enders Analysis, a media research firm, <a href="https://www.endersanalysis.com/reports/video-piracy-big-tech-clearly-unwilling-address-problem" target="_blank">released a report</a> that specifically blamed the Fire Stick for easily enabling streaming piracy.</p><p>Additionally, malware and fraud have been a problem. In November, <a href="https://www.malwarebytes.com/blog/news/2025/11/illegal-streaming-is-costing-people-real-money-research-finds" target="_blank">Malwarebytes reported</a> that 1 in 3 people who illegally stream in the UK have been victims of fraud or scams. The Fire TV focused <a href="https://www.aftvnews.com/additional-streaming-piracy-apps-blocked-by-amazon-on-fire-tv-devices/">AFTVNews</a>  found a number of blacklisted apps that could "put your personal data risk." The <a href="https://www.amazonforum.com/s/question/0D56Q00008WBcJ8SAL/cryptocurrency-malware-virus-on-fire-tv-stick-4k" target="_blank">Amazon support forums </a>are littered with posts about strange cryptocurrency malware or other strange malware.</p><p>That said, the blacklist also features apps that let users get around the Fire homescreen, which is increasingly an ad fest. </p><h2 id="vega-os-isn-t-quite-ready">Vega OS isn't quite ready</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TaRoJjZujqHfqqVSYaYKX5" name="Amazon Fire TV 4K Select-12" alt="Wall mounted TV streaming with Amazon Fire TV Stick 4K Select" src="https://cdn.mos.cms.futurecdn.net/TaRoJjZujqHfqqVSYaYKX5.jpg" mos="" align="middle" fullscreen="" width="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>Vega OS isn't as robust as Fire OS lacking support for things like Dolby Vision or USB storage. As we found in our review of the <a href="https://www.tomsguide.com/tvs/amazon-fire-tv-stick-4k-select-streaming-stick-review#section-fire-tv-select-review-performance-and-interface">Fire TV 4K Streaming Stick Select</a> it isn't quite ready for primetime. </p><p>"it feels more like a proof-of-concept at this point rather than a full release when it comes to app integration and other assorted features," we said at the time.</p><p>Cord Busters asked Marcuss about the difference between the 3,000 supported apps on Vega OS Fire sticks versus 40,000 on Fire OS ones.</p><p>“No customer is actually downloading 50,000 apps. The question is whether the apps they want to watch, the content that they’re looking for are there,” Marcuss said. He added that customers can stream “the vast, vast, vast majority of content” on Vega-OS Fire Sticks. </p><p>For most people, the difference between Vega and Fire OS won't matter, but as with <a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">many decisions to close down platforms</a> recently, it's more about taking away the choice, not whether or not people are using it.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/sales-events/amazon-has-a-hidden-button-that-connects-you-with-a-real-customer-service-agent-heres-where-to-find-it">Amazon has a hidden button that connects you with a real customer service agent — here's where to find it</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/3-new-to-prime-video-thriller-movies-to-stream-this-week-including-a-dark-romance-with-timothee-chalamet-playing-a-cannibal-june-30-july-6">3 new to Prime Video thriller movies to stream this week — including a dark romance with Timothée Chalamet playing a cannibal (June 30-July 6)</a></li><li><a href="https://www.tomsguide.com/us/best-e-readers,review-2766.html">The best Kindles in 2026: Our top picks tested and rated</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ No need to wait — this early Prime Day deal slashes a massive 85% off Blink's outdoor security camera and throws in a freebie too ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Prime Day 2026 is <em>juuuuuust</em> around the corner, starting next Tuesday, July 7 and running for a full week. There's going to be prices slashed on almost everything, including some of the best home security cameras, such as those from Amazon's budget brand, Blink. </p><p>However, Blink has already seen some impressive discounts in the lead-up to the big sale, with up to 85% on <a href="https://www.amazon.com.au/stores/page/7B12D26C-37A4-49C6-A6BB-419F4CD85C96" target="_blank">its Amazon storefront</a>. Its deepest discount is exclusive to a bundle deal, which pairs the highly-rated <a href="https://www.amazon.com.au/Blink-Doorbell-Wireless-Security-Detection/dp/B0GZJM54MJ" target="_blank">Blink Outdoor 4 camera and Sync Module 2 with a free Blink Video Doorbell for just AU$35</a>. The camera on its own is <a href="https://www.amazon.com.au/Blink-Outdoor-4/dp/B0D483ZWDS?ref_=dp_pba_bcd_vb" target="_blank">discounted to AU$31</a>, which is an all-time low price for the camera itself, making the bundle deal with the freebie doorbell even more attractive! </p><p>If this bundle doesn't quite tickle your fancy, there's a full list of deals on <a href="https://www.amazon.com.au/stores/page/7B12D26C-37A4-49C6-A6BB-419F4CD85C96" target="_blank">Blink's Amazon storefront</a> that will cover all your home security needs. Do keep in mind that Blink's cameras come with a 30-day free trial to its subscription plan, which includes features like cloud footage backup and person detection. After the trial period, Blink's plans start from<a href="https://www.amazon.com.au/Blink-Plus-Plan-monthly-auto-renewal/dp/B0D3V7W9KK" target="_blank"> AU$4.95p/m for a basic subscription</a>. </p><p>You'll need to act fast to nab this discount, though — Blink's bundle deal will wrap up by the end of Prime Week on Monday, July 13. </p><div class="product"><a data-dimension112="a2ce7eea-400a-45b4-8dd0-7612fdcb6981" data-action="Deal Block" data-label="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension48="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension25="$35" href="https://www.amazon.com.au/Blink-Doorbell-Wireless-Security-Detection/dp/B0GZJM54MJ" 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="grswHLWvmjbDaJhq7Tq6e3" name="blink-outdoor-4-1pk-system--free-blink-v-9b7782ec-6688-4fad-b409-5847f09e9f41.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/grswHLWvmjbDaJhq7Tq6e3.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Blink-Doorbell-Wireless-Security-Detection/dp/B0GZJM54MJ" target="_blank" rel="nofollow" data-dimension112="a2ce7eea-400a-45b4-8dd0-7612fdcb6981" data-action="Deal Block" data-label="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension48="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension25="$35">Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White): was $237 now $35</a></strong><br>Now 85% off, <a href="https://www.tomsguide.com/reviews/blink-outdoor-4">Blink's Outdoor 4</a> is weatherproof and can be used outside — it records 1080p HD real-time footage, has infrared night vision, two-way audio and a wider field of view, so you can see all the nooks and crannies outside your home. The camera also features dual-zone detection and comes with a Blink Sync Module 2, which allows you to store your footage locally.</p><p>Plus it comes with one of Blink's latest additions, the <a href="https://www.tomsguide.com/reviews/blink-video-doorbell">Video Doorbell</a>. Much like the Outdoor 4, Blink's doorbell has a two-year battery life, meaning you won't have to worry about hardwiring if you're renting. It also has a 150° head-to-toe view, can automatically send you parcel and person alerts, and help keep your worries at bay with continuous live view. <a class="view-deal button" href="https://www.amazon.com.au/Blink-Doorbell-Wireless-Security-Detection/dp/B0GZJM54MJ" target="_blank" rel="nofollow" data-dimension112="a2ce7eea-400a-45b4-8dd0-7612fdcb6981" data-action="Deal Block" data-label="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension48="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension25="$35">View Deal</a></p></div><p>Despite falling in the budget category, Blink's cameras offer some incredible features for a low cost, such as 1080p HD live view, infrared night vision and two-way audio, and come with an accompanying free Blink app so users can monitor their homes when they're away. If you're an Alexa fan, you can also sync up Blink cameras to the app, making it all the easier to control your smart home from your phone. </p><p>The biggest standout in our 4-star <a href="https://www.tomsguide.com/reviews/blink-outdoor-4">Blink Outdoor 4 review </a>was that the camera's battery life can last for up to two years with just two AA batteries, so you don't have to worry about keeping them plugged in (or finding a spare power outlet). </p><p>Better yet, when combined with the <a href="https://www.tomsguide.com/home/home-security/blink-video-doorbell-2nd-gen" target="_blank">Blink Video Doorbell</a>, you'll have eyes (and ears) on your home when you're away. It is worth noting that Blink's doorbell is a no-frills option and offers pretty basic features, like head-to-toe live HD view, two-year battery life and real-time alerts.  </p><p>Most of Blink's best features are locked behind a paywall in the form of a subscription. A Blink subscription plan allows customers to save, share and view live recordings from their Blink devices, all while being saved in unlimited cloud storage for up to 60 days. Additionally, features like person detection and "Blink Moments"  — which streamline clips from multiple cameras into one video — are only accessible with a subscription, which starts at AU$5p/m for Basic and AU$15p/m for Plus. </p><div data-widget-type="simple" data-model-name="Blink Outdoor 4,Blink Video Doorbell"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/home/home-security/no-need-to-wait-this-early-prime-day-deal-slashes-a-massive-85-percent-off-blinks-outdoor-security-camera-and-throws-in-a-freebie-too</link>
                                                                            <description>
                            <![CDATA[ Blink's affordable security cameras have hit an incredible all-time low before Prime Day, with this outdoor camera and doorbell deal now 85% off. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">wghJjkTAjxt5eXAR9H8sP6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UT6ocbR4JQbBoTihwiyP8-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Jul 2026 06:12:26 +0000</pubDate>                                                                                                                                <updated>Wed, 01 Jul 2026 06:15:14 +0000</updated>
                                                                                                                                            <category><![CDATA[Home Security]]></category>
                                                    <category><![CDATA[Sales Events]]></category>
                                                    <category><![CDATA[Home]]></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/UT6ocbR4JQbBoTihwiyP8-1280-80.jpg">
                                                            <media:credit><![CDATA[Blink ]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Blink Video Doorbell prime day]]></media:description>                                                            <media:text><![CDATA[Blink Video Doorbell prime day]]></media:text>
                                <media:title type="plain"><![CDATA[Blink Video Doorbell prime day]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UT6ocbR4JQbBoTihwiyP8-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Prime Day 2026 is <em>juuuuuust</em> around the corner, starting next Tuesday, July 7 and running for a full week. There's going to be prices slashed on almost everything, including some of the best home security cameras, such as those from Amazon's budget brand, Blink. </p><p>However, Blink has already seen some impressive discounts in the lead-up to the big sale, with up to 85% on <a href="https://www.amazon.com.au/stores/page/7B12D26C-37A4-49C6-A6BB-419F4CD85C96" target="_blank">its Amazon storefront</a>. Its deepest discount is exclusive to a bundle deal, which pairs the highly-rated <a href="https://www.amazon.com.au/Blink-Doorbell-Wireless-Security-Detection/dp/B0GZJM54MJ" target="_blank">Blink Outdoor 4 camera and Sync Module 2 with a free Blink Video Doorbell for just AU$35</a>. The camera on its own is <a href="https://www.amazon.com.au/Blink-Outdoor-4/dp/B0D483ZWDS?ref_=dp_pba_bcd_vb" target="_blank">discounted to AU$31</a>, which is an all-time low price for the camera itself, making the bundle deal with the freebie doorbell even more attractive! </p><p>If this bundle doesn't quite tickle your fancy, there's a full list of deals on <a href="https://www.amazon.com.au/stores/page/7B12D26C-37A4-49C6-A6BB-419F4CD85C96" target="_blank">Blink's Amazon storefront</a> that will cover all your home security needs. Do keep in mind that Blink's cameras come with a 30-day free trial to its subscription plan, which includes features like cloud footage backup and person detection. After the trial period, Blink's plans start from<a href="https://www.amazon.com.au/Blink-Plus-Plan-monthly-auto-renewal/dp/B0D3V7W9KK" target="_blank"> AU$4.95p/m for a basic subscription</a>. </p><p>You'll need to act fast to nab this discount, though — Blink's bundle deal will wrap up by the end of Prime Week on Monday, July 13. </p><div class="product"><a data-dimension112="a2ce7eea-400a-45b4-8dd0-7612fdcb6981" data-action="Deal Block" data-label="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension48="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension25="$35" href="https://www.amazon.com.au/Blink-Doorbell-Wireless-Security-Detection/dp/B0GZJM54MJ" 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="grswHLWvmjbDaJhq7Tq6e3" name="blink-outdoor-4-1pk-system--free-blink-v-9b7782ec-6688-4fad-b409-5847f09e9f41.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/grswHLWvmjbDaJhq7Tq6e3.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Blink-Doorbell-Wireless-Security-Detection/dp/B0GZJM54MJ" target="_blank" rel="nofollow" data-dimension112="a2ce7eea-400a-45b4-8dd0-7612fdcb6981" data-action="Deal Block" data-label="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension48="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension25="$35">Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White): was $237 now $35</a></strong><br>Now 85% off, <a href="https://www.tomsguide.com/reviews/blink-outdoor-4">Blink's Outdoor 4</a> is weatherproof and can be used outside — it records 1080p HD real-time footage, has infrared night vision, two-way audio and a wider field of view, so you can see all the nooks and crannies outside your home. The camera also features dual-zone detection and comes with a Blink Sync Module 2, which allows you to store your footage locally.</p><p>Plus it comes with one of Blink's latest additions, the <a href="https://www.tomsguide.com/reviews/blink-video-doorbell">Video Doorbell</a>. Much like the Outdoor 4, Blink's doorbell has a two-year battery life, meaning you won't have to worry about hardwiring if you're renting. It also has a 150° head-to-toe view, can automatically send you parcel and person alerts, and help keep your worries at bay with continuous live view. <a class="view-deal button" href="https://www.amazon.com.au/Blink-Doorbell-Wireless-Security-Detection/dp/B0GZJM54MJ" target="_blank" rel="nofollow" data-dimension112="a2ce7eea-400a-45b4-8dd0-7612fdcb6981" data-action="Deal Block" data-label="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension48="Outdoor 4 + Sync Module 2 + Free Blink Video Doorbell (White)" data-dimension25="$35">View Deal</a></p></div><p>Despite falling in the budget category, Blink's cameras offer some incredible features for a low cost, such as 1080p HD live view, infrared night vision and two-way audio, and come with an accompanying free Blink app so users can monitor their homes when they're away. If you're an Alexa fan, you can also sync up Blink cameras to the app, making it all the easier to control your smart home from your phone. </p><p>The biggest standout in our 4-star <a href="https://www.tomsguide.com/reviews/blink-outdoor-4">Blink Outdoor 4 review </a>was that the camera's battery life can last for up to two years with just two AA batteries, so you don't have to worry about keeping them plugged in (or finding a spare power outlet). </p><p>Better yet, when combined with the <a href="https://www.tomsguide.com/home/home-security/blink-video-doorbell-2nd-gen" target="_blank">Blink Video Doorbell</a>, you'll have eyes (and ears) on your home when you're away. It is worth noting that Blink's doorbell is a no-frills option and offers pretty basic features, like head-to-toe live HD view, two-year battery life and real-time alerts.  </p><p>Most of Blink's best features are locked behind a paywall in the form of a subscription. A Blink subscription plan allows customers to save, share and view live recordings from their Blink devices, all while being saved in unlimited cloud storage for up to 60 days. Additionally, features like person detection and "Blink Moments"  — which streamline clips from multiple cameras into one video — are only accessible with a subscription, which starts at AU$5p/m for Basic and AU$15p/m for Plus. </p><div data-widget-type="simple" data-model-name="Blink Outdoor 4,Blink Video Doorbell"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 new to Prime Video thriller movies to stream this week — including a dark romance with Timothée Chalamet playing a cannibal (June 30-July 6) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Fans of thriller movies are spoilt for choice on Prime Video this week. The streaming service typically adds dozens of movies to its library on the first of each new month, and with July arriving this week, get ready to top up your watchlist with some very compelling thrillers. </p><p>With so many new arrivals on the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a>, it can be rather overwhelming picking out the gems. That’s why I’ve combed through the recent additions for you and picked out three must-watch thriller movies. These include a chilling survival drama based on a true story, a warped romance starring Timothée Chalamet and a hilarious crime-fueled thriller from the director of “The Hangover” and “Joker” (also, “Joker 2,” but let's ignore that one).</p><p>These are three new to Prime Video thriller movies worth adding to your watchlist over the coming days.</p><h2 id="alive-1993">'Alive' (1993)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/3P5N0kd6pYY" allowfullscreen></iframe></div></div><p>“Alive” is one of the multiple movies about the real-life experience of a Uruguayan sports team that crashed in the Andes Mountains and had to survive for more than two months in the hostile region. While I’d argue 2023’s “Society of the Snow” is the <em>best</em> feature film dramatisation of this story that captivated the world, “Alive” is no slouch and, in this survival thriller starring Ethan Hawke and Josh Hamilton, successfully chronicles the hardships endured by these men thrown into a frozen nightmare. </p><p>Flying over the Andes mountain range on October 13, 1972, the members of the Stella Maris College's Old Christians Rugby Team are stranded in the snow-blanketed region after a plane crash. To survive the harsh conditions, they are forced to take extreme measures and even contemplate the unthinkable: eating their deceased teammates. Eventually, a small group sets off on a perilous trek in the hopes of finding rescue. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/Alive-Ethan-Hawke/dp/B005FDWAXM" target="_blank" rel="nofollow"><em><strong>"Alive" on Prime Video</strong></em></a><em><strong> starting July 1</strong></em></p><h2 id="bones-and-all-2022">'Bones and All' (2022)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/0Nu7Z9AxGNg" allowfullscreen></iframe></div></div><p>“Bones and All” offers up Timothée Chalamet as you’ve never seen him before, and I don’t just mean because his trademark curls have been dyed red. In this dark thriller that mashes together a host of tones, including romance and horror, Chalamet plays a young man with an uncontrollable appetite for human flesh. It's not only a skin-crawling movie, but also a surprisingly tender one, with a sweet (but doomed) love story at its core.</p><p>The flick opens with the adolescent experience of Maren (Taylor Russell). Abandoned by her father on her 18th birthday as he’s unable to cope with her hunger for human flesh, Maren becomes a drifter and meets Lee (Chalamet). The two become companions and then lovers. But their odyssey across America leads to a confrontation with Sully (Mark Rylance), a warped “eater” obsessed with Maren. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GYJDNG39" target="_blank" rel="nofollow"><em><strong>"Bones and All" on Prime Video</strong></em></a><em><strong> starting July 1</strong></em></p><h2 id="war-dogs-2016">War Dogs (2016)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/Rwh9c_E3dJk" allowfullscreen></iframe></div></div><p>One of my more memorable movie-watching experiences was watching a PG-cut of “War Dogs” on a plane. The R-rated flick had been censored to remove all the curse words. This crime thriller comes from “The Hangover” and “Joker” director Todd Phillips, so let’s just say there is <em>a lot</em> of cursing. This actually made the movie absolutely hilarious, but not for the intended reason. Fortunately, Prime Video is adding the uncensored version this week. So you can enjoy it with all the f-bombs very much intact! </p><p>Inspired by a true story, “War Dogs” centers on David Packouz (Miles Teller) and Efraim Diveroli (Jonah Hill), two small-time hustlers who discover that military equipment contracts are posted publicly for anybody to bid on. So, they create their own arms-dealing company and start selling hundreds of millions of dollars worth of ammunition to the American government. Before long, they find themselves in over their heads and in hot water.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B01KGRXSVO/" target="_blank" rel="nofollow"><em><strong>"War Dogs" on Prime Video</strong></em></a><em><strong> starting July 1</strong></em></p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-july-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in July 2026</a></li><li><a href="https://www.tomsguide.com/how-to/how-to-cancel-prime-video">How to cancel your Prime Video subscription</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-heres-the-3-worth-watching-this-week-june-29-july-5">Prime Video top 10 movies — here’s the 3 worth watching</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-new-to-prime-video-thriller-movies-to-stream-this-week-including-a-dark-romance-with-timothee-chalamet-playing-a-cannibal-june-30-july-6</link>
                                                                            <description>
                            <![CDATA[ Prime Video is dropping dozens of movies this week, and I've picked out a trio of exciting thrillers worth adding to your watchlist now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">bBhrFYL7uuqgzR3FK53sSS</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JBy4JwfMvxZAJ2z6VKQGeK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 30 Jun 2026 09:58:28 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ rory.mellon@futurenet.com (Rory Mellon) ]]></author>                    <dc:creator><![CDATA[ Rory Mellon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5Rv6LtQXMj5JB4Eu8Lt4Sn.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/JBy4JwfMvxZAJ2z6VKQGeK-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on a blue pink film reel background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on a blue pink film reel background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on a blue pink film reel background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JBy4JwfMvxZAJ2z6VKQGeK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Fans of thriller movies are spoilt for choice on Prime Video this week. The streaming service typically adds dozens of movies to its library on the first of each new month, and with July arriving this week, get ready to top up your watchlist with some very compelling thrillers. </p><p>With so many new arrivals on the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service</a>, it can be rather overwhelming picking out the gems. That’s why I’ve combed through the recent additions for you and picked out three must-watch thriller movies. These include a chilling survival drama based on a true story, a warped romance starring Timothée Chalamet and a hilarious crime-fueled thriller from the director of “The Hangover” and “Joker” (also, “Joker 2,” but let's ignore that one).</p><p>These are three new to Prime Video thriller movies worth adding to your watchlist over the coming days.</p><h2 id="alive-1993">'Alive' (1993)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/3P5N0kd6pYY" allowfullscreen></iframe></div></div><p>“Alive” is one of the multiple movies about the real-life experience of a Uruguayan sports team that crashed in the Andes Mountains and had to survive for more than two months in the hostile region. While I’d argue 2023’s “Society of the Snow” is the <em>best</em> feature film dramatisation of this story that captivated the world, “Alive” is no slouch and, in this survival thriller starring Ethan Hawke and Josh Hamilton, successfully chronicles the hardships endured by these men thrown into a frozen nightmare. </p><p>Flying over the Andes mountain range on October 13, 1972, the members of the Stella Maris College's Old Christians Rugby Team are stranded in the snow-blanketed region after a plane crash. To survive the harsh conditions, they are forced to take extreme measures and even contemplate the unthinkable: eating their deceased teammates. Eventually, a small group sets off on a perilous trek in the hopes of finding rescue. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/Alive-Ethan-Hawke/dp/B005FDWAXM" target="_blank" rel="nofollow"><em><strong>"Alive" on Prime Video</strong></em></a><em><strong> starting July 1</strong></em></p><h2 id="bones-and-all-2022">'Bones and All' (2022)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/0Nu7Z9AxGNg" allowfullscreen></iframe></div></div><p>“Bones and All” offers up Timothée Chalamet as you’ve never seen him before, and I don’t just mean because his trademark curls have been dyed red. In this dark thriller that mashes together a host of tones, including romance and horror, Chalamet plays a young man with an uncontrollable appetite for human flesh. It's not only a skin-crawling movie, but also a surprisingly tender one, with a sweet (but doomed) love story at its core.</p><p>The flick opens with the adolescent experience of Maren (Taylor Russell). Abandoned by her father on her 18th birthday as he’s unable to cope with her hunger for human flesh, Maren becomes a drifter and meets Lee (Chalamet). The two become companions and then lovers. But their odyssey across America leads to a confrontation with Sully (Mark Rylance), a warped “eater” obsessed with Maren. </p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GYJDNG39" target="_blank" rel="nofollow"><em><strong>"Bones and All" on Prime Video</strong></em></a><em><strong> starting July 1</strong></em></p><h2 id="war-dogs-2016">War Dogs (2016)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/Rwh9c_E3dJk" allowfullscreen></iframe></div></div><p>One of my more memorable movie-watching experiences was watching a PG-cut of “War Dogs” on a plane. The R-rated flick had been censored to remove all the curse words. This crime thriller comes from “The Hangover” and “Joker” director Todd Phillips, so let’s just say there is <em>a lot</em> of cursing. This actually made the movie absolutely hilarious, but not for the intended reason. Fortunately, Prime Video is adding the uncensored version this week. So you can enjoy it with all the f-bombs very much intact! </p><p>Inspired by a true story, “War Dogs” centers on David Packouz (Miles Teller) and Efraim Diveroli (Jonah Hill), two small-time hustlers who discover that military equipment contracts are posted publicly for anybody to bid on. So, they create their own arms-dealing company and start selling hundreds of millions of dollars worth of ammunition to the American government. Before long, they find themselves in over their heads and in hot water.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B01KGRXSVO/" target="_blank" rel="nofollow"><em><strong>"War Dogs" on Prime Video</strong></em></a><em><strong> starting July 1</strong></em></p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-july-2026-top-picks-and-all-the-new-movies-and-shows-to-watch">New on Prime Video in July 2026</a></li><li><a href="https://www.tomsguide.com/how-to/how-to-cancel-prime-video">How to cancel your Prime Video subscription</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-heres-the-3-worth-watching-this-week-june-29-july-5">Prime Video top 10 movies — here’s the 3 worth watching</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ New on Prime Video in July 2026: Top picks and all the new movies and shows to watch ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It’s officially summer, which means the biggest streaming services are rolling out fresh content to keep everyone entertained during these warmer months, <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> being one of them. </p><p>Prime Video has just released its full July 2026 lineup, so I’ve included the top picks we already know about, along with new library titles set to drop at the beginning of the month. This month's releases include the “Legally Blonde” prequel series “Elle,” which follows the titular character in her high school years. There’s also an action-packed comedy series starring Hannah Waddingham and the second season of an animated superhero show. </p><p>Check out my top recommendations and everything currently scheduled to arrive on Prime Video in July 2026.</p><h3 class="article-body__section" id="section-new-on-prime-video-in-july-2026-top-picks"><span>New on Prime Video in July 2026: Top picks</span></h3><h2 id="elle-july-1">‘Elle’ (July 1)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/6KsT3K5ynrU" allowfullscreen></iframe></div></div><p>“Elle” functions as an official TV prequel to the iconic 2001 film “Legally Blonde,” taking place six years before the events of the movie. Executive producer Reese Witherspoon actually revealed that she was directly inspired to create the spinoff after watching the massive success of Netflix’s “Wednesday,” realizing that audiences would love to see how an iconic character's distinct personality was forged during their high school years. It already seems like a bright, breezy, and fun piece of summer TV.</p><p>The show follows teenage Elle Woods (Lexi Minetree) in 1995, years before she becomes the confident law student audiences know from the films. After her family relocates from Bel-Air to Seattle, Elle finds herself starting over at a new high school, where she must form new friendships and get through the everyday chaos of adolescence. As she adjusts to her new surroundings, Elle relies on the support of her parents and close friends while discovering the experiences that help shape her future. </p><p><em><strong>Stream "Elle" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GXC14CMG" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from July 1</strong></em></p><h2 id="ride-or-die-july-15">‘Ride or Die’ (July 15)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/QFGAxkTRAG8" allowfullscreen></iframe></div></div><p>If you’re in the mood for a buddy action-comedy series, you’ll want “Ride or Die” on your watchlist. The creators explicitly set out to build a massive, blockbuster-scale action series anchored entirely by a platonic female friendship between two women in their 50s. Judging by the trailer, it aims to be a loud and high-energy popcorn thrill ride that thrives entirely on the electric chemistry between Octavia Spencer and Hannah Waddingham.</p><p>Debbie Claybourne (Octavia Spencer) is a woman whose life is thrown into chaos when she discovers that her best friend of two decades, Judith Burton (Hannah Waddingham), has been hiding a shocking secret: she's an international assassin. When one of Judith's missions goes disastrously wrong and a dangerous figure from her past resurfaces, the pair is forced to flee across Europe together. The lifelong friends must rely on each other to survive an increasingly unpredictable adventure.</p><p><em><strong>Stream "Ride or Die" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H1MBNDTL" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from July 15</strong></em></p><h2 id="batman-caped-crusader-season-2-july-31">‘Batman: Caped Crusader’ season 2 (July 31)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/pNhijtUqyeg" allowfullscreen></iframe></div></div><p>Another big series on Prime Video this month is the second season of “Batman: Caped Crusader,” which stands as a spiritual successor to the legendary 1990s “Batman: The Animated Series,” bringing back original co-creator Bruce Timm alongside modern blockbuster masterminds Matt Reeves and J.J. Abrams to produce the show. This series follows a young, deeply psychologically isolated Bruce Wayne in his early years as a masked vigilante.</p><p>Set in a shadowy version of Gotham City, “Batman: Caped Crusader” season 2 follows Bruce Wayne (Hamish Linklater) as he continues his war on crime while facing a new wave of dangerous criminals. As Batman digs deeper into the city's criminal underworld, he encounters notorious figures including Edward Nygma (Dave Franco), the Mad Hatter (Laraine Newman), Roxy Rocket, and the Joker (John DiMaggio), each bringing new challenges that test his skills as both a detective and vigilante. </p><p><em><strong>Stream "Batman: Caped Crusader" season 2 on </strong></em><a href="https://www.amazon.com/Batman-Caped-Crusader-Season-1/dp/B0CYFCLQ6B" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from July 31</strong></em></p><h3 class="article-body__section" id="section-new-shows-on-prime-video-in-july-2026"><span>New shows on Prime Video in July 2026</span></h3><p><strong>July 1</strong></p><ul><li>Elle (2026)</li><li>Everybody Hates Chris S1-4 (2005)</li><li>Gilmore Girls S1-7 (2000)</li></ul><p><strong>July 3</strong></p><ul><li>The Loyalty Game (2026)</li></ul><p><strong>July 7</strong></p><ul><li>The Ghost In The Shell (2026)</li></ul><p><strong>July 9</strong></p><ul><li>From Old Country Bumpkin to Master Swordsman S2 (2026)</li></ul><p><strong>July 15</strong></p><ul><li>Ride or Die (2026)</li></ul><p><strong>July 17</strong></p><ul><li>Jesy Nelson: Life Changing (2026)</li><li>Young Farts Trailer Parts (2026)</li></ul><p><strong>July 31</strong></p><ul><li>Batman: Caped Crusader S2 (2026)</li></ul><h3 class="article-body__section" id="section-new-movies-on-prime-video-in-july-2026"><span>New movies on Prime Video in July 2026</span></h3><p><strong>July 1</strong></p><ul><li>1984 (1985)</li><li>A Fish Called Wanda (1988)</li><li>A Fistful Of Dollars (1967)</li><li>A Good Person (2023)</li><li>About My Father (2023)</li><li>Alive (1993)</li><li>Backdraft (1991)</li><li>Backdraft 2 (2019)</li><li>Bones And All (2022)</li><li>Bottoms (2023)</li><li>Capote (2006)</li><li>Couple’s Retreat (2009)</li><li>Dante's Peak (1997)</li><li>Death Race (2008)</li><li>Dudley Do-Right (1999)</li><li>Fiddler On The Roof (1971)</li><li>For a Few Dollars More (1967)</li><li>Gladiator (2000)</li><li>Homefront (2013)</li><li>How to Lose a Guy in 10 Days (2003)</li><li>How to Train Your Dragon (2010)</li><li>How to Train Your Dragon 2 (2014)</li><li>Ice Age (2002)</li><li>Ice Age: The Meltdown (2006)</li><li>Jinn (2014)</li><li>Judgment At Nuremberg (1961)</li><li>Jujutsu Kaisen 0 (2022)</li><li>Landscape With Invisible Hand (2023)</li><li>Lars and the Real Girl (2007)</li><li>Leave It to Beaver (1997)</li><li>Leaving Las Vegas (1996)</li><li>Leviathan (1989)</li><li>Lions for Lambs (2007)</li><li>Maine (2018)</li><li>Man in the Moon (1991)</li><li>Miami Vice (2006)</li><li>Moonfall (2022)</li><li>Much Ado About Nothing (1993)</li><li>On The Count Of Three (2022)</li><li>Original Sin (2001)</li><li>Percy Jackson: Sea Of Monsters (2013)</li><li>Road House (1989)</li><li>Ronin (1998)</li><li>Saving Private Ryan (1998)</li><li>Showgirls (1995)</li><li>Support Your Local Gunfighter (1971)</li><li>Support Your Local Sheriff (1969)</li><li>Surrounded (2023)</li><li>The Adventures Of Priscilla Queen of the Desert (1994)</li><li>The Boy Next Door (2015)</li><li>The Flintstones (1994)</li><li>The Flintstones In Viva Rock Vegas (2000)</li><li>The Good, the Bad, and the Ugly (1967)</li><li>The Magnificent Seven (1960)</li><li>The Magnificent Seven (2016)</li><li>The Martian (2015)</li><li>The Young Messiah (2016)</li><li>Three Amigos! (1986)</li><li>Three Thousand Years Of Longing (2022)</li><li>Till (2022)</li><li>To Live And Die In L.A. (1985)</li><li>Tropic Thunder (2008)</li><li>Uncharted (2022)</li><li>Unlovable (2018)</li><li>War Dogs (2016)</li><li>World War Z (2013</li></ul><p><strong>July 8</strong></p><ul><li>65 (2023)</li></ul><p><strong>July 17</strong></p><ul><li>Do Not Enter (2026)</li><li>The Amateur (2025)</li></ul><p><strong>July 24</strong></p><ul><li>The Wild Robot (2024)</li></ul><p><strong>July 31</strong></p><ul><li>Primate (2026)</li></ul><h3 class="article-body__section" id="section-live-sports"><span>Live sports</span></h3><p><strong>Yankees</strong></p><ul><li><strong>July 8 at 6:40 p.m. ET: </strong>New York Yankees at Tampa Bay Rays</li><li><strong>July 29 at 7:40 p.m. ET:</strong> New York Yankees at Chicago White Sox</li></ul><p><strong>WNBA</strong></p><ul><li><strong>July 2 at 8 p.m. ET: </strong>Dallas Wings at Connecticut Sun</li><li><strong>July 9 at 8 p.m. ET: </strong>Seattle Storm at Atlanta Dream</li><li><strong>July 9 at 10 p.m. ET: </strong>Indiana Fever at Phoenix Mercury</li><li><strong>July 16 at 8 p.m. ET: </strong>New York Liberty at Dallas Wings</li><li><strong>July 30 at 8 p.m. ET: </strong>Connecticut Sun at Chicago Sky</li><li><strong>July 30 at 10 p.m. ET: </strong>New York Liberty at Las Vegas Aces</li></ul><p><strong>NWSL</strong></p><ul><li><strong>July 3 at 10 p.m. ET:</strong> Angel City FC vs. Orlando Pride</li><li><strong>July 10 at 8 p.m. ET: </strong>Orlando Pride vs. Kansas City Current</li><li><strong>July 17 at 8 p.m. ET: </strong>Kansas City Current vs. San Diego Wave</li><li><strong>July 24 at 10 p.m. ET:</strong> Portland Thorns vs. Gotham FC</li><li><strong>July 31 at 8 p.m. ET: </strong>NC Courage vs. Orlando Pride</li></ul><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-evLolO"></div>                            </div>                            <script src="https://kwizly.com/embed/evLolO.js" async></script><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/movies/10-best-summer-movies-of-the-decade-ranked">10 best summer movies of the decade, ranked</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-best-prime-video-movies-to-stream-now-before-they-leave-in-june-2026">5 Prime Video movies to stream before they leave in June 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/3-new-to-prime-video-thriller-movies-to-stream-this-week-one-of-them-is-a-classic-masterpiece-ranked-among-the-best-films-ever-made-june-23-29">3 new to Prime Video thriller movies to stream this week</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-july-2026-top-picks-and-all-the-new-movies-and-shows-to-watch</link>
                                                                            <description>
                            <![CDATA[ Our guide to the best new movies and shows you can stream on Prime Video in July 2026. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NZ86YJBsqA344Pi3jnqcen</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/RvHiYSZStp5ddxKpjxjF7C-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 28 Jun 2026 04:01:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ alix.blackburn@futurenet.com (Alix Blackburn) ]]></author>                    <dc:creator><![CDATA[ Alix Blackburn ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/8UxyT2McanNFLYwQ6wC7di.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/RvHiYSZStp5ddxKpjxjF7C-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock; Prime Video]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on a red-orange background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on a red-orange background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on a red-orange background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/RvHiYSZStp5ddxKpjxjF7C-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It’s officially summer, which means the biggest streaming services are rolling out fresh content to keep everyone entertained during these warmer months, <a href="https://www.tomsguide.com/entertainment/streaming/prime-video">Prime Video</a> being one of them. </p><p>Prime Video has just released its full July 2026 lineup, so I’ve included the top picks we already know about, along with new library titles set to drop at the beginning of the month. This month's releases include the “Legally Blonde” prequel series “Elle,” which follows the titular character in her high school years. There’s also an action-packed comedy series starring Hannah Waddingham and the second season of an animated superhero show. </p><p>Check out my top recommendations and everything currently scheduled to arrive on Prime Video in July 2026.</p><h3 class="article-body__section" id="section-new-on-prime-video-in-july-2026-top-picks"><span>New on Prime Video in July 2026: Top picks</span></h3><h2 id="elle-july-1">‘Elle’ (July 1)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/6KsT3K5ynrU" allowfullscreen></iframe></div></div><p>“Elle” functions as an official TV prequel to the iconic 2001 film “Legally Blonde,” taking place six years before the events of the movie. Executive producer Reese Witherspoon actually revealed that she was directly inspired to create the spinoff after watching the massive success of Netflix’s “Wednesday,” realizing that audiences would love to see how an iconic character's distinct personality was forged during their high school years. It already seems like a bright, breezy, and fun piece of summer TV.</p><p>The show follows teenage Elle Woods (Lexi Minetree) in 1995, years before she becomes the confident law student audiences know from the films. After her family relocates from Bel-Air to Seattle, Elle finds herself starting over at a new high school, where she must form new friendships and get through the everyday chaos of adolescence. As she adjusts to her new surroundings, Elle relies on the support of her parents and close friends while discovering the experiences that help shape her future. </p><p><em><strong>Stream "Elle" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0GXC14CMG" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from July 1</strong></em></p><h2 id="ride-or-die-july-15">‘Ride or Die’ (July 15)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/QFGAxkTRAG8" allowfullscreen></iframe></div></div><p>If you’re in the mood for a buddy action-comedy series, you’ll want “Ride or Die” on your watchlist. The creators explicitly set out to build a massive, blockbuster-scale action series anchored entirely by a platonic female friendship between two women in their 50s. Judging by the trailer, it aims to be a loud and high-energy popcorn thrill ride that thrives entirely on the electric chemistry between Octavia Spencer and Hannah Waddingham.</p><p>Debbie Claybourne (Octavia Spencer) is a woman whose life is thrown into chaos when she discovers that her best friend of two decades, Judith Burton (Hannah Waddingham), has been hiding a shocking secret: she's an international assassin. When one of Judith's missions goes disastrously wrong and a dangerous figure from her past resurfaces, the pair is forced to flee across Europe together. The lifelong friends must rely on each other to survive an increasingly unpredictable adventure.</p><p><em><strong>Stream "Ride or Die" on </strong></em><a href="https://www.amazon.com/gp/video/detail/B0H1MBNDTL" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from July 15</strong></em></p><h2 id="batman-caped-crusader-season-2-july-31">‘Batman: Caped Crusader’ season 2 (July 31)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/pNhijtUqyeg" allowfullscreen></iframe></div></div><p>Another big series on Prime Video this month is the second season of “Batman: Caped Crusader,” which stands as a spiritual successor to the legendary 1990s “Batman: The Animated Series,” bringing back original co-creator Bruce Timm alongside modern blockbuster masterminds Matt Reeves and J.J. Abrams to produce the show. This series follows a young, deeply psychologically isolated Bruce Wayne in his early years as a masked vigilante.</p><p>Set in a shadowy version of Gotham City, “Batman: Caped Crusader” season 2 follows Bruce Wayne (Hamish Linklater) as he continues his war on crime while facing a new wave of dangerous criminals. As Batman digs deeper into the city's criminal underworld, he encounters notorious figures including Edward Nygma (Dave Franco), the Mad Hatter (Laraine Newman), Roxy Rocket, and the Joker (John DiMaggio), each bringing new challenges that test his skills as both a detective and vigilante. </p><p><em><strong>Stream "Batman: Caped Crusader" season 2 on </strong></em><a href="https://www.amazon.com/Batman-Caped-Crusader-Season-1/dp/B0CYFCLQ6B" target="_blank" rel="nofollow"><em><strong>Prime Video</strong></em></a><em><strong> from July 31</strong></em></p><h3 class="article-body__section" id="section-new-shows-on-prime-video-in-july-2026"><span>New shows on Prime Video in July 2026</span></h3><p><strong>July 1</strong></p><ul><li>Elle (2026)</li><li>Everybody Hates Chris S1-4 (2005)</li><li>Gilmore Girls S1-7 (2000)</li></ul><p><strong>July 3</strong></p><ul><li>The Loyalty Game (2026)</li></ul><p><strong>July 7</strong></p><ul><li>The Ghost In The Shell (2026)</li></ul><p><strong>July 9</strong></p><ul><li>From Old Country Bumpkin to Master Swordsman S2 (2026)</li></ul><p><strong>July 15</strong></p><ul><li>Ride or Die (2026)</li></ul><p><strong>July 17</strong></p><ul><li>Jesy Nelson: Life Changing (2026)</li><li>Young Farts Trailer Parts (2026)</li></ul><p><strong>July 31</strong></p><ul><li>Batman: Caped Crusader S2 (2026)</li></ul><h3 class="article-body__section" id="section-new-movies-on-prime-video-in-july-2026"><span>New movies on Prime Video in July 2026</span></h3><p><strong>July 1</strong></p><ul><li>1984 (1985)</li><li>A Fish Called Wanda (1988)</li><li>A Fistful Of Dollars (1967)</li><li>A Good Person (2023)</li><li>About My Father (2023)</li><li>Alive (1993)</li><li>Backdraft (1991)</li><li>Backdraft 2 (2019)</li><li>Bones And All (2022)</li><li>Bottoms (2023)</li><li>Capote (2006)</li><li>Couple’s Retreat (2009)</li><li>Dante's Peak (1997)</li><li>Death Race (2008)</li><li>Dudley Do-Right (1999)</li><li>Fiddler On The Roof (1971)</li><li>For a Few Dollars More (1967)</li><li>Gladiator (2000)</li><li>Homefront (2013)</li><li>How to Lose a Guy in 10 Days (2003)</li><li>How to Train Your Dragon (2010)</li><li>How to Train Your Dragon 2 (2014)</li><li>Ice Age (2002)</li><li>Ice Age: The Meltdown (2006)</li><li>Jinn (2014)</li><li>Judgment At Nuremberg (1961)</li><li>Jujutsu Kaisen 0 (2022)</li><li>Landscape With Invisible Hand (2023)</li><li>Lars and the Real Girl (2007)</li><li>Leave It to Beaver (1997)</li><li>Leaving Las Vegas (1996)</li><li>Leviathan (1989)</li><li>Lions for Lambs (2007)</li><li>Maine (2018)</li><li>Man in the Moon (1991)</li><li>Miami Vice (2006)</li><li>Moonfall (2022)</li><li>Much Ado About Nothing (1993)</li><li>On The Count Of Three (2022)</li><li>Original Sin (2001)</li><li>Percy Jackson: Sea Of Monsters (2013)</li><li>Road House (1989)</li><li>Ronin (1998)</li><li>Saving Private Ryan (1998)</li><li>Showgirls (1995)</li><li>Support Your Local Gunfighter (1971)</li><li>Support Your Local Sheriff (1969)</li><li>Surrounded (2023)</li><li>The Adventures Of Priscilla Queen of the Desert (1994)</li><li>The Boy Next Door (2015)</li><li>The Flintstones (1994)</li><li>The Flintstones In Viva Rock Vegas (2000)</li><li>The Good, the Bad, and the Ugly (1967)</li><li>The Magnificent Seven (1960)</li><li>The Magnificent Seven (2016)</li><li>The Martian (2015)</li><li>The Young Messiah (2016)</li><li>Three Amigos! (1986)</li><li>Three Thousand Years Of Longing (2022)</li><li>Till (2022)</li><li>To Live And Die In L.A. (1985)</li><li>Tropic Thunder (2008)</li><li>Uncharted (2022)</li><li>Unlovable (2018)</li><li>War Dogs (2016)</li><li>World War Z (2013</li></ul><p><strong>July 8</strong></p><ul><li>65 (2023)</li></ul><p><strong>July 17</strong></p><ul><li>Do Not Enter (2026)</li><li>The Amateur (2025)</li></ul><p><strong>July 24</strong></p><ul><li>The Wild Robot (2024)</li></ul><p><strong>July 31</strong></p><ul><li>Primate (2026)</li></ul><h3 class="article-body__section" id="section-live-sports"><span>Live sports</span></h3><p><strong>Yankees</strong></p><ul><li><strong>July 8 at 6:40 p.m. ET: </strong>New York Yankees at Tampa Bay Rays</li><li><strong>July 29 at 7:40 p.m. ET:</strong> New York Yankees at Chicago White Sox</li></ul><p><strong>WNBA</strong></p><ul><li><strong>July 2 at 8 p.m. ET: </strong>Dallas Wings at Connecticut Sun</li><li><strong>July 9 at 8 p.m. ET: </strong>Seattle Storm at Atlanta Dream</li><li><strong>July 9 at 10 p.m. ET: </strong>Indiana Fever at Phoenix Mercury</li><li><strong>July 16 at 8 p.m. ET: </strong>New York Liberty at Dallas Wings</li><li><strong>July 30 at 8 p.m. ET: </strong>Connecticut Sun at Chicago Sky</li><li><strong>July 30 at 10 p.m. ET: </strong>New York Liberty at Las Vegas Aces</li></ul><p><strong>NWSL</strong></p><ul><li><strong>July 3 at 10 p.m. ET:</strong> Angel City FC vs. Orlando Pride</li><li><strong>July 10 at 8 p.m. ET: </strong>Orlando Pride vs. Kansas City Current</li><li><strong>July 17 at 8 p.m. ET: </strong>Kansas City Current vs. San Diego Wave</li><li><strong>July 24 at 10 p.m. ET:</strong> Portland Thorns vs. Gotham FC</li><li><strong>July 31 at 8 p.m. ET: </strong>NC Courage vs. Orlando Pride</li></ul><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-evLolO"></div>                            </div>                            <script src="https://kwizly.com/embed/evLolO.js" async></script><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/movies/10-best-summer-movies-of-the-decade-ranked">10 best summer movies of the decade, ranked</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-best-prime-video-movies-to-stream-now-before-they-leave-in-june-2026">5 Prime Video movies to stream before they leave in June 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/3-new-to-prime-video-thriller-movies-to-stream-this-week-one-of-them-is-a-classic-masterpiece-ranked-among-the-best-films-ever-made-june-23-29">3 new to Prime Video thriller movies to stream this week</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 best new to Prime Video shows to binge-watch this weekend (June 26-28) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Between the swoon-worthy romantic series "Every Year After" and new installments of "The Legend of Vox Machina" and "Clarkson's Farm," we're coming off a great month for television on <a href="https://www.tomsguide.com/uk/entertainment/streaming/prime-video">Prime Video</a>. But we're not done just yet! The final weekend of June will still find some TV treasures primed and ready on the Amazon <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service.</a></p><p>Given that Prime Video has such an extensive library, with new TV titles and film releases being added to the platform on a monthly basis, we here are Tom's Guide have decided to make things easier for you and narrowed the list down to a trio of worthy shows that we think you should check out next. </p><p>Yes, there's more romance in store, this time in the form of South Korean workplace rom-com "See You at Work Tomorrow." And if you're a sports fan, we have a double dose of fun via a new four-part tennis docuseries and a fresh installment of Eli Manning's athlete-focused prank show. Here are the 3 best new to Prime Video shows to binge-watch this weekend.</p><h2 id="aces-the-atp-no-1-club">'ACES: The ATP No. 1 Club'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/Esj4PeFiQ6w" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Sports docuseries</p><p><strong>What it's about: </strong>In five decades, only 29 men have reached No. 1 in the Association of Tennis Professionals (ATP) rankings—this new four-part doc looks at the journey of those talented athletes and explores "the obsession, sacrifice, and resilience behind that rare achievement," per Prime Video, revealing the "defining matches, rivalries, and personal costs that shaped these champions."</p><p><strong>Why you should watch it: </strong>Sure, it seems like the entire world has soccer on the brain at the moment, but between Wimbledon and the U.S. Open, tennis will soon be the talk of the sports-loving town. And this docuseries will certainly get you in the courtside mood, with talking-head interviews from tennis legends like John McEnroe, Björn Borg, Pete Sampras, Andre Agassi, Roger Federer, Rafael Nadal and Novak Djokovic, as well as current stars Carlos Alcaraz and Jannik Sinner.</p><p><em><strong>Stream '</strong></em><a href="https://www.primevideo.com/region/na/detail/0FT5BVEK47EUPXZH8GYYBZUZYT" target="_blank" rel="nofollow"><em><strong>Aces: The ATP No.1 Club' on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="see-you-at-work-tomorrow">'See You at Work Tomorrow'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/kBGgK8F3CSU" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Workplace romance</p><p><strong>What it's about: </strong>Based on the 2020 Kakao webtoon "Back to Work!" by McQueen Studio, this South Korean rom-com centers on Cha Ji-yoon (Park Ji-hyun), a seventh-year product planner who is exhausted in both her professional and personal life, especially after suffering a painful breakup. However, that burnout gets a bit of a boost when, due to a departmental reorg, she begins working under Kang Si-woo (Seo In-guk), who is known to have a cold, Mr. Darcy-esque rigidity. Soon, though, the coworkers find themselves sharing some unexpected chemistry. </p><p><strong>Why you should watch it: </strong>If it's heart and humor you're after in your weekend watch, this office-set romance has plenty of both. Directed by Cho Eun-sol and written by Kim Kyung-min, the 12-episode first season blends witty workplace satire with palpable romantic tension.</p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/region/na/detail/0NKUDJIM5VAE9079ZGUUVI3SS4" target="_blank" rel="nofollow"><em><strong>"See You at Work Tomorrow" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="eli-manning-presents-the-undercovers">'Eli Manning Presents: The Undercovers'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/hqjwmW4JIFA" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Prank comedy</p><p><strong>What it's about: </strong>In this sports comedy docuseries, football icon Eli Manning recruits fellow famous athletes to don heavy prosthetics and ridiculous disguises to prank and surprise their most diehard fans. In the newest installment, which hit Prime Video on June 11, the former NFL quarterback has roped in NASCAR champion Ryan Blaney to go undercover at the Team Penske Race Shop in Mooresville, North Carolina.</p><p><strong>Why you should watch it: </strong>Even if you're not a sports fan, there's still infectious joy to be felt watching big-time fans get the surprise of their life in this lighthearted, unscripted series. But if you <em>do </em>follow professional athletes, you'll get an extra kick out of watching the likes of linebacker Micah Parsons acting like an awkward waiter or wide receiver Justin Jefferson pretending to be a nature photographer. </p><p><em><strong>Stream "</strong></em><a href="https://www.primevideo.com/region/na/detail/0NQ2T4I0OK30WSADW946B4RZ9A/ref=atv_sr_fle_c_sra5ba81_1_1_1?sr=1-1&pageTypeIdSource=ASIN&pageTypeId=B0FYR6829N&qid=1782482483365" target="_blank" rel="nofollow"><em><strong>Eli Manning Presents: The Undercovers" on Prime Video</strong></em></a><em><strong> now</strong></em></p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/no-prime-membership-required-stream-these-5-great-movies-for-free-right-now">Stream these 5 movies for free — no Prime membership required</a></li><li><strong></strong><a href="https://www.tomsguide.com/entertainment/prime-video/5-best-prime-video-movies-to-stream-now-before-they-leave-in-june-2026">5 best Prime Video movies to stream now before they leave in June 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/spike-lee-is-having-the-ultimate-knicks-championship-summer-but-his-greatest-new-york-movie-leaves-prime-video-in-days">Spike Lee is having the ultimate Knicks championship summer, but his greatest New York movie leaves Prime Video in days</a></li></ul><div data-model-name="Amazon Prime Video,Hulu,Netflix,Paramount Plus,Peacock TV,Disney+,Apple TV" data-widget-type="multimodelreview" data-widget-title="Today's best streaming service deals"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-best-new-to-prime-video-shows-to-binge-watch-this-weekend-june-26-28</link>
                                                                            <description>
                            <![CDATA[ Planning to binge-watch something new this weekend? Here's our weekly guide to the best new to Prime Video series you should be streaming right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">WdbntBEeujaL4jHWjn2btk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aozP98atByMPCDdiMyJSPC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 26 Jun 2026 15:29:51 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Christina Izzo ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/LMncQCRNbbLXxxjbfZJvWE.jpeg ]]></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/aozP98atByMPCDdiMyJSPC-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo on teal bubbles background]]></media:description>                                                            <media:text><![CDATA[Prime Video logo on teal bubbles background]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo on teal bubbles background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aozP98atByMPCDdiMyJSPC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Between the swoon-worthy romantic series "Every Year After" and new installments of "The Legend of Vox Machina" and "Clarkson's Farm," we're coming off a great month for television on <a href="https://www.tomsguide.com/uk/entertainment/streaming/prime-video">Prime Video</a>. But we're not done just yet! The final weekend of June will still find some TV treasures primed and ready on the Amazon <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">streaming service.</a></p><p>Given that Prime Video has such an extensive library, with new TV titles and film releases being added to the platform on a monthly basis, we here are Tom's Guide have decided to make things easier for you and narrowed the list down to a trio of worthy shows that we think you should check out next. </p><p>Yes, there's more romance in store, this time in the form of South Korean workplace rom-com "See You at Work Tomorrow." And if you're a sports fan, we have a double dose of fun via a new four-part tennis docuseries and a fresh installment of Eli Manning's athlete-focused prank show. Here are the 3 best new to Prime Video shows to binge-watch this weekend.</p><h2 id="aces-the-atp-no-1-club">'ACES: The ATP No. 1 Club'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/Esj4PeFiQ6w" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Sports docuseries</p><p><strong>What it's about: </strong>In five decades, only 29 men have reached No. 1 in the Association of Tennis Professionals (ATP) rankings—this new four-part doc looks at the journey of those talented athletes and explores "the obsession, sacrifice, and resilience behind that rare achievement," per Prime Video, revealing the "defining matches, rivalries, and personal costs that shaped these champions."</p><p><strong>Why you should watch it: </strong>Sure, it seems like the entire world has soccer on the brain at the moment, but between Wimbledon and the U.S. Open, tennis will soon be the talk of the sports-loving town. And this docuseries will certainly get you in the courtside mood, with talking-head interviews from tennis legends like John McEnroe, Björn Borg, Pete Sampras, Andre Agassi, Roger Federer, Rafael Nadal and Novak Djokovic, as well as current stars Carlos Alcaraz and Jannik Sinner.</p><p><em><strong>Stream '</strong></em><a href="https://www.primevideo.com/region/na/detail/0FT5BVEK47EUPXZH8GYYBZUZYT" target="_blank" rel="nofollow"><em><strong>Aces: The ATP No.1 Club' on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="see-you-at-work-tomorrow">'See You at Work Tomorrow'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/kBGgK8F3CSU" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Workplace romance</p><p><strong>What it's about: </strong>Based on the 2020 Kakao webtoon "Back to Work!" by McQueen Studio, this South Korean rom-com centers on Cha Ji-yoon (Park Ji-hyun), a seventh-year product planner who is exhausted in both her professional and personal life, especially after suffering a painful breakup. However, that burnout gets a bit of a boost when, due to a departmental reorg, she begins working under Kang Si-woo (Seo In-guk), who is known to have a cold, Mr. Darcy-esque rigidity. Soon, though, the coworkers find themselves sharing some unexpected chemistry. </p><p><strong>Why you should watch it: </strong>If it's heart and humor you're after in your weekend watch, this office-set romance has plenty of both. Directed by Cho Eun-sol and written by Kim Kyung-min, the 12-episode first season blends witty workplace satire with palpable romantic tension.</p><p><em><strong>Watch </strong></em><a href="https://www.primevideo.com/region/na/detail/0NKUDJIM5VAE9079ZGUUVI3SS4" target="_blank" rel="nofollow"><em><strong>"See You at Work Tomorrow" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="eli-manning-presents-the-undercovers">'Eli Manning Presents: The Undercovers'</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/hqjwmW4JIFA" allowfullscreen></iframe></div></div><p><strong>Genre: </strong>Prank comedy</p><p><strong>What it's about: </strong>In this sports comedy docuseries, football icon Eli Manning recruits fellow famous athletes to don heavy prosthetics and ridiculous disguises to prank and surprise their most diehard fans. In the newest installment, which hit Prime Video on June 11, the former NFL quarterback has roped in NASCAR champion Ryan Blaney to go undercover at the Team Penske Race Shop in Mooresville, North Carolina.</p><p><strong>Why you should watch it: </strong>Even if you're not a sports fan, there's still infectious joy to be felt watching big-time fans get the surprise of their life in this lighthearted, unscripted series. But if you <em>do </em>follow professional athletes, you'll get an extra kick out of watching the likes of linebacker Micah Parsons acting like an awkward waiter or wide receiver Justin Jefferson pretending to be a nature photographer. </p><p><em><strong>Stream "</strong></em><a href="https://www.primevideo.com/region/na/detail/0NQ2T4I0OK30WSADW946B4RZ9A/ref=atv_sr_fle_c_sra5ba81_1_1_1?sr=1-1&pageTypeIdSource=ASIN&pageTypeId=B0FYR6829N&qid=1782482483365" target="_blank" rel="nofollow"><em><strong>Eli Manning Presents: The Undercovers" on Prime Video</strong></em></a><em><strong> now</strong></em></p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/no-prime-membership-required-stream-these-5-great-movies-for-free-right-now">Stream these 5 movies for free — no Prime membership required</a></li><li><strong></strong><a href="https://www.tomsguide.com/entertainment/prime-video/5-best-prime-video-movies-to-stream-now-before-they-leave-in-june-2026">5 best Prime Video movies to stream now before they leave in June 2026</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/spike-lee-is-having-the-ultimate-knicks-championship-summer-but-his-greatest-new-york-movie-leaves-prime-video-in-days">Spike Lee is having the ultimate Knicks championship summer, but his greatest New York movie leaves Prime Video in days</a></li></ul><div data-model-name="Amazon Prime Video,Hulu,Netflix,Paramount Plus,Peacock TV,Disney+,Apple TV" data-widget-type="multimodelreview" data-widget-title="Today's best streaming service deals"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Grill smarter, not harder — these top 12 Prime Day grilling essential deals are up to 50% off right now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Grilling season is here! And whether you enjoy hosting summer barbecues or preparing for a big 4th July cookout, you’ll need all the right essentials to level up your grilling game. </p><p>Plus, it is even better when you can score major savings during the <a href="https://www.tomsguide.com/live/news/prime-day-2026-handpicked-editor-recommended-deals-live#live">Prime Day deals</a>. I've just tracked down some absolute steals featuring massive discounts of up to 50% right now. All these products promise to make grilling a breeze. </p><p>So, whether you want a premium grilling tool set or a heavy-duty cast-iron press to make smash burgers, here are the offers that I'm adding to my shopping cart today. Either way, you're bound to wow your cookout guests.</p>        <div class="featured_product_block featured_block_hero" data-id="a99fdfb8-667b-40be-b691-21d7c6c7a8eb">            <a href="https://www.amazon.com/Resistant-Grilling-Silicone-Non-Slip-Barbecue/dp/B07YTVMRV4" data-model-name="Comsmart BBQ Gloves" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cq9fA3TsKEg59K663tM7V8.jpg" alt="Comsmart, Comsmart Bbq Gloves, 1472 Degree F Heat Resistant Grilling Gloves Silicone Non-Slip Oven Gloves Long Kitchen Gloves for Barbecue, Cooking, Baking, Cutting"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Comsmart</div>                                        <div class="featured__title">Comsmart BBQ Gloves</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1fbe9687-1be4-4ddb-a3ea-5a2a499784c8">            <a href="https://www.amazon.com/dp/B0DD3S7WDZ" data-model-name="Vovoly Extra Wide Griddle Scraper" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aewh7saHuUBHEqLcbBm5Lo.jpg" alt="Vovoly, Vovoly Extra Wide Griddle Scraper, 5.5''x5.5'' Smashed Burger Scraper Grill Scraper Spatula Burger Turner - Full Tang Wooden Handle Professional Grade Grill Accessories, Knife Grade Stainless Steel"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Vovoly</div>                                        <div class="featured__title">Vovoly Extra Wide Griddle Scraper</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="38fdba6d-7e68-4fa8-86cf-805f5d2b5f16">            <a href="https://www.amazon.com/dp/B0C3V4XD9X" data-model-name="Shizzo Shallow Grill Basket Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/UnpSZGjzLa4PE87U65ZSCR.jpg" alt="SHIZZO, Shizzo Shallow Grill Basket Set, Grilling Accessories Barbecue Bbq, Stainless Steel Folding Portable Outdoor Camping Rack for Fish, Shrimp, Vegetables, Cooking Accessories, Gift for Family, Freinds"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SHIZZO</div>                                        <div class="featured__title">Shizzo Shallow Grill Basket Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ca2eec4-de5c-4232-865d-e5c650d597f9">            <a href="https://www.amazon.com/Cuisinart-CISB-111-Smashed-Burger-Press/dp/B07SZFHKVZ" data-model-name="Cuisinart 6.5" Cast Iron Smashed Burger Press" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/g6t2j7cx3B3jDW7RkqfXTN.jpg" alt="Cuisinart, Cuisinart 6.5" Cast Iron Smashed Burger Press, Round Flat Edge Grill Press for Crispy Smash Burgers, Burger Tool for Grill and Griddle Accessories, for Bbqs and Tailgates"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Cuisinart</div>                                        <div class="featured__title">Cuisinart 6.5" Cast Iron Smashed Burger Press</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a55cd508-92ff-4d3b-9b8a-2f78d9aa6620">            <a href="https://www.amazon.com/dp/B075NC2MYB" data-model-name="Grillart Grill Brush and Scraper " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aPGKsfLnZE2ThFyUF9LVFS.jpg" alt="GRILLART, Grillart Grill Brush and Scraper Bbq Brush for Grill, Safe 18" Stainless Steel Woven Wire 3 in 1 Bristles Grill Cleaning Brush, Br-4516"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRILLART</div>                                        <div class="featured__title">Grillart Grill Brush and Scraper </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8d543a4c-33bb-4f8a-ada1-65c348720570">            <a href="https://www.amazon.com/dp/B0D87SH9ZB" data-model-name="Shizzo Rolling Grill Basket" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/P6R7sxyAzpNBQihcS5KVGN.jpg" alt="SHIZZO, Shizzo Rolling Grill Basket, Removable Wooden Handle, Extra Sturdy Cylinder Grilling Basket, Food Grade Stainless Steel, Portable Outdoor Camping Accessories Bbq Net Rack, Cooking Griller for Fish, Vegetables, and More - Gifts for Men Dad Husband - Set of 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SHIZZO</div>                                        <div class="featured__title">Shizzo Rolling Grill Basket</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d7a3896c-2366-407a-ae78-7966b665a193">            <a href="https://www.amazon.com/dp/B09BHJWV2Q" data-model-name="Hulisen Smashed Burger Kit: Press, Grill Spatula and Spice Shaker " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/47nUg4GaheZzagXiSn33YW.jpg" alt="HULISEN, Hulisen Smashed Burger Kit, Stainless Steel Burger Press, Grill Spatula and Spice Dredge Shaker - Burger Smasher Griddle Accessories Kit for Flat Top Griddle Grill Cooking, Gift Package"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>HULISEN</div>                                        <div class="featured__title">Hulisen Smashed Burger Kit: Press, Grill Spatula and Spice Shaker </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="cb0817e2-fe06-4bc9-b8e8-c326162f1b01">            <a href="https://www.amazon.com/Scrub-Daddy-Grill-Brush-BBQ/dp/B09SVK9YBB" data-model-name="Scrub Daddy Bbq Daddy Grill Brush " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Cn36GCk3nKtxMmRggkiozL.jpg" alt="Scrub Daddy, Scrub Daddy Bbq Daddy Grill Brush for Outdoor Grill - Bristle Free Grill Brush With Steel Grill Scraper + Scrub Brush - Temperature Controlled Scrubbing Power for Grill Cleaning (1 Count)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Scrub Daddy</div>                                        <div class="featured__title">Scrub Daddy Bbq Daddy Grill Brush </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="0d08f11c-d651-457c-ab7a-0a55f478c16d">            <a href="https://www.amazon.com/gp/aw/d/B0DNMTK56N" data-model-name="Thermomaven Digital Meat Thermometer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/hgDfjtprY8EmAFVsjDoHMG.jpg" alt="ThermoMaven, Thermomaven Professional Meat Thermometer Digital, Ultra-Fast 0.5 Sec Instant Read, Nist Certified ±0.5°f Accuracy, Ip67 Waterproof, Auto-Rotating Backlit Display, Lift-To-Wake, for Bbq/cooking/candy"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ThermoMaven</div>                                        <div class="featured__title">Thermomaven Digital Meat Thermometer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="01cbeb4e-2e76-4523-9179-b1213c11fc21">            <a href="https://www.amazon.com/Kaluns-Stainless-Luxurious-barbequing-Professional/dp/B079J4KT8H" data-model-name="Kaluns Grilling Accessories" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/XdGiRZYHSx2nmPMZz3UAeK.jpg" alt="Kaluns, Kaluns Grilling Accessories, Dad Gifts for Fathers Day, Grilling Gifts, Heavy Duty Stainless Steel Bbq Tool Set for Outdoor Grill With Aluminum Case and Apron, Birthday Gifts for Men Women"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Kaluns</div>                                        <div class="featured__title">Kaluns Grilling Accessories</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="eaea6b5d-db09-4bca-875c-69bc16f3429d">            <a href="https://www.amazon.com/Cutluxe-Slicing-Carving-Knife-Ergonomic/dp/B07VLW8677/" data-model-name="Cutluxe 12-Inch Brisket Knife" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PEvigrLJjynDcXqgudWkuY.jpg" alt="Cutluxe Brisket Knife – 12" Carving & Slicing Knife for Meat & Bbq – Razor Sharp German Steel, Sheath Included, Ergonomic Full Tang Handle Design, Grilling Gifts for Men – Artisan Series"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Cutluxe</div>                                        <div class="featured__title">Cutluxe 12-Inch Brisket Knife</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="67d03b93-6e19-4462-b915-8c6e6536dad9">            <a href="https://www.amazon.com/GRILLART-BBQ-Tools-Grill-Set/dp/B09GB5YCHH" data-model-name="Grillart BBQ Grill Tools Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PCbGug4oV6uEb59S37yfL5.jpg" alt="GRILLART, Grillart Bbq Tools Grill Tools Set -18inch Grilling Tools Bbq Set - Grill Accessories W/bbq Tongs, Spatula, Fork, Brush- Stainless Grill Kit Grilling Set - Gift Ideas Bbq Accessories Gifts for Men Dad"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRILLART</div>                                        <div class="featured__title">Grillart BBQ Grill Tools Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="home-appliances">HOME APPLIANCES</h2><h3 class="article-body__section" id="section-we-re-tracking-all-the-best-prime-day-home-appliance-deals"><span>We're tracking all the best Prime Day home appliance deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Home+Appliances&price=50_&min_discount_ratio=0.95&offer_type=all&rows=4&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.&show_countdown=true&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-right {      position: absolute;      right: 8px;      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-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right {      right: 0;      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-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">          \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.previousElementSibling.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-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>\n        \x3C/div>\n      \x3C/div>\n    \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">      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>    \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';             }          }                    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')}`                });              }            });          }        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const encodedTag = encodeURIComponent(this.activeDealTag.toLowerCase().replace(/\s+/g, '-'));             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map(v => {              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}`;                }              }              return `                \x3Ca href="${this.escapeHTML(linkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item">                  ${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);                }              });            });                                  } 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 = `              \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;                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let existingChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             if (this.getViewMode() === 'carousel') {                 if (!existingChevron) {                     gridWrapper.insertAdjacentHTML('beforeend', '\n                 \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.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>');                 }             } else {                 if (existingChevron) {                     existingChevron.remove();                 }             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));               }            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/home/grill-smarter-not-harder-these-top-12-prime-day-grilling-essential-deals-are-up-to-50-percent-off-right-now</link>
                                                                            <description>
                            <![CDATA[ Having a summer cookout? I’ve just found 12 Prime Day deals perfect for levelling up my summer cookouts. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">2RRc4Ko3f3s2k2MCmeLrmE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Q2y9CLfuaBCBTmCdYSCby9-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 26 Jun 2026 13:31:25 +0000</pubDate>                                                                                                                                <updated>Fri, 26 Jun 2026 14:31:31 +0000</updated>
                                                                                                                                            <category><![CDATA[Home]]></category>
                                                                                                                    <dc:creator><![CDATA[ Cynthia Lawrence ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/CCuSgQpd5NyZ46CgoF9cva.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/Q2y9CLfuaBCBTmCdYSCby9-1280-80.jpg">
                                                            <media:credit><![CDATA[Cuisinart, Comsmart, Vovoly / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of BBQ essentials.]]></media:description>                                                            <media:text><![CDATA[A selection of BBQ essentials.]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of BBQ essentials.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Q2y9CLfuaBCBTmCdYSCby9-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Grilling season is here! And whether you enjoy hosting summer barbecues or preparing for a big 4th July cookout, you’ll need all the right essentials to level up your grilling game. </p><p>Plus, it is even better when you can score major savings during the <a href="https://www.tomsguide.com/live/news/prime-day-2026-handpicked-editor-recommended-deals-live#live">Prime Day deals</a>. I've just tracked down some absolute steals featuring massive discounts of up to 50% right now. All these products promise to make grilling a breeze. </p><p>So, whether you want a premium grilling tool set or a heavy-duty cast-iron press to make smash burgers, here are the offers that I'm adding to my shopping cart today. Either way, you're bound to wow your cookout guests.</p>        <div class="featured_product_block featured_block_hero" data-id="a99fdfb8-667b-40be-b691-21d7c6c7a8eb">            <a href="https://www.amazon.com/Resistant-Grilling-Silicone-Non-Slip-Barbecue/dp/B07YTVMRV4" data-model-name="Comsmart BBQ Gloves" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cq9fA3TsKEg59K663tM7V8.jpg" alt="Comsmart, Comsmart Bbq Gloves, 1472 Degree F Heat Resistant Grilling Gloves Silicone Non-Slip Oven Gloves Long Kitchen Gloves for Barbecue, Cooking, Baking, Cutting"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Comsmart</div>                                        <div class="featured__title">Comsmart BBQ Gloves</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1fbe9687-1be4-4ddb-a3ea-5a2a499784c8">            <a href="https://www.amazon.com/dp/B0DD3S7WDZ" data-model-name="Vovoly Extra Wide Griddle Scraper" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aewh7saHuUBHEqLcbBm5Lo.jpg" alt="Vovoly, Vovoly Extra Wide Griddle Scraper, 5.5''x5.5'' Smashed Burger Scraper Grill Scraper Spatula Burger Turner - Full Tang Wooden Handle Professional Grade Grill Accessories, Knife Grade Stainless Steel"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Vovoly</div>                                        <div class="featured__title">Vovoly Extra Wide Griddle Scraper</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="38fdba6d-7e68-4fa8-86cf-805f5d2b5f16">            <a href="https://www.amazon.com/dp/B0C3V4XD9X" data-model-name="Shizzo Shallow Grill Basket Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/UnpSZGjzLa4PE87U65ZSCR.jpg" alt="SHIZZO, Shizzo Shallow Grill Basket Set, Grilling Accessories Barbecue Bbq, Stainless Steel Folding Portable Outdoor Camping Rack for Fish, Shrimp, Vegetables, Cooking Accessories, Gift for Family, Freinds"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SHIZZO</div>                                        <div class="featured__title">Shizzo Shallow Grill Basket Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="2ca2eec4-de5c-4232-865d-e5c650d597f9">            <a href="https://www.amazon.com/Cuisinart-CISB-111-Smashed-Burger-Press/dp/B07SZFHKVZ" data-model-name="Cuisinart 6.5" Cast Iron Smashed Burger Press" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/g6t2j7cx3B3jDW7RkqfXTN.jpg" alt="Cuisinart, Cuisinart 6.5" Cast Iron Smashed Burger Press, Round Flat Edge Grill Press for Crispy Smash Burgers, Burger Tool for Grill and Griddle Accessories, for Bbqs and Tailgates"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Cuisinart</div>                                        <div class="featured__title">Cuisinart 6.5" Cast Iron Smashed Burger Press</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a55cd508-92ff-4d3b-9b8a-2f78d9aa6620">            <a href="https://www.amazon.com/dp/B075NC2MYB" data-model-name="Grillart Grill Brush and Scraper " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aPGKsfLnZE2ThFyUF9LVFS.jpg" alt="GRILLART, Grillart Grill Brush and Scraper Bbq Brush for Grill, Safe 18" Stainless Steel Woven Wire 3 in 1 Bristles Grill Cleaning Brush, Br-4516"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRILLART</div>                                        <div class="featured__title">Grillart Grill Brush and Scraper </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8d543a4c-33bb-4f8a-ada1-65c348720570">            <a href="https://www.amazon.com/dp/B0D87SH9ZB" data-model-name="Shizzo Rolling Grill Basket" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/P6R7sxyAzpNBQihcS5KVGN.jpg" alt="SHIZZO, Shizzo Rolling Grill Basket, Removable Wooden Handle, Extra Sturdy Cylinder Grilling Basket, Food Grade Stainless Steel, Portable Outdoor Camping Accessories Bbq Net Rack, Cooking Griller for Fish, Vegetables, and More - Gifts for Men Dad Husband - Set of 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SHIZZO</div>                                        <div class="featured__title">Shizzo Rolling Grill Basket</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d7a3896c-2366-407a-ae78-7966b665a193">            <a href="https://www.amazon.com/dp/B09BHJWV2Q" data-model-name="Hulisen Smashed Burger Kit: Press, Grill Spatula and Spice Shaker " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/47nUg4GaheZzagXiSn33YW.jpg" alt="HULISEN, Hulisen Smashed Burger Kit, Stainless Steel Burger Press, Grill Spatula and Spice Dredge Shaker - Burger Smasher Griddle Accessories Kit for Flat Top Griddle Grill Cooking, Gift Package"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>HULISEN</div>                                        <div class="featured__title">Hulisen Smashed Burger Kit: Press, Grill Spatula and Spice Shaker </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="cb0817e2-fe06-4bc9-b8e8-c326162f1b01">            <a href="https://www.amazon.com/Scrub-Daddy-Grill-Brush-BBQ/dp/B09SVK9YBB" data-model-name="Scrub Daddy Bbq Daddy Grill Brush " data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Cn36GCk3nKtxMmRggkiozL.jpg" alt="Scrub Daddy, Scrub Daddy Bbq Daddy Grill Brush for Outdoor Grill - Bristle Free Grill Brush With Steel Grill Scraper + Scrub Brush - Temperature Controlled Scrubbing Power for Grill Cleaning (1 Count)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Scrub Daddy</div>                                        <div class="featured__title">Scrub Daddy Bbq Daddy Grill Brush </div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="0d08f11c-d651-457c-ab7a-0a55f478c16d">            <a href="https://www.amazon.com/gp/aw/d/B0DNMTK56N" data-model-name="Thermomaven Digital Meat Thermometer" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/hgDfjtprY8EmAFVsjDoHMG.jpg" alt="ThermoMaven, Thermomaven Professional Meat Thermometer Digital, Ultra-Fast 0.5 Sec Instant Read, Nist Certified ±0.5°f Accuracy, Ip67 Waterproof, Auto-Rotating Backlit Display, Lift-To-Wake, for Bbq/cooking/candy"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ThermoMaven</div>                                        <div class="featured__title">Thermomaven Digital Meat Thermometer</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="01cbeb4e-2e76-4523-9179-b1213c11fc21">            <a href="https://www.amazon.com/Kaluns-Stainless-Luxurious-barbequing-Professional/dp/B079J4KT8H" data-model-name="Kaluns Grilling Accessories" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/XdGiRZYHSx2nmPMZz3UAeK.jpg" alt="Kaluns, Kaluns Grilling Accessories, Dad Gifts for Fathers Day, Grilling Gifts, Heavy Duty Stainless Steel Bbq Tool Set for Outdoor Grill With Aluminum Case and Apron, Birthday Gifts for Men Women"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Kaluns</div>                                        <div class="featured__title">Kaluns Grilling Accessories</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="eaea6b5d-db09-4bca-875c-69bc16f3429d">            <a href="https://www.amazon.com/Cutluxe-Slicing-Carving-Knife-Ergonomic/dp/B07VLW8677/" data-model-name="Cutluxe 12-Inch Brisket Knife" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PEvigrLJjynDcXqgudWkuY.jpg" alt="Cutluxe Brisket Knife – 12" Carving & Slicing Knife for Meat & Bbq – Razor Sharp German Steel, Sheath Included, Ergonomic Full Tang Handle Design, Grilling Gifts for Men – Artisan Series"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Cutluxe</div>                                        <div class="featured__title">Cutluxe 12-Inch Brisket Knife</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="67d03b93-6e19-4462-b915-8c6e6536dad9">            <a href="https://www.amazon.com/GRILLART-BBQ-Tools-Grill-Set/dp/B09GB5YCHH" data-model-name="Grillart BBQ Grill Tools Set" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PCbGug4oV6uEb59S37yfL5.jpg" alt="GRILLART, Grillart Bbq Tools Grill Tools Set -18inch Grilling Tools Bbq Set - Grill Accessories W/bbq Tongs, Spatula, Fork, Brush- Stainless Grill Kit Grilling Set - Gift Ideas Bbq Accessories Gifts for Men Dad"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>GRILLART</div>                                        <div class="featured__title">Grillart BBQ Grill Tools Set</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="home-appliances">HOME APPLIANCES</h2><h3 class="article-body__section" id="section-we-re-tracking-all-the-best-prime-day-home-appliance-deals"><span>We're tracking all the best Prime Day home appliance deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Home+Appliances&price=50_&min_discount_ratio=0.95&offer_type=all&rows=4&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.&show_countdown=true&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-right {      position: absolute;      right: 8px;      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-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right {      right: 0;      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-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">          \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.previousElementSibling.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-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>\n        \x3C/div>\n      \x3C/div>\n    \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">      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>    \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';             }          }                    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')}`                });              }            });          }        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const encodedTag = encodeURIComponent(this.activeDealTag.toLowerCase().replace(/\s+/g, '-'));             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map(v => {              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}`;                }              }              return `                \x3Ca href="${this.escapeHTML(linkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item">                  ${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);                }              });            });                                  } 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 = `              \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;                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let existingChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             if (this.getViewMode() === 'carousel') {                 if (!existingChevron) {                     gridWrapper.insertAdjacentHTML('beforeend', '\n                 \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.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>');                 }             } else {                 if (existingChevron) {                     existingChevron.remove();                 }             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));               }            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Best early Prime Day deals in Australia: our top 10 discounted picks leading into Amazon's July sale ]]></title>
                                                                                                <dc:content><![CDATA[ <div  class="fancy-box"><div class="fancy_box-title">How to sign up for a free 30-day Amazon Prime trial</div><div class="fancy_box_body"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' ><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SCQ6uKVaHeUuo4cj792r4g" name="Amazon-Prime-logo.jpg" caption="" alt="Prime logo" src="https://cdn.mos.cms.futurecdn.net/SCQ6uKVaHeUuo4cj792r4g.jpg" mos="" link="" align="" fullscreen="" width="" height="" attribution="" endorsement="" class="pinterest-pin-exclude"></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p class="fancy-box__body-text">1. <a data-analytics-id="inline-link" href="https://www.amazon.com.au/tryprimefree" target="_blank">Go to Amazon Prime</a><br>2. Select: Start your free trial<br>3. Follow the instructions<br>4. <a data-analytics-id="inline-link" href="https://www.amazon.com.au/deals" target="_blank">Start browsing deals</a></p></div></div><p>Prime Day 2026 kicks off in Australia on <strong>Tuesday, July 7</strong> and runs right through to <strong>Monday, July 13</strong>. It’s a full week this year — a rare treat, considering the US and UK are already doing their own thing throughout late June.</p><p>While the main event is still a couple of weeks away, the early deals have already started bubbling up, and they’re giving us a pretty good idea of what to expect. Think the usual Prime Day mix: power banks, earbuds, smart home gear, tablets, laptops — the stuff that quietly disappears from your cart when you hesitate for five minutes.</p><p>If you've been following our ongoing list of the <a href="https://www.tomsguide.com/au/news/best-amazon-deals" target="_blank">best Amazon AU deals</a>, you'll notice a consistent trend. Prices are already dropping across a bunch of categories, and it’s safe to assume many of these early offers are a warm‑up for the bigger cuts coming in July.</p><p>Most of the strongest discounts will be Prime-only, so if you want the full spread — including free expedited shipping — you’ll need a membership. The good news is that new users still get the <a href="https://www.amazon.com.au/tryprimefree" target="_blank">first 30 days free</a>, which conveniently covers the entire sale window.</p><p>In short: the early deals are here, the main wave is coming, and this year’s longer Aussie event gives you more time than most countries to snag something genuinely good. Here are the 10 best early <a href="https://www.tomsguide.com/news/best-prime-day-deals-and-sales">Prime Day</a> deals the <a href="https://www.tomsguide.com/au/savings-squad">Tom's Guide Savings Squad</a> has spotted so far.</p><h2 id="best-early-prime-day-deals">Best early Prime Day deals</h2><div class="product"><a data-dimension112="5f8f04a4-1865-4441-b266-f3d42b5e3a70" data-action="Deal Block" data-label="Ultra Open Earbuds" data-dimension48="Ultra Open Earbuds" data-dimension25="$329.95" href="https://www.amazon.com.au/Bose-Immersive-OpenAudio-Awareness-Moonstone/dp/B0DK3GG2YS" 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="qHHEoKBrHjpkL8nTxtHPnS" name="Bose Ultra Open-Ear Buds deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/qHHEoKBrHjpkL8nTxtHPnS.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Bose Ultra Open Earbuds deliver the power and quality you’d expect from Bose, with the added perks of an open-ear design. The immersive sound is top-notch, offering up to seven hours of playtime and as much as 48 hours on standby. They’re reliable, effortless, and perform beautifully.<a class="view-deal button" href="https://www.amazon.com.au/Bose-Immersive-OpenAudio-Awareness-Moonstone/dp/B0DK3GG2YS" target="_blank" rel="nofollow" data-dimension112="5f8f04a4-1865-4441-b266-f3d42b5e3a70" data-action="Deal Block" data-label="Ultra Open Earbuds" data-dimension48="Ultra Open Earbuds" data-dimension25="$329.95">View Deal</a></p></div><div class="product"><a data-dimension112="dede136e-6648-4dab-bd0a-61893117736d" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$329" href="https://www.amazon.com.au/dp/B0FQDRMVFV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1036px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="RFi5iHvNADBXHaP7UFMZ2A" name="AirPods Pro 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RFi5iHvNADBXHaP7UFMZ2A.jpg" mos="" align="middle" fullscreen="" width="1036" height="1036" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0FQDRMVFV" target="_blank" rel="nofollow" data-dimension112="dede136e-6648-4dab-bd0a-61893117736d" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$329">AirPods Pro 3: was $429 now $329</a></strong><br>Amazon's offering the biggest discount on Apple's third-gen AirPods Pro earphones we've seen to date, although they've admittedly only been out since mid September. Though some of the improvements over their forebears are small, these are still indisputably the best in-ear AirPods ever, with better noise cancellation, fuller bass and crisper treble, plus smart features like live language translation and heart rate monitoring. <a class="view-deal button" href="https://www.amazon.com.au/dp/B0FQDRMVFV" target="_blank" rel="nofollow" data-dimension112="dede136e-6648-4dab-bd0a-61893117736d" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$329">View Deal</a></p></div><div class="product"><a data-dimension112="da2dfb1f-0e37-4e43-b457-a3c504490754" data-action="Deal Block" data-label="Barista Express" data-dimension48="Barista Express" data-dimension25="$595" href="https://www.amazon.com.au/Breville-Barista-Espresso-Charcoal-BES870CHR/dp/B09DP4PSX1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="jxMpvdkU6vrpYK8p5NY8LM" name="breville-barista-express" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jxMpvdkU6vrpYK8p5NY8LM.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With a nice saving, it's hard to dismiss this Breville coffee machine deal. The Barista Express has a built-in grinder, tamper, and bean hopper, so there's no need to buy a separate grinder or hand tamp. Available in a few colourways under the same listing, but only the Charcoal option is at this low price.<a class="view-deal button" href="https://www.amazon.com.au/Breville-Barista-Espresso-Charcoal-BES870CHR/dp/B09DP4PSX1" target="_blank" rel="nofollow" data-dimension112="da2dfb1f-0e37-4e43-b457-a3c504490754" data-action="Deal Block" data-label="Barista Express" data-dimension48="Barista Express" data-dimension25="$595">View Deal</a></p></div><div class="product"><a data-dimension112="0e1bad60-d91a-45f6-88d7-c31c76383a02" data-action="Deal Block" data-label="Dazzle Hair Dryer" data-dimension48="Dazzle Hair Dryer" data-dimension25="$248.99" href="https://www.amazon.com.au/Intelligent-Recognition-Magnetic-Cutomizable-Removable/dp/B0F9P2XJNZ" 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="8jYPnuUXft23Ab9uqZcNKB" name="dreame-dazzle-hair-dryer-intelligent-noz-d5005f42-f6ba-435d-8d2c-79cd1feaff84.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8jYPnuUXft23Ab9uqZcNKB.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Intelligent-Recognition-Magnetic-Cutomizable-Removable/dp/B0F9P2XJNZ" target="_blank" rel="nofollow" data-dimension112="0e1bad60-d91a-45f6-88d7-c31c76383a02" data-action="Deal Block" data-label="Dazzle Hair Dryer" data-dimension48="Dazzle Hair Dryer" data-dimension25="$248.99">Dazzle Hair Dryer: was $499 now $248.99</a></strong><br>Save 50% on this Dyson Airwrap dupe from Dreame. The Dazzle comes with two auto curlers, a roller brush, a diffuser, and a concentrator attachment — all for half the price of Dyson's coveted air styler. And now, it's even more impressive at just AU$250. <a class="view-deal button" href="https://www.amazon.com.au/Intelligent-Recognition-Magnetic-Cutomizable-Removable/dp/B0F9P2XJNZ" target="_blank" rel="nofollow" data-dimension112="0e1bad60-d91a-45f6-88d7-c31c76383a02" data-action="Deal Block" data-label="Dazzle Hair Dryer" data-dimension48="Dazzle Hair Dryer" data-dimension25="$248.99">View Deal</a></p></div><div class="product"><a data-dimension112="07c36402-d2f4-4752-ac14-92bc7a174ef3" data-action="Deal Block" data-label="FlexStyle" data-dimension48="FlexStyle" data-dimension25="$248" href="https://www.amazon.com.au/Shark-Professional-Attachments-Lightweight-HD421ANZ/dp/B0FCFPQLHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:84.83%;"><img id="wZqKMSp2nbis7zYLfBCAnF" name="Shark FlexStyle" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wZqKMSp2nbis7zYLfBCAnF.jpg" mos="" align="middle" fullscreen="" width="679" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Dyson's Airwrap is a great hair tool — but its biggest downfall is that it's very expensive. This is what makes the Shark Flexstyle stand out as a great (read: cheaper) alternative. Now with a modest discount, it's down to AU$248 — a fantastic price for a full styling kit for all hair types.<a class="view-deal button" href="https://www.amazon.com.au/Shark-Professional-Attachments-Lightweight-HD421ANZ/dp/B0FCFPQLHN" target="_blank" rel="nofollow" data-dimension112="07c36402-d2f4-4752-ac14-92bc7a174ef3" data-action="Deal Block" data-label="FlexStyle" data-dimension48="FlexStyle" data-dimension25="$248">View Deal</a></p></div><div class="product"><a data-dimension112="55726ce0-a69e-4ba5-9470-435c03d98c99" data-action="Deal Block" data-label="Classic Clog" data-dimension48="Classic Clog" data-dimension25="$40" href="https://www.amazon.com.au/crocs-Classic-Clog-Lavender-Women/dp/B001U9JLCS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2009px;"><p class="vanilla-image-block" style="padding-top:99.50%;"><img id="kdTTmdo3izyjgYSKcrrpsY" name="1731426555.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kdTTmdo3izyjgYSKcrrpsY.jpg" mos="" align="middle" fullscreen="" width="2009" height="1999" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Knocking up to 50% off, these Crocs Classic clogs are extremely versatile, breathable and dry fast when wet, making them perfect for almost every activity. Available in a range of colours under the same listing. <a class="view-deal button" href="https://www.amazon.com.au/crocs-Classic-Clog-Lavender-Women/dp/B001U9JLCS" target="_blank" rel="nofollow" data-dimension112="55726ce0-a69e-4ba5-9470-435c03d98c99" data-action="Deal Block" data-label="Classic Clog" data-dimension48="Classic Clog" data-dimension25="$40">View Deal</a></p></div><div class="product"><a data-dimension112="84dc56d5-5124-4b37-9a69-4d1bd755b71a" data-action="Deal Block" data-label="Galaxy SmartTag 2 (1 pack)" data-dimension48="Galaxy SmartTag 2 (1 pack)" data-dimension25="$28" href="https://www.amazon.com.au/dp/B0CK4J8S1G" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:450px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="BByEyppchMqjieFkogjZZV" name="Samsung Galaxy SmartTag 2.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BByEyppchMqjieFkogjZZV.jpeg" mos="" align="middle" fullscreen="" width="450" height="450" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0CK4J8S1G" target="_blank" rel="nofollow" data-dimension112="84dc56d5-5124-4b37-9a69-4d1bd755b71a" data-action="Deal Block" data-label="Galaxy SmartTag 2 (1 pack)" data-dimension48="Galaxy SmartTag 2 (1 pack)" data-dimension25="$28">Galaxy SmartTag 2 (1 pack): was $55 now $28</a></strong><br>Samsung's alternative to Apple's AirTag was redesigned in 2023 and has been reasonably well received, making it a good Bluetooth tracker for non-Apple users. It'll let you keep tabs on the location of whatever you attach it to and, critically, it works with Android. It costs a little more than a single AirTag at full price, but this discount makes it easy to recommend.<a class="view-deal button" href="https://www.amazon.com.au/dp/B0CK4J8S1G" target="_blank" rel="nofollow" data-dimension112="84dc56d5-5124-4b37-9a69-4d1bd755b71a" data-action="Deal Block" data-label="Galaxy SmartTag 2 (1 pack)" data-dimension48="Galaxy SmartTag 2 (1 pack)" data-dimension25="$28">View Deal</a></p></div><div class="product"><a data-dimension112="7e92fb01-6682-44bf-a6b7-75188153fe30" data-action="Deal Block" data-label="Galaxy Watch 8 (44mm)" data-dimension48="Galaxy Watch 8 (44mm)" data-dimension25="$448" href="https://www.amazon.com.au/Samsung-Graphite-Bluetooth-Everyday-Processor/dp/B0FD38GV9D" 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="2k7AtWyQ7HbqEuUvPDKFyB" name="Samsung Galaxy Watch8" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2k7AtWyQ7HbqEuUvPDKFyB.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Samsung-Graphite-Bluetooth-Everyday-Processor/dp/B0FD38GV9D" target="_blank" rel="nofollow" data-dimension112="7e92fb01-6682-44bf-a6b7-75188153fe30" data-action="Deal Block" data-label="Galaxy Watch 8 (44mm)" data-dimension48="Galaxy Watch 8 (44mm)" data-dimension25="$448">Galaxy Watch 8 (44mm): was $699 now $448</a></strong><br>While it might lack some of the Galaxy Watch 8 Classic's flair and rotating bezel, the standard model still offers incredible health and activity tracking features, along with access to Gemini AI. This deal is on the Silver model, which is now discounted by a massive 36%.<a class="view-deal button" href="https://www.amazon.com.au/Samsung-Graphite-Bluetooth-Everyday-Processor/dp/B0FD38GV9D" target="_blank" rel="nofollow" data-dimension112="7e92fb01-6682-44bf-a6b7-75188153fe30" data-action="Deal Block" data-label="Galaxy Watch 8 (44mm)" data-dimension48="Galaxy Watch 8 (44mm)" data-dimension25="$448">View Deal</a></p></div><div class="product"><a data-dimension112="d0c438b5-2ae0-46bc-bc4c-00b1e6419741" data-action="Deal Block" data-label="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension48="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension25="$1597" href="https://www.amazon.com.au/Apple-MacBook-13-inch-10-core-Unified/dp/B0GR1G49JR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="QsYDuFvfxGTyTrW3ivGN4o" name="apple-macbook-air-m5-white-bg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QsYDuFvfxGTyTrW3ivGN4o.jpg" mos="" align="middle" fullscreen="" width="1024" height="1024" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Apple-MacBook-13-inch-10-core-Unified/dp/B0GR1G49JR" target="_blank" rel="nofollow" data-dimension112="d0c438b5-2ae0-46bc-bc4c-00b1e6419741" data-action="Deal Block" data-label="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension48="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension25="$1597">MacBook Air 13-inch | M5 / 16GB / 512GB SSD: was $1799 now $1597</a></strong><br>Even though the MacBook Air M5 is still relatively new, this model with 512GB of storage and 16GB of RAM is now available at a decent AU$202 discount. Given the rising cost of components in this day and age, that's a pretty sweet price point.<a class="view-deal button" href="https://www.amazon.com.au/Apple-MacBook-13-inch-10-core-Unified/dp/B0GR1G49JR" target="_blank" rel="nofollow" data-dimension112="d0c438b5-2ae0-46bc-bc4c-00b1e6419741" data-action="Deal Block" data-label="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension48="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension25="$1597">View Deal</a></p></div><div class="product"><a data-dimension112="6f6198bc-e712-47ac-bc83-1e6009e062fe" data-action="Deal Block" data-label="iPhone Air 1TB" data-dimension48="iPhone Air 1TB" data-dimension25="$1747" href="https://www.amazon.com.au/Apple-iPhone-Air-eSIM-only/dp/B0FQG1ZTHT" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1080px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="sXq3HLo3cznhmaz5RoyhvW" name="iPhone Air" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/sXq3HLo3cznhmaz5RoyhvW.png" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Apple-iPhone-Air-eSIM-only/dp/B0FQG1ZTHT" target="_blank" rel="nofollow" data-dimension112="6f6198bc-e712-47ac-bc83-1e6009e062fe" data-action="Deal Block" data-label="iPhone Air 1TB" data-dimension48="iPhone Air 1TB" data-dimension25="$1747">iPhone Air 1TB: was $2599 now $1747</a></strong><br>We love the iPhone Air’s slim, lightweight design, impressive 6.5-inch ProMotion display, and speedy A19 Pro chip, though its single rear camera and average battery life make it a hard sell at full price. Luckily, this massive AU$852 discount makes it a much easier recommendation.<a class="view-deal button" href="https://www.amazon.com.au/Apple-iPhone-Air-eSIM-only/dp/B0FQG1ZTHT" target="_blank" rel="nofollow" data-dimension112="6f6198bc-e712-47ac-bc83-1e6009e062fe" data-action="Deal Block" data-label="iPhone Air 1TB" data-dimension48="iPhone Air 1TB" data-dimension25="$1747">View Deal</a></p></div><div data-model-name="Amazon Prime Membership" data-widget-type="review"></div><ul><li><a href="https://www.tomsguide.com/au/news/best-amazon-deals">The best Amazon AU deals this month, hand-picked by us</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/sales-events/best-early-prime-day-deals-our-top-10-discounted-picks-leading-into-amazons-july-sale</link>
                                                                            <description>
                            <![CDATA[ Amazon's Prime Day sale may not start until July 7, but our Savings Squad is already seeing some excellent bargains leading into the big event. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VBxHcniQJDvy6Cyk3k7ZT8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/SABvxVqT676iMc699wfwtU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 24 Jun 2026 05:15:10 +0000</pubDate>                                                                                                                                <updated>Thu, 25 Jun 2026 14:16:14 +0000</updated>
                                                                                                                                            <category><![CDATA[Sales Events]]></category>
                                                                                                                    <dc:creator><![CDATA[ Stephen Lambrechts ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/JN3jEQpqyyt32as8AJJqXe.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Stephen Lambrechts is the Managing Editor of Tom&#039;s Guide AU and has written professionally across the categories of tech, film, television and gaming for the last 15 years. Before Tom&#039;s Guide, he spent several years as a Senior Journalist at TechRadar, had a brief stint as Editor in Chief at Official Xbox Magazine Australia, and worked at IGN. He&#039;s also written for such mags and sites as APC, TechLife Australia, T3, FilmInk, Daily Telegraph and AskMen. Additionally, he&#039;s a Tomatometer-approved critic on Rotten Tomatoes, and has offered his tech advice on radio and television.&lt;/p&gt;&lt;p&gt;He&#039;s an expert when it comes to smartphones, TVs, gaming and streaming, having contributed many reviews in each of those categories over the years. Despite his many articles on streaming, he&#039;s a passionate collector of physical media who enjoys listening to vinyl records and acquiring obscure horror movies from the &#039;60s, &#039;70s and 80s. He can usually be seen rocking the latest retro sneaker releases, particularly Air Jordans and Reebok Pumps. Occasionally, he also indulges in other non-hipster stuff, like hiking.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/SABvxVqT676iMc699wfwtU-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide / Edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Various products displayed with &#039;Savings Squad Prime Day&#039; deal badge overlaid]]></media:description>                                                            <media:text><![CDATA[Various products displayed with &#039;Savings Squad Prime Day&#039; deal badge overlaid]]></media:text>
                                <media:title type="plain"><![CDATA[Various products displayed with &#039;Savings Squad Prime Day&#039; deal badge overlaid]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/SABvxVqT676iMc699wfwtU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div  class="fancy-box"><div class="fancy_box-title">How to sign up for a free 30-day Amazon Prime trial</div><div class="fancy_box_body"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' ><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SCQ6uKVaHeUuo4cj792r4g" name="Amazon-Prime-logo.jpg" caption="" alt="Prime logo" src="https://cdn.mos.cms.futurecdn.net/SCQ6uKVaHeUuo4cj792r4g.jpg" mos="" link="" align="" fullscreen="" width="" height="" attribution="" endorsement="" class="pinterest-pin-exclude"></p></div></div><figcaption itemprop="caption description" class=""><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p class="fancy-box__body-text">1. <a data-analytics-id="inline-link" href="https://www.amazon.com.au/tryprimefree" target="_blank">Go to Amazon Prime</a><br>2. Select: Start your free trial<br>3. Follow the instructions<br>4. <a data-analytics-id="inline-link" href="https://www.amazon.com.au/deals" target="_blank">Start browsing deals</a></p></div></div><p>Prime Day 2026 kicks off in Australia on <strong>Tuesday, July 7</strong> and runs right through to <strong>Monday, July 13</strong>. It’s a full week this year — a rare treat, considering the US and UK are already doing their own thing throughout late June.</p><p>While the main event is still a couple of weeks away, the early deals have already started bubbling up, and they’re giving us a pretty good idea of what to expect. Think the usual Prime Day mix: power banks, earbuds, smart home gear, tablets, laptops — the stuff that quietly disappears from your cart when you hesitate for five minutes.</p><p>If you've been following our ongoing list of the <a href="https://www.tomsguide.com/au/news/best-amazon-deals" target="_blank">best Amazon AU deals</a>, you'll notice a consistent trend. Prices are already dropping across a bunch of categories, and it’s safe to assume many of these early offers are a warm‑up for the bigger cuts coming in July.</p><p>Most of the strongest discounts will be Prime-only, so if you want the full spread — including free expedited shipping — you’ll need a membership. The good news is that new users still get the <a href="https://www.amazon.com.au/tryprimefree" target="_blank">first 30 days free</a>, which conveniently covers the entire sale window.</p><p>In short: the early deals are here, the main wave is coming, and this year’s longer Aussie event gives you more time than most countries to snag something genuinely good. Here are the 10 best early <a href="https://www.tomsguide.com/news/best-prime-day-deals-and-sales">Prime Day</a> deals the <a href="https://www.tomsguide.com/au/savings-squad">Tom's Guide Savings Squad</a> has spotted so far.</p><h2 id="best-early-prime-day-deals">Best early Prime Day deals</h2><div class="product"><a data-dimension112="5f8f04a4-1865-4441-b266-f3d42b5e3a70" data-action="Deal Block" data-label="Ultra Open Earbuds" data-dimension48="Ultra Open Earbuds" data-dimension25="$329.95" href="https://www.amazon.com.au/Bose-Immersive-OpenAudio-Awareness-Moonstone/dp/B0DK3GG2YS" 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="qHHEoKBrHjpkL8nTxtHPnS" name="Bose Ultra Open-Ear Buds deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/qHHEoKBrHjpkL8nTxtHPnS.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Bose Ultra Open Earbuds deliver the power and quality you’d expect from Bose, with the added perks of an open-ear design. The immersive sound is top-notch, offering up to seven hours of playtime and as much as 48 hours on standby. They’re reliable, effortless, and perform beautifully.<a class="view-deal button" href="https://www.amazon.com.au/Bose-Immersive-OpenAudio-Awareness-Moonstone/dp/B0DK3GG2YS" target="_blank" rel="nofollow" data-dimension112="5f8f04a4-1865-4441-b266-f3d42b5e3a70" data-action="Deal Block" data-label="Ultra Open Earbuds" data-dimension48="Ultra Open Earbuds" data-dimension25="$329.95">View Deal</a></p></div><div class="product"><a data-dimension112="dede136e-6648-4dab-bd0a-61893117736d" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$329" href="https://www.amazon.com.au/dp/B0FQDRMVFV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1036px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="RFi5iHvNADBXHaP7UFMZ2A" name="AirPods Pro 3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RFi5iHvNADBXHaP7UFMZ2A.jpg" mos="" align="middle" fullscreen="" width="1036" height="1036" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0FQDRMVFV" target="_blank" rel="nofollow" data-dimension112="dede136e-6648-4dab-bd0a-61893117736d" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$329">AirPods Pro 3: was $429 now $329</a></strong><br>Amazon's offering the biggest discount on Apple's third-gen AirPods Pro earphones we've seen to date, although they've admittedly only been out since mid September. Though some of the improvements over their forebears are small, these are still indisputably the best in-ear AirPods ever, with better noise cancellation, fuller bass and crisper treble, plus smart features like live language translation and heart rate monitoring. <a class="view-deal button" href="https://www.amazon.com.au/dp/B0FQDRMVFV" target="_blank" rel="nofollow" data-dimension112="dede136e-6648-4dab-bd0a-61893117736d" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$329">View Deal</a></p></div><div class="product"><a data-dimension112="da2dfb1f-0e37-4e43-b457-a3c504490754" data-action="Deal Block" data-label="Barista Express" data-dimension48="Barista Express" data-dimension25="$595" href="https://www.amazon.com.au/Breville-Barista-Espresso-Charcoal-BES870CHR/dp/B09DP4PSX1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="jxMpvdkU6vrpYK8p5NY8LM" name="breville-barista-express" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jxMpvdkU6vrpYK8p5NY8LM.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With a nice saving, it's hard to dismiss this Breville coffee machine deal. The Barista Express has a built-in grinder, tamper, and bean hopper, so there's no need to buy a separate grinder or hand tamp. Available in a few colourways under the same listing, but only the Charcoal option is at this low price.<a class="view-deal button" href="https://www.amazon.com.au/Breville-Barista-Espresso-Charcoal-BES870CHR/dp/B09DP4PSX1" target="_blank" rel="nofollow" data-dimension112="da2dfb1f-0e37-4e43-b457-a3c504490754" data-action="Deal Block" data-label="Barista Express" data-dimension48="Barista Express" data-dimension25="$595">View Deal</a></p></div><div class="product"><a data-dimension112="0e1bad60-d91a-45f6-88d7-c31c76383a02" data-action="Deal Block" data-label="Dazzle Hair Dryer" data-dimension48="Dazzle Hair Dryer" data-dimension25="$248.99" href="https://www.amazon.com.au/Intelligent-Recognition-Magnetic-Cutomizable-Removable/dp/B0F9P2XJNZ" 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="8jYPnuUXft23Ab9uqZcNKB" name="dreame-dazzle-hair-dryer-intelligent-noz-d5005f42-f6ba-435d-8d2c-79cd1feaff84.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8jYPnuUXft23Ab9uqZcNKB.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Intelligent-Recognition-Magnetic-Cutomizable-Removable/dp/B0F9P2XJNZ" target="_blank" rel="nofollow" data-dimension112="0e1bad60-d91a-45f6-88d7-c31c76383a02" data-action="Deal Block" data-label="Dazzle Hair Dryer" data-dimension48="Dazzle Hair Dryer" data-dimension25="$248.99">Dazzle Hair Dryer: was $499 now $248.99</a></strong><br>Save 50% on this Dyson Airwrap dupe from Dreame. The Dazzle comes with two auto curlers, a roller brush, a diffuser, and a concentrator attachment — all for half the price of Dyson's coveted air styler. And now, it's even more impressive at just AU$250. <a class="view-deal button" href="https://www.amazon.com.au/Intelligent-Recognition-Magnetic-Cutomizable-Removable/dp/B0F9P2XJNZ" target="_blank" rel="nofollow" data-dimension112="0e1bad60-d91a-45f6-88d7-c31c76383a02" data-action="Deal Block" data-label="Dazzle Hair Dryer" data-dimension48="Dazzle Hair Dryer" data-dimension25="$248.99">View Deal</a></p></div><div class="product"><a data-dimension112="07c36402-d2f4-4752-ac14-92bc7a174ef3" data-action="Deal Block" data-label="FlexStyle" data-dimension48="FlexStyle" data-dimension25="$248" href="https://www.amazon.com.au/Shark-Professional-Attachments-Lightweight-HD421ANZ/dp/B0FCFPQLHN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:84.83%;"><img id="wZqKMSp2nbis7zYLfBCAnF" name="Shark FlexStyle" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wZqKMSp2nbis7zYLfBCAnF.jpg" mos="" align="middle" fullscreen="" width="679" height="576" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Dyson's Airwrap is a great hair tool — but its biggest downfall is that it's very expensive. This is what makes the Shark Flexstyle stand out as a great (read: cheaper) alternative. Now with a modest discount, it's down to AU$248 — a fantastic price for a full styling kit for all hair types.<a class="view-deal button" href="https://www.amazon.com.au/Shark-Professional-Attachments-Lightweight-HD421ANZ/dp/B0FCFPQLHN" target="_blank" rel="nofollow" data-dimension112="07c36402-d2f4-4752-ac14-92bc7a174ef3" data-action="Deal Block" data-label="FlexStyle" data-dimension48="FlexStyle" data-dimension25="$248">View Deal</a></p></div><div class="product"><a data-dimension112="55726ce0-a69e-4ba5-9470-435c03d98c99" data-action="Deal Block" data-label="Classic Clog" data-dimension48="Classic Clog" data-dimension25="$40" href="https://www.amazon.com.au/crocs-Classic-Clog-Lavender-Women/dp/B001U9JLCS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2009px;"><p class="vanilla-image-block" style="padding-top:99.50%;"><img id="kdTTmdo3izyjgYSKcrrpsY" name="1731426555.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kdTTmdo3izyjgYSKcrrpsY.jpg" mos="" align="middle" fullscreen="" width="2009" height="1999" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Knocking up to 50% off, these Crocs Classic clogs are extremely versatile, breathable and dry fast when wet, making them perfect for almost every activity. Available in a range of colours under the same listing. <a class="view-deal button" href="https://www.amazon.com.au/crocs-Classic-Clog-Lavender-Women/dp/B001U9JLCS" target="_blank" rel="nofollow" data-dimension112="55726ce0-a69e-4ba5-9470-435c03d98c99" data-action="Deal Block" data-label="Classic Clog" data-dimension48="Classic Clog" data-dimension25="$40">View Deal</a></p></div><div class="product"><a data-dimension112="84dc56d5-5124-4b37-9a69-4d1bd755b71a" data-action="Deal Block" data-label="Galaxy SmartTag 2 (1 pack)" data-dimension48="Galaxy SmartTag 2 (1 pack)" data-dimension25="$28" href="https://www.amazon.com.au/dp/B0CK4J8S1G" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:450px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="BByEyppchMqjieFkogjZZV" name="Samsung Galaxy SmartTag 2.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BByEyppchMqjieFkogjZZV.jpeg" mos="" align="middle" fullscreen="" width="450" height="450" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/dp/B0CK4J8S1G" target="_blank" rel="nofollow" data-dimension112="84dc56d5-5124-4b37-9a69-4d1bd755b71a" data-action="Deal Block" data-label="Galaxy SmartTag 2 (1 pack)" data-dimension48="Galaxy SmartTag 2 (1 pack)" data-dimension25="$28">Galaxy SmartTag 2 (1 pack): was $55 now $28</a></strong><br>Samsung's alternative to Apple's AirTag was redesigned in 2023 and has been reasonably well received, making it a good Bluetooth tracker for non-Apple users. It'll let you keep tabs on the location of whatever you attach it to and, critically, it works with Android. It costs a little more than a single AirTag at full price, but this discount makes it easy to recommend.<a class="view-deal button" href="https://www.amazon.com.au/dp/B0CK4J8S1G" target="_blank" rel="nofollow" data-dimension112="84dc56d5-5124-4b37-9a69-4d1bd755b71a" data-action="Deal Block" data-label="Galaxy SmartTag 2 (1 pack)" data-dimension48="Galaxy SmartTag 2 (1 pack)" data-dimension25="$28">View Deal</a></p></div><div class="product"><a data-dimension112="7e92fb01-6682-44bf-a6b7-75188153fe30" data-action="Deal Block" data-label="Galaxy Watch 8 (44mm)" data-dimension48="Galaxy Watch 8 (44mm)" data-dimension25="$448" href="https://www.amazon.com.au/Samsung-Graphite-Bluetooth-Everyday-Processor/dp/B0FD38GV9D" 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="2k7AtWyQ7HbqEuUvPDKFyB" name="Samsung Galaxy Watch8" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2k7AtWyQ7HbqEuUvPDKFyB.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Samsung-Graphite-Bluetooth-Everyday-Processor/dp/B0FD38GV9D" target="_blank" rel="nofollow" data-dimension112="7e92fb01-6682-44bf-a6b7-75188153fe30" data-action="Deal Block" data-label="Galaxy Watch 8 (44mm)" data-dimension48="Galaxy Watch 8 (44mm)" data-dimension25="$448">Galaxy Watch 8 (44mm): was $699 now $448</a></strong><br>While it might lack some of the Galaxy Watch 8 Classic's flair and rotating bezel, the standard model still offers incredible health and activity tracking features, along with access to Gemini AI. This deal is on the Silver model, which is now discounted by a massive 36%.<a class="view-deal button" href="https://www.amazon.com.au/Samsung-Graphite-Bluetooth-Everyday-Processor/dp/B0FD38GV9D" target="_blank" rel="nofollow" data-dimension112="7e92fb01-6682-44bf-a6b7-75188153fe30" data-action="Deal Block" data-label="Galaxy Watch 8 (44mm)" data-dimension48="Galaxy Watch 8 (44mm)" data-dimension25="$448">View Deal</a></p></div><div class="product"><a data-dimension112="d0c438b5-2ae0-46bc-bc4c-00b1e6419741" data-action="Deal Block" data-label="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension48="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension25="$1597" href="https://www.amazon.com.au/Apple-MacBook-13-inch-10-core-Unified/dp/B0GR1G49JR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1024px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="QsYDuFvfxGTyTrW3ivGN4o" name="apple-macbook-air-m5-white-bg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QsYDuFvfxGTyTrW3ivGN4o.jpg" mos="" align="middle" fullscreen="" width="1024" height="1024" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Apple-MacBook-13-inch-10-core-Unified/dp/B0GR1G49JR" target="_blank" rel="nofollow" data-dimension112="d0c438b5-2ae0-46bc-bc4c-00b1e6419741" data-action="Deal Block" data-label="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension48="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension25="$1597">MacBook Air 13-inch | M5 / 16GB / 512GB SSD: was $1799 now $1597</a></strong><br>Even though the MacBook Air M5 is still relatively new, this model with 512GB of storage and 16GB of RAM is now available at a decent AU$202 discount. Given the rising cost of components in this day and age, that's a pretty sweet price point.<a class="view-deal button" href="https://www.amazon.com.au/Apple-MacBook-13-inch-10-core-Unified/dp/B0GR1G49JR" target="_blank" rel="nofollow" data-dimension112="d0c438b5-2ae0-46bc-bc4c-00b1e6419741" data-action="Deal Block" data-label="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension48="MacBook Air 13-inch | M5 / 16GB / 512GB SSD" data-dimension25="$1597">View Deal</a></p></div><div class="product"><a data-dimension112="6f6198bc-e712-47ac-bc83-1e6009e062fe" data-action="Deal Block" data-label="iPhone Air 1TB" data-dimension48="iPhone Air 1TB" data-dimension25="$1747" href="https://www.amazon.com.au/Apple-iPhone-Air-eSIM-only/dp/B0FQG1ZTHT" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1080px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="sXq3HLo3cznhmaz5RoyhvW" name="iPhone Air" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/sXq3HLo3cznhmaz5RoyhvW.png" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com.au/Apple-iPhone-Air-eSIM-only/dp/B0FQG1ZTHT" target="_blank" rel="nofollow" data-dimension112="6f6198bc-e712-47ac-bc83-1e6009e062fe" data-action="Deal Block" data-label="iPhone Air 1TB" data-dimension48="iPhone Air 1TB" data-dimension25="$1747">iPhone Air 1TB: was $2599 now $1747</a></strong><br>We love the iPhone Air’s slim, lightweight design, impressive 6.5-inch ProMotion display, and speedy A19 Pro chip, though its single rear camera and average battery life make it a hard sell at full price. Luckily, this massive AU$852 discount makes it a much easier recommendation.<a class="view-deal button" href="https://www.amazon.com.au/Apple-iPhone-Air-eSIM-only/dp/B0FQG1ZTHT" target="_blank" rel="nofollow" data-dimension112="6f6198bc-e712-47ac-bc83-1e6009e062fe" data-action="Deal Block" data-label="iPhone Air 1TB" data-dimension48="iPhone Air 1TB" data-dimension25="$1747">View Deal</a></p></div><div data-model-name="Amazon Prime Membership" data-widget-type="review"></div><ul><li><a href="https://www.tomsguide.com/au/news/best-amazon-deals">The best Amazon AU deals this month, hand-picked by us</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 new to Prime Video thriller movies to stream this week — one of them is a classic masterpiece ranked among the best films ever made (June 23-29) ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I’m always on the hunt for thriller movies across the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">best streaming services</a>, including Prime Video. I consider the genre a personal favorite, and it’s clear I’m not alone in my love of any movie packed with action, suspense, excitement, tension, and maybe a good twist or two. </p><p>Prime Video clearly understands that many of its subscribers demand good thriller movies, so it regularly adds new options to its content library. Case in point, the <a href="https://www.youtube.com/watch?v=TEN-2uTi2c0">Prime Video June 2026 slate</a> is packed with thrillers. To save you the hassle of browsing the dozens of recent arrivals yourself, I’ve combed through the slate and found three thrillers to watch this week.</p><p>My latest picks include movies fronted by two of the genre’s most popular stars, Liam Neeson and Gerard Butler, as well as a certified Hollywood classic. The latter may be more of a legal drama, but I guarantee you’ll find it engrossing and deeply compelling. These are the three new to Prime Video thriller movies to add to your streaming watchlist this week.</p><div class="product"><a data-dimension112="58e2e683-44e5-4db7-9bf2-adc4aa644831" data-action="Deal Block" data-label="Prime Video add-on subscriptions: deals from $1/month @ Amazon" data-dimension48="Prime Video add-on subscriptions: deals from $1/month @ Amazon" href="https://www.amazon.com/gp/video/storefront" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2048px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ndGtwi34pjSnVsVuuKMjEV" name="prime-video-logo-2025" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ndGtwi34pjSnVsVuuKMjEV.png" mos="" align="middle" fullscreen="" width="2048" height="2048" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Prime Video add-on subscriptions: </strong><a href="https://www.amazon.com/gp/video/addons" target="_blank" rel="nofollow" data-dimension112="58e2e683-44e5-4db7-9bf2-adc4aa644831" data-action="Deal Block" data-label="Prime Video add-on subscriptions: deals from $1/month @ Amazon" data-dimension48="Prime Video add-on subscriptions: deals from $1/month @ Amazon" data-dimension25=""><strong>deals from $1/month @ Amazon</strong></a> <br>Prime Day streaming deals<a href="https://www.tomsguide.com/entertainment/prime-video/i-found-the-3-prime-video-black-friday-deals-worth-your-hard-earned-cash"> </a>are officially live, letting you stream more but spend less. Whether you’re looking to bundle multiple channels or grab a standalone add-on subscription, there’s something for everyone, including Starz, Apple TV and MGM+. With over 20 options available, you can enjoy blockbuster movies, hit shows, and exclusive content for a fraction of the usual price. <a class="view-deal button" href="https://www.amazon.com/gp/video/storefront" target="_blank" rel="nofollow" data-dimension112="58e2e683-44e5-4db7-9bf2-adc4aa644831" data-action="Deal Block" data-label="Prime Video add-on subscriptions: deals from $1/month @ Amazon" data-dimension48="Prime Video add-on subscriptions: deals from $1/month @ Amazon" data-dimension25="">View Deal</a></p></div><h2 id="12-angry-men-1957">‘12 Angry Men’ (1957)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/TEN-2uTi2c0" allowfullscreen></iframe></div></div><p>I’m slightly stretching the definition of a thriller to include this one, but then again, “12 Angry Men” is just as electrifying and compelling as anything else I’ve watched in the thriller genre. It’s a masterclass in screenwriting, with one of cinema’s greatest-ever scripts. It’s no slouch in other crucial departments either. Sidney Lumet’s legal drama is regularly cited as one of the best and most influential movies ever made, and it deserves every ounce of adulation it's received over the decades. </p><p>Set in the sweltering heat of a New York City courthouse during the sticky summer season, 12 jurors convene to determine the guilt of a young boy accused of murdering his father. The men might not be the ones on trial, but as their discussion unfolds, each one’s character is thoroughly examined. Initially, 11 of the jurors believe the boy is guilty without question, and it’s up to Henry Fonda’s Juror No. 8 to present the alternative case.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0BRHJCCH2" target="_blank" rel="nofollow"><em><strong>"12 Angry Men" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="a-walk-among-the-tombstones-2014">'A Walk Among the Tombstones' (2014)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/aTKBowDjMQg" allowfullscreen></iframe></div></div><p>Liam Neeson-fronted action-thrillers are a comfort watch to me. Yes, it’s a little odd to consider movies filled with violence, criminals, and usually a gruff protagonist comforting, but Neeson had made a name for himself in the genre by bringing predictable (but usually enjoyable) thrills to the table. In fact, “A Walk Among the Tombstones” is one of Neeson’s better action-thrillers, giving Neeson a role with a little more meat on the bone. </p><p>Matt Scudder (Neeson) is a retired NYPD detective, now working as a private investigator. When he’s approached by a wealthy drug dealer (Dan Stevens), he’s hired for a complex case. The dealer’s wife was kidnapped, and despite the requested ransom being paid, she was still brutally murdered. He wants her killers found and brought to justice. As Scudder investigates the grisly killing, he sinks into New York’s criminal underworld, soon encountering Ray (David Harbour), a sadistic criminal.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/Walk-Among-Tombstones-Liam-Neeson/dp/B00QHMEDLC" target="_blank" rel="nofollow"><em><strong>"A Walk Among the Tombstones" on Prime Video</strong></em></a><em><strong> now</strong></em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eM76lO"></div>                            </div>                            <script src="https://kwizly.com/embed/eM76lO.js" async></script><h2 id="plane-2023">‘Plane’ (2023)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/M25zXBIUVr0" allowfullscreen></iframe></div></div><p>“Plane” is a no-nonsense thriller that leans into its own predictability. Even the movie’s title is extremely matter-of-fact, and I appreciate it when a film has a self-aware streak. This 2023 action-thriller doesn’t have genre reinvention on its agenda and instead aims to please with Gerard Butler playing a suitably kick-butt action hero and Mike Colter offering strong support. I’m just disappointed the sequel, tentatively titled “Boat,” got canned just a couple of weeks before production was due to begin.</p><p>In “Plane,” Butler plays Brodie Torrance, a pilot forced into an emergency landing when lightning threatens the safety of his plane and passengers. The snag is that the aircraft has touched down in a war-torn region, and the survivors are immediately taken hostage. Torrance has no choice but to team up with an accused murderer, Louis Gaspare (Colter), who was on the airplane in FBI custody. They’re an unlikely team, ready to save the day.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0FP45BB2L" target="_blank" rel="nofollow"><em><strong>"Plane" on Prime Video</strong></em></a><em><strong> now</strong></em></p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-june-2026-top-movies-and-shows-to-stream-this-month#section-new-movies-on-prime-video-in-june-2026">New on Prime Video in June 2026</a></li><li><a href="https://www.tomsguide.com/live/news/prime-day-streaming-deals-and-sales-live-2026">Best Prime Day streaming deals 2026 live</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-heres-the-3-worth-watching-this-week-june-22-28">Prime Video top 10 movies — here’s the 3 worth watching</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/entertainment/prime-video/3-new-to-prime-video-thriller-movies-to-stream-this-week-one-of-them-is-a-classic-masterpiece-ranked-among-the-best-films-ever-made-june-23-29</link>
                                                                            <description>
                            <![CDATA[ I've scoured Prime Video's new arrivals to find a trio of thrillers worth watching this week, including a neo-noir mystery with Liam Neeson. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oY7khmBMw9BwnvRCSZQSvS</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7EZZyGZEXsWAo6kmTF6dAL-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 23 Jun 2026 12:45:26 +0000</pubDate>                                                                                                                                <updated>Tue, 23 Jun 2026 18:49:46 +0000</updated>
                                                                                                                                            <category><![CDATA[Prime Video]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                                                                <author><![CDATA[ rory.mellon@futurenet.com (Rory Mellon) ]]></author>                    <dc:creator><![CDATA[ Rory Mellon ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5Rv6LtQXMj5JB4Eu8Lt4Sn.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/7EZZyGZEXsWAo6kmTF6dAL-1280-80.jpg">
                                                            <media:credit><![CDATA[Prime Video; Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Prime Video logo ]]></media:description>                                                            <media:text><![CDATA[Prime Video logo ]]></media:text>
                                <media:title type="plain"><![CDATA[Prime Video logo ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7EZZyGZEXsWAo6kmTF6dAL-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’m always on the hunt for thriller movies across the <a href="https://www.tomsguide.com/us/best-streaming-video-services,review-2625.html">best streaming services</a>, including Prime Video. I consider the genre a personal favorite, and it’s clear I’m not alone in my love of any movie packed with action, suspense, excitement, tension, and maybe a good twist or two. </p><p>Prime Video clearly understands that many of its subscribers demand good thriller movies, so it regularly adds new options to its content library. Case in point, the <a href="https://www.youtube.com/watch?v=TEN-2uTi2c0">Prime Video June 2026 slate</a> is packed with thrillers. To save you the hassle of browsing the dozens of recent arrivals yourself, I’ve combed through the slate and found three thrillers to watch this week.</p><p>My latest picks include movies fronted by two of the genre’s most popular stars, Liam Neeson and Gerard Butler, as well as a certified Hollywood classic. The latter may be more of a legal drama, but I guarantee you’ll find it engrossing and deeply compelling. These are the three new to Prime Video thriller movies to add to your streaming watchlist this week.</p><div class="product"><a data-dimension112="58e2e683-44e5-4db7-9bf2-adc4aa644831" data-action="Deal Block" data-label="Prime Video add-on subscriptions: deals from $1/month @ Amazon" data-dimension48="Prime Video add-on subscriptions: deals from $1/month @ Amazon" href="https://www.amazon.com/gp/video/storefront" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2048px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ndGtwi34pjSnVsVuuKMjEV" name="prime-video-logo-2025" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ndGtwi34pjSnVsVuuKMjEV.png" mos="" align="middle" fullscreen="" width="2048" height="2048" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Prime Video add-on subscriptions: </strong><a href="https://www.amazon.com/gp/video/addons" target="_blank" rel="nofollow" data-dimension112="58e2e683-44e5-4db7-9bf2-adc4aa644831" data-action="Deal Block" data-label="Prime Video add-on subscriptions: deals from $1/month @ Amazon" data-dimension48="Prime Video add-on subscriptions: deals from $1/month @ Amazon" data-dimension25=""><strong>deals from $1/month @ Amazon</strong></a> <br>Prime Day streaming deals<a href="https://www.tomsguide.com/entertainment/prime-video/i-found-the-3-prime-video-black-friday-deals-worth-your-hard-earned-cash"> </a>are officially live, letting you stream more but spend less. Whether you’re looking to bundle multiple channels or grab a standalone add-on subscription, there’s something for everyone, including Starz, Apple TV and MGM+. With over 20 options available, you can enjoy blockbuster movies, hit shows, and exclusive content for a fraction of the usual price. <a class="view-deal button" href="https://www.amazon.com/gp/video/storefront" target="_blank" rel="nofollow" data-dimension112="58e2e683-44e5-4db7-9bf2-adc4aa644831" data-action="Deal Block" data-label="Prime Video add-on subscriptions: deals from $1/month @ Amazon" data-dimension48="Prime Video add-on subscriptions: deals from $1/month @ Amazon" data-dimension25="">View Deal</a></p></div><h2 id="12-angry-men-1957">‘12 Angry Men’ (1957)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/TEN-2uTi2c0" allowfullscreen></iframe></div></div><p>I’m slightly stretching the definition of a thriller to include this one, but then again, “12 Angry Men” is just as electrifying and compelling as anything else I’ve watched in the thriller genre. It’s a masterclass in screenwriting, with one of cinema’s greatest-ever scripts. It’s no slouch in other crucial departments either. Sidney Lumet’s legal drama is regularly cited as one of the best and most influential movies ever made, and it deserves every ounce of adulation it's received over the decades. </p><p>Set in the sweltering heat of a New York City courthouse during the sticky summer season, 12 jurors convene to determine the guilt of a young boy accused of murdering his father. The men might not be the ones on trial, but as their discussion unfolds, each one’s character is thoroughly examined. Initially, 11 of the jurors believe the boy is guilty without question, and it’s up to Henry Fonda’s Juror No. 8 to present the alternative case.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0BRHJCCH2" target="_blank" rel="nofollow"><em><strong>"12 Angry Men" on Prime Video</strong></em></a><em><strong> now</strong></em></p><h2 id="a-walk-among-the-tombstones-2014">'A Walk Among the Tombstones' (2014)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/aTKBowDjMQg" allowfullscreen></iframe></div></div><p>Liam Neeson-fronted action-thrillers are a comfort watch to me. Yes, it’s a little odd to consider movies filled with violence, criminals, and usually a gruff protagonist comforting, but Neeson had made a name for himself in the genre by bringing predictable (but usually enjoyable) thrills to the table. In fact, “A Walk Among the Tombstones” is one of Neeson’s better action-thrillers, giving Neeson a role with a little more meat on the bone. </p><p>Matt Scudder (Neeson) is a retired NYPD detective, now working as a private investigator. When he’s approached by a wealthy drug dealer (Dan Stevens), he’s hired for a complex case. The dealer’s wife was kidnapped, and despite the requested ransom being paid, she was still brutally murdered. He wants her killers found and brought to justice. As Scudder investigates the grisly killing, he sinks into New York’s criminal underworld, soon encountering Ray (David Harbour), a sadistic criminal.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/Walk-Among-Tombstones-Liam-Neeson/dp/B00QHMEDLC" target="_blank" rel="nofollow"><em><strong>"A Walk Among the Tombstones" on Prime Video</strong></em></a><em><strong> now</strong></em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eM76lO"></div>                            </div>                            <script src="https://kwizly.com/embed/eM76lO.js" async></script><h2 id="plane-2023">‘Plane’ (2023)</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/M25zXBIUVr0" allowfullscreen></iframe></div></div><p>“Plane” is a no-nonsense thriller that leans into its own predictability. Even the movie’s title is extremely matter-of-fact, and I appreciate it when a film has a self-aware streak. This 2023 action-thriller doesn’t have genre reinvention on its agenda and instead aims to please with Gerard Butler playing a suitably kick-butt action hero and Mike Colter offering strong support. I’m just disappointed the sequel, tentatively titled “Boat,” got canned just a couple of weeks before production was due to begin.</p><p>In “Plane,” Butler plays Brodie Torrance, a pilot forced into an emergency landing when lightning threatens the safety of his plane and passengers. The snag is that the aircraft has touched down in a war-torn region, and the survivors are immediately taken hostage. Torrance has no choice but to team up with an accused murderer, Louis Gaspare (Colter), who was on the airplane in FBI custody. They’re an unlikely team, ready to save the day.</p><p><em><strong>Watch </strong></em><a href="https://www.amazon.com/gp/video/detail/B0FP45BB2L" target="_blank" rel="nofollow"><em><strong>"Plane" on Prime Video</strong></em></a><em><strong> now</strong></em></p><figure class="inline-layout"><div style="min-height: 400px;"><fw-embed-feed channel="toms_guide" playlist="gdR2W4" mode="row" player_placement="bottom-right"></fw-embed-feed></div></figure><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/entertainment/prime-video/new-on-prime-video-in-june-2026-top-movies-and-shows-to-stream-this-month#section-new-movies-on-prime-video-in-june-2026">New on Prime Video in June 2026</a></li><li><a href="https://www.tomsguide.com/live/news/prime-day-streaming-deals-and-sales-live-2026">Best Prime Day streaming deals 2026 live</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/prime-video-top-10-movies-heres-the-3-worth-watching-this-week-june-22-28">Prime Video top 10 movies — here’s the 3 worth watching</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I asked ChatGPT to help me score big on Prime Day — these 5 money-saving tips are better than I expected ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Amazon Prime Day prep has become an annual tradition for me.</p><p>Every year, I spend the weekend before the big sale scouting early discounts and building a wish list of items I hope to snag at the lowest possible prices. Over the years, Prime Day has helped me amass a sizable collection of video games, anime Blu-rays and Marvel and DC graphic novels — and this year is no different.</p><p>But this time, I decided to bring ChatGPT along for the hunt.</p><p>With AI tools becoming increasingly useful for shopping and research, I wanted to see whether ChatGPT could uncover deals I might have overlooked or point me toward products I didn't even know were on sale.</p><p>The results surprised me. Not only did the chatbot offer practical strategies for finding the best Prime Day bargains, but it also surfaced several deeply discounted items that made their way into my shopping cart almost immediately.</p><h2 id="prepping-for-prime-day-sales-with-this-essential-advice">Prepping for Prime Day sales with this essential advice</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zVXmup3WZAZQTPVh9GeTK7" name="Prime Day 2026" alt="Prime Day 2026 ad" src="https://cdn.mos.cms.futurecdn.net/zVXmup3WZAZQTPVh9GeTK7.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p>To get this money-saving mission underway, I presented this prompt to ChatGPT to see how it could assist me:</p><p>“I'm into video games, anime on Blu-ray, and graphic novels from Marvel Comics & DC Comics. What are the best ways to prepare for Amazon Prime Day and find the best sales for those types of items during that sale period?”</p><p>The chatbot initially responded with a piece of advice that set me up nicely: <em>For the categories you're interested in—video games, anime Blu-rays, and Marvel/DC graphic novels—Prime Day rewards preparation more than impulse buying. The biggest savings often go to people who build watchlists weeks in advance and know the "normal" prices before the sale starts.</em></p><p>After taking note of its suggestion to build a watchlist of all the items I’m looking to buy before and during Amazon Prime Day, I also jotted down ChatGPT’s five tips on how to locate the best prices imaginable:</p><ul><li><strong>Track Historical Prices: </strong><em>One of the biggest Prime Day mistakes is assuming every "deal" is actually a deal. Use sites/tools like camelcamelcamel and Keepa. These tools show Amazon price history.</em></li><li><strong>Follow Deal Communities: </strong><em>Prime Day moves fast, and some of the best deals disappear within minutes. Stay updated on them by following sources such as Wario64 on X, Cheap A** Gamer, Slickdeals and IGN Deals. For your interests specifically, these sources are often faster than Amazon's own deal pages.</em></li><li><strong>Set a Budget by Category: </strong><em>A collector's trap is buying too many "good deals." Try something like a $150 budget for video games, a $100 budget for anime Blu-rays, and an $80 budget for graphic novels, for example. Then rank your purchases for each category under must-have, nice-to-have and only-if-heavily-discounted. This prevents regret purchases.</em></li><li><strong>Focus on the First 12 Hours: </strong><em>The strongest deals are often midnight launch deals, Lightning Deals and limited inventory offers. If there's a specific omnibus, collector's edition or anime box set you've been waiting for, check as soon as Prime Day starts.</em></li><li><strong>Set Up Prime Day Alerts Through Alexa:</strong><em><strong> </strong></em><em>Alexa can notify you about discounts on items in your Wish List, Cart or Buy Later collection up to 24 hours in advance or track target prices for specific products. Open the Alexa app, go to More, select Settings, tap on Notifications, proceed to Amazon Shopping and turn on Deal Recommendations.</em></li></ul><h2 id="putting-those-tips-into-action">Putting those tips into action</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cnCyefvhMdEkyVQQttapdM" name="Prime Day deals" alt="Smartphone displaying Prime Day on its screen with $100 dollar bills as the backdrop" src="https://cdn.mos.cms.futurecdn.net/cnCyefvhMdEkyVQQttapdM.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>With all of those money-saving tips in the back of my mind, my search for the best Amazon Prime Day sales I could find became a much more streamlined process. Plus, I came upon a bunch of amazing deals that went live before the Amazon Prime Day madness officially kicked in:</p><ul><li><strong>Borderlands 4 - PS5: </strong><a href="https://www.amazon.com/Borderlands-4-PlayStation-5/dp/B0FDBL8L41/ref=sr_1_1?crid=2U5DYAQLRFVTI&dib=eyJ2IjoiMSJ9.xL7GGcMGJfKE784YOTdwtq-2BF4oXgNVriZ6lb79Qp4urCQbxB3QP1PBNUXeQ6EV6xuuwg9RLWkzlXWtp5LW9uHHUIVFTwjTFwmfiqrBwM-hl6cZYQsnw7zt4HPThDflruzfdO52TzT7ZQDqUGmuSAVQCp_J9kH2MI4_kyEht-xVuTPD4x2i5NzOiX8X8VJr_Il383mT5LvaA5H0PNbQazoP1bom0BCRWfyIIsI6lAo.birlPKUKaEctabctKHyQcdY17j1eSpdvmRitWmbmTrk&dib_tag=se&keywords=borderlands%2B4%2Bxbox%2Bseries%2Bx&qid=1782152292&sprefix=borderlands%2B4%2Bxbox%2Caps%2C131&sr=8-1&th=1" target="_blank" rel="nofollow">was $49.99 now $34.99</a></li><li><strong>Cyberpunk 2077: Ultimate Edition - Nintendo Switch 2: </strong><a href="https://www.amazon.com/Cyberpunk-2077-Nintendo-Switch-2/dp/B0F64Q8C97/ref=sr_1_1?crid=2BV7BPXGOTV6&dib=eyJ2IjoiMSJ9.AyV7ji6BuhWYp6ObHXbI8vmSmWkhg5GmqB7Lgu4hgy8Ma7R-C_4QTdoj1nvcTwwBskG4_Hjr5GruMGufg_s7DdOZid4fi55wmdPE52T3H2RC__R_1wTCxIaLHdLrVQVAD-JGO038l8bxCbjaw7jxy-K6QxBvNMDjGplg2RbZ8Q6eUqjJk1eT66oKHR5XxZlEFO5ZAh4Ms0Lb9Qs7GYGbWqS4Nj8QGLf67Dcx1WUPd-0.6g0GnTR3rmXe87thxnUXd4zMKb4zbYnIhc96N2cIEwY&dib_tag=se&keywords=cyberpunk%2B2077%2Bswitch%2B2&qid=1782152381&sprefix=cyberpunk%2B2077%2Caps%2C132&sr=8-1&th=1" target="_blank" rel="nofollow">was $69.99 now $57.99</a></li><li><strong>Akira - 4K & Blu-ray [4K UHD]: </strong><a href="https://www.amazon.com/Akira-Movie-4K-UHD/dp/B09JXWP8N1/ref=sr_1_1?crid=1ST3TR27THSG9&dib=eyJ2IjoiMSJ9.nfCSjcRtAJfhMeZpBGGrf9BCbZaqdHTLVUq0qLT-_BSOShYURIKZ6VZVNp0C8utVL3TrDU7onWVFAZrUXUORp3pepMQQgDK-o0BpytmHkUqpEhqRfApnxGLv5SJBfQLVxHSlwgWO5OcV3mBxaLwdIY8GRlzjdtrj4YK8k4DhvJkX1pzqj2fJv8Xs-rKoBWHt_49M77UMFR_MQw2XdI6zZpuZRhwUBfjlLypsQf4VwjQ.n38LspVgED7RNjahB3WQiaZ5O32Apz6e8RBJNKs0bZs&dib_tag=se&keywords=akira+4k&qid=1782143562&sprefix=akira%2Caps%2C124&sr=8-1" target="_blank" rel="nofollow">was $29.98 now $11.99</a></li><li><strong>Bayonetta [Blu-ray & DVD]: </strong><a href="https://www.amazon.com/Bayonetta-Bloody-Anime-Movie-Blu-ray/dp/B00LXGL7EI/ref=sr_1_1?crid=HGT04EGDGXS7&dib=eyJ2IjoiMSJ9.1qh0EDqYEHvdF2PwMb2QuEaaxjWgfF1cwxnBNhAhy_3ChJsemo2fXZSEa2kxBc-H-iXi2RVr0ubD8YnmXiJ7Wg.XQbgs_Pky5cr0bp5nMks8XVFkWFkIyJoXWmTM-TtA9M&dib_tag=se&keywords=bayonetta+blu+ray&qid=1782152096&sprefix=%2Caps%2C93&sr=8-1" target="_blank" rel="nofollow">was $19.98 now $12.82</a></li><li><strong>Samurai 7: The Complete Series [Blu-ray]: </strong><a href="https://www.amazon.com/Samurai-Complete-Blu-ray-Colleen-Clinkenbeard/dp/B07KLFLYHM/ref=sr_1_1?crid=2TJXDMABF5UTS&dib=eyJ2IjoiMSJ9.nqalIS7-3HeH4Nov8Z-xKRjzpWkTTzYqLy631mECvSBTYuXNl99gF2BI0cicxuUWnUqk5Yw5NJPIO3_BcJ9lvO83LbRVnVkDIi-764YWvCMzCE3ENVqLs28NNkkK3KCeZ8r6znQRMJ-HlbuSKvO-4TFJTr86aSAgFmiiB5oKTAGtmTaNQ4pwm4jQhd_84x_IKvMpbcxZ8LJuP-JGAMCgNua8-l1ALgcVuM6PDPScUvQ.JNey3ibKztwngE7Aitqv4KQk4JdvYhUSEjODcNPdhfw&dib_tag=se&keywords=samurai+7+complete+series&qid=1782152171&sprefix=samurai+7+the+c%2Caps%2C128&sr=8-1" target="_blank" rel="nofollow">was $49.98 now $34.99</a></li><li><strong>Daredevil: Born Again [Marvel Premier Collection]: </strong><a href="https://www.amazon.com/Daredevil-Again-Marvel-Premier-Collection/dp/1302965980/ref=sr_1_1?crid=3GXSUQWA8ND72&dib=eyJ2IjoiMSJ9.ee0FPTGjFEJ3Xyx-mGj6B-xWrDbYdnLzXxm4qYYFPbWs_s5MNDsdURg_2p7Wz3wCq3-UWbGDbLYuE4OxgJkXNwr2vvK97-5z3asT2xb5jfdlW7nzVvTdLXv5ek2SmmCen_xu3WcDgjKup0zZgwkpMyuYUVZWowqLqc7BHg0oCLAwLX32zRyv9Sg2VcmdEvTKwAgG2ultWx3R6xW-jd89UwkNpLe-KcjYf12D2zlH2sA.ksb0PWDUZBIOc325h2AzycZkFf9OtvLzamDEXlAML3I&dib_tag=se&keywords=daredevil+born+again+marvel+premier+collection&qid=1782152477&sprefix=daredevil+born+again+marvel+pr%2Caps%2C140&sr=8-1" target="_blank" rel="nofollow">was $14.99 now $11.27</a><strong> </strong>(with Amazon Prime)</li><li><strong>Wolverine: Old Man Logan [Marvel Premier Collection]: </strong><a href="https://www.amazon.com/Wolverine-Logan-Marvel-Premier-Collection/dp/1302965581/ref=sr_1_1?crid=398PJ7O9Y2Q38&dib=eyJ2IjoiMSJ9.AeMXqtqAxZQNqDeGIhaKeWE-CMZVcJE97kmh_PfVWyw4x9KVBcyFah1KWO2MVpgtZ4JQvfqhks9cHFyT-zmjMzzXsdpoIsP9aa9N8n8YMUAA0L8_ec6YC64wWZU7VXFSkfjs6MrrQBgvlTqTYsXHnUf47rzWH6qvtGE0CiiwbQxFxryXfHGelDeSKdnBzStt2ePuVHRUqzdcpxZhonuLiqGs6rFNGyEdqvUXHGICPsM.N40GQ9dkmAr8T0ZkElHJ3rLrn73q-5pHe5eSEMoJW_A&dib_tag=se&keywords=wolverine+old+man+logan+marvel+premier+collection&qid=1782152559&sprefix=wolverine+old+man+logan+marvel+premier+collection%2Caps%2C109&sr=8-1" target="_blank" rel="nofollow">was $14.99 now $12.82</a><strong> </strong>(with Amazon Prime)</li></ul><h2 id="the-takeaway-3">The takeaway</h2><p>Patience isn’t one of my best traits—the act of impulse buying has a hold over me that’s just too hard to ignore. </p><p>But for this year’s Amazon Prime Day routine, I didn’t rush to buy everything I saw for sale, kept ChatGPT’s money-saving advice close to mind and followed every step it laid out to discover the best deals imaginable. </p><p>That plan worked to perfection and made two video games, three anime Blu-rays and graphic novels a part of my growing collection of physical goods I’ll be cherishing forever.</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/that-viral-jeff-bezos-quote-about-ai-and-water-isnt-real-heres-what-actually-happened" target="_blank">That viral Jeff Bezos quote about AI and water isn't real — here's what actually happened</a></li><li><a href="https://www.tomsguide.com/ai/tiktoks-ai-slop-problem-is-spiraling-out-of-control-and-kids-are-getting-the-worst-of-it" target="_blank">TikTok’s AI slop problem is spiraling out of control — and kids are getting the worst of it</a></li><li><a href="https://www.tomsguide.com/ai/i-used-chatgpt-to-discover-my-hidden-strengths-and-it-changed-my-perspective-on-work" target="_blank">I used ChatGPT to discover my hidden strengths — and it changed my perspective on work</a></li></ul><div data-widget-type="comparison" data-model-name="Samsung Galaxy S26"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/i-asked-chatgpt-to-help-me-score-big-on-prime-day-these-5-money-saving-tips-are-better-than-i-expected</link>
                                                                            <description>
                            <![CDATA[ I asked ChatGPT to help me discover the best ways to find the best Prime Day deals — and it gave me a bunch of useful money-saving tips. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3CrBQDnoCzQSEiWQvCzgra</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/CazrfECG9STYnXWWdabvjd-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 23 Jun 2026 06:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[AI]]></category>
                                                                                                                    <dc:creator><![CDATA[ Elton Jones ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/NVtYYXr3tEPUE67jf3HtXM.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/CazrfECG9STYnXWWdabvjd-1280-80.jpg">
                                                            <media:credit><![CDATA[Amazon]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amazon Prime Day stock image]]></media:description>                                                            <media:text><![CDATA[Amazon Prime Day stock image]]></media:text>
                                <media:title type="plain"><![CDATA[Amazon Prime Day stock image]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/CazrfECG9STYnXWWdabvjd-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Amazon Prime Day prep has become an annual tradition for me.</p><p>Every year, I spend the weekend before the big sale scouting early discounts and building a wish list of items I hope to snag at the lowest possible prices. Over the years, Prime Day has helped me amass a sizable collection of video games, anime Blu-rays and Marvel and DC graphic novels — and this year is no different.</p><p>But this time, I decided to bring ChatGPT along for the hunt.</p><p>With AI tools becoming increasingly useful for shopping and research, I wanted to see whether ChatGPT could uncover deals I might have overlooked or point me toward products I didn't even know were on sale.</p><p>The results surprised me. Not only did the chatbot offer practical strategies for finding the best Prime Day bargains, but it also surfaced several deeply discounted items that made their way into my shopping cart almost immediately.</p><h2 id="prepping-for-prime-day-sales-with-this-essential-advice">Prepping for Prime Day sales with this essential advice</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zVXmup3WZAZQTPVh9GeTK7" name="Prime Day 2026" alt="Prime Day 2026 ad" src="https://cdn.mos.cms.futurecdn.net/zVXmup3WZAZQTPVh9GeTK7.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p>To get this money-saving mission underway, I presented this prompt to ChatGPT to see how it could assist me:</p><p>“I'm into video games, anime on Blu-ray, and graphic novels from Marvel Comics & DC Comics. What are the best ways to prepare for Amazon Prime Day and find the best sales for those types of items during that sale period?”</p><p>The chatbot initially responded with a piece of advice that set me up nicely: <em>For the categories you're interested in—video games, anime Blu-rays, and Marvel/DC graphic novels—Prime Day rewards preparation more than impulse buying. The biggest savings often go to people who build watchlists weeks in advance and know the "normal" prices before the sale starts.</em></p><p>After taking note of its suggestion to build a watchlist of all the items I’m looking to buy before and during Amazon Prime Day, I also jotted down ChatGPT’s five tips on how to locate the best prices imaginable:</p><ul><li><strong>Track Historical Prices: </strong><em>One of the biggest Prime Day mistakes is assuming every "deal" is actually a deal. Use sites/tools like camelcamelcamel and Keepa. These tools show Amazon price history.</em></li><li><strong>Follow Deal Communities: </strong><em>Prime Day moves fast, and some of the best deals disappear within minutes. Stay updated on them by following sources such as Wario64 on X, Cheap A** Gamer, Slickdeals and IGN Deals. For your interests specifically, these sources are often faster than Amazon's own deal pages.</em></li><li><strong>Set a Budget by Category: </strong><em>A collector's trap is buying too many "good deals." Try something like a $150 budget for video games, a $100 budget for anime Blu-rays, and an $80 budget for graphic novels, for example. Then rank your purchases for each category under must-have, nice-to-have and only-if-heavily-discounted. This prevents regret purchases.</em></li><li><strong>Focus on the First 12 Hours: </strong><em>The strongest deals are often midnight launch deals, Lightning Deals and limited inventory offers. If there's a specific omnibus, collector's edition or anime box set you've been waiting for, check as soon as Prime Day starts.</em></li><li><strong>Set Up Prime Day Alerts Through Alexa:</strong><em><strong> </strong></em><em>Alexa can notify you about discounts on items in your Wish List, Cart or Buy Later collection up to 24 hours in advance or track target prices for specific products. Open the Alexa app, go to More, select Settings, tap on Notifications, proceed to Amazon Shopping and turn on Deal Recommendations.</em></li></ul><h2 id="putting-those-tips-into-action">Putting those tips into action</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cnCyefvhMdEkyVQQttapdM" name="Prime Day deals" alt="Smartphone displaying Prime Day on its screen with $100 dollar bills as the backdrop" src="https://cdn.mos.cms.futurecdn.net/cnCyefvhMdEkyVQQttapdM.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>With all of those money-saving tips in the back of my mind, my search for the best Amazon Prime Day sales I could find became a much more streamlined process. Plus, I came upon a bunch of amazing deals that went live before the Amazon Prime Day madness officially kicked in:</p><ul><li><strong>Borderlands 4 - PS5: </strong><a href="https://www.amazon.com/Borderlands-4-PlayStation-5/dp/B0FDBL8L41/ref=sr_1_1?crid=2U5DYAQLRFVTI&dib=eyJ2IjoiMSJ9.xL7GGcMGJfKE784YOTdwtq-2BF4oXgNVriZ6lb79Qp4urCQbxB3QP1PBNUXeQ6EV6xuuwg9RLWkzlXWtp5LW9uHHUIVFTwjTFwmfiqrBwM-hl6cZYQsnw7zt4HPThDflruzfdO52TzT7ZQDqUGmuSAVQCp_J9kH2MI4_kyEht-xVuTPD4x2i5NzOiX8X8VJr_Il383mT5LvaA5H0PNbQazoP1bom0BCRWfyIIsI6lAo.birlPKUKaEctabctKHyQcdY17j1eSpdvmRitWmbmTrk&dib_tag=se&keywords=borderlands%2B4%2Bxbox%2Bseries%2Bx&qid=1782152292&sprefix=borderlands%2B4%2Bxbox%2Caps%2C131&sr=8-1&th=1" target="_blank" rel="nofollow">was $49.99 now $34.99</a></li><li><strong>Cyberpunk 2077: Ultimate Edition - Nintendo Switch 2: </strong><a href="https://www.amazon.com/Cyberpunk-2077-Nintendo-Switch-2/dp/B0F64Q8C97/ref=sr_1_1?crid=2BV7BPXGOTV6&dib=eyJ2IjoiMSJ9.AyV7ji6BuhWYp6ObHXbI8vmSmWkhg5GmqB7Lgu4hgy8Ma7R-C_4QTdoj1nvcTwwBskG4_Hjr5GruMGufg_s7DdOZid4fi55wmdPE52T3H2RC__R_1wTCxIaLHdLrVQVAD-JGO038l8bxCbjaw7jxy-K6QxBvNMDjGplg2RbZ8Q6eUqjJk1eT66oKHR5XxZlEFO5ZAh4Ms0Lb9Qs7GYGbWqS4Nj8QGLf67Dcx1WUPd-0.6g0GnTR3rmXe87thxnUXd4zMKb4zbYnIhc96N2cIEwY&dib_tag=se&keywords=cyberpunk%2B2077%2Bswitch%2B2&qid=1782152381&sprefix=cyberpunk%2B2077%2Caps%2C132&sr=8-1&th=1" target="_blank" rel="nofollow">was $69.99 now $57.99</a></li><li><strong>Akira - 4K & Blu-ray [4K UHD]: </strong><a href="https://www.amazon.com/Akira-Movie-4K-UHD/dp/B09JXWP8N1/ref=sr_1_1?crid=1ST3TR27THSG9&dib=eyJ2IjoiMSJ9.nfCSjcRtAJfhMeZpBGGrf9BCbZaqdHTLVUq0qLT-_BSOShYURIKZ6VZVNp0C8utVL3TrDU7onWVFAZrUXUORp3pepMQQgDK-o0BpytmHkUqpEhqRfApnxGLv5SJBfQLVxHSlwgWO5OcV3mBxaLwdIY8GRlzjdtrj4YK8k4DhvJkX1pzqj2fJv8Xs-rKoBWHt_49M77UMFR_MQw2XdI6zZpuZRhwUBfjlLypsQf4VwjQ.n38LspVgED7RNjahB3WQiaZ5O32Apz6e8RBJNKs0bZs&dib_tag=se&keywords=akira+4k&qid=1782143562&sprefix=akira%2Caps%2C124&sr=8-1" target="_blank" rel="nofollow">was $29.98 now $11.99</a></li><li><strong>Bayonetta [Blu-ray & DVD]: </strong><a href="https://www.amazon.com/Bayonetta-Bloody-Anime-Movie-Blu-ray/dp/B00LXGL7EI/ref=sr_1_1?crid=HGT04EGDGXS7&dib=eyJ2IjoiMSJ9.1qh0EDqYEHvdF2PwMb2QuEaaxjWgfF1cwxnBNhAhy_3ChJsemo2fXZSEa2kxBc-H-iXi2RVr0ubD8YnmXiJ7Wg.XQbgs_Pky5cr0bp5nMks8XVFkWFkIyJoXWmTM-TtA9M&dib_tag=se&keywords=bayonetta+blu+ray&qid=1782152096&sprefix=%2Caps%2C93&sr=8-1" target="_blank" rel="nofollow">was $19.98 now $12.82</a></li><li><strong>Samurai 7: The Complete Series [Blu-ray]: </strong><a href="https://www.amazon.com/Samurai-Complete-Blu-ray-Colleen-Clinkenbeard/dp/B07KLFLYHM/ref=sr_1_1?crid=2TJXDMABF5UTS&dib=eyJ2IjoiMSJ9.nqalIS7-3HeH4Nov8Z-xKRjzpWkTTzYqLy631mECvSBTYuXNl99gF2BI0cicxuUWnUqk5Yw5NJPIO3_BcJ9lvO83LbRVnVkDIi-764YWvCMzCE3ENVqLs28NNkkK3KCeZ8r6znQRMJ-HlbuSKvO-4TFJTr86aSAgFmiiB5oKTAGtmTaNQ4pwm4jQhd_84x_IKvMpbcxZ8LJuP-JGAMCgNua8-l1ALgcVuM6PDPScUvQ.JNey3ibKztwngE7Aitqv4KQk4JdvYhUSEjODcNPdhfw&dib_tag=se&keywords=samurai+7+complete+series&qid=1782152171&sprefix=samurai+7+the+c%2Caps%2C128&sr=8-1" target="_blank" rel="nofollow">was $49.98 now $34.99</a></li><li><strong>Daredevil: Born Again [Marvel Premier Collection]: </strong><a href="https://www.amazon.com/Daredevil-Again-Marvel-Premier-Collection/dp/1302965980/ref=sr_1_1?crid=3GXSUQWA8ND72&dib=eyJ2IjoiMSJ9.ee0FPTGjFEJ3Xyx-mGj6B-xWrDbYdnLzXxm4qYYFPbWs_s5MNDsdURg_2p7Wz3wCq3-UWbGDbLYuE4OxgJkXNwr2vvK97-5z3asT2xb5jfdlW7nzVvTdLXv5ek2SmmCen_xu3WcDgjKup0zZgwkpMyuYUVZWowqLqc7BHg0oCLAwLX32zRyv9Sg2VcmdEvTKwAgG2ultWx3R6xW-jd89UwkNpLe-KcjYf12D2zlH2sA.ksb0PWDUZBIOc325h2AzycZkFf9OtvLzamDEXlAML3I&dib_tag=se&keywords=daredevil+born+again+marvel+premier+collection&qid=1782152477&sprefix=daredevil+born+again+marvel+pr%2Caps%2C140&sr=8-1" target="_blank" rel="nofollow">was $14.99 now $11.27</a><strong> </strong>(with Amazon Prime)</li><li><strong>Wolverine: Old Man Logan [Marvel Premier Collection]: </strong><a href="https://www.amazon.com/Wolverine-Logan-Marvel-Premier-Collection/dp/1302965581/ref=sr_1_1?crid=398PJ7O9Y2Q38&dib=eyJ2IjoiMSJ9.AeMXqtqAxZQNqDeGIhaKeWE-CMZVcJE97kmh_PfVWyw4x9KVBcyFah1KWO2MVpgtZ4JQvfqhks9cHFyT-zmjMzzXsdpoIsP9aa9N8n8YMUAA0L8_ec6YC64wWZU7VXFSkfjs6MrrQBgvlTqTYsXHnUf47rzWH6qvtGE0CiiwbQxFxryXfHGelDeSKdnBzStt2ePuVHRUqzdcpxZhonuLiqGs6rFNGyEdqvUXHGICPsM.N40GQ9dkmAr8T0ZkElHJ3rLrn73q-5pHe5eSEMoJW_A&dib_tag=se&keywords=wolverine+old+man+logan+marvel+premier+collection&qid=1782152559&sprefix=wolverine+old+man+logan+marvel+premier+collection%2Caps%2C109&sr=8-1" target="_blank" rel="nofollow">was $14.99 now $12.82</a><strong> </strong>(with Amazon Prime)</li></ul><h2 id="the-takeaway-3">The takeaway</h2><p>Patience isn’t one of my best traits—the act of impulse buying has a hold over me that’s just too hard to ignore. </p><p>But for this year’s Amazon Prime Day routine, I didn’t rush to buy everything I saw for sale, kept ChatGPT’s money-saving advice close to mind and followed every step it laid out to discover the best deals imaginable. </p><p>That plan worked to perfection and made two video games, three anime Blu-rays and graphic novels a part of my growing collection of physical goods I’ll be cherishing forever.</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/that-viral-jeff-bezos-quote-about-ai-and-water-isnt-real-heres-what-actually-happened" target="_blank">That viral Jeff Bezos quote about AI and water isn't real — here's what actually happened</a></li><li><a href="https://www.tomsguide.com/ai/tiktoks-ai-slop-problem-is-spiraling-out-of-control-and-kids-are-getting-the-worst-of-it" target="_blank">TikTok’s AI slop problem is spiraling out of control — and kids are getting the worst of it</a></li><li><a href="https://www.tomsguide.com/ai/i-used-chatgpt-to-discover-my-hidden-strengths-and-it-changed-my-perspective-on-work" target="_blank">I used ChatGPT to discover my hidden strengths — and it changed my perspective on work</a></li></ul><div data-widget-type="comparison" data-model-name="Samsung Galaxy S26"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ That viral Jeff Bezos quote about AI and water isn't real — here's what actually happened ]]></title>
                                                                                                <dc:content><![CDATA[ <p>A viral quote attributed to Jeff Bezos has <a href="https://www.instagram.com/p/DZu8trmR89Y/?utm_source=ig_web_copy_link&igsh=NTc4MTIwNjQ2YQ==" target="_blank">been spreading across social media</a>, sparking outrage among people already worried about the environmental impact of artificial intelligence.</p><p>The quote claimed that water should be prioritized for AI systems over human needs and appeared to suggest that future AI infrastructure was more important than the people affected by it.</p><p>It was shocking, not to mention dystopian. And it was exactly the kind of thing critics fear tech billionaires might actually believe. But here's the kicker: <strong>Jeff Bezos never said it.</strong></p><p>A fact-check by <a href="https://www.thequint.com/news/webqoof/amazon-jeff-bezos-water-consumption-ai-human-needs-fact-check" target="_blank">The Quint</a> found that the viral quote was fabricated and does not appear in footage from Bezos' appearance at VivaTech 2026 in Paris. Despite that, the claim spread widely across social media.</p><h2 id="what-bezos-actually-said">What Bezos actually said</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/ho_ZmwgvDdM" allowfullscreen></iframe></div></div><ul><li><strong>Blue Origin's long-term vision</strong> — Bezos focused heavily on his space company, discussing rockets, lunar missions, and plans for sustained human activity beyond Earth.</li><li><strong>A 'Moon-first' strategy</strong> — He described the Moon as the next major step for exploration and development before larger ambitions deeper into the solar system.</li><li><strong>Space-based industry</strong> — Bezos argued that heavy industry and polluting manufacturing could eventually be moved off Earth and into space.</li><li><strong>Protecting Earth</strong> — He described Earth as a unique "garden planet" and suggested that using space resources, including materials from asteroids, could help preserve the environment.</li><li><strong>Advanced computing and innovation</strong> — He discussed how breakthroughs in computing, manufacturing, and automation could enable future space development.</li><li><strong>Artificial General Intelligence (AGI)</strong> — Bezos referenced efforts to develop more capable AI systems that could accelerate scientific discovery, innovation, and manufacturing.</li><li><strong>AI and jobs</strong> — He acknowledged concerns about AI replacing workers but argued that technological revolutions historically create new kinds of jobs and opportunities rather than eliminating work entirely.</li><li><strong>Responsible AI development</strong> — Bezos said AI should be treated as a powerful tool, with efforts focused on preventing harmful uses while still allowing innovation to continue.</li></ul><p>The fake quote appears to have spread following comments Bezos made about artificial intelligence during VivaTech 2026. Yet,  <strong>No comments about prioritizing AI over humans was ever made.</strong> At no point in the session did Bezos say that water, energy, or other resources should be diverted from people to AI systems.</p><p>During the event, Bezos discussed AI's potential impact on the workforce and argued that artificial intelligence could ultimately <a href="https://www.tomsguide.com/ai/jeff-bezos-predicts-an-optimistic-future-where-ai-wont-lead-to-mass-unemployment-ai-is-going-to-create-a-labor-shortage">create labor shortages </a>rather than<a href="https://www.tomsguide.com/ai/microsoft-reveals-the-40-jobs-ai-is-most-likely-to-replace-and-40-that-are-safe-for-now"> widespread unemployment</a>. He also addressed concerns about the <a href="https://www.tomsguide.com/ai/i-kept-hearing-that-ai-data-centers-are-draining-towns-dry-so-i-looked-at-the-evidence">resources required to power AI systems, including water consumption</a>.</p><p>His actual comments centered on putting AI water usage into a broader context rather than arguing that AI should take priority over human needs. That's a <a href="https://www.tomsguide.com/ai/this-ai-data-center-will-be-bigger-than-2-000-walmarts-and-dump-23-atom-bombs-worth-of-energy-into-the-environment-every-day-and-locals-are-terrified">position some people may disagree with</a>. But it is very different from claiming that communities should sacrifice access to water so AI data centers can continue expanding. And then, somewhere between those two ideas, a fictional quote was born.</p><h2 id="why-people-believed-it">Why people believed it</h2><p>The most interesting part of this story is that many people immediately accepted the quote to be real. Because the fabricated statement tapped into a growing anxiety surrounding artificial intelligence and the massive infrastructure required to support it, people believed it. </p><p>Companies including Amazon, Google, Microsoft, Meta and OpenAI are <a href="https://www.tomsguide.com/ai/big-tech-is-pouring-usd650-billion-into-ai-and-its-about-to-affect-almost-everything-you-use">investing billions of dollars into new data centers</a>. Those facilities require enormous amounts of electricity and, in many cases, large quantities of water for cooling.</p><p>Communities across the United States and around the world have raised concerns about how these facilities could affect local resources. <a href="https://www.tomsguide.com/ai/erin-brockovich-just-launched-an-ai-data-center-map-and-it-highlights-a-growing-problem-tech-giants-are-avoiding">Environmental groups </a>have also questioned the long-term sustainability of AI's rapid expansion. Against that backdrop, a quote suggesting that a tech billionaire would prioritize AI over people didn't seem impossible to many readers. In other words, the misinformation succeeded because it fit an existing narrative.</p><h2 id="bottom-line-5">Bottom line </h2><p>False information often spreads fastest when it contains just enough truth to feel plausible. AI data centers really do consume water, and communities really are debating whether new facilities should be approved. And tech leaders really are making increasingly bold claims about the future of artificial intelligence. But we all know the dangers of misinformation.</p><p>When a fabricated quote combines realistic elements, it can become difficult to distinguish fact from fiction, especially when it appears in a screenshot that looks authentic.</p><p>Ironically, this story reveals less about Jeff Bezos than it does about public perception of the AI industry. Although the quote itself was fake, the concerns that made it believable are very real.</p><p>As AI infrastructure continues expanding and debates about energy, water, and environmental impact become more heated, stories like this will likely become more common.</p><p>At Tom's Guide, we'll continue separating fact from fiction, breaking down viral AI claims, and helping readers understand what's really happening behind the headlines.</p><a href="https://follow.it/articles-by-amanda-caswell-tom-s-guide?leanpub" class="button button--large button--primary">Follow Amanda Caswell and stay ahead of the AI curve</a><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-asked-gemini-what-was-slowing-down-my-windows-pc-heres-what-it-found">I asked Gemini what was slowing down my Windows PC — here’s what it found</a></li><li><a href="https://www.tomsguide.com/ai/what-is-google-zero-and-why-your-favorite-websites-are-panicking-about-ai">What is Google Zero — and why your favorite websites are panicking about AI</a></li><li><a href="https://www.tomsguide.com/ai/apple-is-ending-support-for-16-devices-heres-the-chatgpt-prompt-that-tells-you-what-to-do-next">Apple is ending support for 16 devices — here’s the ChatGPT prompt that tells you what to do next</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/that-viral-jeff-bezos-quote-about-ai-and-water-isnt-real-heres-what-actually-happened</link>
                                                                            <description>
                            <![CDATA[ A viral quote claimed Jeff Bezos said AI should get water before humans. He never said it — but the reason millions believed the fake quote reveals growing concerns about AI. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">BkjS85pZtTzqnYQCyZXsFf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/KRk3NYY3SmDF6kKpkNdUm3-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 22 Jun 2026 16:20:19 +0000</pubDate>                                                                                                                                <updated>Mon, 22 Jun 2026 18:37:58 +0000</updated>
                                                                                                                                            <category><![CDATA[AI]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/zYjevim2q7FjQiefqpjZRB.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/KRk3NYY3SmDF6kKpkNdUm3-1280-80.jpg">
                                                            <media:credit><![CDATA[Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Jeff Bezos ]]></media:description>                                                            <media:text><![CDATA[Jeff Bezos ]]></media:text>
                                <media:title type="plain"><![CDATA[Jeff Bezos ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/KRk3NYY3SmDF6kKpkNdUm3-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A viral quote attributed to Jeff Bezos has <a href="https://www.instagram.com/p/DZu8trmR89Y/?utm_source=ig_web_copy_link&igsh=NTc4MTIwNjQ2YQ==" target="_blank">been spreading across social media</a>, sparking outrage among people already worried about the environmental impact of artificial intelligence.</p><p>The quote claimed that water should be prioritized for AI systems over human needs and appeared to suggest that future AI infrastructure was more important than the people affected by it.</p><p>It was shocking, not to mention dystopian. And it was exactly the kind of thing critics fear tech billionaires might actually believe. But here's the kicker: <strong>Jeff Bezos never said it.</strong></p><p>A fact-check by <a href="https://www.thequint.com/news/webqoof/amazon-jeff-bezos-water-consumption-ai-human-needs-fact-check" target="_blank">The Quint</a> found that the viral quote was fabricated and does not appear in footage from Bezos' appearance at VivaTech 2026 in Paris. Despite that, the claim spread widely across social media.</p><h2 id="what-bezos-actually-said">What Bezos actually said</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/ho_ZmwgvDdM" allowfullscreen></iframe></div></div><ul><li><strong>Blue Origin's long-term vision</strong> — Bezos focused heavily on his space company, discussing rockets, lunar missions, and plans for sustained human activity beyond Earth.</li><li><strong>A 'Moon-first' strategy</strong> — He described the Moon as the next major step for exploration and development before larger ambitions deeper into the solar system.</li><li><strong>Space-based industry</strong> — Bezos argued that heavy industry and polluting manufacturing could eventually be moved off Earth and into space.</li><li><strong>Protecting Earth</strong> — He described Earth as a unique "garden planet" and suggested that using space resources, including materials from asteroids, could help preserve the environment.</li><li><strong>Advanced computing and innovation</strong> — He discussed how breakthroughs in computing, manufacturing, and automation could enable future space development.</li><li><strong>Artificial General Intelligence (AGI)</strong> — Bezos referenced efforts to develop more capable AI systems that could accelerate scientific discovery, innovation, and manufacturing.</li><li><strong>AI and jobs</strong> — He acknowledged concerns about AI replacing workers but argued that technological revolutions historically create new kinds of jobs and opportunities rather than eliminating work entirely.</li><li><strong>Responsible AI development</strong> — Bezos said AI should be treated as a powerful tool, with efforts focused on preventing harmful uses while still allowing innovation to continue.</li></ul><p>The fake quote appears to have spread following comments Bezos made about artificial intelligence during VivaTech 2026. Yet,  <strong>No comments about prioritizing AI over humans was ever made.</strong> At no point in the session did Bezos say that water, energy, or other resources should be diverted from people to AI systems.</p><p>During the event, Bezos discussed AI's potential impact on the workforce and argued that artificial intelligence could ultimately <a href="https://www.tomsguide.com/ai/jeff-bezos-predicts-an-optimistic-future-where-ai-wont-lead-to-mass-unemployment-ai-is-going-to-create-a-labor-shortage">create labor shortages </a>rather than<a href="https://www.tomsguide.com/ai/microsoft-reveals-the-40-jobs-ai-is-most-likely-to-replace-and-40-that-are-safe-for-now"> widespread unemployment</a>. He also addressed concerns about the <a href="https://www.tomsguide.com/ai/i-kept-hearing-that-ai-data-centers-are-draining-towns-dry-so-i-looked-at-the-evidence">resources required to power AI systems, including water consumption</a>.</p><p>His actual comments centered on putting AI water usage into a broader context rather than arguing that AI should take priority over human needs. That's a <a href="https://www.tomsguide.com/ai/this-ai-data-center-will-be-bigger-than-2-000-walmarts-and-dump-23-atom-bombs-worth-of-energy-into-the-environment-every-day-and-locals-are-terrified">position some people may disagree with</a>. But it is very different from claiming that communities should sacrifice access to water so AI data centers can continue expanding. And then, somewhere between those two ideas, a fictional quote was born.</p><h2 id="why-people-believed-it">Why people believed it</h2><p>The most interesting part of this story is that many people immediately accepted the quote to be real. Because the fabricated statement tapped into a growing anxiety surrounding artificial intelligence and the massive infrastructure required to support it, people believed it. </p><p>Companies including Amazon, Google, Microsoft, Meta and OpenAI are <a href="https://www.tomsguide.com/ai/big-tech-is-pouring-usd650-billion-into-ai-and-its-about-to-affect-almost-everything-you-use">investing billions of dollars into new data centers</a>. Those facilities require enormous amounts of electricity and, in many cases, large quantities of water for cooling.</p><p>Communities across the United States and around the world have raised concerns about how these facilities could affect local resources. <a href="https://www.tomsguide.com/ai/erin-brockovich-just-launched-an-ai-data-center-map-and-it-highlights-a-growing-problem-tech-giants-are-avoiding">Environmental groups </a>have also questioned the long-term sustainability of AI's rapid expansion. Against that backdrop, a quote suggesting that a tech billionaire would prioritize AI over people didn't seem impossible to many readers. In other words, the misinformation succeeded because it fit an existing narrative.</p><h2 id="bottom-line-5">Bottom line </h2><p>False information often spreads fastest when it contains just enough truth to feel plausible. AI data centers really do consume water, and communities really are debating whether new facilities should be approved. And tech leaders really are making increasingly bold claims about the future of artificial intelligence. But we all know the dangers of misinformation.</p><p>When a fabricated quote combines realistic elements, it can become difficult to distinguish fact from fiction, especially when it appears in a screenshot that looks authentic.</p><p>Ironically, this story reveals less about Jeff Bezos than it does about public perception of the AI industry. Although the quote itself was fake, the concerns that made it believable are very real.</p><p>As AI infrastructure continues expanding and debates about energy, water, and environmental impact become more heated, stories like this will likely become more common.</p><p>At Tom's Guide, we'll continue separating fact from fiction, breaking down viral AI claims, and helping readers understand what's really happening behind the headlines.</p><a href="https://follow.it/articles-by-amanda-caswell-tom-s-guide?leanpub" class="button button--large button--primary">Follow Amanda Caswell and stay ahead of the AI curve</a><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/i-asked-gemini-what-was-slowing-down-my-windows-pc-heres-what-it-found">I asked Gemini what was slowing down my Windows PC — here’s what it found</a></li><li><a href="https://www.tomsguide.com/ai/what-is-google-zero-and-why-your-favorite-websites-are-panicking-about-ai">What is Google Zero — and why your favorite websites are panicking about AI</a></li><li><a href="https://www.tomsguide.com/ai/apple-is-ending-support-for-16-devices-heres-the-chatgpt-prompt-that-tells-you-what-to-do-next">Apple is ending support for 16 devices — here’s the ChatGPT prompt that tells you what to do next</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>