<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:cf="https://www.futureplc.com/rss/content-flags"
>
    <channel>
                    <atom:link href="https://www.tomsguide.com/feeds/tag/playstation" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Playstation ]]></title>
                <link>https://www.tomsguide.com/gaming/playstation</link>
        <description><![CDATA[ All the latest playstation content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Thu, 10 Sep 2026 15:00:00 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ Marvel’s Wolverine is a playable summer blockbuster — but fades from memory fast ]]></title>
                                                                                                <dc:content><![CDATA[ <div  class="fancy-box"><div class="fancy_box-title">Marvel's Wolverine review: Specs</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Platforms: </strong>PS5<br><strong>Price: </strong>$69 / £69 / AU$124<br><strong>Release Date: </strong>September 15, 2026<br><strong>Genre:</strong> Action-adventure</p></div></div><p>For better or worse, Marvel’s Wolverine is basically a playable blockbuster. You’ll find cinematic spectacle, thrilling set pieces, and a (mostly) enjoyable storyline. But, like many modern summer movies, this PS5 exclusive lacks substance and is even a little forgettable. </p><p>PS5’s Wolverine shows its full hand surprisingly early. While the violent combat feels true to the character, even the gory satisfaction of eviscerating an enemy soldier starts to wear off disappointingly fast. Still, at least the original comic book narrative has its moments, and the game always looks great on PS5 Pro — when technical issues aren’t spoiling the fun.</p><p>I had a good time tearing through this slickly produced Wolverine game, but even as I write this review, merely a week after completing the campaign, it’s already fading from memory. But if the goal was to give players a bombastic single-player experience, in which Logan’s inner turmoil takes center stage, then developer Insomniac Games has definitely succeeded. </p><p>It’s just a little disappointing that Marvel’s Wolverine doesn’t have more to sink your claws into. It lacks the staying power and gameplay variety to be one of the PS5’s best exclusives.</p><h2 id="marvel-39-s-wolverine-the-basics">Marvel's Wolverine: The Basics</h2><ul><li><strong>What is it? </strong>Marvel’s Wolverine is a third-person action-adventure game where you play the titular always-angry hero as he tears through armies of enemies on a personal quest to protect mutantkind from several sinister villains.</li><li><strong>Who is it for? </strong>Dedicated Marvel fans may enjoy this fresh spin on the character, while players looking for a short (and mostly sweet) game will enjoy Wolverine’s linear approach.</li><li><strong>What’s the price? </strong><a href="https://www.amazon.com/Wolverine-PS5-PlayStation-5/dp/B0G6157JKW/" target="_blank" rel="nofollow">Marvel’s Wolverine on PS5 costs $69 at Amazon</a>. There’s also a <a href="https://store.playstation.com/en-us/product/UP9000-PPSA03671_00-WOLVERINEDELUXE0" target="_blank" rel="nofollow">Digital Deluxe Edition for $79</a> with some extra suits.</li><li><strong>What other games has the developer made? </strong>Wolverine comes from Insomniac Games, the developer behind the Marvel’s Spider-Man series. Other notable titles from Insomniac include Ratchet & Clank, Sunset Overdrive, and the PS3 shooter franchise Resistance.</li><li><strong>What games is it similar to? </strong>Marvel’s Wolverine shares several similarities to its sister series, Marvel’s Spider-Man, but without an open world and with the blood and gore factor turned up to 11.</li></ul><h2 id="not-the-marvel-universe-you-know">Not the Marvel Universe you know</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="BKh7SqDGpJzsEDicEUHqKS" name="MW_SDCC_LoganJapanHero_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/BKh7SqDGpJzsEDicEUHqKS-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>Marvel’s Wolverine throws players right into the action. After a brief introductory cutscene, Wolverine leaps from a helicopter on a mission to save Nathaniel Essex, leader of Team X and something of a father figure to Logan, who’s been captured by villain Bolivar Trask. </p><p>I appreciate that Insomniac has opted to avoid the origin story approach. Like the first Marvel’s Spider-Man game, you take control of an established Wolverine, already familiar with his powers, and with a rich backstory explored across the single-player campaign.</p><p>Marvel purists might wrinkle their noses at some changes to established X-Men lore. However, the story is generally entertaining and does a good job of motivating players to push through the many, many enemy gauntlets to see what happens next. There are also several familiar faces, including Mystique, Sabretooth, Lady Deathstrike, and Jean Grey.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fX2HAE2a4Z8f6riZuCdF5S" name="MW_ExtGameplay_Jean_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/fX2HAE2a4Z8f6riZuCdF5S-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>The latter is the most important. Jean and Wolverine’s relationship takes on a prominent role in the narrative, and their budding romance is easy to buy into. There’s no Scott Summers in Logan’s way in this Marvel universe, so that played-out X-Men love triangle isn’t repeated.</p><p>One less successful character inclusion is Nathaniel Essex. I’ll avoid direct spoilers, but anybody even vaguely familiar with the X-Men’s comic book history will know where his character arc is heading, which means that when the big reveal comes, it lacks impact.</p><p>While not telling the definitive Wolverine story, the game presents a well-paced and smartly plotted comic book tale. It leaves the protagonist in a good spot where a sequel seems likely, not least because of an intriguing post-credits scene that leaves a thread hanging.</p><h2 id="getting-the-claws-out">Getting the claws out</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7d6qp2tEBoUQixDdDneLuR" name="MW_ExtGameplay_WolverineHero_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/7d6qp2tEBoUQixDdDneLuR-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>Insomniac hasn’t been afraid to lean into brutal violence with its interpretation of Wolverine. Within moments of picking up your DualSense controller, Logan’s claws are stained red with blood as he quite literally tears through enemies, lopping off limbs, spilling guts, and some of the finisher moves are so extreme they made me practically wince the first time I saw them.</p><p>Unfortunately, while such a high level of violence is initially novel (does that say something worrying about me?), the pleasure of disembowelling an enemy wears off alarmingly fast. Wolverine’s combat always looks extremely flashy, but it’s very one-note. It’s your basic system of light and heavy attacks, with the occasional block thrown in every few strikes.</p><p>As the story progresses, you unlock a suite of special abilities, one of which lets Wolverine knee an enemy in the chin (which always made me chuckle), and another lets him unleash a quick flurry of damage-dealing slashes. But these do little to spice up a combat system that feels repetitive within just a few levels. Late-game enemies are damage sponges, and bosses have large health pools and predictable move sets, further adding to the issue.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YJ2a6EuNp2aUCgphWCMdKS" name="MW_ExtGameplay_GunCut_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/YJ2a6EuNp2aUCgphWCMdKS-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>At least smartly managing your rage meter, which fills as you kill enemies, can make later encounters a bit less of a slog. At rage level 3, you unlock the ability to instantly execute enemies, so you can bounce around the battlefield, turning henchmen to pulp in minutes. </p><p>Alternatively, you could often opt for stealth; multiple levels place Logan in environments with tall grass to sink through and high trees to scale, but I have to wonder: does anybody associate Wolverine with a stealthy approach? It certainly doesn’t fit the character to me.</p><p>As the game progresses, combat areas grow larger with more and more enemies to slice up, but I found myself merely going through the motions, relying on basic combos that suffice until the end. The skill tree unlocks a few new moves, but they’re largely unnecessary; on normal difficulty, just mashing the standard attack and tapping the block button will suffice.</p><h2 id="unfogging-logan-s-past">Unfogging Logan’s past</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Nbt33GkGB7ZfBJj9pDdhmP" name="MW_PREVIEWS_HAND_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/Nbt33GkGB7ZfBJj9pDdhmP-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>Wolverine is primarily a very linear experience. There’s no open world like Spidey’s NYC. However, some levels do let you wander a little bit. Taking in the sights is worthwhile, as there are collectibles that flesh out Insomniac’s spin on the X-Men universe. </p><p>I suspect some players will find the frequency of “walking” sections a chore, but I enjoyed this change of pace, and they helped to break up the repetitive combat. They also go a long way to developing Wolverine’s relationship with the supporting cast, which is one of the game’s core strengths. I wouldn’t have cared about Jean Grey half as much without them.</p><p>Optional Nightmare Doors offer even more insight into Wolverine’s past and represent the bulk of the side content (unless you count collectible whiskey bottles). These imposing wooden doors are easily spotted within levels by their glowing purple roots, and each offers a self-contained challenge mission. Once completed, you get a short memory fragment. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9wbnUSo6hfErWG6pLE5XQP" name="MW_PREVIEWS_TELEMBANGCOMBAT_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/9wbnUSo6hfErWG6pLE5XQP-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>The Nightmare Door challenges range from combat trials (not that I really need <em>more </em>enemies to butcher) to some very fun traversal courses, which I always looked forward to. Upon completion, you’re given a rank from bronze to adamantium, and I felt compelled to achieve the highest rank on each before moving on. High score chasers will love them.</p><p>Here, the game also dips its toes into the rougelite genre with three trials that pit you against 20 waves of enemies. Between every five waves, you can pick a modifier that buffs Logan (increased damage, reduced special ability cooldown, etc.), while also giving him a negative effect (like your rage meter taking longer to fill), forcing you to adapt your combat tactics.</p><p>These combat trials are very simple, and all take place in the same small map, but there’s a good foundation here. I’d love to see them expanded further. Maybe they’re hinting at a post-launch DLC similar to God of War Ragnarök’s well-received Valhalla expansion?</p><h2 id="impressive-visuals-with-rough-edges">Impressive visuals, with rough edges</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bjCmoouJgvfNaJsk4njjFS" name="MW_SDCC_SentinelAction_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/bjCmoouJgvfNaJsk4njjFS-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>On PS5 Pro, Marvel’s Wolverine looks and runs very well. Character models are expressive, the bloody detail when Logan sinks his claws into a goon is marvellous, and the voice acting is of a high standard. Particular credit to Liam McIntyre, who voices the eponymous mutant. </p><p> Even when the action gets thick and fast with Wolverine leaping between enemy soldiers and eventually Sentinel robots, I never noticed any framerate hitches; things were locked at 60 fps. Insomniac offers players plenty of accessibility options, which is very commendable.</p><p>Unfortunately, while Marvel’s Wolverine is another PlayStation Studios game that proves there’s plenty of power remaining in the PS5, my playthrough was blighted by pesky bugs and glitches. These ranged from enemy bodies floating in mid-air, Wolverine initiating a finisher move with thin air (which admittedly looked very funny), and interactable objects refusing to cooperate until Logan was standing at the perfect angle. Annoying but tolerable.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uMzqxsWEMFNrRk3FVFp88S" name="MW_ExtGameplay_ConvoyAttack_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/uMzqxsWEMFNrRk3FVFp88S-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>What was harder to stomach were the half-a-dozen hard crashes that occurred during my 15-hour playthrough. Marvel’s Wolverine is generous with checkpoints, so most didn’t cost me any real progress, but two came during boss battles, which forced me to start over. And as noted, the boss battles are already over-lengthy, so I didn’t need them drawn out further.</p><h2 id="marvel-s-wolverine-review-verdict">Marvel’s Wolverine review: Verdict</h2><p>I don’t want to be too harsh on Marvel’s Wolverine. It’s a generally high-quality action-adventure experience that lets you live out your X-Men dreams of becoming the team’s most iconic member. Yet, while playing, I always felt like something was missing. </p><p>There’s a factory-line quality to Marvel’s Wolverine; it hits all the expected beats of a modern AAA game, but never carves out an identity of its own. The combat is repetitive, the story is good but predictable, and after completing it, I felt little reason to return — even mopping up the few remaining trophies for the Platinum failed to motivate me to continue playing. </p><p>Marvel’s Wolverine is undeniably well-made and offers some no-frills superhero fun, but launching in such a packed release schedule, it’s hard to see where it truly stands out.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/marvels-wolverine-is-a-playable-summer-blockbuster-but-fades-from-memory-fast</link>
                                                                            <description>
                            <![CDATA[ Marvel’s Wolverine is a playable summer blockbuster, and while its 15-hour campaign offers plenty of violent carnage, it lacks enough substance to stand out. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6BZusquTRcdnJGjvGoHKD9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 10 Sep 2026 15:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Gaming]]></category>
                                                    <category><![CDATA[Playstation]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Marvel&#039;s Wolverine image showing Logan]]></media:description>                                                            <media:text><![CDATA[Marvel&#039;s Wolverine image showing Logan]]></media:text>
                                <media:title type="plain"><![CDATA[Marvel&#039;s Wolverine image showing Logan]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div  class="fancy-box"><div class="fancy_box-title">Marvel's Wolverine review: Specs</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Platforms: </strong>PS5<br><strong>Price: </strong>$69 / £69 / AU$124<br><strong>Release Date: </strong>September 15, 2026<br><strong>Genre:</strong> Action-adventure</p></div></div><p>For better or worse, Marvel’s Wolverine is basically a playable blockbuster. You’ll find cinematic spectacle, thrilling set pieces, and a (mostly) enjoyable storyline. But, like many modern summer movies, this PS5 exclusive lacks substance and is even a little forgettable. </p><p>PS5’s Wolverine shows its full hand surprisingly early. While the violent combat feels true to the character, even the gory satisfaction of eviscerating an enemy soldier starts to wear off disappointingly fast. Still, at least the original comic book narrative has its moments, and the game always looks great on PS5 Pro — when technical issues aren’t spoiling the fun.</p><p>I had a good time tearing through this slickly produced Wolverine game, but even as I write this review, merely a week after completing the campaign, it’s already fading from memory. But if the goal was to give players a bombastic single-player experience, in which Logan’s inner turmoil takes center stage, then developer Insomniac Games has definitely succeeded. </p><p>It’s just a little disappointing that Marvel’s Wolverine doesn’t have more to sink your claws into. It lacks the staying power and gameplay variety to be one of the PS5’s best exclusives.</p><h2 id="marvel-39-s-wolverine-the-basics">Marvel's Wolverine: The Basics</h2><ul><li><strong>What is it? </strong>Marvel’s Wolverine is a third-person action-adventure game where you play the titular always-angry hero as he tears through armies of enemies on a personal quest to protect mutantkind from several sinister villains.</li><li><strong>Who is it for? </strong>Dedicated Marvel fans may enjoy this fresh spin on the character, while players looking for a short (and mostly sweet) game will enjoy Wolverine’s linear approach.</li><li><strong>What’s the price? </strong><a href="https://www.amazon.com/Wolverine-PS5-PlayStation-5/dp/B0G6157JKW/" target="_blank" rel="nofollow">Marvel’s Wolverine on PS5 costs $69 at Amazon</a>. There’s also a <a href="https://store.playstation.com/en-us/product/UP9000-PPSA03671_00-WOLVERINEDELUXE0" target="_blank" rel="nofollow">Digital Deluxe Edition for $79</a> with some extra suits.</li><li><strong>What other games has the developer made? </strong>Wolverine comes from Insomniac Games, the developer behind the Marvel’s Spider-Man series. Other notable titles from Insomniac include Ratchet & Clank, Sunset Overdrive, and the PS3 shooter franchise Resistance.</li><li><strong>What games is it similar to? </strong>Marvel’s Wolverine shares several similarities to its sister series, Marvel’s Spider-Man, but without an open world and with the blood and gore factor turned up to 11.</li></ul><h2 id="not-the-marvel-universe-you-know">Not the Marvel Universe you know</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="BKh7SqDGpJzsEDicEUHqKS" name="MW_SDCC_LoganJapanHero_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/BKh7SqDGpJzsEDicEUHqKS-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>Marvel’s Wolverine throws players right into the action. After a brief introductory cutscene, Wolverine leaps from a helicopter on a mission to save Nathaniel Essex, leader of Team X and something of a father figure to Logan, who’s been captured by villain Bolivar Trask. </p><p>I appreciate that Insomniac has opted to avoid the origin story approach. Like the first Marvel’s Spider-Man game, you take control of an established Wolverine, already familiar with his powers, and with a rich backstory explored across the single-player campaign.</p><p>Marvel purists might wrinkle their noses at some changes to established X-Men lore. However, the story is generally entertaining and does a good job of motivating players to push through the many, many enemy gauntlets to see what happens next. There are also several familiar faces, including Mystique, Sabretooth, Lady Deathstrike, and Jean Grey.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fX2HAE2a4Z8f6riZuCdF5S" name="MW_ExtGameplay_Jean_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/fX2HAE2a4Z8f6riZuCdF5S-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>The latter is the most important. Jean and Wolverine’s relationship takes on a prominent role in the narrative, and their budding romance is easy to buy into. There’s no Scott Summers in Logan’s way in this Marvel universe, so that played-out X-Men love triangle isn’t repeated.</p><p>One less successful character inclusion is Nathaniel Essex. I’ll avoid direct spoilers, but anybody even vaguely familiar with the X-Men’s comic book history will know where his character arc is heading, which means that when the big reveal comes, it lacks impact.</p><p>While not telling the definitive Wolverine story, the game presents a well-paced and smartly plotted comic book tale. It leaves the protagonist in a good spot where a sequel seems likely, not least because of an intriguing post-credits scene that leaves a thread hanging.</p><h2 id="getting-the-claws-out">Getting the claws out</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="7d6qp2tEBoUQixDdDneLuR" name="MW_ExtGameplay_WolverineHero_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/7d6qp2tEBoUQixDdDneLuR-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>Insomniac hasn’t been afraid to lean into brutal violence with its interpretation of Wolverine. Within moments of picking up your DualSense controller, Logan’s claws are stained red with blood as he quite literally tears through enemies, lopping off limbs, spilling guts, and some of the finisher moves are so extreme they made me practically wince the first time I saw them.</p><p>Unfortunately, while such a high level of violence is initially novel (does that say something worrying about me?), the pleasure of disembowelling an enemy wears off alarmingly fast. Wolverine’s combat always looks extremely flashy, but it’s very one-note. It’s your basic system of light and heavy attacks, with the occasional block thrown in every few strikes.</p><p>As the story progresses, you unlock a suite of special abilities, one of which lets Wolverine knee an enemy in the chin (which always made me chuckle), and another lets him unleash a quick flurry of damage-dealing slashes. But these do little to spice up a combat system that feels repetitive within just a few levels. Late-game enemies are damage sponges, and bosses have large health pools and predictable move sets, further adding to the issue.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YJ2a6EuNp2aUCgphWCMdKS" name="MW_ExtGameplay_GunCut_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/YJ2a6EuNp2aUCgphWCMdKS-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>At least smartly managing your rage meter, which fills as you kill enemies, can make later encounters a bit less of a slog. At rage level 3, you unlock the ability to instantly execute enemies, so you can bounce around the battlefield, turning henchmen to pulp in minutes. </p><p>Alternatively, you could often opt for stealth; multiple levels place Logan in environments with tall grass to sink through and high trees to scale, but I have to wonder: does anybody associate Wolverine with a stealthy approach? It certainly doesn’t fit the character to me.</p><p>As the game progresses, combat areas grow larger with more and more enemies to slice up, but I found myself merely going through the motions, relying on basic combos that suffice until the end. The skill tree unlocks a few new moves, but they’re largely unnecessary; on normal difficulty, just mashing the standard attack and tapping the block button will suffice.</p><h2 id="unfogging-logan-s-past">Unfogging Logan’s past</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Nbt33GkGB7ZfBJj9pDdhmP" name="MW_PREVIEWS_HAND_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/Nbt33GkGB7ZfBJj9pDdhmP-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>Wolverine is primarily a very linear experience. There’s no open world like Spidey’s NYC. However, some levels do let you wander a little bit. Taking in the sights is worthwhile, as there are collectibles that flesh out Insomniac’s spin on the X-Men universe. </p><p>I suspect some players will find the frequency of “walking” sections a chore, but I enjoyed this change of pace, and they helped to break up the repetitive combat. They also go a long way to developing Wolverine’s relationship with the supporting cast, which is one of the game’s core strengths. I wouldn’t have cared about Jean Grey half as much without them.</p><p>Optional Nightmare Doors offer even more insight into Wolverine’s past and represent the bulk of the side content (unless you count collectible whiskey bottles). These imposing wooden doors are easily spotted within levels by their glowing purple roots, and each offers a self-contained challenge mission. Once completed, you get a short memory fragment. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9wbnUSo6hfErWG6pLE5XQP" name="MW_PREVIEWS_TELEMBANGCOMBAT_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/9wbnUSo6hfErWG6pLE5XQP-1920-80.jpg" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>The Nightmare Door challenges range from combat trials (not that I really need <em>more </em>enemies to butcher) to some very fun traversal courses, which I always looked forward to. Upon completion, you’re given a rank from bronze to adamantium, and I felt compelled to achieve the highest rank on each before moving on. High score chasers will love them.</p><p>Here, the game also dips its toes into the rougelite genre with three trials that pit you against 20 waves of enemies. Between every five waves, you can pick a modifier that buffs Logan (increased damage, reduced special ability cooldown, etc.), while also giving him a negative effect (like your rage meter taking longer to fill), forcing you to adapt your combat tactics.</p><p>These combat trials are very simple, and all take place in the same small map, but there’s a good foundation here. I’d love to see them expanded further. Maybe they’re hinting at a post-launch DLC similar to God of War Ragnarök’s well-received Valhalla expansion?</p><h2 id="impressive-visuals-with-rough-edges">Impressive visuals, with rough edges</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bjCmoouJgvfNaJsk4njjFS" name="MW_SDCC_SentinelAction_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/bjCmoouJgvfNaJsk4njjFS-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>On PS5 Pro, Marvel’s Wolverine looks and runs very well. Character models are expressive, the bloody detail when Logan sinks his claws into a goon is marvellous, and the voice acting is of a high standard. Particular credit to Liam McIntyre, who voices the eponymous mutant. </p><p> Even when the action gets thick and fast with Wolverine leaping between enemy soldiers and eventually Sentinel robots, I never noticed any framerate hitches; things were locked at 60 fps. Insomniac offers players plenty of accessibility options, which is very commendable.</p><p>Unfortunately, while Marvel’s Wolverine is another PlayStation Studios game that proves there’s plenty of power remaining in the PS5, my playthrough was blighted by pesky bugs and glitches. These ranged from enemy bodies floating in mid-air, Wolverine initiating a finisher move with thin air (which admittedly looked very funny), and interactable objects refusing to cooperate until Logan was standing at the perfect angle. Annoying but tolerable.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uMzqxsWEMFNrRk3FVFp88S" name="MW_ExtGameplay_ConvoyAttack_4k_2026" alt="Marvel's Wolverine screenshot courtesy of Sony Interactive Entertainment" src="https://cdn.mos.cms.futurecdn.net/uMzqxsWEMFNrRk3FVFp88S-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Insomniac Games)</span></figcaption></figure><p>What was harder to stomach were the half-a-dozen hard crashes that occurred during my 15-hour playthrough. Marvel’s Wolverine is generous with checkpoints, so most didn’t cost me any real progress, but two came during boss battles, which forced me to start over. And as noted, the boss battles are already over-lengthy, so I didn’t need them drawn out further.</p><h2 id="marvel-s-wolverine-review-verdict">Marvel’s Wolverine review: Verdict</h2><p>I don’t want to be too harsh on Marvel’s Wolverine. It’s a generally high-quality action-adventure experience that lets you live out your X-Men dreams of becoming the team’s most iconic member. Yet, while playing, I always felt like something was missing. </p><p>There’s a factory-line quality to Marvel’s Wolverine; it hits all the expected beats of a modern AAA game, but never carves out an identity of its own. The combat is repetitive, the story is good but predictable, and after completing it, I felt little reason to return — even mopping up the few remaining trophies for the Platinum failed to motivate me to continue playing. </p><p>Marvel’s Wolverine is undeniably well-made and offers some no-frills superhero fun, but launching in such a packed release schedule, it’s hard to see where it truly stands out.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ GTA 6 DualSense pre-orders LIVE — limited-edition PS5 controllers are now available at Amazon, Walmart and more ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="live-content"><div  class="fancy-box"><div class="fancy_box-title">GTA 6 DualSense pre-orders</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="EPt7Jojwcu8g3LTUtBYAnA" name="gta-dualsense-controllers-ps5" caption="" alt="GTA 6 DualSense Controllers on a Vice City themed background" src="https://cdn.mos.cms.futurecdn.net/EPt7Jojwcu8g3LTUtBYAnA-1920-80.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: Sony / Rockstar Games)</span></figcaption></figure><p class="fancy-box__body-text"><strong>US (pre-orders now LIVE)</strong><br><em>Amazon: </em><a data-analytics-id="inline-link" href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><em>pre-order now</em></a><br><em>PS Direct: </em><a data-analytics-id="inline-link" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><em>pre-order now</em></a><br><em>Best Buy: </em><a data-analytics-id="inline-link" href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><em>pre-order now</em></a><br><em>Walmart: </em><a data-analytics-id="inline-link" href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><em>pre-order now</em></a><br>----------------------------------<br><strong>UK (pre-orders now LIVE)</strong><br><em>Amazon: </em><a data-analytics-id="inline-link" href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><em>check stock now</em></a><br><em>PS Direct: </em><a data-analytics-id="inline-link" href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><em>pre-order now</em></a><br>----------------------------------<br>1. <a data-analytics-id="inline-link" href="#section-gta-6-dualsense-controller-pre-orders-quick-links">Quick Links</a><br>2. <a data-analytics-id="inline-link" href="#section-gta-6-dualsense-controller-pre-orders-full-retailer-listings">Retailer listings</a><br>3. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-console-and-controllers-uk-pre-orders">U.K. pre-orders</a><br>4. <a data-analytics-id="inline-link" href="#section-live-updates">LIVE: Latest updates</a></p></div></div><p>To mark the release of a little game called Grand Theft Auto VI, PlayStation is launching limited-edition PS5 DualSense controllers. <strong>GTA 6 DualSense pre-orders are now live in the U.S. and the U.K.</strong></p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a></li></ul><p>U.S. pre-orders kicked off at 10 a.m. ET, and for now, there is stock available at multiple retailers including <a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>Amazon</strong></a>, <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><strong>Best Buy</strong></a> and <a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><strong>Walmart</strong></a>. The Black edition is exclusive to <a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>PlayStation Direct</strong></a>.</p><p><strong>In the U.K., most</strong> <strong>retailers are sold out </strong>after pre-orders went live at 10 a.m. BST. You can still pre-order the Black variant at <a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>PlayStation Direct</strong></a>, and <a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>Amazon</strong></a> has a listing page but hasn't taken pre-orders yet. So watch the retailer closely; it could have stock soon.</p><p>This latest special edition PS5 pad comes in two variants, Black and White, and gives the DualSense controller a GTA 6-themed makeover. You’ve got the GTA 6 logo on the touchpad, palm trees adorning the sides, and a "shimmering" finish to cap it all off. In PlayStation’s own words, the controllers "capture that unmistakable Vice City energy."</p><p>Like anything GTA 6 related, these DualSense controllers are likely to sell out fast, but this isn’t my first rodeo. I’ve played (and won) the pre-order game multiple times. I’ve covered major pre-orders for a slew of in-demand items over the years, all in an effort to help regular gamers get their hands on limited edition gear rather than those nefarious resellers.</p><p>Below are all the retailer links you’ll need, and the latest live stock update to make sure you get your GTA 6 PS5 controller.</p><h3 class="article-body__section" id="section-gta-6-dualsense-controller-pre-orders-quick-links"><span>GTA 6 DualSense controller pre-orders - quick links</span></h3><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a><strong> </strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong> </a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><strong>check stock @ Best Buy </strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow"><strong>check stock @ Target</strong></a></li></ul><h3 class="article-body__section" id="section-gta-6-dualsense-controller-pre-orders-full-retailer-listings"><span>GTA 6 DualSense controller pre-orders - full retailer listings</span></h3><div class="product"><a data-dimension112="c4fc3adc-ac64-11f1-93ca-0f58826d1f39" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecjfqi2UgurxrA42rX7pML" name="Amazon-Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ecjfqi2UgurxrA42rX7pML-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow" data-dimension112="c4fc3adc-ac64-11f1-93ca-0f58826d1f39" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br>Amazon was late to the party, but it is now taking GTA 6 DualSense pre-orders. If you're a Prime member, this is the obvious place to secure yours!<a class="view-deal button" href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow" data-dimension112="c4fc3adc-ac64-11f1-93ca-0f58826d1f39" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3bcc-ac64-11f1-b70e-89e74b5147dd" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:93.65%;"><img id="Bi2iDjTxUHTUQK9FHZ4W8D" name="Walmart logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Bi2iDjTxUHTUQK9FHZ4W8D-1920-80.jpeg" mos="" align="middle" fullscreen="" width="960" height="899" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow" data-dimension112="c4fc3bcc-ac64-11f1-b70e-89e74b5147dd" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br>Walmart just went live with its GTA 6 DualSense pre-orders; you can secure your controllers from the retailer right now.<a class="view-deal button" href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow" data-dimension112="c4fc3bcc-ac64-11f1-b70e-89e74b5147dd" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="dd66d302-ad22-11f1-bbab-d56f9dafb593" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EXpDruhoaAuddyN6RUCGyb" name="GameStop logo.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EXpDruhoaAuddyN6RUCGyb-1920-80.png" mos="" align="middle" fullscreen="" width="400" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow" data-dimension112="dd66d302-ad22-11f1-bbab-d56f9dafb593" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br>GameStop is now taking pre-orders of the GTA 6 DualSense in White; it costs $84. <a class="view-deal button" href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow" data-dimension112="dd66d302-ad22-11f1-bbab-d56f9dafb593" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3a64-ac64-11f1-a4d0-03e5a8c457af" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-white-for-ps5-pc-mac-mobile" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-white-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="c4fc3a64-ac64-11f1-a4d0-03e5a8c457af" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br><strong>PlayStation Direct has GTA 6 DualSense pre-orders now</strong>. There's a virtual queue in place, and this is the only retailer where you can get the exclusive Black edition.<a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-white-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="c4fc3a64-ac64-11f1-a4d0-03e5a8c457af" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3b5e-ac64-11f1-926e-5f8ad0762efc" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow" data-dimension112="c4fc3b5e-ac64-11f1-926e-5f8ad0762efc" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br>Best Buy started taking GTA 6 DualSense pre-orders at 10 a.m., and after a few hours, appears to have sold out, with its buy button replaced with "coming soon."<a class="view-deal button" href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow" data-dimension112="c4fc3b5e-ac64-11f1-926e-5f8ad0762efc" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3c3a-ac64-11f1-85d8-5d350aed0243" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:129.60%;"><img id="J4ioQbCcWu8knu9FrYgeRT" name="purepng.com-target-logologobrand-logoiconslogos-251519939485oxces" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J4ioQbCcWu8knu9FrYgeRT-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2592" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow" data-dimension112="c4fc3c3a-ac64-11f1-85d8-5d350aed0243" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br>Target is another retailer to check if you're hunting for a GTA 6 DualSense. It normally drops its stock in good time, so keep an eye on it around 10 a.m. ET in case the listing goes live.<a class="view-deal button" href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow" data-dimension112="c4fc3c3a-ac64-11f1-85d8-5d350aed0243" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><h3 class="article-body__section" id="section-gta-6-dualsense-controller-uk-pre-orders"><span>GTA 6 DualSense controller UK pre-orders</span></h3><p><em>U.K. pre-orders began at 10 a.m. BST with most retailers selling out after a few hours. However, restocks could appear at any moment so check these links, and Amazon is still yet to go live with its pre-orders.</em></p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://ee.co.uk/products/playstation-5-gta-vi-white-edition-dualsense" target="_blank" rel="nofollow"><strong>£74 @ EE</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>check stock @ Amazon</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>check stock @ Smyths Toys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>check stock @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>check stock @ Currys</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><strong>check stock @ Very</strong></a></li><li><strong>GTA 6 DualSense (White):</strong> <a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li></ul><div class="product"><a data-dimension112="c4fc3d16-ac64-11f1-b939-85b23f8cf7c2" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecjfqi2UgurxrA42rX7pML" name="Amazon-Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ecjfqi2UgurxrA42rX7pML-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow" data-dimension112="c4fc3d16-ac64-11f1-b939-85b23f8cf7c2" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>Amazon is the world's biggest online retailer and has launched a listing page for the GTA 6 DualSense. <strong>Pre-orders aren't live yet</strong>, but could arrive any moment. This is the retailer to watch.<a class="view-deal button" href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow" data-dimension112="c4fc3d16-ac64-11f1-b939-85b23f8cf7c2" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3d84-ac64-11f1-945d-c905e040642e" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" 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="fcoMFvDbzgfzqaiQW5MiR3" name="Currys logo.JPG" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/fcoMFvDbzgfzqaiQW5MiR3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow" data-dimension112="c4fc3d84-ac64-11f1-945d-c905e040642e" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>Currys specialises in all things tech, and that includes the GTA 6 DualSense. However, as of now, it's <strong>sold out </strong>of pre-orders. I'm watching out for a restock.<a class="view-deal button" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow" data-dimension112="c4fc3d84-ac64-11f1-945d-c905e040642e" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3cb2-ac64-11f1-9e4a-e3862ee50721" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="c4fc3cb2-ac64-11f1-9e4a-e3862ee50721" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>PlayStation Direct is now sold out of pre-orders, and it's the <strong>exclusive retailer for the Black edition. </strong>If you want that one, you'll need to hope for a restock. <a class="view-deal button" href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="c4fc3cb2-ac64-11f1-9e4a-e3862ee50721" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="80b8e842-acf1-11f1-84ce-2930f5b99925" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://www.argos.co.uk/product/9706934" 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="mR6gMuPnQxkcEgakbtC2Kn" name="Argos" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mR6gMuPnQxkcEgakbtC2Kn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2048" height="2048" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow" data-dimension112="80b8e842-acf1-11f1-84ce-2930f5b99925" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>Argos is another U.K. retailer that dropped its pre-orders early and has since <strong>sold out</strong>, but it's already restocked once today. Could a third drop follow? I'm watching closely just in case.<a class="view-deal button" href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow" data-dimension112="80b8e842-acf1-11f1-84ce-2930f5b99925" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3e60-ac64-11f1-8776-9772ade8eed7" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:738px;"><p class="vanilla-image-block" style="padding-top:33.74%;"><img id="cviyb34Txub5MugdCdTP4X" name="smyths-toys-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cviyb34Txub5MugdCdTP4X-1920-80.png" mos="" align="middle" fullscreen="" width="738" height="249" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow" data-dimension112="c4fc3e60-ac64-11f1-8776-9772ade8eed7" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>Smyths Toys is another UK retailer that took GTA 6 DualSense pre-orders before the 10 a.m. BST drop time. It's currently <strong>sold out</strong>, but has already restocked once.<a class="view-deal button" href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow" data-dimension112="c4fc3e60-ac64-11f1-8776-9772ade8eed7" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3df2-ac64-11f1-885a-d7f8cb786b41" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="Kme7twv2ZTuVy3i7F33SWo" name="Very_Logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Kme7twv2ZTuVy3i7F33SWo-1920-80.png" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow" data-dimension112="c4fc3df2-ac64-11f1-885a-d7f8cb786b41" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>Very began taking GTA 6 DualSense today (Sept. 9), and now appears to be <strong>sold out</strong>; however, there could be restocks, so it's worth checking stock.<a class="view-deal button" href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow" data-dimension112="c4fc3df2-ac64-11f1-885a-d7f8cb786b41" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><h3 class="article-body__section" id="section-live-updates"><span>Live updates</span></h3></div><div class="live-content"><time datetime="2026-09-10T08:11:05+00:00">September 10, 2026 – 4:11 AM</time><h2 id="welcome">Welcome!</h2><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="aTyNXd6bLMr7vHwNjtATy5" name="GTA 6 - Lucia.jpg" alt="GTA 6" src="https://cdn.mos.cms.futurecdn.net/aTyNXd6bLMr7vHwNjtATy5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>Good morning! Welcome to Tom's Guide of the GTA 6 DualSense pre-order drop. The controllers are set to be available in the U.K. in less than an hour (at 10 a.m. BST), with the U.S. drop following at 10 a.m. ET / 7 a.m PT. I'm here to bring you all the updates and stock information to help you secure yours. </p></div><div class="live-content"><time datetime="2026-09-10T08:15:56+00:00">September 10, 2026 – 4:15 AM</time><h2 id="uk-retailers-drop-early">UK retailers drop early!</h2><p>Well, pre-orders weren't supposed to start until 10 a.m. BST, but multiple retailers in the U.K. have jumped the gun, and you can pre-order a GTA 6 DualSense now at Very, Currys and Argos!</p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><strong>£74 @ Very</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T08:27:46+00:00">September 10, 2026 – 4:27 AM</time><h2 id="another-uk-retailer-is-taking-pre-orders-now">Another UK retailer is taking pre-orders now!</h2><p>It's all happening this morning, the 10 a.m. BST drop is well and truly out of the window. Smyths Toys is the latest stockiest to push the button and start taking pre-orders of the GTA 6 DualSense. You can lock in yours right now!</p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>£74 @ Smyths Toys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T08:42:06+00:00">September 10, 2026 – 4:42 AM</time><h2 id="the-black-model-is-mia-in-the-uk-so-far">The Black model is MIA in the UK (so far)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aVjN5Bt4xVayURR3x8Bihh" name="gta-6-dualsense-controller-black" alt="GTA 6 DualSense in Black on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/aVjN5Bt4xVayURR3x8Bihh-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p>If you want to pre-order the GTA 6 DualSense in White, you've got plenty of options in the U.K. right now (see links below). However, so far, I've not spotted any retailers that is offering the Black version. </p><p>Perhaps this one will be exclusive to PlayStation Direct? That is a strategy PlayStation has used before during limited-edition pre-order drops. PlayStation likes to keep at least one item exclusive to its own online storefront (it did similar during the Wolverine PS5 range pre-order drop). </p><p>If you're holding out for the GTA 6 DualSense in Black, <strong>PS Direct is set to take pre-orders from 10 a.m. BST</strong>, and I'm watching closely for any retailer listings for this one!</p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><strong>£74 @ Very</strong></a></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>£74 @ Smyths Toys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T08:46:09+00:00">September 10, 2026 – 4:46 AM</time><h2 id="amazon-u-k-39-s-listing-page-is-live-but-no-pre-orders-yet">Amazon U.K.'s listing page is live, but no pre-orders yet!</h2><p>Looks like Amazon U.K. will be getting in on the pre-order action at some point. The GTA 6 DualSense now has a listing page on the online mega-retailer, but Amazon pre-orders aren't live yet. This is one to watch closely if it's your preferred shopping destination.  </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>£74 @ Amazon U.K.</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T08:54:03+00:00">September 10, 2026 – 4:54 AM</time><h2 id="ps-direct-drop-is-about-to-begin">PS Direct drop is about to begin!</h2><p>One retailer that is sticking to the 10 a.m. BST drop (at least, it appears that way) is PlayStation Direct. This might be the exclusive place to get the GTA 6 DualSense in Black, so now's a good time to head over to the site and get ready if you want to pre-order directly from PlayStation. </p><p>Naturally, I'll update you the moment that stock becomes available </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-icon-blue-special-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:00:36+00:00">September 10, 2026 – 5:00 AM</time><h2 id="gta-6-dualsense-pre-orders-are-live-at-playstation-direct">GTA 6 Dualsense pre-orders are LIVE at PlayStation Direct!</h2><p>If you're not already on PS Direct, get over there now, because pre-orders are going live any second. There's even a virtual queue forming, so clearly there's plenty of shoppers jumping onto the site to grab a limited edition DualSense!</p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-icon-blue-special-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:04:54+00:00">September 10, 2026 – 5:04 AM</time><h2 id="it-could-be-a-long-wait">It could be a long wait...</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZiCKsz8NAcuWqCEwXyRc8N" name="ps-direct-gta-6-dualsense-waiting-room" alt="PlayStation Direct waiting room for the GTA 6 DualSense controller" src="https://cdn.mos.cms.futurecdn.net/ZiCKsz8NAcuWqCEwXyRc8N-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>PS Direct is open for pre-orders, but it's going to take a little while to get on the site. My current estimated wait time is 42 minutes, but I'm hoping that'll prove to be an over estimation. Remember, the GTA 6 DualSense in Black appears to be exclusive to PlayStation Direct, so join the queue now if that's the model you're looking to score today!</p><ul><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-icon-blue-special-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:09:34+00:00">September 10, 2026 – 5:09 AM</time><h2 id="if-you-want-the-white-model-don-39-t-wait-in-the-queue">If you want the White model, don't wait in the queue!</h2><p>Hello to anybody just joining us now that 10 a.m. BST has arrived. PlayStation Direct is now taking pre-orders but there's a long virtual queue in place. This retailer is the exclusive place to score the GTA 6 DualSense in Black, so if that's the one you're after, there's nothing to do but wait and hope it stays in stock.</p><p>However, if you want the white model, skip the queue, and go pre-order it right now at the other U.K. retailers that currently have it in stock already. </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><strong>£74 @ Very</strong></a></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>£74 @ Smyths Toys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:15:36+00:00">September 10, 2026 – 5:15 AM</time><h2 id="looks-like-some-uk-retailers-are-selling-out">Looks like some UK retailers are selling out!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="k9ACowFJAchxyV8SK7c238" name="gta-6-dualsense-smyths-toys-pre-order" alt="Smyths Toys listing page for GTA 6 DualSense showing "out of stock"" src="https://cdn.mos.cms.futurecdn.net/k9ACowFJAchxyV8SK7c238-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Smyths Toys)</span></figcaption></figure><p>I'm still waiting in the PS Direct queue, and will update you once I reach the front. In the meantime, I've been checking stock across the other UK retailers taking pre-orders for the GTA 6 DualSense, and it looks like Very and Smyths Toys have sold out. We knew this controller would be popular. I'm still able to add to my cart on Currys and Argos, but who knows how long these will hold. </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:31:32+00:00">September 10, 2026 – 5:31 AM</time><h2 id="i-39-m-nearly-at-the-front-of-the-ps-direct-queue">I'm nearly at the front of the PS Direct queue!</h2><p>PS Direct is telling me I've got just 8 minutes left to wait until I'm <em>finally </em>through, and can give you an update on the stock situation. Nearly there!</p></div><div class="live-content"><time datetime="2026-09-10T09:40:22+00:00">September 10, 2026 – 5:40 AM</time><h2 id="here-39-s-the-situation-at-ps-direct-and-the-links-you-need">Here's the situation at PS Direct (and the links you need)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KNmKFejEgZbaC8khvjansV" name="ps-direct-gta-6-dualsense-black" alt="PlayStation Direct listing page for the GTA 6 DualSense in Black" src="https://cdn.mos.cms.futurecdn.net/KNmKFejEgZbaC8khvjansV-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I'm onto PS Direct at long last, and the retailer is taking pre-orders for both versions of the controllers. I've got the links you need down below. I've been able to add both editions to my cart, so it appears that stock is still available! </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:50:34+00:00">September 10, 2026 – 5:50 AM</time><h2 id="stock-is-holding-at-ps-direct">Stock is holding at PS Direct!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HRQ9WzN6agHNywZTcAAHhh" name="gta-6-dualsense-ps-direct-checkout" alt="PlayStation Direct checkout screen for the GTA 6 DualSense controller" src="https://cdn.mos.cms.futurecdn.net/HRQ9WzN6agHNywZTcAAHhh-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>If you're in the virtual queue right now, keep waiting. I can confirm that stock is holding for now, even on the exclusive Black edition. I'm able to add both to my cart and reach the final stages of checkout. Let's hope stock sticks around! </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:59:40+00:00">September 10, 2026 – 5:59 AM</time><h2 id="another-retailer-sold-out-in-the-uk">Another retailer sold out in the UK</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="K4R4ujDyyZ26W5PUkhPsKo" name="gta-6-dualsense-argos-sold-out" alt="Argos checkout showing the GTA 6 DualSense sold out" src="https://cdn.mos.cms.futurecdn.net/K4R4ujDyyZ26W5PUkhPsKo-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Argos)</span></figcaption></figure><p>It appears that stock is starting to stumble in the UK, I've done my latest stock check, and it looks like <strong>Argos has now sold out</strong>. You can still add the controller to your cart, but there is no option for either collection or delivery. I'm still able to see stock at Currys and PS Direct, but don't expect this to stick around for long. If you want a GTA 6 DualSense, now is the time to pre-order!</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T10:12:07+00:00">September 10, 2026 – 6:12 AM</time><h2 id="did-the-gta-6-dualsense-just-disappear-on-ps-direct">Did the GTA 6 DualSense just disappear on PS Direct?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zzVesshfRQQ5tBvpF2MXNP" name="ps-direct-dualsense-color-options" alt="PlayStation Direct page for DualSense controllers" src="https://cdn.mos.cms.futurecdn.net/zzVesshfRQQ5tBvpF2MXNP-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>The situation has taken a mysterious turn. I just refreshed PlayStation Direct to do my latest stock level check, and the GTA 6 DualSense controllers appear to have disappeared from the retailer's DualSense page. The only limited edition pads I'm seeing now are the two Wolverine controllers. </p><p>Could this be a sign of a sell-out, or is PlayStation Direct being crushed with so many people trying to buy that the site can't handle the load? Fortunately, the direct links to the listing pages below are still working, but it does appear that PS Direct is becoming a little unstable as shoppers try to check out. </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T10:22:32+00:00">September 10, 2026 – 6:22 AM</time><h2 id="ps-direct-sells-out-of-gta-6-dualsense-but-it-39-s-not-the-one-i-expected">PS Direct sells out of GTA 6 DualSense, but it's not the one I expected!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="U2HpzEtzckL6zyhRvFi45m" name="ps-direct-gta-6-dualsense-controller" alt="PlayStation Direct listing page showing the GTA 6 DualSense controller" src="https://cdn.mos.cms.futurecdn.net/U2HpzEtzckL6zyhRvFi45m-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Looks like PS Direct's stock is reaching its limit. I'm now getting a <strong>"currently unavailable"</strong> message on the GTA 6 DualSense controller, but surprisingly, it's on the White model. </p><p>The Black one is exclusive to PS Direct, so I expect it to be the first to sell out, but it would appear the White model is the more popular of the two. For now, you can still grab the GTA 6 DualSense in Black on PS Direct, but it might only be a matter of minutes before it also sells out. </p><p>Meanwhile, if you want the controller in white,  I'm still able to add it to my cart on Currys. But again, this stock may not stick around much longer. </p><ul><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T10:32:32+00:00">September 10, 2026 – 6:32 AM</time><h2 id="restock-over-at-smyths-toys">Restock over at Smyths Toys!</h2><p>Earlier this morning, Smyths Toys appeared to sell out the GTA 6 DualSense, but seemingly the retailer found some more stock, because the "delivery" button has turned green, and you can now pre-order it again. Be quick!</p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>£74 @ Smyths Toys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T10:51:50+00:00">September 10, 2026 – 6:51 AM</time><h2 id="argos-has-also-restocked-the-gta-6-dualsense">Argos has also restocked the GTA 6 DualSense!</h2><p>Looks like several UK retailers are again taking pre-orders after initially appearing to sell out, add Argos to the list, the controller is once again available to order for delivery at the retailer. </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-09-10T11:03:28+00:00">September 10, 2026 – 7:03 AM</time><h2 id="currys-is-currently-39-out-of-stock-39">Currys is currently 'out of stock'!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="y7xyn8VYcu6qFGbJoo7BJn" name="currys-gta-6-dualsense-listing-page" alt="Currys listing page for the GTA 6 DualSense showing an "out of stock" message" src="https://cdn.mos.cms.futurecdn.net/y7xyn8VYcu6qFGbJoo7BJn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Currys)</span></figcaption></figure><p>While other retailers, like Argos and Smyths Toys have restocked, Currys is now saying "out of stock." The retailer held strong for several hours, but at least for now, it's allocation has run dry. I'll keep watching for restocks, but fear not, if you haven't locked in a pre-order yet, you've got plenty of options.</p><ul><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>£74 @ Smyths Toys</strong></a><strong> </strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>£74 @ Amazon</strong></a><strong> (CHECK STOCK)</strong></li></ul></div><div class="live-content"><time datetime="2026-09-10T11:20:20+00:00">September 10, 2026 – 7:20 AM</time><h2 id="white-model-back-in-stock-at-ps-direct">White model back in stock at PS Direct!</h2><p>It looks like fresh stock is appearing across UK retailers. PS Direct is taking pre-orders of the White mode after previously listing it as "unavailable". It's also the only place to get the Black version, so take your pick: </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T11:41:12+00:00">September 10, 2026 – 7:41 AM</time><h2 id="here-39-s-the-state-of-play-in-the-uk">Here's the state of play in the UK!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QoHfCMbRsQyJ7ycpaqgHx7" name="gta-6-dualsense-white-edition" alt="GTA 6 DualSense controller in White on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/QoHfCMbRsQyJ7ycpaqgHx7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p><strong>I'll be turning my attention to the US next</strong>, with the pre-order drop set for 10 a.m. ET Stateside, but I'm still keeping an eye on the situation in the UK, and with retailers selling out and restocking and then selling out again, here's where we currently stand:</p><ul><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White):</strong> <a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>check stock @ Smyths Toys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>check stock @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>check stock @ Amazon</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>check stock @ Currys</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><strong>check stock @ Very</strong></a></li></ul><p>So, essentially, the <strong>White model is currently sold out across retailers</strong>, but we have seen a few retailers "sell out" and then restock, so keep checking. Meanwhile, <strong>the Black controller is still available </strong>(and is exclusive to PS Direct). But I wouldn't bank on this sticking around long, so get yours ASAP.</p><p>Amazon is the main retailer to watch in the UK. It has a listing page for the GTA 6 DualSense but hasn't opened pre-orders yet. This isn't abnormal; Amazon often drops its stock later than its retailer rivals. So, if you're hoping to score the GTA-themed pad in White, I suggest keeping Amazon open. </p></div><div class="live-content"><time datetime="2026-09-10T12:01:16+00:00">September 10, 2026 – 8:01 AM</time><h2 id="the-us-is-waking-up-time-to-get-ready">The US is waking up, time to get 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="4TUTG7z8sBNcsajGFwkPaN" name="GTA 6 feature image.jpg" alt="GTA 6 featured poster" src="https://cdn.mos.cms.futurecdn.net/4TUTG7z8sBNcsajGFwkPaN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar)</span></figcaption></figure><p>Good morning to anybody in the U.S. joining the live blog now. It's 8 a.m. ET, which means the GTA 6 DualSense pre-order drop is set to arrive Stateside in two hours. However, as we saw in the U.K. already, retailers don't always stick to these timings. Several went early in the U.K., so I'm watching all the major U.S. retailers now and will keep you updated the moment pre-orders go live!</p></div><div class="live-content"><time datetime="2026-09-10T12:18:50+00:00">September 10, 2026 – 8:18 AM</time><h2 id="let-me-know-which-gta-dualsense-you-want-most">Let me know which GTA DualSense you want most!</h2><p>I'm curious to hear from you. Vote in our poll and let me know which DualSense you're looking to pre-order later today. Or if you're in the U.K., let me know if you managed to lock in your order during this morning's drop!</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eJ9orX"></div>                            </div>                            <script src="https://kwizly.com/embed/eJ9orX.js" async></script></div><div class="live-content"><time datetime="2026-09-10T12:46:27+00:00">September 10, 2026 – 8:46 AM</time><h2 id="psa-prepare-for-pre-orders-before-10-a-m-et">PSA: Prepare for pre-orders before 10 a.m. ET!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aVjN5Bt4xVayURR3x8Bihh" name="gta-6-dualsense-controller-black" alt="GTA 6 DualSense in Black on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/aVjN5Bt4xVayURR3x8Bihh-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p>A word of advice, if you're hoping to secure a GTA 6 DualSense today, don't bank on the 10 a.m. ET drop timing being wholly accurate. </p><p>We've seen with previous pre-order events that retailers can be unpredictable, sometimes dropping early, sometimes waiting until after the initial rush. Pre-orders could feasibly start pretty much any time from now. </p><p>The good news is, if you're following this live blog, you're already in the right spot, as I'll be updating you with all the latest stock information throughout.</p></div><div class="live-content"><time datetime="2026-09-10T13:03:33+00:00">September 10, 2026 – 9:03 AM</time><h2 id="1-hour-until-the-us-pre-order-drop">1 hour until the US pre-order drop!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QoHfCMbRsQyJ7ycpaqgHx7" name="gta-6-dualsense-white-edition" alt="GTA 6 DualSense controller in White on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/QoHfCMbRsQyJ7ycpaqgHx7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p>Just 60 minutes until pre-orders are scheduled to begin in the U.S., but remember, retailers don't always play by the rules, and an early drop could happen, and the odds suggest that a few (probably Amazon) will go later!</p></div><div class="live-content"><time datetime="2026-09-10T13:10:36+00:00">September 10, 2026 – 9:10 AM</time><h2 id="target-39-s-listing-page-is-already-up">Target's listing page is already up!</h2><p>Most retailers haven't yet launched listings pages for the GTA 6 DualSense, but Target has broken rank, and it's page is up. You can't pre-order the controller yet, and there's a "preorders have sold out" message, but I'm assuming this is an error because there are no reports of the retailer ever taking pre-orders. I expect this page will be updated around 10 a.m. ET. </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow"><strong>$84 @ Target</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T13:24:41+00:00">September 10, 2026 – 9:24 AM</time><h2 id="another-uk-retailer-just-came-to-the-party">Another UK retailer just came to the party!</h2><p>Briefly returning to the U.K., EE is now taking pre-orders of the GTA 6 DualSense. This is good news because all other major retailers are currently sold out. I can't say that EE would be the first place I'd check for limited edition gaming items, but hey, if you missed out earlier, go grab one now!</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://ee.co.uk/products/playstation-5-gta-vi-white-edition-dualsense" target="_blank" rel="nofollow"><strong>£74 @ EE</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T13:43:42+00:00">September 10, 2026 – 9:43 AM</time><h2 id="playstation-direct-pages-are-live">PlayStation Direct pages are LIVE!</h2><p>PS Direct is getting ready for the pre-order drop, with it's listing pages for the GTA 6 DualSense in both White and Black (Which is exclusive to the retailer) now live. Below are the all important links you'll need at 10 a.m., get ready!</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T13:46:02+00:00">September 10, 2026 – 9:46 AM</time><h2 id="i-want-to-hear-from-you">I want to hear from you!</h2><p>With just 15 minutes until the pre-order chaos kicks off in the U.S., let me know which GTA 6 DualSense controller are you hoping to grab very soon:</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eJ9orX"></div>                            </div>                            <script src="https://kwizly.com/embed/eJ9orX.js" async></script></div><div class="live-content"><time datetime="2026-09-10T13:55:29+00:00">September 10, 2026 – 9:55 AM</time><h2 id="it-39-s-almost-time-here-39-s-the-ps-direct-links-you-need">It's almost time, here's the PS Direct links you need</h2><p>Just 5 minutes until PS Direct (and potentially other retailers) start taking GTA 6 DualSense controller pre-orders. Below are the links you need to get onto the site and get your pre-order secured at 10 a.m. ET. If the site gets crushed Sony will likely opt to open a virtual waiting room to avoid any crashing. </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:03:14+00:00">September 10, 2026 – 10:03 AM</time><h2 id="ps-direct-has-opened-a-queue">PS Direct has opened a queue! </h2><p>It was expected, the demand for the GTA 6 DualSense is overwhelming PlayStation Direct and a virtual waiting room has appear, slightly worryingly, I'm getting a "line is paused" message, but hopefully I'll have an estimated time to get onto the site in a matter of minutes. </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:10:13+00:00">September 10, 2026 – 10:10 AM</time><h2 id="best-buy-is-taking-pre-orders-quick">Best Buy is taking pre-orders! Quick!</h2><p>If you're stuck at the back of the PS Direct queue, head over to Best Buy now as the retailer is taking pre-orders of the White model.</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><strong>$84 @ Best Buy</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:18:23+00:00">September 10, 2026 – 10:18 AM</time><h2 id="ps-direct-is-struggling-so-try-these-alternative-options">PS Direct is struggling, so try these alternative options</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="553dgptyNJ8JsYWAt2dGkE" name="ps-direct-queue-gta-6-controllers" alt="PlayStation Direct virtual waiting room for the GTA 6 DualSense pre-orders" src="https://cdn.mos.cms.futurecdn.net/553dgptyNJ8JsYWAt2dGkE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I'm seeing a queue time of more than an hour on PlayStation Direct, and if you're also stuck waiting, then you can go pre-orders right now at GameStop and Best Buy using the links below. But remember the Black model is exclusive to PS Direct. However, if it's the White you're after, go grab one!</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><strong>$84 @ Best Buy</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:25:04+00:00">September 10, 2026 – 10:25 AM</time><h2 id="try-this-queue-skip-method-on-ps-direct">Try this queue skip method on PS Direct!</h2><p>I'm seeing reports online that you can bypass the PlayStation Direct queue by heading to the <a href="https://direct.playstation.com/en-us/latest" target="_blank" rel="nofollow"><strong>"What's New" section</strong></a><strong> </strong>and then adding a GTA 6 controller directly to your cart from there. I'm unable to check if this method actually works, but if you've got a long wait in the queue, then give it a try!</p><p>You will (reportedly) need to be signed into a PlayStation account for the "add to cart" button to appear. Let me know in the comments if this method works for you!</p><ul><li><strong>GTA 6 DualSense (Black/White): </strong><a href="https://direct.playstation.com/en-us/latest" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:29:38+00:00">September 10, 2026 – 10:29 AM</time><h2 id="walmart-pre-orders-are-live">Walmart pre-orders are LIVE!</h2><p>Walmart is the latest retailer to join the pre-order party, if you were holding out for this one, then now is the time to secure you GTA 6 controller! </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" rel="nofollow"><strong>$84 @ Walmart</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:43:23+00:00">September 10, 2026 – 10:43 AM</time><h2 id="here-39-s-all-the-pre-order-links-you-need">Here's all the pre-order links you need!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QoHfCMbRsQyJ7ycpaqgHx7" name="gta-6-dualsense-white-edition" alt="GTA 6 DualSense controller in White on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/QoHfCMbRsQyJ7ycpaqgHx7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p>After a hectic 30 minutes, here's all the GTA 6 DualSense pre-order links you need. We're still waiting on something from Amazon, and any signs that Target has more stock (it currently says sold out), and there's a <em>long </em>queue on PS Direct, but you can head straight to Best Buy, Walmart and GameStop and grab the controller in White. The Black model is exclusive to PS Direct.</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><strong>$84 @ Best Buy </strong></a><strong>(IN STOCK)</strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a><strong> (IN STOCK)</strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong> </a><strong>(IN STOCK)</strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow"><strong>check stock @ Target</strong></a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-09-10T15:00:59+00:00">September 10, 2026 – 11:00 AM</time><h2 id="finally-at-the-front-of-the-ps-direct-queue">Finally at the front of the PS Direct queue!</h2><p>It took almost an hour, but I've got onto PS Direct, and it appears that both the White and Black GTA 6 DualSense controllers are still in stock. You will need to sign in to buy, so make sure you know your details beforehand.</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T15:24:43+00:00">September 10, 2026 – 11:24 AM</time><h2 id="amazon-has-woken-up">Amazon has woken up!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="VKJuBJdcGuY5sj4thDBPfX" name="gta-6-dualsense-amazon-listing" alt="Amazon listing page for the GTA 6 DualSense" src="https://cdn.mos.cms.futurecdn.net/VKJuBJdcGuY5sj4thDBPfX-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Amazon kept us waiting, but at long last, the online retailer is taking pre-orders. If you haven't grabbed a GTA 6 DualSense yet, here's the link: </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T15:49:35+00:00">September 10, 2026 – 11:49 AM</time><h2 id="best-buy-stock-appears-to-be-running-out">Best Buy stock appears to be running out!</h2><p>We might have our first sell out in the U.S. soon, Best Buy is jumping between "pre order now" and "coming soon," which suggests it's stock levels are dwindling. I'm still able to get a "pre order now" button with a few refreshes, but that might not last much longer. Fortunately, Amazon just came online, giving you an alternative retailer, if you still need a pre-order.</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T16:33:14+00:00">September 10, 2026 – 12:33 PM</time><h2 id="here-39-s-the-state-of-play-in-the-us-and-uk-right-now">Here's the state of play in the US (and UK) right now!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QoHfCMbRsQyJ7ycpaqgHx7" name="gta-6-dualsense-white-edition" alt="GTA 6 DualSense controller in White on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/QoHfCMbRsQyJ7ycpaqgHx7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p>My day is winding down, but I've done a final sweep of stock across all major retailers in the U.S. and U.K. There's plenty of availability in the U.S., with the DualSense available at <em>most </em>retailers (Best Buy and Target are sold out). </p><p>Meanwhile, in the U.K, options are very limited. EE is still taking pre-orders, and Amazon has a listing page, but so far today, there have been no signs of any stock. PlayStation Direct took the longest but is now sold out in the U.K.</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a><strong> </strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong> </a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li></ul><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://ee.co.uk/products/playstation-5-gta-vi-white-edition-dualsense" target="_blank" rel="nofollow"><strong>£74 @ EE</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>check stock @ Amazon</strong></a></li></ul></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/news/live/gta-6-ps5-dualsense-controller-pre-orders-live-updates</link>
                                                                            <description>
                            <![CDATA[ GTA 6 DualSense controller pre-orders start now, and I've got live updates to help you secure these limited-edition PS5 pads. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">gMx9d6mondgj8CYiKf6XRT</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EPt7Jojwcu8g3LTUtBYAnA-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 10 Sep 2026 08:08:24 +0000</pubDate>                                                                                                                                <updated>Thu, 10 Sep 2026 16:38:49 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EPt7Jojwcu8g3LTUtBYAnA-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony / Rockstar Games]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[GTA 6 DualSense Controllers on a Vice City themed background]]></media:description>                                                            <media:text><![CDATA[GTA 6 DualSense Controllers on a Vice City themed background]]></media:text>
                                <media:title type="plain"><![CDATA[GTA 6 DualSense Controllers on a Vice City themed background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EPt7Jojwcu8g3LTUtBYAnA-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="live-content"><div  class="fancy-box"><div class="fancy_box-title">GTA 6 DualSense pre-orders</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="EPt7Jojwcu8g3LTUtBYAnA" name="gta-dualsense-controllers-ps5" caption="" alt="GTA 6 DualSense Controllers on a Vice City themed background" src="https://cdn.mos.cms.futurecdn.net/EPt7Jojwcu8g3LTUtBYAnA-1920-80.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: Sony / Rockstar Games)</span></figcaption></figure><p class="fancy-box__body-text"><strong>US (pre-orders now LIVE)</strong><br><em>Amazon: </em><a data-analytics-id="inline-link" href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><em>pre-order now</em></a><br><em>PS Direct: </em><a data-analytics-id="inline-link" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><em>pre-order now</em></a><br><em>Best Buy: </em><a data-analytics-id="inline-link" href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><em>pre-order now</em></a><br><em>Walmart: </em><a data-analytics-id="inline-link" href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><em>pre-order now</em></a><br>----------------------------------<br><strong>UK (pre-orders now LIVE)</strong><br><em>Amazon: </em><a data-analytics-id="inline-link" href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><em>check stock now</em></a><br><em>PS Direct: </em><a data-analytics-id="inline-link" href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><em>pre-order now</em></a><br>----------------------------------<br>1. <a data-analytics-id="inline-link" href="#section-gta-6-dualsense-controller-pre-orders-quick-links">Quick Links</a><br>2. <a data-analytics-id="inline-link" href="#section-gta-6-dualsense-controller-pre-orders-full-retailer-listings">Retailer listings</a><br>3. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-console-and-controllers-uk-pre-orders">U.K. pre-orders</a><br>4. <a data-analytics-id="inline-link" href="#section-live-updates">LIVE: Latest updates</a></p></div></div><p>To mark the release of a little game called Grand Theft Auto VI, PlayStation is launching limited-edition PS5 DualSense controllers. <strong>GTA 6 DualSense pre-orders are now live in the U.S. and the U.K.</strong></p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a></li></ul><p>U.S. pre-orders kicked off at 10 a.m. ET, and for now, there is stock available at multiple retailers including <a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>Amazon</strong></a>, <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><strong>Best Buy</strong></a> and <a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><strong>Walmart</strong></a>. The Black edition is exclusive to <a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>PlayStation Direct</strong></a>.</p><p><strong>In the U.K., most</strong> <strong>retailers are sold out </strong>after pre-orders went live at 10 a.m. BST. You can still pre-order the Black variant at <a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>PlayStation Direct</strong></a>, and <a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>Amazon</strong></a> has a listing page but hasn't taken pre-orders yet. So watch the retailer closely; it could have stock soon.</p><p>This latest special edition PS5 pad comes in two variants, Black and White, and gives the DualSense controller a GTA 6-themed makeover. You’ve got the GTA 6 logo on the touchpad, palm trees adorning the sides, and a "shimmering" finish to cap it all off. In PlayStation’s own words, the controllers "capture that unmistakable Vice City energy."</p><p>Like anything GTA 6 related, these DualSense controllers are likely to sell out fast, but this isn’t my first rodeo. I’ve played (and won) the pre-order game multiple times. I’ve covered major pre-orders for a slew of in-demand items over the years, all in an effort to help regular gamers get their hands on limited edition gear rather than those nefarious resellers.</p><p>Below are all the retailer links you’ll need, and the latest live stock update to make sure you get your GTA 6 PS5 controller.</p><h3 class="article-body__section" id="section-gta-6-dualsense-controller-pre-orders-quick-links"><span>GTA 6 DualSense controller pre-orders - quick links</span></h3><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a><strong> </strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong> </a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><strong>check stock @ Best Buy </strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow"><strong>check stock @ Target</strong></a></li></ul><h3 class="article-body__section" id="section-gta-6-dualsense-controller-pre-orders-full-retailer-listings"><span>GTA 6 DualSense controller pre-orders - full retailer listings</span></h3><div class="product"><a data-dimension112="c4fc3adc-ac64-11f1-93ca-0f58826d1f39" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecjfqi2UgurxrA42rX7pML" name="Amazon-Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ecjfqi2UgurxrA42rX7pML-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow" data-dimension112="c4fc3adc-ac64-11f1-93ca-0f58826d1f39" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br>Amazon was late to the party, but it is now taking GTA 6 DualSense pre-orders. If you're a Prime member, this is the obvious place to secure yours!<a class="view-deal button" href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow" data-dimension112="c4fc3adc-ac64-11f1-93ca-0f58826d1f39" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3bcc-ac64-11f1-b70e-89e74b5147dd" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:960px;"><p class="vanilla-image-block" style="padding-top:93.65%;"><img id="Bi2iDjTxUHTUQK9FHZ4W8D" name="Walmart logo.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Bi2iDjTxUHTUQK9FHZ4W8D-1920-80.jpeg" mos="" align="middle" fullscreen="" width="960" height="899" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow" data-dimension112="c4fc3bcc-ac64-11f1-b70e-89e74b5147dd" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br>Walmart just went live with its GTA 6 DualSense pre-orders; you can secure your controllers from the retailer right now.<a class="view-deal button" href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow" data-dimension112="c4fc3bcc-ac64-11f1-b70e-89e74b5147dd" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="dd66d302-ad22-11f1-bbab-d56f9dafb593" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EXpDruhoaAuddyN6RUCGyb" name="GameStop logo.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EXpDruhoaAuddyN6RUCGyb-1920-80.png" mos="" align="middle" fullscreen="" width="400" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow" data-dimension112="dd66d302-ad22-11f1-bbab-d56f9dafb593" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br>GameStop is now taking pre-orders of the GTA 6 DualSense in White; it costs $84. <a class="view-deal button" href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow" data-dimension112="dd66d302-ad22-11f1-bbab-d56f9dafb593" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3a64-ac64-11f1-a4d0-03e5a8c457af" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-white-for-ps5-pc-mac-mobile" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-white-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="c4fc3a64-ac64-11f1-a4d0-03e5a8c457af" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br><strong>PlayStation Direct has GTA 6 DualSense pre-orders now</strong>. There's a virtual queue in place, and this is the only retailer where you can get the exclusive Black edition.<a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-white-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="c4fc3a64-ac64-11f1-a4d0-03e5a8c457af" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3b5e-ac64-11f1-926e-5f8ad0762efc" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow" data-dimension112="c4fc3b5e-ac64-11f1-926e-5f8ad0762efc" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br>Best Buy started taking GTA 6 DualSense pre-orders at 10 a.m., and after a few hours, appears to have sold out, with its buy button replaced with "coming soon."<a class="view-deal button" href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow" data-dimension112="c4fc3b5e-ac64-11f1-926e-5f8ad0762efc" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3c3a-ac64-11f1-85d8-5d350aed0243" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84" href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:129.60%;"><img id="J4ioQbCcWu8knu9FrYgeRT" name="purepng.com-target-logologobrand-logoiconslogos-251519939485oxces" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J4ioQbCcWu8knu9FrYgeRT-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2592" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow" data-dimension112="c4fc3c3a-ac64-11f1-85d8-5d350aed0243" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">DualSense Controller: $84</a></strong><br>Target is another retailer to check if you're hunting for a GTA 6 DualSense. It normally drops its stock in good time, so keep an eye on it around 10 a.m. ET in case the listing goes live.<a class="view-deal button" href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow" data-dimension112="c4fc3c3a-ac64-11f1-85d8-5d350aed0243" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="$84">View Deal</a></p></div><h3 class="article-body__section" id="section-gta-6-dualsense-controller-uk-pre-orders"><span>GTA 6 DualSense controller UK pre-orders</span></h3><p><em>U.K. pre-orders began at 10 a.m. BST with most retailers selling out after a few hours. However, restocks could appear at any moment so check these links, and Amazon is still yet to go live with its pre-orders.</em></p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://ee.co.uk/products/playstation-5-gta-vi-white-edition-dualsense" target="_blank" rel="nofollow"><strong>£74 @ EE</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>check stock @ Amazon</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>check stock @ Smyths Toys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>check stock @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>check stock @ Currys</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><strong>check stock @ Very</strong></a></li><li><strong>GTA 6 DualSense (White):</strong> <a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li></ul><div class="product"><a data-dimension112="c4fc3d16-ac64-11f1-b939-85b23f8cf7c2" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecjfqi2UgurxrA42rX7pML" name="Amazon-Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ecjfqi2UgurxrA42rX7pML-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow" data-dimension112="c4fc3d16-ac64-11f1-b939-85b23f8cf7c2" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>Amazon is the world's biggest online retailer and has launched a listing page for the GTA 6 DualSense. <strong>Pre-orders aren't live yet</strong>, but could arrive any moment. This is the retailer to watch.<a class="view-deal button" href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow" data-dimension112="c4fc3d16-ac64-11f1-b939-85b23f8cf7c2" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3d84-ac64-11f1-945d-c905e040642e" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" 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="fcoMFvDbzgfzqaiQW5MiR3" name="Currys logo.JPG" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/fcoMFvDbzgfzqaiQW5MiR3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow" data-dimension112="c4fc3d84-ac64-11f1-945d-c905e040642e" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>Currys specialises in all things tech, and that includes the GTA 6 DualSense. However, as of now, it's <strong>sold out </strong>of pre-orders. I'm watching out for a restock.<a class="view-deal button" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow" data-dimension112="c4fc3d84-ac64-11f1-945d-c905e040642e" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3cb2-ac64-11f1-9e4a-e3862ee50721" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="c4fc3cb2-ac64-11f1-9e4a-e3862ee50721" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>PlayStation Direct is now sold out of pre-orders, and it's the <strong>exclusive retailer for the Black edition. </strong>If you want that one, you'll need to hope for a restock. <a class="view-deal button" href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="c4fc3cb2-ac64-11f1-9e4a-e3862ee50721" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="80b8e842-acf1-11f1-84ce-2930f5b99925" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://www.argos.co.uk/product/9706934" 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="mR6gMuPnQxkcEgakbtC2Kn" name="Argos" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mR6gMuPnQxkcEgakbtC2Kn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2048" height="2048" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow" data-dimension112="80b8e842-acf1-11f1-84ce-2930f5b99925" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>Argos is another U.K. retailer that dropped its pre-orders early and has since <strong>sold out</strong>, but it's already restocked once today. Could a third drop follow? I'm watching closely just in case.<a class="view-deal button" href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow" data-dimension112="80b8e842-acf1-11f1-84ce-2930f5b99925" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3e60-ac64-11f1-8776-9772ade8eed7" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:738px;"><p class="vanilla-image-block" style="padding-top:33.74%;"><img id="cviyb34Txub5MugdCdTP4X" name="smyths-toys-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cviyb34Txub5MugdCdTP4X-1920-80.png" mos="" align="middle" fullscreen="" width="738" height="249" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow" data-dimension112="c4fc3e60-ac64-11f1-8776-9772ade8eed7" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>Smyths Toys is another UK retailer that took GTA 6 DualSense pre-orders before the 10 a.m. BST drop time. It's currently <strong>sold out</strong>, but has already restocked once.<a class="view-deal button" href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow" data-dimension112="c4fc3e60-ac64-11f1-8776-9772ade8eed7" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="c4fc3df2-ac64-11f1-885a-d7f8cb786b41" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74" href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="Kme7twv2ZTuVy3i7F33SWo" name="Very_Logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Kme7twv2ZTuVy3i7F33SWo-1920-80.png" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow" data-dimension112="c4fc3df2-ac64-11f1-885a-d7f8cb786b41" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">DualSense Controller: £74</a></strong><br>Very began taking GTA 6 DualSense today (Sept. 9), and now appears to be <strong>sold out</strong>; however, there could be restocks, so it's worth checking stock.<a class="view-deal button" href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow" data-dimension112="c4fc3df2-ac64-11f1-885a-d7f8cb786b41" data-action="Deal Block" data-label="DualSense Controller" data-dimension48="DualSense Controller" data-dimension25="£74">View Deal</a></p></div><h3 class="article-body__section" id="section-live-updates"><span>Live updates</span></h3></div><div class="live-content"><time datetime="2026-09-10T08:11:05+00:00">September 10, 2026 – 4:11 AM</time><h2 id="welcome">Welcome!</h2><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="aTyNXd6bLMr7vHwNjtATy5" name="GTA 6 - Lucia.jpg" alt="GTA 6" src="https://cdn.mos.cms.futurecdn.net/aTyNXd6bLMr7vHwNjtATy5-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>Good morning! Welcome to Tom's Guide of the GTA 6 DualSense pre-order drop. The controllers are set to be available in the U.K. in less than an hour (at 10 a.m. BST), with the U.S. drop following at 10 a.m. ET / 7 a.m PT. I'm here to bring you all the updates and stock information to help you secure yours. </p></div><div class="live-content"><time datetime="2026-09-10T08:15:56+00:00">September 10, 2026 – 4:15 AM</time><h2 id="uk-retailers-drop-early">UK retailers drop early!</h2><p>Well, pre-orders weren't supposed to start until 10 a.m. BST, but multiple retailers in the U.K. have jumped the gun, and you can pre-order a GTA 6 DualSense now at Very, Currys and Argos!</p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><strong>£74 @ Very</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T08:27:46+00:00">September 10, 2026 – 4:27 AM</time><h2 id="another-uk-retailer-is-taking-pre-orders-now">Another UK retailer is taking pre-orders now!</h2><p>It's all happening this morning, the 10 a.m. BST drop is well and truly out of the window. Smyths Toys is the latest stockiest to push the button and start taking pre-orders of the GTA 6 DualSense. You can lock in yours right now!</p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>£74 @ Smyths Toys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T08:42:06+00:00">September 10, 2026 – 4:42 AM</time><h2 id="the-black-model-is-mia-in-the-uk-so-far">The Black model is MIA in the UK (so far)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aVjN5Bt4xVayURR3x8Bihh" name="gta-6-dualsense-controller-black" alt="GTA 6 DualSense in Black on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/aVjN5Bt4xVayURR3x8Bihh-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p>If you want to pre-order the GTA 6 DualSense in White, you've got plenty of options in the U.K. right now (see links below). However, so far, I've not spotted any retailers that is offering the Black version. </p><p>Perhaps this one will be exclusive to PlayStation Direct? That is a strategy PlayStation has used before during limited-edition pre-order drops. PlayStation likes to keep at least one item exclusive to its own online storefront (it did similar during the Wolverine PS5 range pre-order drop). </p><p>If you're holding out for the GTA 6 DualSense in Black, <strong>PS Direct is set to take pre-orders from 10 a.m. BST</strong>, and I'm watching closely for any retailer listings for this one!</p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><strong>£74 @ Very</strong></a></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>£74 @ Smyths Toys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T08:46:09+00:00">September 10, 2026 – 4:46 AM</time><h2 id="amazon-u-k-39-s-listing-page-is-live-but-no-pre-orders-yet">Amazon U.K.'s listing page is live, but no pre-orders yet!</h2><p>Looks like Amazon U.K. will be getting in on the pre-order action at some point. The GTA 6 DualSense now has a listing page on the online mega-retailer, but Amazon pre-orders aren't live yet. This is one to watch closely if it's your preferred shopping destination.  </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>£74 @ Amazon U.K.</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T08:54:03+00:00">September 10, 2026 – 4:54 AM</time><h2 id="ps-direct-drop-is-about-to-begin">PS Direct drop is about to begin!</h2><p>One retailer that is sticking to the 10 a.m. BST drop (at least, it appears that way) is PlayStation Direct. This might be the exclusive place to get the GTA 6 DualSense in Black, so now's a good time to head over to the site and get ready if you want to pre-order directly from PlayStation. </p><p>Naturally, I'll update you the moment that stock becomes available </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-icon-blue-special-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:00:36+00:00">September 10, 2026 – 5:00 AM</time><h2 id="gta-6-dualsense-pre-orders-are-live-at-playstation-direct">GTA 6 Dualsense pre-orders are LIVE at PlayStation Direct!</h2><p>If you're not already on PS Direct, get over there now, because pre-orders are going live any second. There's even a virtual queue forming, so clearly there's plenty of shoppers jumping onto the site to grab a limited edition DualSense!</p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-icon-blue-special-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:04:54+00:00">September 10, 2026 – 5:04 AM</time><h2 id="it-could-be-a-long-wait">It could be a long wait...</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZiCKsz8NAcuWqCEwXyRc8N" name="ps-direct-gta-6-dualsense-waiting-room" alt="PlayStation Direct waiting room for the GTA 6 DualSense controller" src="https://cdn.mos.cms.futurecdn.net/ZiCKsz8NAcuWqCEwXyRc8N-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>PS Direct is open for pre-orders, but it's going to take a little while to get on the site. My current estimated wait time is 42 minutes, but I'm hoping that'll prove to be an over estimation. Remember, the GTA 6 DualSense in Black appears to be exclusive to PlayStation Direct, so join the queue now if that's the model you're looking to score today!</p><ul><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-icon-blue-special-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:09:34+00:00">September 10, 2026 – 5:09 AM</time><h2 id="if-you-want-the-white-model-don-39-t-wait-in-the-queue">If you want the White model, don't wait in the queue!</h2><p>Hello to anybody just joining us now that 10 a.m. BST has arrived. PlayStation Direct is now taking pre-orders but there's a long virtual queue in place. This retailer is the exclusive place to score the GTA 6 DualSense in Black, so if that's the one you're after, there's nothing to do but wait and hope it stays in stock.</p><p>However, if you want the white model, skip the queue, and go pre-order it right now at the other U.K. retailers that currently have it in stock already. </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><strong>£74 @ Very</strong></a></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>£74 @ Smyths Toys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:15:36+00:00">September 10, 2026 – 5:15 AM</time><h2 id="looks-like-some-uk-retailers-are-selling-out">Looks like some UK retailers are selling out!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="k9ACowFJAchxyV8SK7c238" name="gta-6-dualsense-smyths-toys-pre-order" alt="Smyths Toys listing page for GTA 6 DualSense showing "out of stock"" src="https://cdn.mos.cms.futurecdn.net/k9ACowFJAchxyV8SK7c238-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Smyths Toys)</span></figcaption></figure><p>I'm still waiting in the PS Direct queue, and will update you once I reach the front. In the meantime, I've been checking stock across the other UK retailers taking pre-orders for the GTA 6 DualSense, and it looks like Very and Smyths Toys have sold out. We knew this controller would be popular. I'm still able to add to my cart on Currys and Argos, but who knows how long these will hold. </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:31:32+00:00">September 10, 2026 – 5:31 AM</time><h2 id="i-39-m-nearly-at-the-front-of-the-ps-direct-queue">I'm nearly at the front of the PS Direct queue!</h2><p>PS Direct is telling me I've got just 8 minutes left to wait until I'm <em>finally </em>through, and can give you an update on the stock situation. Nearly there!</p></div><div class="live-content"><time datetime="2026-09-10T09:40:22+00:00">September 10, 2026 – 5:40 AM</time><h2 id="here-39-s-the-situation-at-ps-direct-and-the-links-you-need">Here's the situation at PS Direct (and the links you need)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="KNmKFejEgZbaC8khvjansV" name="ps-direct-gta-6-dualsense-black" alt="PlayStation Direct listing page for the GTA 6 DualSense in Black" src="https://cdn.mos.cms.futurecdn.net/KNmKFejEgZbaC8khvjansV-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I'm onto PS Direct at long last, and the retailer is taking pre-orders for both versions of the controllers. I've got the links you need down below. I've been able to add both editions to my cart, so it appears that stock is still available! </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:50:34+00:00">September 10, 2026 – 5:50 AM</time><h2 id="stock-is-holding-at-ps-direct">Stock is holding at PS Direct!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HRQ9WzN6agHNywZTcAAHhh" name="gta-6-dualsense-ps-direct-checkout" alt="PlayStation Direct checkout screen for the GTA 6 DualSense controller" src="https://cdn.mos.cms.futurecdn.net/HRQ9WzN6agHNywZTcAAHhh-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>If you're in the virtual queue right now, keep waiting. I can confirm that stock is holding for now, even on the exclusive Black edition. I'm able to add both to my cart and reach the final stages of checkout. Let's hope stock sticks around! </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T09:59:40+00:00">September 10, 2026 – 5:59 AM</time><h2 id="another-retailer-sold-out-in-the-uk">Another retailer sold out in the UK</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="K4R4ujDyyZ26W5PUkhPsKo" name="gta-6-dualsense-argos-sold-out" alt="Argos checkout showing the GTA 6 DualSense sold out" src="https://cdn.mos.cms.futurecdn.net/K4R4ujDyyZ26W5PUkhPsKo-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Argos)</span></figcaption></figure><p>It appears that stock is starting to stumble in the UK, I've done my latest stock check, and it looks like <strong>Argos has now sold out</strong>. You can still add the controller to your cart, but there is no option for either collection or delivery. I'm still able to see stock at Currys and PS Direct, but don't expect this to stick around for long. If you want a GTA 6 DualSense, now is the time to pre-order!</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T10:12:07+00:00">September 10, 2026 – 6:12 AM</time><h2 id="did-the-gta-6-dualsense-just-disappear-on-ps-direct">Did the GTA 6 DualSense just disappear on PS Direct?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zzVesshfRQQ5tBvpF2MXNP" name="ps-direct-dualsense-color-options" alt="PlayStation Direct page for DualSense controllers" src="https://cdn.mos.cms.futurecdn.net/zzVesshfRQQ5tBvpF2MXNP-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>The situation has taken a mysterious turn. I just refreshed PlayStation Direct to do my latest stock level check, and the GTA 6 DualSense controllers appear to have disappeared from the retailer's DualSense page. The only limited edition pads I'm seeing now are the two Wolverine controllers. </p><p>Could this be a sign of a sell-out, or is PlayStation Direct being crushed with so many people trying to buy that the site can't handle the load? Fortunately, the direct links to the listing pages below are still working, but it does appear that PS Direct is becoming a little unstable as shoppers try to check out. </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T10:22:32+00:00">September 10, 2026 – 6:22 AM</time><h2 id="ps-direct-sells-out-of-gta-6-dualsense-but-it-39-s-not-the-one-i-expected">PS Direct sells out of GTA 6 DualSense, but it's not the one I expected!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="U2HpzEtzckL6zyhRvFi45m" name="ps-direct-gta-6-dualsense-controller" alt="PlayStation Direct listing page showing the GTA 6 DualSense controller" src="https://cdn.mos.cms.futurecdn.net/U2HpzEtzckL6zyhRvFi45m-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Looks like PS Direct's stock is reaching its limit. I'm now getting a <strong>"currently unavailable"</strong> message on the GTA 6 DualSense controller, but surprisingly, it's on the White model. </p><p>The Black one is exclusive to PS Direct, so I expect it to be the first to sell out, but it would appear the White model is the more popular of the two. For now, you can still grab the GTA 6 DualSense in Black on PS Direct, but it might only be a matter of minutes before it also sells out. </p><p>Meanwhile, if you want the controller in white,  I'm still able to add it to my cart on Currys. But again, this stock may not stick around much longer. </p><ul><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T10:32:32+00:00">September 10, 2026 – 6:32 AM</time><h2 id="restock-over-at-smyths-toys">Restock over at Smyths Toys!</h2><p>Earlier this morning, Smyths Toys appeared to sell out the GTA 6 DualSense, but seemingly the retailer found some more stock, because the "delivery" button has turned green, and you can now pre-order it again. Be quick!</p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>£74 @ Smyths Toys</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T10:51:50+00:00">September 10, 2026 – 6:51 AM</time><h2 id="argos-has-also-restocked-the-gta-6-dualsense">Argos has also restocked the GTA 6 DualSense!</h2><p>Looks like several UK retailers are again taking pre-orders after initially appearing to sell out, add Argos to the list, the controller is once again available to order for delivery at the retailer. </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-09-10T11:03:28+00:00">September 10, 2026 – 7:03 AM</time><h2 id="currys-is-currently-39-out-of-stock-39">Currys is currently 'out of stock'!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="y7xyn8VYcu6qFGbJoo7BJn" name="currys-gta-6-dualsense-listing-page" alt="Currys listing page for the GTA 6 DualSense showing an "out of stock" message" src="https://cdn.mos.cms.futurecdn.net/y7xyn8VYcu6qFGbJoo7BJn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Currys)</span></figcaption></figure><p>While other retailers, like Argos and Smyths Toys have restocked, Currys is now saying "out of stock." The retailer held strong for several hours, but at least for now, it's allocation has run dry. I'll keep watching for restocks, but fear not, if you haven't locked in a pre-order yet, you've got plenty of options.</p><ul><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>£74 @ Smyths Toys</strong></a><strong> </strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>£74 @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense: </strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>£74 @ Amazon</strong></a><strong> (CHECK STOCK)</strong></li></ul></div><div class="live-content"><time datetime="2026-09-10T11:20:20+00:00">September 10, 2026 – 7:20 AM</time><h2 id="white-model-back-in-stock-at-ps-direct">White model back in stock at PS Direct!</h2><p>It looks like fresh stock is appearing across UK retailers. PS Direct is taking pre-orders of the White mode after previously listing it as "unavailable". It's also the only place to get the Black version, so take your pick: </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T11:41:12+00:00">September 10, 2026 – 7:41 AM</time><h2 id="here-39-s-the-state-of-play-in-the-uk">Here's the state of play in the UK!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QoHfCMbRsQyJ7ycpaqgHx7" name="gta-6-dualsense-white-edition" alt="GTA 6 DualSense controller in White on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/QoHfCMbRsQyJ7ycpaqgHx7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p><strong>I'll be turning my attention to the US next</strong>, with the pre-order drop set for 10 a.m. ET Stateside, but I'm still keeping an eye on the situation in the UK, and with retailers selling out and restocking and then selling out again, here's where we currently stand:</p><ul><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White):</strong> <a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition/p/265409" target="_blank" rel="nofollow"><strong>check stock @ Smyths Toys</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.argos.co.uk/product/9706934" target="_blank" rel="nofollow"><strong>check stock @ Argos</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>check stock @ Amazon</strong></a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-gta-vi-limited-edition-10311140.html" target="_blank" rel="nofollow"><strong>check stock @ Currys</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.very.co.uk/playstation-playstationreg5nbspdualsensereg-wireless-controller-ndash-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-amp-mobile/1601365488.prd" target="_blank" rel="nofollow"><strong>check stock @ Very</strong></a></li></ul><p>So, essentially, the <strong>White model is currently sold out across retailers</strong>, but we have seen a few retailers "sell out" and then restock, so keep checking. Meanwhile, <strong>the Black controller is still available </strong>(and is exclusive to PS Direct). But I wouldn't bank on this sticking around long, so get yours ASAP.</p><p>Amazon is the main retailer to watch in the UK. It has a listing page for the GTA 6 DualSense but hasn't opened pre-orders yet. This isn't abnormal; Amazon often drops its stock later than its retailer rivals. So, if you're hoping to score the GTA-themed pad in White, I suggest keeping Amazon open. </p></div><div class="live-content"><time datetime="2026-09-10T12:01:16+00:00">September 10, 2026 – 8:01 AM</time><h2 id="the-us-is-waking-up-time-to-get-ready">The US is waking up, time to get 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="4TUTG7z8sBNcsajGFwkPaN" name="GTA 6 feature image.jpg" alt="GTA 6 featured poster" src="https://cdn.mos.cms.futurecdn.net/4TUTG7z8sBNcsajGFwkPaN-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar)</span></figcaption></figure><p>Good morning to anybody in the U.S. joining the live blog now. It's 8 a.m. ET, which means the GTA 6 DualSense pre-order drop is set to arrive Stateside in two hours. However, as we saw in the U.K. already, retailers don't always stick to these timings. Several went early in the U.K., so I'm watching all the major U.S. retailers now and will keep you updated the moment pre-orders go live!</p></div><div class="live-content"><time datetime="2026-09-10T12:18:50+00:00">September 10, 2026 – 8:18 AM</time><h2 id="let-me-know-which-gta-dualsense-you-want-most">Let me know which GTA DualSense you want most!</h2><p>I'm curious to hear from you. Vote in our poll and let me know which DualSense you're looking to pre-order later today. Or if you're in the U.K., let me know if you managed to lock in your order during this morning's drop!</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eJ9orX"></div>                            </div>                            <script src="https://kwizly.com/embed/eJ9orX.js" async></script></div><div class="live-content"><time datetime="2026-09-10T12:46:27+00:00">September 10, 2026 – 8:46 AM</time><h2 id="psa-prepare-for-pre-orders-before-10-a-m-et">PSA: Prepare for pre-orders before 10 a.m. ET!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aVjN5Bt4xVayURR3x8Bihh" name="gta-6-dualsense-controller-black" alt="GTA 6 DualSense in Black on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/aVjN5Bt4xVayURR3x8Bihh-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p>A word of advice, if you're hoping to secure a GTA 6 DualSense today, don't bank on the 10 a.m. ET drop timing being wholly accurate. </p><p>We've seen with previous pre-order events that retailers can be unpredictable, sometimes dropping early, sometimes waiting until after the initial rush. Pre-orders could feasibly start pretty much any time from now. </p><p>The good news is, if you're following this live blog, you're already in the right spot, as I'll be updating you with all the latest stock information throughout.</p></div><div class="live-content"><time datetime="2026-09-10T13:03:33+00:00">September 10, 2026 – 9:03 AM</time><h2 id="1-hour-until-the-us-pre-order-drop">1 hour until the US pre-order drop!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QoHfCMbRsQyJ7ycpaqgHx7" name="gta-6-dualsense-white-edition" alt="GTA 6 DualSense controller in White on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/QoHfCMbRsQyJ7ycpaqgHx7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p>Just 60 minutes until pre-orders are scheduled to begin in the U.S., but remember, retailers don't always play by the rules, and an early drop could happen, and the odds suggest that a few (probably Amazon) will go later!</p></div><div class="live-content"><time datetime="2026-09-10T13:10:36+00:00">September 10, 2026 – 9:10 AM</time><h2 id="target-39-s-listing-page-is-already-up">Target's listing page is already up!</h2><p>Most retailers haven't yet launched listings pages for the GTA 6 DualSense, but Target has broken rank, and it's page is up. You can't pre-order the controller yet, and there's a "preorders have sold out" message, but I'm assuming this is an error because there are no reports of the retailer ever taking pre-orders. I expect this page will be updated around 10 a.m. ET. </p><ul><li><strong>GTA 6 DualSense: </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow"><strong>$84 @ Target</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T13:24:41+00:00">September 10, 2026 – 9:24 AM</time><h2 id="another-uk-retailer-just-came-to-the-party">Another UK retailer just came to the party!</h2><p>Briefly returning to the U.K., EE is now taking pre-orders of the GTA 6 DualSense. This is good news because all other major retailers are currently sold out. I can't say that EE would be the first place I'd check for limited edition gaming items, but hey, if you missed out earlier, go grab one now!</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://ee.co.uk/products/playstation-5-gta-vi-white-edition-dualsense" target="_blank" rel="nofollow"><strong>£74 @ EE</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>£74 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T13:43:42+00:00">September 10, 2026 – 9:43 AM</time><h2 id="playstation-direct-pages-are-live">PlayStation Direct pages are LIVE!</h2><p>PS Direct is getting ready for the pre-order drop, with it's listing pages for the GTA 6 DualSense in both White and Black (Which is exclusive to the retailer) now live. Below are the all important links you'll need at 10 a.m., get ready!</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T13:46:02+00:00">September 10, 2026 – 9:46 AM</time><h2 id="i-want-to-hear-from-you">I want to hear from you!</h2><p>With just 15 minutes until the pre-order chaos kicks off in the U.S., let me know which GTA 6 DualSense controller are you hoping to grab very soon:</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eJ9orX"></div>                            </div>                            <script src="https://kwizly.com/embed/eJ9orX.js" async></script></div><div class="live-content"><time datetime="2026-09-10T13:55:29+00:00">September 10, 2026 – 9:55 AM</time><h2 id="it-39-s-almost-time-here-39-s-the-ps-direct-links-you-need">It's almost time, here's the PS Direct links you need</h2><p>Just 5 minutes until PS Direct (and potentially other retailers) start taking GTA 6 DualSense controller pre-orders. Below are the links you need to get onto the site and get your pre-order secured at 10 a.m. ET. If the site gets crushed Sony will likely opt to open a virtual waiting room to avoid any crashing. </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:03:14+00:00">September 10, 2026 – 10:03 AM</time><h2 id="ps-direct-has-opened-a-queue">PS Direct has opened a queue! </h2><p>It was expected, the demand for the GTA 6 DualSense is overwhelming PlayStation Direct and a virtual waiting room has appear, slightly worryingly, I'm getting a "line is paused" message, but hopefully I'll have an estimated time to get onto the site in a matter of minutes. </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:10:13+00:00">September 10, 2026 – 10:10 AM</time><h2 id="best-buy-is-taking-pre-orders-quick">Best Buy is taking pre-orders! Quick!</h2><p>If you're stuck at the back of the PS Direct queue, head over to Best Buy now as the retailer is taking pre-orders of the White model.</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><strong>$84 @ Best Buy</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:18:23+00:00">September 10, 2026 – 10:18 AM</time><h2 id="ps-direct-is-struggling-so-try-these-alternative-options">PS Direct is struggling, so try these alternative options</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="553dgptyNJ8JsYWAt2dGkE" name="ps-direct-queue-gta-6-controllers" alt="PlayStation Direct virtual waiting room for the GTA 6 DualSense pre-orders" src="https://cdn.mos.cms.futurecdn.net/553dgptyNJ8JsYWAt2dGkE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I'm seeing a queue time of more than an hour on PlayStation Direct, and if you're also stuck waiting, then you can go pre-orders right now at GameStop and Best Buy using the links below. But remember the Black model is exclusive to PS Direct. However, if it's the White you're after, go grab one!</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><strong>$84 @ Best Buy</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:25:04+00:00">September 10, 2026 – 10:25 AM</time><h2 id="try-this-queue-skip-method-on-ps-direct">Try this queue skip method on PS Direct!</h2><p>I'm seeing reports online that you can bypass the PlayStation Direct queue by heading to the <a href="https://direct.playstation.com/en-us/latest" target="_blank" rel="nofollow"><strong>"What's New" section</strong></a><strong> </strong>and then adding a GTA 6 controller directly to your cart from there. I'm unable to check if this method actually works, but if you've got a long wait in the queue, then give it a try!</p><p>You will (reportedly) need to be signed into a PlayStation account for the "add to cart" button to appear. Let me know in the comments if this method works for you!</p><ul><li><strong>GTA 6 DualSense (Black/White): </strong><a href="https://direct.playstation.com/en-us/latest" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:29:38+00:00">September 10, 2026 – 10:29 AM</time><h2 id="walmart-pre-orders-are-live">Walmart pre-orders are LIVE!</h2><p>Walmart is the latest retailer to join the pre-order party, if you were holding out for this one, then now is the time to secure you GTA 6 controller! </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" rel="nofollow"><strong>$84 @ Walmart</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T14:43:23+00:00">September 10, 2026 – 10:43 AM</time><h2 id="here-39-s-all-the-pre-order-links-you-need">Here's all the pre-order links you need!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QoHfCMbRsQyJ7ycpaqgHx7" name="gta-6-dualsense-white-edition" alt="GTA 6 DualSense controller in White on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/QoHfCMbRsQyJ7ycpaqgHx7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p>After a hectic 30 minutes, here's all the GTA 6 DualSense pre-order links you need. We're still waiting on something from Amazon, and any signs that Target has more stock (it currently says sold out), and there's a <em>long </em>queue on PS Direct, but you can head straight to Best Buy, Walmart and GameStop and grab the controller in White. The Black model is exclusive to PS Direct.</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-grand-theft-auto-vi-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37ZHGL" target="_blank" rel="nofollow"><strong>$84 @ Best Buy </strong></a><strong>(IN STOCK)</strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a><strong> (IN STOCK)</strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong> </a><strong>(IN STOCK)</strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-grand-theft-auto-vi-le/-/A-1013468584" target="_blank" rel="nofollow"><strong>check stock @ Target</strong></a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-09-10T15:00:59+00:00">September 10, 2026 – 11:00 AM</time><h2 id="finally-at-the-front-of-the-ps-direct-queue">Finally at the front of the PS Direct queue!</h2><p>It took almost an hour, but I've got onto PS Direct, and it appears that both the White and Black GTA 6 DualSense controllers are still in stock. You will need to sign in to buy, so make sure you know your details beforehand.</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T15:24:43+00:00">September 10, 2026 – 11:24 AM</time><h2 id="amazon-has-woken-up">Amazon has woken up!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="VKJuBJdcGuY5sj4thDBPfX" name="gta-6-dualsense-amazon-listing" alt="Amazon listing page for the GTA 6 DualSense" src="https://cdn.mos.cms.futurecdn.net/VKJuBJdcGuY5sj4thDBPfX-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Amazon kept us waiting, but at long last, the online retailer is taking pre-orders. If you haven't grabbed a GTA 6 DualSense yet, here's the link: </p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T15:49:35+00:00">September 10, 2026 – 11:49 AM</time><h2 id="best-buy-stock-appears-to-be-running-out">Best Buy stock appears to be running out!</h2><p>We might have our first sell out in the U.S. soon, Best Buy is jumping between "pre order now" and "coming soon," which suggests it's stock levels are dwindling. I'm still able to get a "pre order now" button with a few refreshes, but that might not last much longer. Fortunately, Amazon just came online, giving you an alternative retailer, if you still need a pre-order.</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a></li></ul></div><div class="live-content"><time datetime="2026-09-10T16:33:14+00:00">September 10, 2026 – 12:33 PM</time><h2 id="here-39-s-the-state-of-play-in-the-us-and-uk-right-now">Here's the state of play in the US (and UK) right now!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QoHfCMbRsQyJ7ycpaqgHx7" name="gta-6-dualsense-white-edition" alt="GTA 6 DualSense controller in White on a GTA-themed background" src="https://cdn.mos.cms.futurecdn.net/QoHfCMbRsQyJ7ycpaqgHx7-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment / Rockstar Games)</span></figcaption></figure><p>My day is winding down, but I've done a final sweep of stock across all major retailers in the U.S. and U.K. There's plenty of availability in the U.S., with the DualSense available at <em>most </em>retailers (Best Buy and Target are sold out). </p><p>Meanwhile, in the U.K, options are very limited. EE is still taking pre-orders, and Amazon has a listing page, but so far today, there have been no signs of any stock. PlayStation Direct took the longest but is now sold out in the U.K.</p><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.com/dp/B0HHNZFXL5/" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.walmart.com/ip/Ps5-Dualsense-Wireless-Cntrl-Gra/20958211420" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a><strong> </strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller-for-playstation-5---grand-theft-auto-vi-white-limited-edition/451594.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong> </a><strong></strong></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-white-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li><li><strong>GTA 6 DualSense (Black): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-grand-theft-auto-vi-black-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PlayStation Direct</strong></a></li></ul><ul><li><strong>GTA 6 DualSense (White): </strong><a href="https://ee.co.uk/products/playstation-5-gta-vi-white-edition-dualsense" target="_blank" rel="nofollow"><strong>£74 @ EE</strong></a></li><li><strong>GTA 6 DualSense (White): </strong><a href="https://www.amazon.co.uk/DualSense%C2%AE-Wireless-Controller-Grand-Limited/dp/B0HHS4DKRM" target="_blank" rel="nofollow"><strong>check stock @ Amazon</strong></a></li></ul></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ PS5 State of Play September 2026 recap — FFVII Revelations, Until Dawn 2 and every new game announced ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="live-content"><p>PlayStation State of Play for September 2026 is over. We got two showcases for the price of one, with a regular State of Play followed by a State of Play Japan. </p><p>The highlights included an extended look at Final Fantasy VII: Revelation, release dates for Until Dawn 2 and Metro 2039, and new games confirmed like Maneater 2. Plus, State of Play Japan brought with it tons of RPG fun!</p><p>If you missed the showcase, you can find all the announcements and every new trailer below. Or you can even rewatch the entire State of Play on demand. Here are all the games at the State of Play September 2026...</p><h2 id="how-to-re-watch-state-of-play-for-september-2026">How to (re)watch State of Play for September 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/dcTYz_mJpkU" allowfullscreen></iframe></div></div><p>If you missed State of Play September 2026, or wish to relive it, you can watch the entire presentation from start to finish via the embedded YouTube link above. Warning: it's a chunky presentation, so you'll need to set aside almost two hours. After all, it was technically two State of Plays! </p><h3 class="article-body__section" id="section-live-updates"><span>LIVE UPDATES</span></h3></div><div class="live-content"><time datetime="2026-09-03T11:01:21+00:00">September 3, 2026 – 7:01 AM</time><h2 id="welcome-2">Welcome!</h2><p>Good morning (or afternoon, for those in the U.K.)! The latest State of Play event is just a couple of hours away, and I'm here to bring you all the build-up and coverage of the showcase, there's plenty to discuss, so let's dive into all the news and a few rumors...</p></div><div class="live-content"><time datetime="2026-09-03T11:12:33+00:00">September 3, 2026 – 7:12 AM</time><h2 id="ffvii-revelation-is-confirmed-for-state-of-play">FFVII Revelation is confirmed for State of Play</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="VbV9NhGYbeA4AKitiPGzjc" name="final-fantasy-vii-revelation-screenshot" alt="Screenshot from Final Fantasy VII Revelation" src="https://cdn.mos.cms.futurecdn.net/VbV9NhGYbeA4AKitiPGzjc-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sqaure Enix)</span></figcaption></figure><p>At present, only one game is confirmed to appear at today's State of Play: Final Fantasy VII Revelation.</p><p>The <a href="https://blog.playstation.com/2026/08/31/state-of-play-state-of-play-japan-return-on-september-3/" target="_blank">PlayStation Blog</a> notes the showcase will conclude "with an extended look at the vast world of Final Fantasy VII Revelation, from our friends at Square Enix."</p><p>The use of the word "extended" suggests it won't be a quick trailer, but likely a longer demo. We've already seen a fair amount from this game. It was announced at Summer Games Fest 2026, before getting another look at Gamescom 2026.</p><p>I'm sure that anybody who's played Final Fantasy VII Remake and Rebirth won't need to be further sold on Revelation, but I won't say no to another look!</p></div><div class="live-content"><time datetime="2026-09-03T11:26:59+00:00">September 3, 2026 – 7:26 AM</time><h2 id="i-suspect-we-39-ll-see-more-from-until-dawn-2">I suspect we'll see more from Until Dawn 2</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tmER6SQVqEcQekWFWJ4K6b" name="until-dawn-2-screenshot" alt="Until Dawn 2 screenshot" src="https://cdn.mos.cms.futurecdn.net/tmER6SQVqEcQekWFWJ4K6b-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Turning to predictions, I'm guessing we'll see more from Until Dawn 2 today. This follow-up to the 2014 interactive horror was announced during June's State of Play with a vague 2027 release window, so it would make sense for it to appear here. </p><p>It's confirmed to be a standalone sequel, and comes from new developers Firesprite (taking over from Supermassive Games, who made the first). Like the original, it's a horror adventure game where you play a group of young adults trying to survive a terrifying night. Your decisions will decide who lives and dies.</p><p>The setting switches from a snowy mountain cabin to a tropical island, and the playable characters are a team of ghost hunters who fake their paranormal content, only to face a real nightmare. Maybe we'll get a release date today?</p></div><div class="live-content"><time datetime="2026-09-03T11:46:29+00:00">September 3, 2026 – 7:46 AM</time><h2 id="time-for-our-latest-look-at-laufey">Time for our latest look at Laufey?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6uakNK9LNVubhczFUPzQ4R" name="god-of-war-laufey-keyart" alt="God of War Laufey keyart" src="https://cdn.mos.cms.futurecdn.net/6uakNK9LNVubhczFUPzQ4R-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Staying on theme of games that appeared at the June State of Play that could re appear today, God of Way Laufey seems likely to make an appearance to me. </p><p>The game was revealed and then extensively showcased with a 15-minute gameplay presentation in June, and it's even got an early 2027 release date (February 16), so Sony surely want to start ramping up the marketing soon. </p><p>This latest installment in the God of War franchise doesn't star Kratos, instead the lead is Faye, wife of the angry Spartan. It'll see Faye battle through Everywhen, the afterlife of the gods, on a quest to protect her husband and son, Atreus. </p></div><div class="live-content"><time datetime="2026-09-03T12:03:52+00:00">September 3, 2026 – 8:03 AM</time><h2 id="don-39-t-expect-a-major-quot-one-last-thing-quot-reveal">Don't expect a major "one last thing" reveal</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:920px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="YjQgFQT9J6kopyr5nu4evh" name="Playstation store.jpg" alt="PlayStation Store Holiday Sale" src="https://cdn.mos.cms.futurecdn.net/YjQgFQT9J6kopyr5nu4evh-1920-80.jpg" mos="" align="middle" fullscreen="" width="920" height="518" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>When it comes to State of Play-style events, they're often judged on their ending. The term "one last thing" (taken from Nintendo Directs) has been popularized for when a gaming event ends with a reveal that gets the whole internet hyped up. </p><p>State of Play has had its own share of exciting final announcements in the past, but don't expect one this time. As already noted, Final Fantasy VII Revelation has been confirmed to close the State of Play for September 2026, so there seemingly won't be an unexpected reveal to cap off the livestream. </p><p>Of course, that doesn't mean there won't be surprises before the FFVII portion! </p></div><div class="live-content"><time datetime="2026-09-03T12:15:30+00:00">September 3, 2026 – 8:15 AM</time><h2 id="will-intergalactic-finally-emerge-from-the-shadows">Will Intergalactic finally emerge from the shadows?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gGHYy9kM2a4pZMfY2DzSSQ" name="intergalactic-the-heretic-prophet-screenshot" alt="Intergalactic: The Heretic Prophet screenshot" src="https://cdn.mos.cms.futurecdn.net/gGHYy9kM2a4pZMfY2DzSSQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / Naughty Dog)</span></figcaption></figure><p>Every State of Play, I wish for a fresh look at Intergalactic: The Heretic Prophet, and every time I'M left disappointed when it's a no show. So, while I'm keeping my expectation in check this time, here's hoping Naughty Dog is <em>finally </em>ready to show us more at today's State of Play. </p><p>The sci-fi game was announced at The Game Awards 2024, with a slick CGI trailer, and hasn't been seen since. There's still so much we don't know about this game, we don't even have a release year, let alone a firm date. It'll be ND's first new game since The Last of Us Part II, and follows a bounty hunter stuck on a remote planet. </p></div><div class="live-content"><time datetime="2026-09-03T12:32:56+00:00">September 3, 2026 – 8:32 AM</time><h2 id="expect-some-ps-news-at-state-of-play">Expect some PS+ news at State of Play</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YJYKWsoYcKTmcTh2bde6UG" name="playstation-plus-collection-01.jpg" alt="PlayStation Plus Collection feature" src="https://cdn.mos.cms.futurecdn.net/YJYKWsoYcKTmcTh2bde6UG-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: PlayStation)</span></figcaption></figure><p>PlayStation typically likes to use State of Play events to highlight the games being added to PS+ in the future, and with the mid-month PlayStation Plus Extra Game Catalogue on the horizon, I wouldn't be surprised if that's showcased later today. </p><p>Maybe those on the Premium tier will also get some news about upcoming Classic games being added to the service. Either way, I expect PS+ will have a presence.</p></div><div class="live-content"><time datetime="2026-09-03T12:54:10+00:00">September 3, 2026 – 8:54 AM</time><h2 id="double-fine-couldn-39-t-keep-this-secret">Double Fine couldn't keep this secret!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DjvJiQVxD8e7G76nr5P5Pc" name="keeper-screenshot" alt="Keeper screenshot" src="https://cdn.mos.cms.futurecdn.net/DjvJiQVxD8e7G76nr5P5Pc-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Double Fine)</span></figcaption></figure><p>There's always a leak or two in the lead-up to a State of Play, and it appears this time it's come from Double Fine. The studio's artistic experience, Keeper, looks to be PlayStation-bound, as its trophy list has just surfaced via <a href="https://www.exophase.com/game/keeper-psn/trophies/" target="_blank">Exophase</a>. </p><p>The puzzle-adventure game launched last October on Xbox and PC, when Double Fine was still under the Xbox Games Studio umbrella. It's now gone independent, and appears to be looking to expand Keeper's player base. It'll almost certainly be confirmed during the State of Play. Leaked trophy data is a pretty solid clue. </p><p>As trophy data is already in the PlayStation system, that would hint at an imminent release date; it could even be dropped on the PlayStation Store later today.</p></div><div class="live-content"><time datetime="2026-09-03T12:58:41+00:00">September 3, 2026 – 8:58 AM</time><h2 id="state-of-play-september-2026-is-about-to-begin">State of Play September 2026 is about to begin! </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/dcTYz_mJpkU" allowfullscreen></iframe></div></div><p>The countdown is on, and that familiar State of Play pre-show music is playing. If you're watching today's State of Play, now is the time to get your stream ready. Don't worry, you don't need to search for it, I've linked it above, and if you can't watch, I'll have live updates right here so you don't miss a single announcement. </p></div><div class="live-content"><time datetime="2026-09-03T13:02:32+00:00">September 3, 2026 – 9:02 AM</time><h2 id="first-up-is-a-movie">First up...is a movie?</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/KGlapnJFacE" allowfullscreen></iframe></div></div><p>Whelp, it might be a video game event, but we're starting with a trailer for Zach Cregger's upcoming "Resident Evil" movie. </p></div><div class="live-content"><time datetime="2026-09-03T13:04:29+00:00">September 3, 2026 – 9:04 AM</time><h2 id="now-onto-the-games-please">Now onto the games (please)!</h2><p>The new "Resident Evil" movie looks cool, I've already got my tickets booked, but after dipping into the world of cinema, let's hope State of Play gets into the games.</p></div><div class="live-content"><time datetime="2026-09-03T13:06:43+00:00">September 3, 2026 – 9:06 AM</time><h2 id="wolverine-gets-a-last-look-before-launch">Wolverine gets a last look before launch</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/G62QQ42Ewwg" allowfullscreen></iframe></div></div><p>With Marvel's Wolverine landing later this month (on September 15), PlayStation is giving this PS5 exclusive one last State of Play spot before its in our hands soon.</p></div><div class="live-content"><time datetime="2026-09-03T13:08:40+00:00">September 3, 2026 – 9:08 AM</time><h2 id="ghost-of-yotei-39-s-new-dlc-is-next-up">Ghost of Yōtei's new DLC is next up</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/Nlchabfwy_w" allowfullscreen></iframe></div></div><p>It was recently confirmed that 2025's Ghost of Yōte would get a Complete Edition, which comes with new DLC, including the "Most Wanted" mode, and that's being showcased next. It looks like it'll give me plenty of reason to return to the game. </p></div><div class="live-content"><time datetime="2026-09-03T13:11:07+00:00">September 3, 2026 – 9:11 AM</time><h2 id="speaking-of-major-dlcs-it-39-s-monster-hunter-time">Speaking of major DLCs, it's Monster Hunter time!</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/SodbU0PEVH4" allowfullscreen></iframe></div></div><p>Another game from last year that's about to get a big DLC is Monster Hunter Wilds, it's called Ascendance, and I'm hoping it'll transform the base game in the same way that Iceborne radically expanded its predecessor Monster Hunter World. It's out in 2027. </p></div><div class="live-content"><time datetime="2026-09-03T13:13:33+00:00">September 3, 2026 – 9:13 AM</time><h2 id="metro-2039-gets-its-first-look-on-playstation">Metro 2039 gets its first look on PlayStation</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/6OGoAWzNV2s" allowfullscreen></iframe></div></div><p>One of my most anticipated games of 2027 takes the State of Play stage: Metro 2039. This is our first time seeing it at a PlayStation event, and I recently went hands-on with the title at Gamescom 2026, and can confirm it's shaping up to be a strong shooter. It's out February 4, 2027. </p></div><div class="live-content"><time datetime="2026-09-03T13:17:12+00:00">September 3, 2026 – 9:17 AM</time><h2 id="maneater-is-getting-a-sequel">Maneater is getting a sequel!</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/mg4Phb2Aulg" allowfullscreen></iframe></div></div><p>Shark sim Maneater is getting a sequel! The original launched in 2020, and was a whale of a good time (that pun works, right?). It's called, well, Maneater 2 and is out in 2027. </p></div><div class="live-content"><time datetime="2026-09-03T13:19:00+00:00">September 3, 2026 – 9:19 AM</time><h2 id="another-trailer-for-a-dlc">Another trailer for a DLC!</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/1fQCPmH6kOg" allowfullscreen></iframe></div></div><p>DLC expansions seem to be the big focus so far, and next up is an expansion for Crimson Desert. I'll admit, I couldn't really get into this one earlier in the year, but I know it's got a passionate player base. The DLC appears to add naval combat, underwater exploration, and a bunch of new enemies. It's called Crimson Desert: Charting the Unknown and launches on October 15, 2026. That's very soon!</p></div><div class="live-content"><time datetime="2026-09-03T13:20:54+00:00">September 3, 2026 – 9:20 AM</time><h2 id="the-ps1-is-getting-a-lego-makeover">The PS1 is getting a Lego makeover!</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/5FB8SIlnd6c" allowfullscreen></iframe></div></div><p>This one leaked earlier in the week, but PlayStation has teamed up with the folks at Lego to create a plastic-brick version of the PlayStation 1 console. It looks like a novel display piece and hides several easter eggs, including dioramas for Ape Escape and Gran Turismo. No word on price or release date, but as it's Lego, it'll probably cost quite a lot!</p></div><div class="live-content"><time datetime="2026-09-03T13:22:44+00:00">September 3, 2026 – 9:22 AM</time><h2 id="final-fantasy-makes-an-early-appearance">Final Fantasy makes an early appearance! </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/IZvZYwQdXN8" allowfullscreen></iframe></div></div><p>We know that FFVII Revelation will close the show, but there's room for more Final Fantasy, the game's first title in HD-2D title, Final Fantasy Resonance, is showcased, it's out on October 22, and there's a playable demo dropping later today. Neat!</p></div><div class="live-content"><time datetime="2026-09-03T13:24:42+00:00">September 3, 2026 – 9:24 AM</time><h2 id="gundam-fans-here-39-s-one-for-you">Gundam fans, here's one for you!</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/kJ6YB3tG0xM" allowfullscreen></iframe></div></div><p>Gundam: Rogue Orbit was announced earlier in the summer and we're getting a new look at today's State of Play. It's out March 5, 2027, and looks suitably epic. More will be revealed at the State of Play Japan that follows this initial showcase. </p></div><div class="live-content"><time datetime="2026-09-03T13:25:49+00:00">September 3, 2026 – 9:25 AM</time><h2 id="we-39-re-entering-the-indie-zone">We're entering the indie zone!</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/bKMaeHoJY2A" allowfullscreen></iframe></div></div><p>Next up, it's a trio of indie games that apparently "caught the teams attention", first it's a medieval-set game called Hunter's Moon that drops on October 26, 2026.  </p></div><div class="live-content"><time datetime="2026-09-03T13:28:46+00:00">September 3, 2026 – 9:28 AM</time><h2 id="uncanyon-is-revealed-and-keeper-is-confirmed">Uncanyon is revealed (and Keeper is confirmed)!</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/oSLtfQ-HqLM" allowfullscreen></iframe></div></div><p>Next, we head into the world of Uncanyon, which looks to be a dungeon-crawler that combines puzzles and combat; it's out in 2027. And the final game in this indie trio is Keeper from Double Fine. That one leaked earlier today and is out on PS5 today. Told you it might be a shadow drop!</p></div><div class="live-content"><time datetime="2026-09-03T13:31:01+00:00">September 3, 2026 – 9:31 AM</time><h2 id="rev-noir-gets-a-new-trailer-from-konami">Rev Noir gets a new trailer from Konami!</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/7feaOQVG5aE" allowfullscreen></iframe></div></div><p>Rev Noir, technically spelt Rev. NOiR (yes, it's a little silly), was announced at the last State of Play event, and Konami is already prepared with a new trailer for this RPG. </p></div><div class="live-content"><time datetime="2026-09-03T13:34:18+00:00">September 3, 2026 – 9:34 AM</time><h2 id="konami-also-reveals-rhapsody-in-scarlet">Konami also reveals Rhapsody in Scarlet </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/DnMPeZDKiNk" allowfullscreen></iframe></div></div><p>A jazz-set action game called Rhapsody in Scarlet is announced, it comes from Konami, and there will be more details during the State of Play Japan afterwards. </p></div><div class="live-content"><time datetime="2026-09-03T13:36:42+00:00">September 3, 2026 – 9:36 AM</time><h2 id="ps-preview-time-just-as-i-predicted">PS+ preview time (just as I predicted)!</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/PpM1KUTh43o" allowfullscreen></iframe></div></div><p>As I guessed, now we're getting an insight into what games are coming to PS+, including Mega Man X and the first Ratchet & Clank in the Classics Catalog. </p><p>Oh, and Saros is getting a big update with some new features; it'll be a free update. And Gran Turismo 7 is also being updated. The theme today is certainly DLCs! </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/qxFIHS2KhbM" allowfullscreen></iframe></div></div></div><div class="live-content"><time datetime="2026-09-03T13:41:49+00:00">September 3, 2026 – 9:41 AM</time><h2 id="i-39-m-on-a-roll-as-until-dawn-2-makes-an-appearance">I'm on a roll as Until Dawn 2 makes an appearance! </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/-wjhso38sAY" allowfullscreen></iframe></div></div><p>I don't want to pat myself on the back too much, but another of my predictions just came true, as the next trailer is for Until Dawn 2, the long awaited sequel sports a new cast, setting, storyline and even developer. It's all change, but the fundamental experience looks similar; it's again an interactive horror where the fate of each character is in your hands. Every decision matters. </p><p>It launches on January 28, 2027, which is sooner than I expected.</p></div><div class="live-content"><time datetime="2026-09-03T13:43:13+00:00">September 3, 2026 – 9:43 AM</time><h2 id="gta-6-is-getting-a-limited-edition-dualsense-controller">GTA 6 is getting a limited edition DualSense controller!</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/rcx6I2A0TyM" allowfullscreen></iframe></div></div><p>PlayStation is launching another limited edition DualSense controller, and I reckon this one will be popular because it's for GTA 6. I'm telling myself I don't need <em>another </em>DualSense...</p></div><div class="live-content"><time datetime="2026-09-03T13:45:28+00:00">September 3, 2026 – 9:45 AM</time><h2 id="and-now-into-final-fantasy-vii-revelation">And now into Final Fantasy VII Revelation!</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/pfqrUIGUC1o" allowfullscreen></iframe></div></div><p>It was confirmed to be the closer, so with the regular State of Play wrapping up, we've just got a very cinematic trailer for Final Fantasy VII Revelation, and most importantly, it includes a release date: April 8, 2027. </p></div><div class="live-content"><time datetime="2026-09-03T13:49:38+00:00">September 3, 2026 – 9:49 AM</time><h2 id="loads-of-new-ffvii-revelation-gameplay">Loads of new FFVII Revelation gameplay!</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/E9BTbjtXJWM" allowfullscreen></iframe></div></div><p>It was called an extended look, and it's living up to its billing. State of Play is ending with a 10 minute Final Fantasy VII Revelation gameplay presentation that is mostly focused on its vast world. You have access to an airship, which should make getting around simple, and if you spot something interesting, you skydive to the ground.</p></div><div class="live-content"><time datetime="2026-09-03T13:57:35+00:00">September 3, 2026 – 9:57 AM</time><h2 id="and-that-39-s-state-of-play-in-the-can-but-there-39-s-more-to-come">And that's State of Play in the can (but there's more to come)</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/dcTYz_mJpkU" allowfullscreen></iframe></div></div><p>FFVII Revelation brings State of Play to an end (as we knew it would). For me, that was a fairly average State of Play overall, but with a few announcements that grabbed my attention. But the show isn't over, as now we head into State of Play Japan, which offers further insight into some of the games revealed today! </p></div><div class="live-content"><time datetime="2026-09-03T14:00:35+00:00">September 3, 2026 – 10:00 AM</time><h2 id="dragonball-xenoverse-3-kicks-off-sop-japan">Dragonball Xenoverse 3 kicks off SoP Japan!</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/912l6NX5lrY" allowfullscreen></iframe></div></div><p>The first new trailer in this second State of Play presentation is Dragon Ball Xenoverse 3. </p></div><div class="live-content"><time datetime="2026-09-03T14:03:06+00:00">September 3, 2026 – 10:03 AM</time><h2 id="followed-by-fate-extra-record">Followed by Fate/Extra Record!</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/nr5-XGIkbg4" allowfullscreen></iframe></div></div><p>This remake of the first game in the Fate series is coming to PS5 on January 28, 2027 (The same day as Until Dawn 2). Per the trailer it offers "an expanded scenario, completely overhauled character graphics, and a highly strategic deck-building dramatic command battle system, the game modernizes both visuals and mechanics."</p></div><div class="live-content"><time datetime="2026-09-03T14:05:48+00:00">September 3, 2026 – 10:05 AM</time><h2 id="more-from-monster-hunter">More from Monster Hunter!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Uy6gzZgNHR8bLp5umbtnv4" name="Monster Hunter Wilds 1" alt="Monster Hunter Wilds" src="https://cdn.mos.cms.futurecdn.net/Uy6gzZgNHR8bLp5umbtnv4-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>The next segment is a deeper dive into the Monster Hunter Wilds: Ascendance expansion. It's looking to alter the experience in a bunch of ways with new weapons, armor, abilities, and, of course, most importantly, plenty of new monsters to hunt</p></div><div class="live-content"><time datetime="2026-09-03T14:10:25+00:00">September 3, 2026 – 10:10 AM</time><h2 id="dragon-quest-monsters-launches-this-december">Dragon Quest Monsters launches this December!</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/_9nrXc0-vm8" allowfullscreen></iframe></div></div><p>We've had Final Fantasy, now time for the <em>other </em>legendary Japanese RPG series, Dragon Quest. This isn't the latest mainline entry, but part of the spin-off Monsters series. Dragon Quest Monsters: The Withered World launches soon, on December 3, 2026. Watch the new trailer above!</p></div><div class="live-content"><time datetime="2026-09-03T14:12:04+00:00">September 3, 2026 – 10:12 AM</time><h2 id="here-39-s-one-for-the-rogue-lite-fans">Here's one for the rogue-lite fans!</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/c9V5ugavBQU" allowfullscreen></iframe></div></div><p>There was a curious lack of rogue-lites in the main State of Play, the genre flooded these days, but State of Play Japan has fixed that with The Eminence in Shadow: Phantom Echoes (quite the title), it's described as a rouge-lite action game launching in 2027! </p></div><div class="live-content"><time datetime="2026-09-03T14:14:57+00:00">September 3, 2026 – 10:14 AM</time><h2 id="more-new-trailers-to-watch">More new trailers to watch!</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/MLDGArmX0Tw" allowfullscreen></iframe></div></div><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/zdDJlYAVe-c" allowfullscreen></iframe></div></div><p>The announcements and trailers are coming fast in this State of Play Japan, here's two more, Where the Seeds Fall and one for online soccer game, Rematch, which is getting a collaboration with Blue Lock for its season 5!  </p></div><div class="live-content"><time datetime="2026-09-03T14:19:54+00:00">September 3, 2026 – 10:19 AM</time><h2 id="this-one-looks-intriguing">This one looks intriguing! </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/fIFA-lY_f6o" allowfullscreen></iframe></div></div><p>WPCA: World Phasebound Control Authority is showcased next, it looks like to be an action game where you're part of a group protecting our reality from supernatural foes. Pretty cool setup. Though, it's not out until 2028, so we won't be playing it any time soon! </p></div><div class="live-content"><time datetime="2026-09-03T14:21:40+00:00">September 3, 2026 – 10:21 AM</time><h2 id="stupid-never-dies-looks-ridiculous-but-in-a-good-way">Stupid Never Dies looks ridiculous, but in a good way! </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/k_33MQFuVEY" allowfullscreen></iframe></div></div><p>GPTRACK50’s Stupid Never Dies gets its third trailer, and this action-RPG looks like it's taking some big swings, and isn't scared to be very silly. I do wonder if the comedic tone might grate over a full playthrough, but it's another one that's caught my eye. </p></div><div class="live-content"><time datetime="2026-09-03T14:23:59+00:00">September 3, 2026 – 10:23 AM</time><h2 id="another-game-you-can-play-today">Another game you can play today!</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/nrJuL3XSLTc" allowfullscreen></iframe></div></div><p>SlashZero is getting a demo today. The full game isn't out until Spring 2027, but you can get a taste of it's side-scrollling action thanks to this demo. It's called a "limited-time" demo, so don't wait around if you want to check this one out before launch.</p></div><div class="live-content"><time datetime="2026-09-03T14:26:05+00:00">September 3, 2026 – 10:26 AM</time><h2 id="digimon-takes-the-stage-at-state-of-play-japan">Digimon takes the stage at State of Play Japan!</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/8v_Mg3yAnSY" allowfullscreen></iframe></div></div><p>I was always a Digimon kid, while all my friends were into Pokemon, so if you like me have a fondness for digital monsters, check out the trailer for Digimon Story Time Stranger: A Hero's Eternal Legacy, which surely wins the award for the longest game name at today's State of Play.</p></div><div class="live-content"><time datetime="2026-09-03T14:29:45+00:00">September 3, 2026 – 10:29 AM</time><h2 id="conq-looks-rough-in-more-ways-than-one">Conq looks rough, in more ways than one!</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/OqViikdsc7Y" allowfullscreen></iframe></div></div><p>CONQ: Crown Of No Quarter just debuted at State of Play Japan, and there are rough seas, and also a very choppy framerate. No release date details so hopefully the development team have lots of time to iron out the wrinkles, as this showing didn't do the game many favors. </p></div><div class="live-content"><time datetime="2026-09-03T14:31:11+00:00">September 3, 2026 – 10:31 AM</time><h2 id="another-rhapsody-in-scarlet-trailer">Another Rhapsody in Scarlet trailer!</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/FX6kr_DoXK8" allowfullscreen></iframe></div></div><p>Rhapsody in Scarlet was announced in the State of Play, and anybody interested in the title was that first showing didn't have to wait long for another, State of Play Japan has given us more insight into the game. </p></div><div class="live-content"><time datetime="2026-09-03T14:35:06+00:00">September 3, 2026 – 10:35 AM</time><h2 id="konami-has-gone-big-for-this-state-of-play">Konami has gone big for this State of Play!</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/PXmX1PXvDtA" allowfullscreen></iframe></div></div><p>Konami is really bringing the good to today's State of Play, it's also offered a second trailer for Rev Noir. But I'm a little surprised we haven't seen anything from Silent Hill: Townfall as that's due out in just a matter of weeks! </p></div><div class="live-content"><time datetime="2026-09-03T14:36:51+00:00">September 3, 2026 – 10:36 AM</time><h2 id="daba-land-of-water-scar-is-revealed-next">Daba: Land of Water Scar is revealed next! </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/YBTN74SHUnk" allowfullscreen></iframe></div></div><p>Looks like there's another Soulslike on the way in the form of Daba: Land of Water Scar, appears to have a mystical theme and the brief snippets of gameplay certainly give off a big Souls vibe. </p></div><div class="live-content"><time datetime="2026-09-03T14:44:59+00:00">September 3, 2026 – 10:44 AM</time><h2 id="ghost-of-yotei-39-s-story-expansion-takes-the-spotlight">Ghost of Yōtei's story expansion takes the spotlight! </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/d48IWwIRg98" allowfullscreen></iframe></div></div><p>After a lovely (if slightly lengthy) interview with the Japanese voice actor for Ghost of Yōtei's lead Atsu, now it's time for a trailer for the new story expansion, Echoes of Sekigahara, it'll be packaged with the "Most Wanted" survival mode in the Complete Edition which launches on October 1. </p></div><div class="live-content"><time datetime="2026-09-03T14:46:00+00:00">September 3, 2026 – 10:46 AM</time><h2 id="and-that-39-s-a-wrap-on-state-of-play-japan">And that's a wrap on State of Play Japan!</h2><p>There's just time for a quick sizzle reel covering everything we saw in State of Play Japan, and that's the end of the showcase.</p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/news/live/ps5-state-of-play-september-2026-live-updates</link>
                                                                            <description>
                            <![CDATA[ State of Play returns for September 2026 with a bumper showcase of new PS5 games, and we're bringing you all the latest updates now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">F942N5ZiR5UJdXxkW5T6AA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qq2kVdpDUxFyfWD9vspT8i-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 03 Sep 2026 11:00:16 +0000</pubDate>                                                                                                                                <updated>Thu, 03 Sep 2026 17:17:37 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/qq2kVdpDUxFyfWD9vspT8i-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony Interactive Entertainment]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[God of War Laufey screenshot with State of Play border]]></media:description>                                                            <media:text><![CDATA[God of War Laufey screenshot with State of Play border]]></media:text>
                                <media:title type="plain"><![CDATA[God of War Laufey screenshot with State of Play border]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qq2kVdpDUxFyfWD9vspT8i-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="live-content"><p>PlayStation State of Play for September 2026 is over. We got two showcases for the price of one, with a regular State of Play followed by a State of Play Japan. </p><p>The highlights included an extended look at Final Fantasy VII: Revelation, release dates for Until Dawn 2 and Metro 2039, and new games confirmed like Maneater 2. Plus, State of Play Japan brought with it tons of RPG fun!</p><p>If you missed the showcase, you can find all the announcements and every new trailer below. Or you can even rewatch the entire State of Play on demand. Here are all the games at the State of Play September 2026...</p><h2 id="how-to-re-watch-state-of-play-for-september-2026">How to (re)watch State of Play for September 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/dcTYz_mJpkU" allowfullscreen></iframe></div></div><p>If you missed State of Play September 2026, or wish to relive it, you can watch the entire presentation from start to finish via the embedded YouTube link above. Warning: it's a chunky presentation, so you'll need to set aside almost two hours. After all, it was technically two State of Plays! </p><h3 class="article-body__section" id="section-live-updates"><span>LIVE UPDATES</span></h3></div><div class="live-content"><time datetime="2026-09-03T11:01:21+00:00">September 3, 2026 – 7:01 AM</time><h2 id="welcome-2">Welcome!</h2><p>Good morning (or afternoon, for those in the U.K.)! The latest State of Play event is just a couple of hours away, and I'm here to bring you all the build-up and coverage of the showcase, there's plenty to discuss, so let's dive into all the news and a few rumors...</p></div><div class="live-content"><time datetime="2026-09-03T11:12:33+00:00">September 3, 2026 – 7:12 AM</time><h2 id="ffvii-revelation-is-confirmed-for-state-of-play">FFVII Revelation is confirmed for State of Play</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="VbV9NhGYbeA4AKitiPGzjc" name="final-fantasy-vii-revelation-screenshot" alt="Screenshot from Final Fantasy VII Revelation" src="https://cdn.mos.cms.futurecdn.net/VbV9NhGYbeA4AKitiPGzjc-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sqaure Enix)</span></figcaption></figure><p>At present, only one game is confirmed to appear at today's State of Play: Final Fantasy VII Revelation.</p><p>The <a href="https://blog.playstation.com/2026/08/31/state-of-play-state-of-play-japan-return-on-september-3/" target="_blank">PlayStation Blog</a> notes the showcase will conclude "with an extended look at the vast world of Final Fantasy VII Revelation, from our friends at Square Enix."</p><p>The use of the word "extended" suggests it won't be a quick trailer, but likely a longer demo. We've already seen a fair amount from this game. It was announced at Summer Games Fest 2026, before getting another look at Gamescom 2026.</p><p>I'm sure that anybody who's played Final Fantasy VII Remake and Rebirth won't need to be further sold on Revelation, but I won't say no to another look!</p></div><div class="live-content"><time datetime="2026-09-03T11:26:59+00:00">September 3, 2026 – 7:26 AM</time><h2 id="i-suspect-we-39-ll-see-more-from-until-dawn-2">I suspect we'll see more from Until Dawn 2</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="tmER6SQVqEcQekWFWJ4K6b" name="until-dawn-2-screenshot" alt="Until Dawn 2 screenshot" src="https://cdn.mos.cms.futurecdn.net/tmER6SQVqEcQekWFWJ4K6b-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Turning to predictions, I'm guessing we'll see more from Until Dawn 2 today. This follow-up to the 2014 interactive horror was announced during June's State of Play with a vague 2027 release window, so it would make sense for it to appear here. </p><p>It's confirmed to be a standalone sequel, and comes from new developers Firesprite (taking over from Supermassive Games, who made the first). Like the original, it's a horror adventure game where you play a group of young adults trying to survive a terrifying night. Your decisions will decide who lives and dies.</p><p>The setting switches from a snowy mountain cabin to a tropical island, and the playable characters are a team of ghost hunters who fake their paranormal content, only to face a real nightmare. Maybe we'll get a release date today?</p></div><div class="live-content"><time datetime="2026-09-03T11:46:29+00:00">September 3, 2026 – 7:46 AM</time><h2 id="time-for-our-latest-look-at-laufey">Time for our latest look at Laufey?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6uakNK9LNVubhczFUPzQ4R" name="god-of-war-laufey-keyart" alt="God of War Laufey keyart" src="https://cdn.mos.cms.futurecdn.net/6uakNK9LNVubhczFUPzQ4R-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Staying on theme of games that appeared at the June State of Play that could re appear today, God of Way Laufey seems likely to make an appearance to me. </p><p>The game was revealed and then extensively showcased with a 15-minute gameplay presentation in June, and it's even got an early 2027 release date (February 16), so Sony surely want to start ramping up the marketing soon. </p><p>This latest installment in the God of War franchise doesn't star Kratos, instead the lead is Faye, wife of the angry Spartan. It'll see Faye battle through Everywhen, the afterlife of the gods, on a quest to protect her husband and son, Atreus. </p></div><div class="live-content"><time datetime="2026-09-03T12:03:52+00:00">September 3, 2026 – 8:03 AM</time><h2 id="don-39-t-expect-a-major-quot-one-last-thing-quot-reveal">Don't expect a major "one last thing" reveal</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:920px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="YjQgFQT9J6kopyr5nu4evh" name="Playstation store.jpg" alt="PlayStation Store Holiday Sale" src="https://cdn.mos.cms.futurecdn.net/YjQgFQT9J6kopyr5nu4evh-1920-80.jpg" mos="" align="middle" fullscreen="" width="920" height="518" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>When it comes to State of Play-style events, they're often judged on their ending. The term "one last thing" (taken from Nintendo Directs) has been popularized for when a gaming event ends with a reveal that gets the whole internet hyped up. </p><p>State of Play has had its own share of exciting final announcements in the past, but don't expect one this time. As already noted, Final Fantasy VII Revelation has been confirmed to close the State of Play for September 2026, so there seemingly won't be an unexpected reveal to cap off the livestream. </p><p>Of course, that doesn't mean there won't be surprises before the FFVII portion! </p></div><div class="live-content"><time datetime="2026-09-03T12:15:30+00:00">September 3, 2026 – 8:15 AM</time><h2 id="will-intergalactic-finally-emerge-from-the-shadows">Will Intergalactic finally emerge from the shadows?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gGHYy9kM2a4pZMfY2DzSSQ" name="intergalactic-the-heretic-prophet-screenshot" alt="Intergalactic: The Heretic Prophet screenshot" src="https://cdn.mos.cms.futurecdn.net/gGHYy9kM2a4pZMfY2DzSSQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / Naughty Dog)</span></figcaption></figure><p>Every State of Play, I wish for a fresh look at Intergalactic: The Heretic Prophet, and every time I'M left disappointed when it's a no show. So, while I'm keeping my expectation in check this time, here's hoping Naughty Dog is <em>finally </em>ready to show us more at today's State of Play. </p><p>The sci-fi game was announced at The Game Awards 2024, with a slick CGI trailer, and hasn't been seen since. There's still so much we don't know about this game, we don't even have a release year, let alone a firm date. It'll be ND's first new game since The Last of Us Part II, and follows a bounty hunter stuck on a remote planet. </p></div><div class="live-content"><time datetime="2026-09-03T12:32:56+00:00">September 3, 2026 – 8:32 AM</time><h2 id="expect-some-ps-news-at-state-of-play">Expect some PS+ news at State of Play</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YJYKWsoYcKTmcTh2bde6UG" name="playstation-plus-collection-01.jpg" alt="PlayStation Plus Collection feature" src="https://cdn.mos.cms.futurecdn.net/YJYKWsoYcKTmcTh2bde6UG-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: PlayStation)</span></figcaption></figure><p>PlayStation typically likes to use State of Play events to highlight the games being added to PS+ in the future, and with the mid-month PlayStation Plus Extra Game Catalogue on the horizon, I wouldn't be surprised if that's showcased later today. </p><p>Maybe those on the Premium tier will also get some news about upcoming Classic games being added to the service. Either way, I expect PS+ will have a presence.</p></div><div class="live-content"><time datetime="2026-09-03T12:54:10+00:00">September 3, 2026 – 8:54 AM</time><h2 id="double-fine-couldn-39-t-keep-this-secret">Double Fine couldn't keep this secret!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DjvJiQVxD8e7G76nr5P5Pc" name="keeper-screenshot" alt="Keeper screenshot" src="https://cdn.mos.cms.futurecdn.net/DjvJiQVxD8e7G76nr5P5Pc-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Double Fine)</span></figcaption></figure><p>There's always a leak or two in the lead-up to a State of Play, and it appears this time it's come from Double Fine. The studio's artistic experience, Keeper, looks to be PlayStation-bound, as its trophy list has just surfaced via <a href="https://www.exophase.com/game/keeper-psn/trophies/" target="_blank">Exophase</a>. </p><p>The puzzle-adventure game launched last October on Xbox and PC, when Double Fine was still under the Xbox Games Studio umbrella. It's now gone independent, and appears to be looking to expand Keeper's player base. It'll almost certainly be confirmed during the State of Play. Leaked trophy data is a pretty solid clue. </p><p>As trophy data is already in the PlayStation system, that would hint at an imminent release date; it could even be dropped on the PlayStation Store later today.</p></div><div class="live-content"><time datetime="2026-09-03T12:58:41+00:00">September 3, 2026 – 8:58 AM</time><h2 id="state-of-play-september-2026-is-about-to-begin">State of Play September 2026 is about to begin! </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/dcTYz_mJpkU" allowfullscreen></iframe></div></div><p>The countdown is on, and that familiar State of Play pre-show music is playing. If you're watching today's State of Play, now is the time to get your stream ready. Don't worry, you don't need to search for it, I've linked it above, and if you can't watch, I'll have live updates right here so you don't miss a single announcement. </p></div><div class="live-content"><time datetime="2026-09-03T13:02:32+00:00">September 3, 2026 – 9:02 AM</time><h2 id="first-up-is-a-movie">First up...is a movie?</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/KGlapnJFacE" allowfullscreen></iframe></div></div><p>Whelp, it might be a video game event, but we're starting with a trailer for Zach Cregger's upcoming "Resident Evil" movie. </p></div><div class="live-content"><time datetime="2026-09-03T13:04:29+00:00">September 3, 2026 – 9:04 AM</time><h2 id="now-onto-the-games-please">Now onto the games (please)!</h2><p>The new "Resident Evil" movie looks cool, I've already got my tickets booked, but after dipping into the world of cinema, let's hope State of Play gets into the games.</p></div><div class="live-content"><time datetime="2026-09-03T13:06:43+00:00">September 3, 2026 – 9:06 AM</time><h2 id="wolverine-gets-a-last-look-before-launch">Wolverine gets a last look before launch</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/G62QQ42Ewwg" allowfullscreen></iframe></div></div><p>With Marvel's Wolverine landing later this month (on September 15), PlayStation is giving this PS5 exclusive one last State of Play spot before its in our hands soon.</p></div><div class="live-content"><time datetime="2026-09-03T13:08:40+00:00">September 3, 2026 – 9:08 AM</time><h2 id="ghost-of-yotei-39-s-new-dlc-is-next-up">Ghost of Yōtei's new DLC is next up</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/Nlchabfwy_w" allowfullscreen></iframe></div></div><p>It was recently confirmed that 2025's Ghost of Yōte would get a Complete Edition, which comes with new DLC, including the "Most Wanted" mode, and that's being showcased next. It looks like it'll give me plenty of reason to return to the game. </p></div><div class="live-content"><time datetime="2026-09-03T13:11:07+00:00">September 3, 2026 – 9:11 AM</time><h2 id="speaking-of-major-dlcs-it-39-s-monster-hunter-time">Speaking of major DLCs, it's Monster Hunter time!</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/SodbU0PEVH4" allowfullscreen></iframe></div></div><p>Another game from last year that's about to get a big DLC is Monster Hunter Wilds, it's called Ascendance, and I'm hoping it'll transform the base game in the same way that Iceborne radically expanded its predecessor Monster Hunter World. It's out in 2027. </p></div><div class="live-content"><time datetime="2026-09-03T13:13:33+00:00">September 3, 2026 – 9:13 AM</time><h2 id="metro-2039-gets-its-first-look-on-playstation">Metro 2039 gets its first look on PlayStation</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/6OGoAWzNV2s" allowfullscreen></iframe></div></div><p>One of my most anticipated games of 2027 takes the State of Play stage: Metro 2039. This is our first time seeing it at a PlayStation event, and I recently went hands-on with the title at Gamescom 2026, and can confirm it's shaping up to be a strong shooter. It's out February 4, 2027. </p></div><div class="live-content"><time datetime="2026-09-03T13:17:12+00:00">September 3, 2026 – 9:17 AM</time><h2 id="maneater-is-getting-a-sequel">Maneater is getting a sequel!</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/mg4Phb2Aulg" allowfullscreen></iframe></div></div><p>Shark sim Maneater is getting a sequel! The original launched in 2020, and was a whale of a good time (that pun works, right?). It's called, well, Maneater 2 and is out in 2027. </p></div><div class="live-content"><time datetime="2026-09-03T13:19:00+00:00">September 3, 2026 – 9:19 AM</time><h2 id="another-trailer-for-a-dlc">Another trailer for a DLC!</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/1fQCPmH6kOg" allowfullscreen></iframe></div></div><p>DLC expansions seem to be the big focus so far, and next up is an expansion for Crimson Desert. I'll admit, I couldn't really get into this one earlier in the year, but I know it's got a passionate player base. The DLC appears to add naval combat, underwater exploration, and a bunch of new enemies. It's called Crimson Desert: Charting the Unknown and launches on October 15, 2026. That's very soon!</p></div><div class="live-content"><time datetime="2026-09-03T13:20:54+00:00">September 3, 2026 – 9:20 AM</time><h2 id="the-ps1-is-getting-a-lego-makeover">The PS1 is getting a Lego makeover!</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/5FB8SIlnd6c" allowfullscreen></iframe></div></div><p>This one leaked earlier in the week, but PlayStation has teamed up with the folks at Lego to create a plastic-brick version of the PlayStation 1 console. It looks like a novel display piece and hides several easter eggs, including dioramas for Ape Escape and Gran Turismo. No word on price or release date, but as it's Lego, it'll probably cost quite a lot!</p></div><div class="live-content"><time datetime="2026-09-03T13:22:44+00:00">September 3, 2026 – 9:22 AM</time><h2 id="final-fantasy-makes-an-early-appearance">Final Fantasy makes an early appearance! </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/IZvZYwQdXN8" allowfullscreen></iframe></div></div><p>We know that FFVII Revelation will close the show, but there's room for more Final Fantasy, the game's first title in HD-2D title, Final Fantasy Resonance, is showcased, it's out on October 22, and there's a playable demo dropping later today. Neat!</p></div><div class="live-content"><time datetime="2026-09-03T13:24:42+00:00">September 3, 2026 – 9:24 AM</time><h2 id="gundam-fans-here-39-s-one-for-you">Gundam fans, here's one for you!</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/kJ6YB3tG0xM" allowfullscreen></iframe></div></div><p>Gundam: Rogue Orbit was announced earlier in the summer and we're getting a new look at today's State of Play. It's out March 5, 2027, and looks suitably epic. More will be revealed at the State of Play Japan that follows this initial showcase. </p></div><div class="live-content"><time datetime="2026-09-03T13:25:49+00:00">September 3, 2026 – 9:25 AM</time><h2 id="we-39-re-entering-the-indie-zone">We're entering the indie zone!</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/bKMaeHoJY2A" allowfullscreen></iframe></div></div><p>Next up, it's a trio of indie games that apparently "caught the teams attention", first it's a medieval-set game called Hunter's Moon that drops on October 26, 2026.  </p></div><div class="live-content"><time datetime="2026-09-03T13:28:46+00:00">September 3, 2026 – 9:28 AM</time><h2 id="uncanyon-is-revealed-and-keeper-is-confirmed">Uncanyon is revealed (and Keeper is confirmed)!</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/oSLtfQ-HqLM" allowfullscreen></iframe></div></div><p>Next, we head into the world of Uncanyon, which looks to be a dungeon-crawler that combines puzzles and combat; it's out in 2027. And the final game in this indie trio is Keeper from Double Fine. That one leaked earlier today and is out on PS5 today. Told you it might be a shadow drop!</p></div><div class="live-content"><time datetime="2026-09-03T13:31:01+00:00">September 3, 2026 – 9:31 AM</time><h2 id="rev-noir-gets-a-new-trailer-from-konami">Rev Noir gets a new trailer from Konami!</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/7feaOQVG5aE" allowfullscreen></iframe></div></div><p>Rev Noir, technically spelt Rev. NOiR (yes, it's a little silly), was announced at the last State of Play event, and Konami is already prepared with a new trailer for this RPG. </p></div><div class="live-content"><time datetime="2026-09-03T13:34:18+00:00">September 3, 2026 – 9:34 AM</time><h2 id="konami-also-reveals-rhapsody-in-scarlet">Konami also reveals Rhapsody in Scarlet </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/DnMPeZDKiNk" allowfullscreen></iframe></div></div><p>A jazz-set action game called Rhapsody in Scarlet is announced, it comes from Konami, and there will be more details during the State of Play Japan afterwards. </p></div><div class="live-content"><time datetime="2026-09-03T13:36:42+00:00">September 3, 2026 – 9:36 AM</time><h2 id="ps-preview-time-just-as-i-predicted">PS+ preview time (just as I predicted)!</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/PpM1KUTh43o" allowfullscreen></iframe></div></div><p>As I guessed, now we're getting an insight into what games are coming to PS+, including Mega Man X and the first Ratchet & Clank in the Classics Catalog. </p><p>Oh, and Saros is getting a big update with some new features; it'll be a free update. And Gran Turismo 7 is also being updated. The theme today is certainly DLCs! </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/qxFIHS2KhbM" allowfullscreen></iframe></div></div></div><div class="live-content"><time datetime="2026-09-03T13:41:49+00:00">September 3, 2026 – 9:41 AM</time><h2 id="i-39-m-on-a-roll-as-until-dawn-2-makes-an-appearance">I'm on a roll as Until Dawn 2 makes an appearance! </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/-wjhso38sAY" allowfullscreen></iframe></div></div><p>I don't want to pat myself on the back too much, but another of my predictions just came true, as the next trailer is for Until Dawn 2, the long awaited sequel sports a new cast, setting, storyline and even developer. It's all change, but the fundamental experience looks similar; it's again an interactive horror where the fate of each character is in your hands. Every decision matters. </p><p>It launches on January 28, 2027, which is sooner than I expected.</p></div><div class="live-content"><time datetime="2026-09-03T13:43:13+00:00">September 3, 2026 – 9:43 AM</time><h2 id="gta-6-is-getting-a-limited-edition-dualsense-controller">GTA 6 is getting a limited edition DualSense controller!</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/rcx6I2A0TyM" allowfullscreen></iframe></div></div><p>PlayStation is launching another limited edition DualSense controller, and I reckon this one will be popular because it's for GTA 6. I'm telling myself I don't need <em>another </em>DualSense...</p></div><div class="live-content"><time datetime="2026-09-03T13:45:28+00:00">September 3, 2026 – 9:45 AM</time><h2 id="and-now-into-final-fantasy-vii-revelation">And now into Final Fantasy VII Revelation!</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/pfqrUIGUC1o" allowfullscreen></iframe></div></div><p>It was confirmed to be the closer, so with the regular State of Play wrapping up, we've just got a very cinematic trailer for Final Fantasy VII Revelation, and most importantly, it includes a release date: April 8, 2027. </p></div><div class="live-content"><time datetime="2026-09-03T13:49:38+00:00">September 3, 2026 – 9:49 AM</time><h2 id="loads-of-new-ffvii-revelation-gameplay">Loads of new FFVII Revelation gameplay!</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/E9BTbjtXJWM" allowfullscreen></iframe></div></div><p>It was called an extended look, and it's living up to its billing. State of Play is ending with a 10 minute Final Fantasy VII Revelation gameplay presentation that is mostly focused on its vast world. You have access to an airship, which should make getting around simple, and if you spot something interesting, you skydive to the ground.</p></div><div class="live-content"><time datetime="2026-09-03T13:57:35+00:00">September 3, 2026 – 9:57 AM</time><h2 id="and-that-39-s-state-of-play-in-the-can-but-there-39-s-more-to-come">And that's State of Play in the can (but there's more to come)</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/dcTYz_mJpkU" allowfullscreen></iframe></div></div><p>FFVII Revelation brings State of Play to an end (as we knew it would). For me, that was a fairly average State of Play overall, but with a few announcements that grabbed my attention. But the show isn't over, as now we head into State of Play Japan, which offers further insight into some of the games revealed today! </p></div><div class="live-content"><time datetime="2026-09-03T14:00:35+00:00">September 3, 2026 – 10:00 AM</time><h2 id="dragonball-xenoverse-3-kicks-off-sop-japan">Dragonball Xenoverse 3 kicks off SoP Japan!</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/912l6NX5lrY" allowfullscreen></iframe></div></div><p>The first new trailer in this second State of Play presentation is Dragon Ball Xenoverse 3. </p></div><div class="live-content"><time datetime="2026-09-03T14:03:06+00:00">September 3, 2026 – 10:03 AM</time><h2 id="followed-by-fate-extra-record">Followed by Fate/Extra Record!</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/nr5-XGIkbg4" allowfullscreen></iframe></div></div><p>This remake of the first game in the Fate series is coming to PS5 on January 28, 2027 (The same day as Until Dawn 2). Per the trailer it offers "an expanded scenario, completely overhauled character graphics, and a highly strategic deck-building dramatic command battle system, the game modernizes both visuals and mechanics."</p></div><div class="live-content"><time datetime="2026-09-03T14:05:48+00:00">September 3, 2026 – 10:05 AM</time><h2 id="more-from-monster-hunter">More from Monster Hunter!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Uy6gzZgNHR8bLp5umbtnv4" name="Monster Hunter Wilds 1" alt="Monster Hunter Wilds" src="https://cdn.mos.cms.futurecdn.net/Uy6gzZgNHR8bLp5umbtnv4-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>The next segment is a deeper dive into the Monster Hunter Wilds: Ascendance expansion. It's looking to alter the experience in a bunch of ways with new weapons, armor, abilities, and, of course, most importantly, plenty of new monsters to hunt</p></div><div class="live-content"><time datetime="2026-09-03T14:10:25+00:00">September 3, 2026 – 10:10 AM</time><h2 id="dragon-quest-monsters-launches-this-december">Dragon Quest Monsters launches this December!</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/_9nrXc0-vm8" allowfullscreen></iframe></div></div><p>We've had Final Fantasy, now time for the <em>other </em>legendary Japanese RPG series, Dragon Quest. This isn't the latest mainline entry, but part of the spin-off Monsters series. Dragon Quest Monsters: The Withered World launches soon, on December 3, 2026. Watch the new trailer above!</p></div><div class="live-content"><time datetime="2026-09-03T14:12:04+00:00">September 3, 2026 – 10:12 AM</time><h2 id="here-39-s-one-for-the-rogue-lite-fans">Here's one for the rogue-lite fans!</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/c9V5ugavBQU" allowfullscreen></iframe></div></div><p>There was a curious lack of rogue-lites in the main State of Play, the genre flooded these days, but State of Play Japan has fixed that with The Eminence in Shadow: Phantom Echoes (quite the title), it's described as a rouge-lite action game launching in 2027! </p></div><div class="live-content"><time datetime="2026-09-03T14:14:57+00:00">September 3, 2026 – 10:14 AM</time><h2 id="more-new-trailers-to-watch">More new trailers to watch!</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/MLDGArmX0Tw" allowfullscreen></iframe></div></div><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/zdDJlYAVe-c" allowfullscreen></iframe></div></div><p>The announcements and trailers are coming fast in this State of Play Japan, here's two more, Where the Seeds Fall and one for online soccer game, Rematch, which is getting a collaboration with Blue Lock for its season 5!  </p></div><div class="live-content"><time datetime="2026-09-03T14:19:54+00:00">September 3, 2026 – 10:19 AM</time><h2 id="this-one-looks-intriguing">This one looks intriguing! </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/fIFA-lY_f6o" allowfullscreen></iframe></div></div><p>WPCA: World Phasebound Control Authority is showcased next, it looks like to be an action game where you're part of a group protecting our reality from supernatural foes. Pretty cool setup. Though, it's not out until 2028, so we won't be playing it any time soon! </p></div><div class="live-content"><time datetime="2026-09-03T14:21:40+00:00">September 3, 2026 – 10:21 AM</time><h2 id="stupid-never-dies-looks-ridiculous-but-in-a-good-way">Stupid Never Dies looks ridiculous, but in a good way! </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/k_33MQFuVEY" allowfullscreen></iframe></div></div><p>GPTRACK50’s Stupid Never Dies gets its third trailer, and this action-RPG looks like it's taking some big swings, and isn't scared to be very silly. I do wonder if the comedic tone might grate over a full playthrough, but it's another one that's caught my eye. </p></div><div class="live-content"><time datetime="2026-09-03T14:23:59+00:00">September 3, 2026 – 10:23 AM</time><h2 id="another-game-you-can-play-today">Another game you can play today!</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/nrJuL3XSLTc" allowfullscreen></iframe></div></div><p>SlashZero is getting a demo today. The full game isn't out until Spring 2027, but you can get a taste of it's side-scrollling action thanks to this demo. It's called a "limited-time" demo, so don't wait around if you want to check this one out before launch.</p></div><div class="live-content"><time datetime="2026-09-03T14:26:05+00:00">September 3, 2026 – 10:26 AM</time><h2 id="digimon-takes-the-stage-at-state-of-play-japan">Digimon takes the stage at State of Play Japan!</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/8v_Mg3yAnSY" allowfullscreen></iframe></div></div><p>I was always a Digimon kid, while all my friends were into Pokemon, so if you like me have a fondness for digital monsters, check out the trailer for Digimon Story Time Stranger: A Hero's Eternal Legacy, which surely wins the award for the longest game name at today's State of Play.</p></div><div class="live-content"><time datetime="2026-09-03T14:29:45+00:00">September 3, 2026 – 10:29 AM</time><h2 id="conq-looks-rough-in-more-ways-than-one">Conq looks rough, in more ways than one!</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/OqViikdsc7Y" allowfullscreen></iframe></div></div><p>CONQ: Crown Of No Quarter just debuted at State of Play Japan, and there are rough seas, and also a very choppy framerate. No release date details so hopefully the development team have lots of time to iron out the wrinkles, as this showing didn't do the game many favors. </p></div><div class="live-content"><time datetime="2026-09-03T14:31:11+00:00">September 3, 2026 – 10:31 AM</time><h2 id="another-rhapsody-in-scarlet-trailer">Another Rhapsody in Scarlet trailer!</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/FX6kr_DoXK8" allowfullscreen></iframe></div></div><p>Rhapsody in Scarlet was announced in the State of Play, and anybody interested in the title was that first showing didn't have to wait long for another, State of Play Japan has given us more insight into the game. </p></div><div class="live-content"><time datetime="2026-09-03T14:35:06+00:00">September 3, 2026 – 10:35 AM</time><h2 id="konami-has-gone-big-for-this-state-of-play">Konami has gone big for this State of Play!</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/PXmX1PXvDtA" allowfullscreen></iframe></div></div><p>Konami is really bringing the good to today's State of Play, it's also offered a second trailer for Rev Noir. But I'm a little surprised we haven't seen anything from Silent Hill: Townfall as that's due out in just a matter of weeks! </p></div><div class="live-content"><time datetime="2026-09-03T14:36:51+00:00">September 3, 2026 – 10:36 AM</time><h2 id="daba-land-of-water-scar-is-revealed-next">Daba: Land of Water Scar is revealed next! </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/YBTN74SHUnk" allowfullscreen></iframe></div></div><p>Looks like there's another Soulslike on the way in the form of Daba: Land of Water Scar, appears to have a mystical theme and the brief snippets of gameplay certainly give off a big Souls vibe. </p></div><div class="live-content"><time datetime="2026-09-03T14:44:59+00:00">September 3, 2026 – 10:44 AM</time><h2 id="ghost-of-yotei-39-s-story-expansion-takes-the-spotlight">Ghost of Yōtei's story expansion takes the spotlight! </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/d48IWwIRg98" allowfullscreen></iframe></div></div><p>After a lovely (if slightly lengthy) interview with the Japanese voice actor for Ghost of Yōtei's lead Atsu, now it's time for a trailer for the new story expansion, Echoes of Sekigahara, it'll be packaged with the "Most Wanted" survival mode in the Complete Edition which launches on October 1. </p></div><div class="live-content"><time datetime="2026-09-03T14:46:00+00:00">September 3, 2026 – 10:46 AM</time><h2 id="and-that-39-s-a-wrap-on-state-of-play-japan">And that's a wrap on State of Play Japan!</h2><p>There's just time for a quick sizzle reel covering everything we saw in State of Play Japan, and that's the end of the showcase.</p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Free TV on PS5: Sony just quietly launched a Pluto and Tubi competitor with 100+ live channels ]]></title>
                                                                                                <dc:content><![CDATA[ <p>I'm a lot of things, and a cheapskate is one of them. Subscriptions are only getting more expensive, so I take every chance I can get to shout out whatever <a href="https://www.tomsguide.com/best-picks/best-free-streaming-services" target="_blank">the best free streaming services</a> have to offer. Now, Sony's launched a convenient <strong>new PlayStation 5 feature that adds over 100 free live channels. </strong></p><p>It's Sony's take on free ad-supported television like Tubi, Pluto TV and the Roku Channel, bringing fan-favorite TV shows like <strong>"Community"</strong> and <strong>"The Walking Dead" </strong>alongside sports programming from <strong>NFL Channel</strong>, <strong>UFC</strong>, and other staples, news, weather, long-running anime series from <strong>Crunchyroll</strong>, and more to the gaming console you already use. </p><p>(Btw if you're looking to snag a PS5 Pro to play GTA 6 on, check out our live blog on all <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-restocks-latest-updates" target="_blank">the latest PS5 Pro restocks</a>.)</p><p><strong>To watch these new free channels (you can find a full list below) now</strong>, just go to the <strong>Media tab</strong> on the console's home screen, <strong>select the Live TV on PS5 icon</strong>, and sign in to your PlayStation Account. Easy as that! Live TV on PS5 is currently available in the U.S. to start, and Sony plans to roll it out to Canada and other regions in due time. </p><p>Sony said the service will evolve over time, but at launch, here's all the free programming you can watch now:</p><h3 class="article-body__section" id="section-all-the-new-live-tv-channels-on-ps5"><span>All the new live TV channels on PS5</span></h3><ul><li><strong>Movies –</strong> Free movies across action, horror, sci-fi and more, with channels including MovieSphere by Lionsgate, 50 Cent Action, FilmRise Free Movies, Sony One Horror Hits and Cinevault.</li><li><strong>TV Shows –</strong> Fan-favorite programming including Community, The Shield, Hell’s Kitchen, The Walking Dead, Forensic Files, Unsolved Mysteries, Deal or No Deal USA and Fear Factor, plus Ice Road Truckers from A+E’s HISTORY.</li><li><strong>Anime – </strong>Anime favorites including Naruto, Sailor Moon, Hunter x Hunter, Death Note and more, including exclusive channels Black Clover and Box Sets channels from Crunchyroll.</li><li><strong>Sports – </strong>Sports programming from FOX Sports, NASCAR, NBC Sports Now, UFC and more spanning MMA, football, hockey, motorsports, golf, boxing and soccer</li><li><strong>News & Weather – </strong>National, local and international coverage including NBC News Now, Fox Weather, and LiveNOW from FOX</li><li><strong>Creator & Specialty Programming – </strong>Programming featuring Hot Ones, Spotify’s The Ringer, Futcrunch, Idle Mode, comedy, action sports, gaming, esports and other creator-led content.</li><li><strong>Additional Programming – </strong>Discover gaming and esports, creator-led entertainment, documentaries, podcasts and other specialty programming, including eCLUTCH (exclusive) and more.</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><p>It's the same FAST (Free Ad-Supported Streaming TV) channels that have been available for years on free streaming services like Tubi and Pluto TV, now just all in one convenient location on your PS5. Both live and on-demand content will be available at launch, and there's no paid subscription, hidden fees, or downloads required.</p><p>I'm always happy to see more free streaming options arrive on the scene since the days of streaming as a cheaper alternative to cable are long gone. Of the PS5's selling points, Live TV channels are barely a footnote, but it's a handy addition for those who already own a console and want to have access to live news, the latest seasons of their favorite TV shows, and sports all in one place.  So who else is gonna join me in watching the 50 Cent Action channel on PS5 tonight?</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/us/best-cable-replacements,review-4387.html">The best live TV streaming services in 2026: Cable TV alternatives that save you money</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/i-watched-hours-of-tubi-and-pluto-tv-to-see-which-free-streaming-service-has-more-ads-and-one-has-twice-as-many">I watched hours of Tubi and Pluto TV to see which free streaming service has more ads — and one has twice as many</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/3-free-shows-on-the-roku-channel-with-a-lot-of-seasons-including-a-nathan-fillion-mystery-drama">3 free shows on the Roku Channel with a lot of seasons — including a Nathan Fillion mystery drama</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/free-tv-on-ps5-sony-just-quietly-launched-a-pluto-and-tubi-competitor-with-100-live-channels</link>
                                                                            <description>
                            <![CDATA[ Sony just added over 100 live TV channels on PS5 for free — here's everything you can watch right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">RRMqkLB5y5659cEERi24gE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/SGv7yeJNGJAioHnbNjRdVV-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 31 Aug 2026 20:59:52 +0000</pubDate>                                                                                                                                <updated>Mon, 07 Sep 2026 09:24:14 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Streaming]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                    <category><![CDATA[Entertainment]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alyse Stanley ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/BxNnQuBWRHqkv5xWZsjrjc-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alyse Stanley is a news editor at Tom’s Guide, overseeing weekend coverage and writing about the latest in tech, gaming, and entertainment. Before Tom’s Guide, Alyse worked as an editor for the Washington Post’s sunsetted video game section, Launcher, where she also wrote about indie games you shouldn’t miss, how to tackle your gaming backlog, and all things Nintendo. She previously led Gizmodo’s weekend news desk covering breaking tech news and has written game reviews and features for outlets like Polygon, Unwinnable, and Rock, Paper, Shotgun. A recent Chicago-area transplant born and raised in Virginia, Alyse is a big fan of horror movies, cartoons, and roller skating. She&#039;s also a puzzle fan and can often be found contributing to the NYT Connections coverage on Tom&#039;s Guide &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/SGv7yeJNGJAioHnbNjRdVV-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of channels displayed alongside the text: Live TV on PS5 - Watch Something Great.]]></media:description>                                                            <media:text><![CDATA[A selection of channels displayed alongside the text: Live TV on PS5 - Watch Something Great.]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of channels displayed alongside the text: Live TV on PS5 - Watch Something Great.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/SGv7yeJNGJAioHnbNjRdVV-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I'm a lot of things, and a cheapskate is one of them. Subscriptions are only getting more expensive, so I take every chance I can get to shout out whatever <a href="https://www.tomsguide.com/best-picks/best-free-streaming-services" target="_blank">the best free streaming services</a> have to offer. Now, Sony's launched a convenient <strong>new PlayStation 5 feature that adds over 100 free live channels. </strong></p><p>It's Sony's take on free ad-supported television like Tubi, Pluto TV and the Roku Channel, bringing fan-favorite TV shows like <strong>"Community"</strong> and <strong>"The Walking Dead" </strong>alongside sports programming from <strong>NFL Channel</strong>, <strong>UFC</strong>, and other staples, news, weather, long-running anime series from <strong>Crunchyroll</strong>, and more to the gaming console you already use. </p><p>(Btw if you're looking to snag a PS5 Pro to play GTA 6 on, check out our live blog on all <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-restocks-latest-updates" target="_blank">the latest PS5 Pro restocks</a>.)</p><p><strong>To watch these new free channels (you can find a full list below) now</strong>, just go to the <strong>Media tab</strong> on the console's home screen, <strong>select the Live TV on PS5 icon</strong>, and sign in to your PlayStation Account. Easy as that! Live TV on PS5 is currently available in the U.S. to start, and Sony plans to roll it out to Canada and other regions in due time. </p><p>Sony said the service will evolve over time, but at launch, here's all the free programming you can watch now:</p><h3 class="article-body__section" id="section-all-the-new-live-tv-channels-on-ps5"><span>All the new live TV channels on PS5</span></h3><ul><li><strong>Movies –</strong> Free movies across action, horror, sci-fi and more, with channels including MovieSphere by Lionsgate, 50 Cent Action, FilmRise Free Movies, Sony One Horror Hits and Cinevault.</li><li><strong>TV Shows –</strong> Fan-favorite programming including Community, The Shield, Hell’s Kitchen, The Walking Dead, Forensic Files, Unsolved Mysteries, Deal or No Deal USA and Fear Factor, plus Ice Road Truckers from A+E’s HISTORY.</li><li><strong>Anime – </strong>Anime favorites including Naruto, Sailor Moon, Hunter x Hunter, Death Note and more, including exclusive channels Black Clover and Box Sets channels from Crunchyroll.</li><li><strong>Sports – </strong>Sports programming from FOX Sports, NASCAR, NBC Sports Now, UFC and more spanning MMA, football, hockey, motorsports, golf, boxing and soccer</li><li><strong>News & Weather – </strong>National, local and international coverage including NBC News Now, Fox Weather, and LiveNOW from FOX</li><li><strong>Creator & Specialty Programming – </strong>Programming featuring Hot Ones, Spotify’s The Ringer, Futcrunch, Idle Mode, comedy, action sports, gaming, esports and other creator-led content.</li><li><strong>Additional Programming – </strong>Discover gaming and esports, creator-led entertainment, documentaries, podcasts and other specialty programming, including eCLUTCH (exclusive) and more.</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><p>It's the same FAST (Free Ad-Supported Streaming TV) channels that have been available for years on free streaming services like Tubi and Pluto TV, now just all in one convenient location on your PS5. Both live and on-demand content will be available at launch, and there's no paid subscription, hidden fees, or downloads required.</p><p>I'm always happy to see more free streaming options arrive on the scene since the days of streaming as a cheaper alternative to cable are long gone. Of the PS5's selling points, Live TV channels are barely a footnote, but it's a handy addition for those who already own a console and want to have access to live news, the latest seasons of their favorite TV shows, and sports all in one place.  So who else is gonna join me in watching the 50 Cent Action channel on PS5 tonight?</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/us/best-cable-replacements,review-4387.html">The best live TV streaming services in 2026: Cable TV alternatives that save you money</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/i-watched-hours-of-tubi-and-pluto-tv-to-see-which-free-streaming-service-has-more-ads-and-one-has-twice-as-many">I watched hours of Tubi and Pluto TV to see which free streaming service has more ads — and one has twice as many</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming/3-free-shows-on-the-roku-channel-with-a-lot-of-seasons-including-a-nathan-fillion-mystery-drama">3 free shows on the Roku Channel with a lot of seasons — including a Nathan Fillion mystery drama</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ PS5 Pro restocks — latest updates as major retailers sell out ahead of GTA 6 launch ]]></title>
                                                                                                <dc:content><![CDATA[ <div  class="fancy-box"><div class="fancy_box-title">PS5 Pro restocks: latest updates</div><div class="fancy_box_body"><p class="fancy-box__body-text">As of Thursday, September 19, 2026, the <strong>PS5 Pro is sold out</strong> across major retailers. <a data-analytics-id="inline-link" href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-pro-console/20015604.html" target="_blank" rel="nofollow"><strong>GameStop has limited pre-owned inventory</strong></a>. Availability differs by region, so check your local stores now. Meanwhile, Best Buy, Amazon, Walmart, Target, and PlayStation Direct remain out of stock.</p></div></div><p>The <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> is suddenly experiencing a wave of stock shortages, and a certain <a href="https://www.tomsguide.com/news/live/gta-6-netflix-event-2026-live-latest-updates">GTA 6</a> appears to be the culprit. PlayStation’s premium console turns two years old in November and was readily available at launch. However, with the Grand Theft Auto VI juggernaut on the horizon, gamers appear eager to upgrade their setup for the best possible experience.</p><p>The sudden spike in demand for the PS5 Pro has seen major retailers sell out of stock, and even the PS5 Pro’s March price hike (from $699 to $899) seemingly isn’t deterring buyers. In fact, there are reports of resale sites listing the console for as much as $1,399. But don’t give in to the scalpers; here at Tom’s Guide, it's our mission to get you a PS5 Pro at a fair price.</p><p>We’re experienced restock trackers, having covered everything from the original PS5 launch to the very popular PlayStation 30th Anniversary Collection. So, if you want to upgrade to a PS5 Pro before GTA 6 launches on November 19, we’ve got the latest restock updates down below. Be sure to bookmark this article, as we’ll update you when PS5 Pro stock appears.</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/2zd1Hbj9Pxc" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-ps5-pro-restock-quick-links"><span>PS5 Pro restock — Quick links</span></h3><ul><li><strong>PS5 Pro: </strong><a href="https://www.amazon.com/PlayStation%C2%AE5-console-1TB-PlayStation-5/dp/B0FTMY4YZ2" target="_blank" rel="nofollow"><strong>check stock @ Amazon</strong></a></li><li><strong>PS5 Pro: </strong><a href="https://www.bestbuy.com/product/playstation-5-pro-console/JXHQ37TR86" target="_blank" rel="nofollow"><strong>check stock @ Best Buy</strong></a><strong></strong></li><li><strong>PS5 Pro: </strong><a href="https://www.walmart.com/ip/Sony-PlayStation-5-Pro-Console-PS5-Pro/18235967161" target="_blank" rel="nofollow"><strong>check stock @ Walmart</strong></a></li><li><strong>PS5 Pro: </strong><a href="https://www.target.com/p/playstation-5-pro-console/-/A-93620188" target="_blank" rel="nofollow"><strong>check stock @ Target</strong></a></li><li><strong>PS5 Pro: </strong><a href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-pro-console/20015604.html" target="_blank" rel="nofollow"><strong>check stock @ GameStop</strong></a></li><li><strong>PS5 Pro: </strong><a href="https://direct.playstation.com/en-us/buy-consoles/playstation5-pro-console-2-tb" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li></ul><h3 class="article-body__section" id="section-ps5-pro-restock-latest-updates"><span>PS5 Pro restock — latest updates</span></h3><p>As of 12:33 p.m. (ET) on Thursday, September 17, <strong>the PS5 Pro is out of stock </strong>at major retailers. That includes Amazon, Best Buy, Walmart, Target, and even PlayStation's own official online retailer, PlayStation Direct.</p><p>The restock situation is particularly bleak at present. There have been no signs of stock since the GTA 6 Extended Look premiered on Netflix, the console has remained sold out throughout the month of September.</p><p>If you don't want to wait for "new" PS5 Pro, <a href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-pro-console/20015604.html" target="_blank" rel="nofollow"><strong>GameStop offers pre-owned units</strong></a>, but stock varies by location (so check your nearest store). </p><p>Meanwhile, I've encountered several third-party sellers using retailers like Best Buy, Amazon and Walmart to scalp the console for eye-watering prices. There's a listing on Walmart for $1,469. Hopefully PS5 Pro restocks are on the way, and in the meantime, don't give in and pay scalper prices.</p><h3 class="article-body__section" id="section-ps5-pro-restock-full-retailer-listings"><span> PS5 Pro restock — Full retailer listings</span></h3><div class="product"><a data-dimension112="afceaf42-a565-11f1-9c69-b79d26fbc6f0" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://www.amazon.com/PlayStation%C2%AE5-console-1TB-PlayStation-5/dp/B0FTMY4YZ2" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecjfqi2UgurxrA42rX7pML" name="Amazon-Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ecjfqi2UgurxrA42rX7pML-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is sold out of the PS5 Pro at present, but some third-party listings are available. However, these are priced at more than $1,300. Don't give in to the scalpers. Wait for restocks.<a class="view-deal button" href="https://www.amazon.com/PlayStation%C2%AE5-console-1TB-PlayStation-5/dp/B0FTMY4YZ2" target="_blank" rel="nofollow" data-dimension112="afceaf42-a565-11f1-9c69-b79d26fbc6f0" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="afceafc4-a565-11f1-bc55-d102585dfe98" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://www.bestbuy.com/product/playstation-5-pro-console/JXHQ37TR86" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Best Buy is sold out of <em>new </em>PS5 Pro consoles, but is offering "open-box" units at select locations. This varies by region, so check your nearest Best Buy if you're willing to buy a console that has been returned to the retailer.<a class="view-deal button" href="https://www.bestbuy.com/product/playstation-5-pro-console/JXHQ37TR86" target="_blank" rel="nofollow" data-dimension112="afceafc4-a565-11f1-bc55-d102585dfe98" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="afceb032-a565-11f1-874e-19ca603a8483" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://www.walmart.com/ip/Sony-PlayStation-5-Pro-Console-PS5-Pro/18235967161" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RZkKnBkdjDJ6QRZq2RmaPY" name="Walmart-Logo-2008" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RZkKnBkdjDJ6QRZq2RmaPY-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Walmart is currently sold out of PS5 Pro consoles with the dreaded "out of stock" message greeting shoppers. Let's hope a Walmart PS5 Pro restock is on the horizon.<a class="view-deal button" href="https://www.walmart.com/ip/Sony-PlayStation-5-Pro-Console-PS5-Pro/18235967161" target="_blank" rel="nofollow" data-dimension112="afceb032-a565-11f1-874e-19ca603a8483" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="afceb0a0-a565-11f1-8cb3-a533332616a1" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://www.target.com/p/playstation-5-pro-console/-/A-93620188" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:129.60%;"><img id="J4ioQbCcWu8knu9FrYgeRT" name="purepng.com-target-logologobrand-logoiconslogos-251519939485oxces" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J4ioQbCcWu8knu9FrYgeRT-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2592" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Target is another major retailer currently sold out of the PS5 Pro console, but we're watching closely in case the national retailer restocks.<a class="view-deal button" href="https://www.target.com/p/playstation-5-pro-console/-/A-93620188" target="_blank" rel="nofollow" data-dimension112="afceb0a0-a565-11f1-8cb3-a533332616a1" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="afceb104-a565-11f1-b54c-8d73099a0a99" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-pro-console/20015604.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EXpDruhoaAuddyN6RUCGyb" name="GameStop logo.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EXpDruhoaAuddyN6RUCGyb-1920-80.png" mos="" align="middle" fullscreen="" width="400" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>GameStop is sold out of new PS5 Pro consoles, but unlike its rival retailers, it does offer pre-owned and refurbished consoles. Availability is location-based, so check your local listings; you could get lucky and score a PS5 Pro today.<a class="view-deal button" href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-pro-console/20015604.html" target="_blank" rel="nofollow" data-dimension112="afceb104-a565-11f1-b54c-8d73099a0a99" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="afceb190-a565-11f1-98a8-c5bb502a3c39" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://direct.playstation.com/en-us/buy-consoles/playstation5-pro-console-2-tb" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>PlayStation Direct is the company's official retail arm, so you might think it would be the best place to score a PS5 Pro. Unfortunately, even directly from PlayStation, the console is currently sold out. There could be restocks.<a class="view-deal button" href="https://direct.playstation.com/en-us/buy-consoles/playstation5-pro-console-2-tb" target="_blank" rel="nofollow" data-dimension112="afceb190-a565-11f1-98a8-c5bb502a3c39" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="077d1384-a582-11f1-bace-b5024116e8be" data-action="Deal Block" data-label="Refurb PS5 Pro: check stock @ Back Market" data-dimension48="Refurb PS5 Pro: check stock @ Back Market" href="https://www.backmarket.com/en-us/l/sony-playstation/dcbd8534-a5cd-4df0-9d54-dc80814fbcf6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YPipqtYVnu7Cbxs6UANHaK" name="Back Market logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YPipqtYVnu7Cbxs6UANHaK-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Refurb PS5 Pro: </strong><a href="https://www.backmarket.com/en-us/l/sony-playstation/dcbd8534-a5cd-4df0-9d54-dc80814fbcf6" target="_blank" rel="nofollow" data-dimension112="077d1384-a582-11f1-bace-b5024116e8be" data-action="Deal Block" data-label="Refurb PS5 Pro: check stock @ Back Market" data-dimension48="Refurb PS5 Pro: check stock @ Back Market" data-dimension25=""><strong>check stock @ Back Market</strong></a><br>Back Market fights overproduction and overconsumption by giving new life to refurbished tech. Devices are inspected by industry professionals and guaranteed with a 30-day return window and 1-year warranty. Although they currently have refurb PS5 consoles, PS5 Pro consoles are out of stock. <a class="view-deal button" href="https://www.backmarket.com/en-us/l/sony-playstation/dcbd8534-a5cd-4df0-9d54-dc80814fbcf6" target="_blank" rel="nofollow" data-dimension112="077d1384-a582-11f1-bace-b5024116e8be" data-action="Deal Block" data-label="Refurb PS5 Pro: check stock @ Back Market" data-dimension48="Refurb PS5 Pro: check stock @ Back Market" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-ps5-pro-restock-what-you-need-to-know"><span>PS5 Pro restock — what you need to know</span></h3><h2 id="how-much-does-the-ps5-pro-cost">How much does the PS5 Pro cost?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NLmsYxcW7zX8Zanxh3857J" name="ps5 pro image.jpg" alt="An image of the PS5 Pro on a blue background" src="https://cdn.mos.cms.futurecdn.net/NLmsYxcW7zX8Zanxh3857J-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>As of March 2026, the PS5 Pro retails for $899. This is quite a step up compared to the base <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a>, priced at $649, and the PS5 Slim Digital Edition, which costs $599 as standard. </p><p>$899 was <em>not </em>the PS5 Pro’s launch price. The powerful PlayStation console initially retailed for $699, but earlier this year the price was hiked due to, in Sony’s words, “continued pressures in the global economic landscape.”</p><p>In simple terms, that means the increasing cost of RAM, which has been dubbed <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">“RAMageddon.”</a> The price of RAM has spiralled in recent months due to overwhelming demand, particularly from AI and data companies. The result has been price increases across consumer tech. Sadly, video game consoles haven't escaped the price hikes seen across tech products.</p><h2 id="why-is-the-ps5-pro-sold-out-right-now">Why is the PS5 Pro sold out right now? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hyce8Ftu8N8gj3Dx5Dqg6b" name="gta-6-Jason_Duval_01" alt="Grand Theft Auto VI screenshot" src="https://cdn.mos.cms.futurecdn.net/hyce8Ftu8N8gj3Dx5Dqg6b-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar)</span></figcaption></figure><p>Since its launch in November 2024, the PS5 Pro had never been difficult to buy. I was in the pre-order trenches two years ago and can confirm first-hand that securing one was as simple as heading to your preferred retailer, checking out, and ideally not looking at your bank balance afterward. The price increase in March this year likely only further softened demand.</p><p>So what’s changed? That appears to be a little game called Grand Theft Auto VI. The long-awaited next mainline installment in Rockstar’s open-world crime series releases on November 19, and now that we’ve got a proper look at GTA 6 gameplay, the hype levels are reaching a peak. This has led many gamers to invest in their gaming setup before launch. </p><p>GTA 6 is dropping exclusively on console in November. It’s only on PS5 and <a href="">Xbox Series X</a>, and if you want to play GTA 6 on the most powerful console around, that’s the PS5 Pro. So we have the perfect storm of a once-in-a-generation game leading to increased demand on a console that was previously considered niche. Plus, Sony can’t just rapidly manufacture more stock due to the aforementioned rising cost of key components, like RAM.</p><h2 id="is-the-ps5-pro-worth-buying-in-2026">Is the PS5 Pro worth buying in 2026?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bSgJexzmBfwV8pzW9bKFJL" name="PS5 Pro-13" alt="PS5 Pro sitting horizontally on a table" src="https://cdn.mos.cms.futurecdn.net/bSgJexzmBfwV8pzW9bKFJL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>This is a tough question to answer. Back in 2024, when <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">I reviewed the PS5 Pro for Tom’s Guide</a>, I said, “The eye-watering $699 price tag makes it a machine that will only appeal to the most dedicated gamers,” and I stand by that verdict. The only thing that has changed is that the price has gone from eye-watering to downright off-putting. Yet, the PS5 Pro is selling out. </p><p>If you want to experience GTA 6 at its absolute best this November, the PS5 Pro will presumably be the place to play. Rockstar hasn’t yet confirmed how (or if) the game will utilize the Pro’s extra horsepower, but it’s expected to look (and run) best on the PS5 Pro. </p><p>However, $899 is a steep price to pay, and that’s assuming you can even find a PS5 Pro in stock for MSRP. It’s also worth noting that the recent <a href="https://www.youtube.com/watch?v=tJbzMqJGH4k">GTA 6: An Extended Look</a> presentation showcased the game running on a base PS5 console, and it certainly didn’t look bad — far from it. It looks stunning.</p><p>If you take your console gaming seriously, the PS5 Pro could be a worthwhile investment, as it’ll boost the performance of not just GTA 6, but also the majority of AAA games on the PlayStation platform, but I don’t think it’s an essential upgrade in 2026, any more than I did back in 2024.</p><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop more deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&min_discount_ratio=0.95&offer_type=all&view_mode=carousel&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=light_blue" 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("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = this.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.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><h3 class="article-body__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/playstation/ps5-pro-review">PS5 Pro review: The most powerful console ever comes at a price</a></li><li><a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">The best PS5 games in 2026</a></li><li><a href="https://www.tomsguide.com/gaming/i-grinded-enough-microsoft-reward-points-to-get-gta-6-for-free-heres-how-you-can-do-it-too">I grinded enough Microsoft reward points to get GTA 6 for free</a><strong> </strong></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/ps5-pro-restocks-latest-updates</link>
                                                                            <description>
                            <![CDATA[ PS5 Pro is selling out across retailers as gamers look to upgrade ahead of GTA 6, so we're tracking restocks to help your secure one. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">PtdQxPH8cTpg8An9piTavk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/bMX2buAmAL7uK2BwXXj5F-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 31 Aug 2026 18:30:47 +0000</pubDate>                                                                                                                                <updated>Thu, 17 Sep 2026 16:34:13 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/bMX2buAmAL7uK2BwXXj5F-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PS5 Pro]]></media:description>                                                            <media:text><![CDATA[PS5 Pro]]></media:text>
                                <media:title type="plain"><![CDATA[PS5 Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/bMX2buAmAL7uK2BwXXj5F-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div  class="fancy-box"><div class="fancy_box-title">PS5 Pro restocks: latest updates</div><div class="fancy_box_body"><p class="fancy-box__body-text">As of Thursday, September 19, 2026, the <strong>PS5 Pro is sold out</strong> across major retailers. <a data-analytics-id="inline-link" href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-pro-console/20015604.html" target="_blank" rel="nofollow"><strong>GameStop has limited pre-owned inventory</strong></a>. Availability differs by region, so check your local stores now. Meanwhile, Best Buy, Amazon, Walmart, Target, and PlayStation Direct remain out of stock.</p></div></div><p>The <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> is suddenly experiencing a wave of stock shortages, and a certain <a href="https://www.tomsguide.com/news/live/gta-6-netflix-event-2026-live-latest-updates">GTA 6</a> appears to be the culprit. PlayStation’s premium console turns two years old in November and was readily available at launch. However, with the Grand Theft Auto VI juggernaut on the horizon, gamers appear eager to upgrade their setup for the best possible experience.</p><p>The sudden spike in demand for the PS5 Pro has seen major retailers sell out of stock, and even the PS5 Pro’s March price hike (from $699 to $899) seemingly isn’t deterring buyers. In fact, there are reports of resale sites listing the console for as much as $1,399. But don’t give in to the scalpers; here at Tom’s Guide, it's our mission to get you a PS5 Pro at a fair price.</p><p>We’re experienced restock trackers, having covered everything from the original PS5 launch to the very popular PlayStation 30th Anniversary Collection. So, if you want to upgrade to a PS5 Pro before GTA 6 launches on November 19, we’ve got the latest restock updates down below. Be sure to bookmark this article, as we’ll update you when PS5 Pro stock appears.</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/2zd1Hbj9Pxc" allowfullscreen></iframe></div></div><h3 class="article-body__section" id="section-ps5-pro-restock-quick-links"><span>PS5 Pro restock — Quick links</span></h3><ul><li><strong>PS5 Pro: </strong><a href="https://www.amazon.com/PlayStation%C2%AE5-console-1TB-PlayStation-5/dp/B0FTMY4YZ2" target="_blank" rel="nofollow"><strong>check stock @ Amazon</strong></a></li><li><strong>PS5 Pro: </strong><a href="https://www.bestbuy.com/product/playstation-5-pro-console/JXHQ37TR86" target="_blank" rel="nofollow"><strong>check stock @ Best Buy</strong></a><strong></strong></li><li><strong>PS5 Pro: </strong><a href="https://www.walmart.com/ip/Sony-PlayStation-5-Pro-Console-PS5-Pro/18235967161" target="_blank" rel="nofollow"><strong>check stock @ Walmart</strong></a></li><li><strong>PS5 Pro: </strong><a href="https://www.target.com/p/playstation-5-pro-console/-/A-93620188" target="_blank" rel="nofollow"><strong>check stock @ Target</strong></a></li><li><strong>PS5 Pro: </strong><a href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-pro-console/20015604.html" target="_blank" rel="nofollow"><strong>check stock @ GameStop</strong></a></li><li><strong>PS5 Pro: </strong><a href="https://direct.playstation.com/en-us/buy-consoles/playstation5-pro-console-2-tb" target="_blank" rel="nofollow"><strong>check stock @ PlayStation Direct</strong></a></li></ul><h3 class="article-body__section" id="section-ps5-pro-restock-latest-updates"><span>PS5 Pro restock — latest updates</span></h3><p>As of 12:33 p.m. (ET) on Thursday, September 17, <strong>the PS5 Pro is out of stock </strong>at major retailers. That includes Amazon, Best Buy, Walmart, Target, and even PlayStation's own official online retailer, PlayStation Direct.</p><p>The restock situation is particularly bleak at present. There have been no signs of stock since the GTA 6 Extended Look premiered on Netflix, the console has remained sold out throughout the month of September.</p><p>If you don't want to wait for "new" PS5 Pro, <a href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-pro-console/20015604.html" target="_blank" rel="nofollow"><strong>GameStop offers pre-owned units</strong></a>, but stock varies by location (so check your nearest store). </p><p>Meanwhile, I've encountered several third-party sellers using retailers like Best Buy, Amazon and Walmart to scalp the console for eye-watering prices. There's a listing on Walmart for $1,469. Hopefully PS5 Pro restocks are on the way, and in the meantime, don't give in and pay scalper prices.</p><h3 class="article-body__section" id="section-ps5-pro-restock-full-retailer-listings"><span> PS5 Pro restock — Full retailer listings</span></h3><div class="product"><a data-dimension112="afceaf42-a565-11f1-9c69-b79d26fbc6f0" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://www.amazon.com/PlayStation%C2%AE5-console-1TB-PlayStation-5/dp/B0FTMY4YZ2" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecjfqi2UgurxrA42rX7pML" name="Amazon-Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ecjfqi2UgurxrA42rX7pML-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Amazon is sold out of the PS5 Pro at present, but some third-party listings are available. However, these are priced at more than $1,300. Don't give in to the scalpers. Wait for restocks.<a class="view-deal button" href="https://www.amazon.com/PlayStation%C2%AE5-console-1TB-PlayStation-5/dp/B0FTMY4YZ2" target="_blank" rel="nofollow" data-dimension112="afceaf42-a565-11f1-9c69-b79d26fbc6f0" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="afceafc4-a565-11f1-bc55-d102585dfe98" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://www.bestbuy.com/product/playstation-5-pro-console/JXHQ37TR86" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Best Buy is sold out of <em>new </em>PS5 Pro consoles, but is offering "open-box" units at select locations. This varies by region, so check your nearest Best Buy if you're willing to buy a console that has been returned to the retailer.<a class="view-deal button" href="https://www.bestbuy.com/product/playstation-5-pro-console/JXHQ37TR86" target="_blank" rel="nofollow" data-dimension112="afceafc4-a565-11f1-bc55-d102585dfe98" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="afceb032-a565-11f1-874e-19ca603a8483" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://www.walmart.com/ip/Sony-PlayStation-5-Pro-Console-PS5-Pro/18235967161" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RZkKnBkdjDJ6QRZq2RmaPY" name="Walmart-Logo-2008" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RZkKnBkdjDJ6QRZq2RmaPY-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Walmart is currently sold out of PS5 Pro consoles with the dreaded "out of stock" message greeting shoppers. Let's hope a Walmart PS5 Pro restock is on the horizon.<a class="view-deal button" href="https://www.walmart.com/ip/Sony-PlayStation-5-Pro-Console-PS5-Pro/18235967161" target="_blank" rel="nofollow" data-dimension112="afceb032-a565-11f1-874e-19ca603a8483" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="afceb0a0-a565-11f1-8cb3-a533332616a1" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://www.target.com/p/playstation-5-pro-console/-/A-93620188" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:129.60%;"><img id="J4ioQbCcWu8knu9FrYgeRT" name="purepng.com-target-logologobrand-logoiconslogos-251519939485oxces" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J4ioQbCcWu8knu9FrYgeRT-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2592" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Target is another major retailer currently sold out of the PS5 Pro console, but we're watching closely in case the national retailer restocks.<a class="view-deal button" href="https://www.target.com/p/playstation-5-pro-console/-/A-93620188" target="_blank" rel="nofollow" data-dimension112="afceb0a0-a565-11f1-8cb3-a533332616a1" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="afceb104-a565-11f1-b54c-8d73099a0a99" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-pro-console/20015604.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EXpDruhoaAuddyN6RUCGyb" name="GameStop logo.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EXpDruhoaAuddyN6RUCGyb-1920-80.png" mos="" align="middle" fullscreen="" width="400" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>GameStop is sold out of new PS5 Pro consoles, but unlike its rival retailers, it does offer pre-owned and refurbished consoles. Availability is location-based, so check your local listings; you could get lucky and score a PS5 Pro today.<a class="view-deal button" href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-pro-console/20015604.html" target="_blank" rel="nofollow" data-dimension112="afceb104-a565-11f1-b54c-8d73099a0a99" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="afceb190-a565-11f1-98a8-c5bb502a3c39" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899" href="https://direct.playstation.com/en-us/buy-consoles/playstation5-pro-console-2-tb" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>PlayStation Direct is the company's official retail arm, so you might think it would be the best place to score a PS5 Pro. Unfortunately, even directly from PlayStation, the console is currently sold out. There could be restocks.<a class="view-deal button" href="https://direct.playstation.com/en-us/buy-consoles/playstation5-pro-console-2-tb" target="_blank" rel="nofollow" data-dimension112="afceb190-a565-11f1-98a8-c5bb502a3c39" data-action="Deal Block" data-label="PS5 Pro" data-dimension48="PS5 Pro" data-dimension25="$899">View Deal</a></p></div><div class="product"><a data-dimension112="077d1384-a582-11f1-bace-b5024116e8be" data-action="Deal Block" data-label="Refurb PS5 Pro: check stock @ Back Market" data-dimension48="Refurb PS5 Pro: check stock @ Back Market" href="https://www.backmarket.com/en-us/l/sony-playstation/dcbd8534-a5cd-4df0-9d54-dc80814fbcf6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YPipqtYVnu7Cbxs6UANHaK" name="Back Market logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YPipqtYVnu7Cbxs6UANHaK-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Refurb PS5 Pro: </strong><a href="https://www.backmarket.com/en-us/l/sony-playstation/dcbd8534-a5cd-4df0-9d54-dc80814fbcf6" target="_blank" rel="nofollow" data-dimension112="077d1384-a582-11f1-bace-b5024116e8be" data-action="Deal Block" data-label="Refurb PS5 Pro: check stock @ Back Market" data-dimension48="Refurb PS5 Pro: check stock @ Back Market" data-dimension25=""><strong>check stock @ Back Market</strong></a><br>Back Market fights overproduction and overconsumption by giving new life to refurbished tech. Devices are inspected by industry professionals and guaranteed with a 30-day return window and 1-year warranty. Although they currently have refurb PS5 consoles, PS5 Pro consoles are out of stock. <a class="view-deal button" href="https://www.backmarket.com/en-us/l/sony-playstation/dcbd8534-a5cd-4df0-9d54-dc80814fbcf6" target="_blank" rel="nofollow" data-dimension112="077d1384-a582-11f1-bace-b5024116e8be" data-action="Deal Block" data-label="Refurb PS5 Pro: check stock @ Back Market" data-dimension48="Refurb PS5 Pro: check stock @ Back Market" data-dimension25="">View Deal</a></p></div><h3 class="article-body__section" id="section-ps5-pro-restock-what-you-need-to-know"><span>PS5 Pro restock — what you need to know</span></h3><h2 id="how-much-does-the-ps5-pro-cost">How much does the PS5 Pro cost?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NLmsYxcW7zX8Zanxh3857J" name="ps5 pro image.jpg" alt="An image of the PS5 Pro on a blue background" src="https://cdn.mos.cms.futurecdn.net/NLmsYxcW7zX8Zanxh3857J-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>As of March 2026, the PS5 Pro retails for $899. This is quite a step up compared to the base <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a>, priced at $649, and the PS5 Slim Digital Edition, which costs $599 as standard. </p><p>$899 was <em>not </em>the PS5 Pro’s launch price. The powerful PlayStation console initially retailed for $699, but earlier this year the price was hiked due to, in Sony’s words, “continued pressures in the global economic landscape.”</p><p>In simple terms, that means the increasing cost of RAM, which has been dubbed <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">“RAMageddon.”</a> The price of RAM has spiralled in recent months due to overwhelming demand, particularly from AI and data companies. The result has been price increases across consumer tech. Sadly, video game consoles haven't escaped the price hikes seen across tech products.</p><h2 id="why-is-the-ps5-pro-sold-out-right-now">Why is the PS5 Pro sold out right now? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hyce8Ftu8N8gj3Dx5Dqg6b" name="gta-6-Jason_Duval_01" alt="Grand Theft Auto VI screenshot" src="https://cdn.mos.cms.futurecdn.net/hyce8Ftu8N8gj3Dx5Dqg6b-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar)</span></figcaption></figure><p>Since its launch in November 2024, the PS5 Pro had never been difficult to buy. I was in the pre-order trenches two years ago and can confirm first-hand that securing one was as simple as heading to your preferred retailer, checking out, and ideally not looking at your bank balance afterward. The price increase in March this year likely only further softened demand.</p><p>So what’s changed? That appears to be a little game called Grand Theft Auto VI. The long-awaited next mainline installment in Rockstar’s open-world crime series releases on November 19, and now that we’ve got a proper look at GTA 6 gameplay, the hype levels are reaching a peak. This has led many gamers to invest in their gaming setup before launch. </p><p>GTA 6 is dropping exclusively on console in November. It’s only on PS5 and <a href="">Xbox Series X</a>, and if you want to play GTA 6 on the most powerful console around, that’s the PS5 Pro. So we have the perfect storm of a once-in-a-generation game leading to increased demand on a console that was previously considered niche. Plus, Sony can’t just rapidly manufacture more stock due to the aforementioned rising cost of key components, like RAM.</p><h2 id="is-the-ps5-pro-worth-buying-in-2026">Is the PS5 Pro worth buying in 2026?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bSgJexzmBfwV8pzW9bKFJL" name="PS5 Pro-13" alt="PS5 Pro sitting horizontally on a table" src="https://cdn.mos.cms.futurecdn.net/bSgJexzmBfwV8pzW9bKFJL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>This is a tough question to answer. Back in 2024, when <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">I reviewed the PS5 Pro for Tom’s Guide</a>, I said, “The eye-watering $699 price tag makes it a machine that will only appeal to the most dedicated gamers,” and I stand by that verdict. The only thing that has changed is that the price has gone from eye-watering to downright off-putting. Yet, the PS5 Pro is selling out. </p><p>If you want to experience GTA 6 at its absolute best this November, the PS5 Pro will presumably be the place to play. Rockstar hasn’t yet confirmed how (or if) the game will utilize the Pro’s extra horsepower, but it’s expected to look (and run) best on the PS5 Pro. </p><p>However, $899 is a steep price to pay, and that’s assuming you can even find a PS5 Pro in stock for MSRP. It’s also worth noting that the recent <a href="https://www.youtube.com/watch?v=tJbzMqJGH4k">GTA 6: An Extended Look</a> presentation showcased the game running on a base PS5 console, and it certainly didn’t look bad — far from it. It looks stunning.</p><p>If you take your console gaming seriously, the PS5 Pro could be a worthwhile investment, as it’ll boost the performance of not just GTA 6, but also the majority of AAA games on the PlayStation platform, but I don’t think it’s an essential upgrade in 2026, any more than I did back in 2024.</p><h3 class="article-body__section" id="section-shop-more-deals"><span>Shop more deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&min_discount_ratio=0.95&offer_type=all&view_mode=carousel&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=light_blue" 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("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vc2hvcC1hc3NldHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Nob3AtYXNzZXRzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9zaG9wLWFzc2V0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = this.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.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><h3 class="article-body__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/playstation/ps5-pro-review">PS5 Pro review: The most powerful console ever comes at a price</a></li><li><a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">The best PS5 games in 2026</a></li><li><a href="https://www.tomsguide.com/gaming/i-grinded-enough-microsoft-reward-points-to-get-gta-6-for-free-heres-how-you-can-do-it-too">I grinded enough Microsoft reward points to get GTA 6 for free</a><strong> </strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ As a PC snob, I wanted to catch GTA 6 making console compromises. Instead, I’m in awe of the trickery ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When you spend your life gaming on a high-end PC, watching console game reveals like the <a href="https://www.tomsguide.com/news/live/gta-6-netflix-event-2026-live-latest-updates">GTA 6 Extended Look</a> usually means spotting the ugly trade-offs: aggressive texture pop-in, flat lighting, messy background items and resolution scaling that melts into pixel soup during intense moments.</p><p>Then Rockstar drops 26 minutes of Grand Theft Auto VI gameplay into my lap, and the cynicism is completely replaced with “how on Earth did they do this!?”</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ajvsbLsbMPfcPHcQd5ARjk" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/ajvsbLsbMPfcPHcQd5ARjk-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>The footage wasn’t captured on a boutique developer workstation or devkit; it ran on a standard PlayStation 5 — a machine built on silicon that hit shelves back in 2020. My mind is blown, and having frame-stepped through the footage repeatedly, the fidelity in which Vice City has been realized is truly astonishing.</p><p>But if I can get nerdy with you, the real story isn’t just raw horsepower, it’s the meticulous, brilliant optical illusions being used to create these visuals without cooking a six-year-old console. I’d love to share what I’ve found with you, and what made me pre-order the second after my first watch-through.</p><ul><li><a href="https://www.amazon.com/Grand-Theft-Auto-VI-PlayStation-Delivers/dp/B0H6K928WL" target="_blank" rel="nofollow"><strong>Preorder for PS5 ($79)</strong></a></li><li><a href="https://www.amazon.com/Grand-Theft-Auto-VI-Delivers-Playable/dp/B0H6K49W6Y" target="_blank" rel="nofollow"><strong>Preorder for Xbox Series X/S ($79)</strong></a></li></ul><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/tJbzMqJGH4k" allowfullscreen></iframe></div></div><p><strong>Guesswork and analysis: </strong>My analysis is from watching the full 4K version of the GTA 6 Extended Look, which you can download for yourself <a href="https://www.rockstargames.com/VI/media/videos" target="_blank">here</a>. Paired with my understanding of game graphics, but with no comment from Rockstar, so I don't know the specifics of their game engine, but I can make some educated guesses.</p><h2 id="natural-lighting-that-doesn-t-melt-the-console">Natural lighting that doesn’t melt the console</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HNfWUjL4GYfugHaaPLHgWk" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/HNfWUjL4GYfugHaaPLHgWk-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>The single biggest visual upgrade in the footage is how light moves through the world. It’s what really brings that level of depth and moodiness to every scene — from the dark, smoke-filled dinginess of the drug den to the sun-soaked streets of Vice City.</p><p>In past games, lighting was largely “painted” onto objects with pre-set shadows. In GTA 6, however, sunlight actually bounces off surfaces in real-time. When light hits the floor of Jason and Lucia’s apartment, it naturally bounces up to softly illuminate the room.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kVMfuBisdYQXQydP3UqvRm" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/kVMfuBisdYQXQydP3UqvRm-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>Speaking to Nvidia on the PC gaming side of things, they’re quick to tell me just how much immense processing power calculating these real-time light bounces takes. To handle it on a base PS5, the console isn’t drawing every single pixel at 4K sharpness:</p><ul><li><strong>Smart upscaling: </strong>To my eyes, the console appears to draw the internal image at a lower baseline resolution (around 1440p) and uses smart upscaling software to sharpen it up for your 4K TV. Think like Nvidia’s DLSS — easing the burden on the internals with a clever workaround.</li><li><strong>Using atmospheric fog: </strong>Miami is filled with humid ocean air, which can lead to a haziness. Not only does this add a serious vibe to the place, it could also be the key to creating rich, believable lighting without having to calculate every microscopic beam of light in the distance.</li></ul><h2 id="the-reflection-illusion">The reflection illusion</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XkjSpXYJ4AaaHhRD99GTik" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/XkjSpXYJ4AaaHhRD99GTik-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>True, mirror-accurate reflections across an entire game are usually a death sentence for smooth performance. It’s why I find myself relying on Team Green’s <a href="https://www.tomsguide.com/computing/gpus/i-tested-nvidias-new-dlss-4-5-ray-reconstruction-it-finally-fixes-path-tracings-biggest-flaw-but-heres-the-reality-check">DLSS 4.5 Ray Reconstruction</a> to use AI for those calculations and keep some semblance of smooth performance.</p><p>In the console space, you have to get extra crafty, and from what I can see, Rockstar is getting around this by prioritizing what is right in front of your character:</p><ul><li><strong>Sharp details up close: </strong>Puddles on the street, shiny car hoods and glass shopfronts near Jason and Lucia show crisp, accurate reflections.</li><li><strong>Faking the distance: </strong>For background buildings and far-off bay views, the game quietly swaps out those expensive reflection calculations for simpler visual effects. Your eyes naturally focus on the sharp details right next to your character, while your brain fills in the rest.</li></ul><h2 id="natural-hair-without-stealing-horsepower">Natural hair without stealing horsepower</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vWuesEcPpnhrZipegTq7Jk" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/vWuesEcPpnhrZipegTq7Jk-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>Individual hair strands are notoriously difficult for even the priciest gaming hardware to render. In GTA 6, Jason and Lucia’s hair visibly catches the wind and shifts realistically as they move or drive. It looks incredible, and it took me a while to figure out what was going on here.</p><p>To keep performance steady, it looks as if the game is rendering character hair at a slightly lower visual detail, then smoothing the edges out onto the characters head. The decision was made here that the way hair moves is more important than the sheer fidelity of it, and when everything is moving, it looks dense and natural while freeing up vital processing power.</p><h2 id="realistic-clothes-that-actually-fold-and-stretch">Realistic clothes that actually fold and stretch</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JMv7xUjDvxoxdMUW5YsVa5" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/JMv7xUjDvxoxdMUW5YsVa5-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>In GTA 5, character outfits mostly moved like stiff, molded plastic glued to their bodies. In the sixth edition, clothing acts like actual fabric:</p><ul><li><strong>Dynamic wrinkles: </strong>When Lucia is at the firing range, her jacket dynamically wrinkles, pulls tight around the shoulder and bunches around her elbows.</li><li><strong>No awkward clipping: </strong>From what I saw in this polished demo, sleeves didn’t awkwardly slice through a character’s arms or torso during quick animations. Instead, the fabrics collided and folded naturally against the body.</li></ul><h2 id="the-reality-check">The reality check</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NaiEPQhEiMybxSta8xGzQk" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/NaiEPQhEiMybxSta8xGzQk-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>All of these visual tricks bring up the million-dollar question for console gamers: will GTA 6 be able to run at a smooth 60 frames per second on a base PS5?</p><p>Almost certainly not.</p><p>Rockstar Games has made a series of important decisions here from bigger things like the way ray tracing works across the world to the smaller details I mention above that really bring life to a place. And that’s before even thinking about the density and artistry of the world tasking that console. </p><p>To hit 60 FPS, you’d likely have to turn a lot of this down or off altogether, as well as really ramping up the motion blur and turning down the base resolution.</p><p>The team decided that a living breathing world matters more than high frame rates, and watching a console from 2020 deliver this level of visual polish is a clinic in smart software design proving that clever engineering matters just as much as raw horsepower.</p><p>And now, I hope that my boss approves my PTO request for the November 19, 2026…for “important reasons” of course.</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/handheld-gaming/i-tested-the-usd1-299-rog-xbox-ally-x20-with-that-oled-display-the-usd300-price-hike-is-surprisingly-palatable">I tested the $1,299 ROG Xbox Ally X20 — with that OLED display, the $300 price hike is surprisingly palatable</a></li><li><a href="https://www.tomsguide.com/gaming/i-sat-on-all-the-ikea-x-xbox-furniture-its-the-ultimate-stealth-gaming-upgrade">I sat on all the IKEA x Xbox furniture — it’s the ultimate stealth gaming upgrade</a></li><li><a href="https://www.tomsguide.com/computing/monitors/i-tested-the-first-5k-g-sync-pulsar-gaming-monitor-144hz-looks-like-500hz-of-clarity-and-it-ruined-my-home-display">I tested the first 5K G-Sync Pulsar gaming monitor — 144Hz looks like 500Hz of clarity, and it ruined my home display</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/as-a-pc-snob-i-wanted-to-catch-gta-6-making-console-compromises-instead-im-in-awe-of-the-trickery</link>
                                                                            <description>
                            <![CDATA[ I analyzed 26 minutes of GTA 6 gameplay on a PS5. From real-time lighting bounces to dynamic cloth physics, here is how Rockstar's visual tricks work. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VQYMajTchD489WdvGAYVRN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/9M7LuFHULKFzu4GS2w5hwd-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 28 Aug 2026 10:44:40 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/9M7LuFHULKFzu4GS2w5hwd-1920-80.jpg">
                                                            <media:credit><![CDATA[Rockstar Games]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Grand Theft Auto 6]]></media:description>                                                            <media:text><![CDATA[Grand Theft Auto 6]]></media:text>
                                <media:title type="plain"><![CDATA[Grand Theft Auto 6]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/9M7LuFHULKFzu4GS2w5hwd-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When you spend your life gaming on a high-end PC, watching console game reveals like the <a href="https://www.tomsguide.com/news/live/gta-6-netflix-event-2026-live-latest-updates">GTA 6 Extended Look</a> usually means spotting the ugly trade-offs: aggressive texture pop-in, flat lighting, messy background items and resolution scaling that melts into pixel soup during intense moments.</p><p>Then Rockstar drops 26 minutes of Grand Theft Auto VI gameplay into my lap, and the cynicism is completely replaced with “how on Earth did they do this!?”</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ajvsbLsbMPfcPHcQd5ARjk" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/ajvsbLsbMPfcPHcQd5ARjk-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>The footage wasn’t captured on a boutique developer workstation or devkit; it ran on a standard PlayStation 5 — a machine built on silicon that hit shelves back in 2020. My mind is blown, and having frame-stepped through the footage repeatedly, the fidelity in which Vice City has been realized is truly astonishing.</p><p>But if I can get nerdy with you, the real story isn’t just raw horsepower, it’s the meticulous, brilliant optical illusions being used to create these visuals without cooking a six-year-old console. I’d love to share what I’ve found with you, and what made me pre-order the second after my first watch-through.</p><ul><li><a href="https://www.amazon.com/Grand-Theft-Auto-VI-PlayStation-Delivers/dp/B0H6K928WL" target="_blank" rel="nofollow"><strong>Preorder for PS5 ($79)</strong></a></li><li><a href="https://www.amazon.com/Grand-Theft-Auto-VI-Delivers-Playable/dp/B0H6K49W6Y" target="_blank" rel="nofollow"><strong>Preorder for Xbox Series X/S ($79)</strong></a></li></ul><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/tJbzMqJGH4k" allowfullscreen></iframe></div></div><p><strong>Guesswork and analysis: </strong>My analysis is from watching the full 4K version of the GTA 6 Extended Look, which you can download for yourself <a href="https://www.rockstargames.com/VI/media/videos" target="_blank">here</a>. Paired with my understanding of game graphics, but with no comment from Rockstar, so I don't know the specifics of their game engine, but I can make some educated guesses.</p><h2 id="natural-lighting-that-doesn-t-melt-the-console">Natural lighting that doesn’t melt the console</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HNfWUjL4GYfugHaaPLHgWk" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/HNfWUjL4GYfugHaaPLHgWk-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>The single biggest visual upgrade in the footage is how light moves through the world. It’s what really brings that level of depth and moodiness to every scene — from the dark, smoke-filled dinginess of the drug den to the sun-soaked streets of Vice City.</p><p>In past games, lighting was largely “painted” onto objects with pre-set shadows. In GTA 6, however, sunlight actually bounces off surfaces in real-time. When light hits the floor of Jason and Lucia’s apartment, it naturally bounces up to softly illuminate the room.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kVMfuBisdYQXQydP3UqvRm" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/kVMfuBisdYQXQydP3UqvRm-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>Speaking to Nvidia on the PC gaming side of things, they’re quick to tell me just how much immense processing power calculating these real-time light bounces takes. To handle it on a base PS5, the console isn’t drawing every single pixel at 4K sharpness:</p><ul><li><strong>Smart upscaling: </strong>To my eyes, the console appears to draw the internal image at a lower baseline resolution (around 1440p) and uses smart upscaling software to sharpen it up for your 4K TV. Think like Nvidia’s DLSS — easing the burden on the internals with a clever workaround.</li><li><strong>Using atmospheric fog: </strong>Miami is filled with humid ocean air, which can lead to a haziness. Not only does this add a serious vibe to the place, it could also be the key to creating rich, believable lighting without having to calculate every microscopic beam of light in the distance.</li></ul><h2 id="the-reflection-illusion">The reflection illusion</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XkjSpXYJ4AaaHhRD99GTik" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/XkjSpXYJ4AaaHhRD99GTik-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>True, mirror-accurate reflections across an entire game are usually a death sentence for smooth performance. It’s why I find myself relying on Team Green’s <a href="https://www.tomsguide.com/computing/gpus/i-tested-nvidias-new-dlss-4-5-ray-reconstruction-it-finally-fixes-path-tracings-biggest-flaw-but-heres-the-reality-check">DLSS 4.5 Ray Reconstruction</a> to use AI for those calculations and keep some semblance of smooth performance.</p><p>In the console space, you have to get extra crafty, and from what I can see, Rockstar is getting around this by prioritizing what is right in front of your character:</p><ul><li><strong>Sharp details up close: </strong>Puddles on the street, shiny car hoods and glass shopfronts near Jason and Lucia show crisp, accurate reflections.</li><li><strong>Faking the distance: </strong>For background buildings and far-off bay views, the game quietly swaps out those expensive reflection calculations for simpler visual effects. Your eyes naturally focus on the sharp details right next to your character, while your brain fills in the rest.</li></ul><h2 id="natural-hair-without-stealing-horsepower">Natural hair without stealing horsepower</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vWuesEcPpnhrZipegTq7Jk" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/vWuesEcPpnhrZipegTq7Jk-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>Individual hair strands are notoriously difficult for even the priciest gaming hardware to render. In GTA 6, Jason and Lucia’s hair visibly catches the wind and shifts realistically as they move or drive. It looks incredible, and it took me a while to figure out what was going on here.</p><p>To keep performance steady, it looks as if the game is rendering character hair at a slightly lower visual detail, then smoothing the edges out onto the characters head. The decision was made here that the way hair moves is more important than the sheer fidelity of it, and when everything is moving, it looks dense and natural while freeing up vital processing power.</p><h2 id="realistic-clothes-that-actually-fold-and-stretch">Realistic clothes that actually fold and stretch</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JMv7xUjDvxoxdMUW5YsVa5" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/JMv7xUjDvxoxdMUW5YsVa5-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>In GTA 5, character outfits mostly moved like stiff, molded plastic glued to their bodies. In the sixth edition, clothing acts like actual fabric:</p><ul><li><strong>Dynamic wrinkles: </strong>When Lucia is at the firing range, her jacket dynamically wrinkles, pulls tight around the shoulder and bunches around her elbows.</li><li><strong>No awkward clipping: </strong>From what I saw in this polished demo, sleeves didn’t awkwardly slice through a character’s arms or torso during quick animations. Instead, the fabrics collided and folded naturally against the body.</li></ul><h2 id="the-reality-check">The reality check</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NaiEPQhEiMybxSta8xGzQk" name="Grand Theft Auto 6" alt="Grand Theft Auto 6" src="https://cdn.mos.cms.futurecdn.net/NaiEPQhEiMybxSta8xGzQk-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar Games)</span></figcaption></figure><p>All of these visual tricks bring up the million-dollar question for console gamers: will GTA 6 be able to run at a smooth 60 frames per second on a base PS5?</p><p>Almost certainly not.</p><p>Rockstar Games has made a series of important decisions here from bigger things like the way ray tracing works across the world to the smaller details I mention above that really bring life to a place. And that’s before even thinking about the density and artistry of the world tasking that console. </p><p>To hit 60 FPS, you’d likely have to turn a lot of this down or off altogether, as well as really ramping up the motion blur and turning down the base resolution.</p><p>The team decided that a living breathing world matters more than high frame rates, and watching a console from 2020 deliver this level of visual polish is a clinic in smart software design proving that clever engineering matters just as much as raw horsepower.</p><p>And now, I hope that my boss approves my PTO request for the November 19, 2026…for “important reasons” of course.</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/handheld-gaming/i-tested-the-usd1-299-rog-xbox-ally-x20-with-that-oled-display-the-usd300-price-hike-is-surprisingly-palatable">I tested the $1,299 ROG Xbox Ally X20 — with that OLED display, the $300 price hike is surprisingly palatable</a></li><li><a href="https://www.tomsguide.com/gaming/i-sat-on-all-the-ikea-x-xbox-furniture-its-the-ultimate-stealth-gaming-upgrade">I sat on all the IKEA x Xbox furniture — it’s the ultimate stealth gaming upgrade</a></li><li><a href="https://www.tomsguide.com/computing/monitors/i-tested-the-first-5k-g-sync-pulsar-gaming-monitor-144hz-looks-like-500hz-of-clarity-and-it-ruined-my-home-display">I tested the first 5K G-Sync Pulsar gaming monitor — 144Hz looks like 500Hz of clarity, and it ruined my home display</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ PlayStation’s 27-inch gaming monitor is perfect for PS5 and PC gamers — here’s why ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The PlayStation 27" Gaming Monitor bridges the worlds of console and PC gaming. While the <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> is primarily used as a living room device, many prefer connecting Sony’s console to one of the <a href="https://www.tomsguide.com/us/best-gaming-monitors,review-3114.html">best gaming monitors</a> and playing at their desk. Now they can do so with a monitor designed specifically for the PS5 that’s also compatible with the <a href="https://www.tomsguide.com/us/best-gaming-pc,review-2219.html">best gaming PCs</a>.</p><p>This 27-inch monitor covers the basics, including a 1440p IPS panel with a variable 240Hz refresh rate. The design is fairly nondescript, with a black-and-white theme that matches the PS5. It also includes unique features, such as Auto HDR tone-mapping that calibrates your PS5’s video settings and a convenient charging hook for your <a href="https://www.tomsguide.com/news/ps5-dualsense-controller">DualSense controller</a>.</p><p>While the PlayStation 27-inch gaming monitor isn’t revolutionary, it delivers on its promise as an excellent desktop companion for your PS5. Sure, it doesn’t have 4K resolution or an OLED panel, but it still offers a fantastic gaming experience for only $349. If you’re looking for a monitor for both your PC and PS5, this monitor comes with my highest recommendation. Find out why in my full review.</p><h3 class="article-body__section" id="section-playstation-27-gaming-monitor-review-cheat-sheet"><span>PlayStation 27" Gaming Monitor review: Cheat sheet</span></h3><ul><li><strong>What is it?</strong> A 27-inch gaming monitor that’s specifically designed for the PS5 and PS5 Pro.</li><li><strong>Who is it for?</strong> For gamers who own a PS5 and/or a gaming PC and prefer playing at their desk.</li><li><strong>What does it cost?</strong> The PlayStation 27” Gaming Monitor is available now for $349 on <a href="https://direct.playstation.com/en-us/buy-accessories/27-gaming-monitor-with-dualsense-charging-hook" target="_blank" rel="nofollow">PlayStation’s website</a> and at <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-playstation-27-gaming-monitor-with-dualsense-charging-hook-qhd-black/JXHQ37TRKF/sku/6675156" target="_blank" rel="nofollow">Best Buy</a>.</li><li><strong>What do we like?</strong> We like the sleek, minimalist design, bright and colorful display, fast performance, built-in charging hook, and Auto HDR tone mapping.</li><li><strong>What don’t we like?</strong> We don’t like that it tops out at 1440p and lacks an OLED panel.</li></ul><h3 class="article-body__section" id="section-playstation-27-gaming-monitor-review-specs"><span>PlayStation 27" Gaming Monitor review: Specs</span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>PlayStation 27 Gaming Monitor</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$349</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>27-inch</p></td></tr><tr><td class="firstcol " ><p><strong>Resolution</strong></p></td><td  ><p>2560 x 1440</p></td></tr><tr><td class="firstcol " ><p><strong>Aspect ratio</strong></p></td><td  ><p>16:9</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh rate</strong></p></td><td  ><p>60Hz - 240Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Panel type</strong></p></td><td  ><p>IPS</p></td></tr><tr><td class="firstcol " ><p><strong>Ports</strong></p></td><td  ><p>2x HDMI, 1x DisplayPort, 2x USB</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-playstation-27-gaming-monitor-review-the-ups"><span>PlayStation 27" gaming monitor review: The ups</span></h3><p>The 27-inch PlayStation gaming monitor impresses thanks to its elegant design, vibrant picture quality, smooth performance, and PS5-centric features.</p><h2 id="ps5-like-design">PS5-like design</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aRuzMYXoAco7rWvAWij3FZ" name="PlayStation 27-inch gaming monitor-6" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/aRuzMYXoAco7rWvAWij3FZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The first thing you’ll notice is that this looks a lot like a PlayStation monitor, thanks to its black-and-white color scheme. The almost all-white back, featuring the iconic PlayStation logo, complements the black shaft, stand, bezels, and the port locations. It’s a classy design that looks just as good in an office as in a gaming den.</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="Jr8oH5HRipZow2jLMZg5EQ" name="PlayStation 27-inch gaming monitor-18" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/Jr8oH5HRipZow2jLMZg5EQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Gliding the monitor up and down the shaft is easy, as is tilting and swiveling it to your preferred viewing height and angle. The shaft is completely flat and takes up little space on your desk, leaving more room for peripherals. There’s also a VESA mount on the back to use it with one of the <a href="https://www.tomsguide.com/best-picks/best-monitor-arms">best monitor arms</a>, if you prefer.</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="ar5Jh4W4M2kNxsWeVeTxdT" name="PlayStation 27-inch gaming monitor-14" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/ar5Jh4W4M2kNxsWeVeTxdT-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Port-wise, you get everything you need to connect to a PS5 and/or PC. This includes a pair of HDMI 2.1 ports, a single DisplayPort, two USB-A ports, a USB-C port, and a USB-B port. Since the monitor is so light, it’s easy to turn it around to access the ports. It’s nearly impossible to connect anything by touch alone if you’re facing the monitor.</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="pYKriHMJatxw3SioG7AAEJ" name="PlayStation 27-inch gaming monitor-12" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/pYKriHMJatxw3SioG7AAEJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>My favorite design element is the charging hook for your controller. The hook swings down from the back of the monitor like a door handle and snaps into place when fully down or fully up. There’s just enough room on the hook’s end for your DualSense controller to rest comfortably while it charges. This is one of the smartest features I’ve seen on a monitor.</p><h2 id="vivid-and-sharp-display">Vivid and sharp display</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DVc7CbqsstmYGre7iMizte" name="PlayStation 27-inch gaming monitor-2" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/DVc7CbqsstmYGre7iMizte-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The 27-inch PlayStation gaming monitor has a 27-inch (2560 x 1440) IPS panel. Although it’s not an OLED screen, you still get excellent image quality because the monitor automatically calibrates your PS5 for the best HDR settings. The 16:9 aspect ratio is also ideal for PS5 games and many PC titles.</p><p>There are only four standard picture modes: Default, Cool, Warm, and sRGB — with each of these having corresponding HDR modes. Some can look brighter or more colorful, but you generally get the same image quality across the board.</p><p>I was blown away when I tested <a href="https://www.tomsguide.com/reviews/spider-man-2">Marvel’s Spider-Man 2</a> on this monitor in the Default display setting. Because the colors aren’t oversaturated, in-game New York City looked incredibly lifelike and cinematic. Neon signs and energy bolts pop out nicely, while HDR provides strong contrast between dark and light elements. This is as good as it gets for a non-OLED panel.</p><div ><table><caption>Display benchmark results</caption><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>PlayStation 27 gaming monitor</strong></p></th><th  ><p><strong>Alienware AW2726DM</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Nits (brightness)</strong></p></td><td  ><p>297 (SDR) | 339 (HDR)</p></td><td  ><p>181 (SDR) | 182 (HDR)</p></td></tr><tr><td class="firstcol " ><p><strong>sRGB</strong></p></td><td  ><p>136.3%</p></td><td  ><p>190%</p></td></tr><tr><td class="firstcol " ><p><strong>DCI-P3</strong></p></td><td  ><p>96.9%</p></td><td  ><p>140.9%</p></td></tr><tr><td class="firstcol " ><p><strong>Delta-E</strong></p></td><td  ><p>0.32</p></td><td  ><p>0.24</p></td></tr></tbody></table></div><p>The 27-inch PlayStation monitor did well on our lab test. Color reproduction (sRGB and DCI-P3) is excellent, while color accuracy (Delta-E) is just slightly lower than what I usually see from gaming monitors. In contrast, the $349 <a href="https://www.tomsguide.com/computing/monitors/alienware-aw2726dm-review">Alienware AW2726DM</a> delivers much more vivid colors, but its HDR across 100% of the screen can’t match the PlayStation 27’s. The latter is certainly a benefit of lacking an OLED panel.</p><h2 id="smooth-performance">Smooth performance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jNgxgBT5bhFcMTyoxcVkAk" name="PlayStation 27-inch gaming monitor-3" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/jNgxgBT5bhFcMTyoxcVkAk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The PlayStation 27-inch gaming monitor supports up to a 240Hz refresh rate, double the PS5’s maximum 120Hz. That means that whether you’re playing on a PS5 or PC, you’ll get a buttery-smooth gaming experience thanks to the high refresh rate and VRR support.</p><p>Spider-Man 2 on the PS5 Pro runs like a dream on this monitor. I didn’t experience a single instance of screen tearing or input lag. This is especially important in a game like this, where you’re swinging through Manhattan’s artificial canyons at breakneck speeds one moment, and dealing with mobs of enemies the next. No matter what’s happening on the screen, the monitor handles it beautifully.</p><h2 id="simple-interface">Simple interface</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rs2oP8uLpRBVddB3ZD8cb3" name="PlayStation 27-inch gaming monitor-9" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/rs2oP8uLpRBVddB3ZD8cb3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The menu UI’s design is as clean and simple as the monitor itself. The interface features a transparent background with white lettering. Here, you can access the aforementioned picture modes, as well as settings for audio, inputs, profiles, and more. </p><p>The OSD (On-Screen Display) joystick on the back lets you navigate the menus easily. Located just above the power button, the white joystick blends well with the back of the monitor and offers the right balance of sturdiness and flexibility when you move it up and down and left and right.</p><h3 class="article-body__section" id="section-playstation-27-gaming-monitor-review-the-downs"><span>PlayStation 27" Gaming Monitor review: The downs</span></h3><p>While there’s a lot to like about this PlayStation monitor, it has a few minor drawbacks.</p><h2 id="no-oled-or-4k">No OLED or 4K</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8KdrpzRQcrmNzMzjga3S3A" name="PlayStation 27-inch gaming monitor-8" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/8KdrpzRQcrmNzMzjga3S3A-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The only two real negatives about the 27-inch PlayStation gaming monitor are that it doesn’t have an OLED panel and it tops out at 1440p. If you absolutely need an OLED monitor or 4K resolution, then this could be a major deterrent. However, if that doesn’t matter to you, you might not see these as negatives at all.</p><p>I’m mostly sharing this as an expectation check, because while it’s a bummer that the display isn’t OLED and the resolution is 1440p tops, I don’t consider these major deal-breakers. The overall image quality is phenomenal, and arguably better than what you’d get on some similarly-priced monitors.</p><p>As for price, the $349 price tag makes it extremely easy to forgive any shortcomings, especially when its upsides vastly outweigh the negatives.</p><h3 class="article-body__section" id="section-playstation-27-gaming-monitor-review-verdict"><span>PlayStation 27" gaming monitor review: Verdict</span></h3><p>The PlayStation 27-inch gaming monitor is a worthwhile purchase for gamers who primarily play at their desk. Though it’s not the fanciest gaming monitor out there, it has everything you need for a great experience on PS5 and PC. And as I said before, it’s hard to knock this monitor because of its affordable $349 asking price.</p><p>If you absolutely need an OLED monitor, the $349 Alienware AW2726DM is a solid alternative. But if you want seamless integration with your PS5, plus a charging hook for your controller, the 27-inch PlayStation is an easy recommendation. It’s really that good!</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/playstation-27-gaming-monitor-review</link>
                                                                            <description>
                            <![CDATA[ PlayStation’s 27-inch gaming monitor is the perfect companion for the PS5 thanks to its rich picture quality, smooth performance, and unique features. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">RdLwsWXepmUZUqp8aH49Pe</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/NFzgVgfk5Jty6JtHK5F2aM-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 25 Aug 2026 13:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Monitors]]></category>
                                                    <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Computing Hardware]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/NFzgVgfk5Jty6JtHK5F2aM-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&amp;#39;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PlayStation 27&quot; Gaming Monitor]]></media:description>                                                            <media:text><![CDATA[PlayStation 27&quot; Gaming Monitor]]></media:text>
                                <media:title type="plain"><![CDATA[PlayStation 27&quot; Gaming Monitor]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/NFzgVgfk5Jty6JtHK5F2aM-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The PlayStation 27" Gaming Monitor bridges the worlds of console and PC gaming. While the <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> is primarily used as a living room device, many prefer connecting Sony’s console to one of the <a href="https://www.tomsguide.com/us/best-gaming-monitors,review-3114.html">best gaming monitors</a> and playing at their desk. Now they can do so with a monitor designed specifically for the PS5 that’s also compatible with the <a href="https://www.tomsguide.com/us/best-gaming-pc,review-2219.html">best gaming PCs</a>.</p><p>This 27-inch monitor covers the basics, including a 1440p IPS panel with a variable 240Hz refresh rate. The design is fairly nondescript, with a black-and-white theme that matches the PS5. It also includes unique features, such as Auto HDR tone-mapping that calibrates your PS5’s video settings and a convenient charging hook for your <a href="https://www.tomsguide.com/news/ps5-dualsense-controller">DualSense controller</a>.</p><p>While the PlayStation 27-inch gaming monitor isn’t revolutionary, it delivers on its promise as an excellent desktop companion for your PS5. Sure, it doesn’t have 4K resolution or an OLED panel, but it still offers a fantastic gaming experience for only $349. If you’re looking for a monitor for both your PC and PS5, this monitor comes with my highest recommendation. Find out why in my full review.</p><h3 class="article-body__section" id="section-playstation-27-gaming-monitor-review-cheat-sheet"><span>PlayStation 27" Gaming Monitor review: Cheat sheet</span></h3><ul><li><strong>What is it?</strong> A 27-inch gaming monitor that’s specifically designed for the PS5 and PS5 Pro.</li><li><strong>Who is it for?</strong> For gamers who own a PS5 and/or a gaming PC and prefer playing at their desk.</li><li><strong>What does it cost?</strong> The PlayStation 27” Gaming Monitor is available now for $349 on <a href="https://direct.playstation.com/en-us/buy-accessories/27-gaming-monitor-with-dualsense-charging-hook" target="_blank" rel="nofollow">PlayStation’s website</a> and at <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-playstation-27-gaming-monitor-with-dualsense-charging-hook-qhd-black/JXHQ37TRKF/sku/6675156" target="_blank" rel="nofollow">Best Buy</a>.</li><li><strong>What do we like?</strong> We like the sleek, minimalist design, bright and colorful display, fast performance, built-in charging hook, and Auto HDR tone mapping.</li><li><strong>What don’t we like?</strong> We don’t like that it tops out at 1440p and lacks an OLED panel.</li></ul><h3 class="article-body__section" id="section-playstation-27-gaming-monitor-review-specs"><span>PlayStation 27" Gaming Monitor review: Specs</span></h3><div ><table><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>PlayStation 27 Gaming Monitor</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Price</strong></p></td><td  ><p>$349</p></td></tr><tr><td class="firstcol " ><p><strong>Display</strong></p></td><td  ><p>27-inch</p></td></tr><tr><td class="firstcol " ><p><strong>Resolution</strong></p></td><td  ><p>2560 x 1440</p></td></tr><tr><td class="firstcol " ><p><strong>Aspect ratio</strong></p></td><td  ><p>16:9</p></td></tr><tr><td class="firstcol " ><p><strong>Refresh rate</strong></p></td><td  ><p>60Hz - 240Hz</p></td></tr><tr><td class="firstcol " ><p><strong>Panel type</strong></p></td><td  ><p>IPS</p></td></tr><tr><td class="firstcol " ><p><strong>Ports</strong></p></td><td  ><p>2x HDMI, 1x DisplayPort, 2x USB</p></td></tr></tbody></table></div><h3 class="article-body__section" id="section-playstation-27-gaming-monitor-review-the-ups"><span>PlayStation 27" gaming monitor review: The ups</span></h3><p>The 27-inch PlayStation gaming monitor impresses thanks to its elegant design, vibrant picture quality, smooth performance, and PS5-centric features.</p><h2 id="ps5-like-design">PS5-like design</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aRuzMYXoAco7rWvAWij3FZ" name="PlayStation 27-inch gaming monitor-6" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/aRuzMYXoAco7rWvAWij3FZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The first thing you’ll notice is that this looks a lot like a PlayStation monitor, thanks to its black-and-white color scheme. The almost all-white back, featuring the iconic PlayStation logo, complements the black shaft, stand, bezels, and the port locations. It’s a classy design that looks just as good in an office as in a gaming den.</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="Jr8oH5HRipZow2jLMZg5EQ" name="PlayStation 27-inch gaming monitor-18" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/Jr8oH5HRipZow2jLMZg5EQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Gliding the monitor up and down the shaft is easy, as is tilting and swiveling it to your preferred viewing height and angle. The shaft is completely flat and takes up little space on your desk, leaving more room for peripherals. There’s also a VESA mount on the back to use it with one of the <a href="https://www.tomsguide.com/best-picks/best-monitor-arms">best monitor arms</a>, if you prefer.</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="ar5Jh4W4M2kNxsWeVeTxdT" name="PlayStation 27-inch gaming monitor-14" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/ar5Jh4W4M2kNxsWeVeTxdT-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Port-wise, you get everything you need to connect to a PS5 and/or PC. This includes a pair of HDMI 2.1 ports, a single DisplayPort, two USB-A ports, a USB-C port, and a USB-B port. Since the monitor is so light, it’s easy to turn it around to access the ports. It’s nearly impossible to connect anything by touch alone if you’re facing the monitor.</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="pYKriHMJatxw3SioG7AAEJ" name="PlayStation 27-inch gaming monitor-12" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/pYKriHMJatxw3SioG7AAEJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>My favorite design element is the charging hook for your controller. The hook swings down from the back of the monitor like a door handle and snaps into place when fully down or fully up. There’s just enough room on the hook’s end for your DualSense controller to rest comfortably while it charges. This is one of the smartest features I’ve seen on a monitor.</p><h2 id="vivid-and-sharp-display">Vivid and sharp display</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DVc7CbqsstmYGre7iMizte" name="PlayStation 27-inch gaming monitor-2" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/DVc7CbqsstmYGre7iMizte-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The 27-inch PlayStation gaming monitor has a 27-inch (2560 x 1440) IPS panel. Although it’s not an OLED screen, you still get excellent image quality because the monitor automatically calibrates your PS5 for the best HDR settings. The 16:9 aspect ratio is also ideal for PS5 games and many PC titles.</p><p>There are only four standard picture modes: Default, Cool, Warm, and sRGB — with each of these having corresponding HDR modes. Some can look brighter or more colorful, but you generally get the same image quality across the board.</p><p>I was blown away when I tested <a href="https://www.tomsguide.com/reviews/spider-man-2">Marvel’s Spider-Man 2</a> on this monitor in the Default display setting. Because the colors aren’t oversaturated, in-game New York City looked incredibly lifelike and cinematic. Neon signs and energy bolts pop out nicely, while HDR provides strong contrast between dark and light elements. This is as good as it gets for a non-OLED panel.</p><div ><table><caption>Display benchmark results</caption><thead><tr><th class="firstcol empty" ></th><th  ><p><strong>PlayStation 27 gaming monitor</strong></p></th><th  ><p><strong>Alienware AW2726DM</strong></p></th></tr></thead><tbody><tr><td class="firstcol " ><p><strong>Nits (brightness)</strong></p></td><td  ><p>297 (SDR) | 339 (HDR)</p></td><td  ><p>181 (SDR) | 182 (HDR)</p></td></tr><tr><td class="firstcol " ><p><strong>sRGB</strong></p></td><td  ><p>136.3%</p></td><td  ><p>190%</p></td></tr><tr><td class="firstcol " ><p><strong>DCI-P3</strong></p></td><td  ><p>96.9%</p></td><td  ><p>140.9%</p></td></tr><tr><td class="firstcol " ><p><strong>Delta-E</strong></p></td><td  ><p>0.32</p></td><td  ><p>0.24</p></td></tr></tbody></table></div><p>The 27-inch PlayStation monitor did well on our lab test. Color reproduction (sRGB and DCI-P3) is excellent, while color accuracy (Delta-E) is just slightly lower than what I usually see from gaming monitors. In contrast, the $349 <a href="https://www.tomsguide.com/computing/monitors/alienware-aw2726dm-review">Alienware AW2726DM</a> delivers much more vivid colors, but its HDR across 100% of the screen can’t match the PlayStation 27’s. The latter is certainly a benefit of lacking an OLED panel.</p><h2 id="smooth-performance">Smooth performance</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jNgxgBT5bhFcMTyoxcVkAk" name="PlayStation 27-inch gaming monitor-3" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/jNgxgBT5bhFcMTyoxcVkAk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The PlayStation 27-inch gaming monitor supports up to a 240Hz refresh rate, double the PS5’s maximum 120Hz. That means that whether you’re playing on a PS5 or PC, you’ll get a buttery-smooth gaming experience thanks to the high refresh rate and VRR support.</p><p>Spider-Man 2 on the PS5 Pro runs like a dream on this monitor. I didn’t experience a single instance of screen tearing or input lag. This is especially important in a game like this, where you’re swinging through Manhattan’s artificial canyons at breakneck speeds one moment, and dealing with mobs of enemies the next. No matter what’s happening on the screen, the monitor handles it beautifully.</p><h2 id="simple-interface">Simple interface</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rs2oP8uLpRBVddB3ZD8cb3" name="PlayStation 27-inch gaming monitor-9" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/rs2oP8uLpRBVddB3ZD8cb3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The menu UI’s design is as clean and simple as the monitor itself. The interface features a transparent background with white lettering. Here, you can access the aforementioned picture modes, as well as settings for audio, inputs, profiles, and more. </p><p>The OSD (On-Screen Display) joystick on the back lets you navigate the menus easily. Located just above the power button, the white joystick blends well with the back of the monitor and offers the right balance of sturdiness and flexibility when you move it up and down and left and right.</p><h3 class="article-body__section" id="section-playstation-27-gaming-monitor-review-the-downs"><span>PlayStation 27" Gaming Monitor review: The downs</span></h3><p>While there’s a lot to like about this PlayStation monitor, it has a few minor drawbacks.</p><h2 id="no-oled-or-4k">No OLED or 4K</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8KdrpzRQcrmNzMzjga3S3A" name="PlayStation 27-inch gaming monitor-8" alt="PlayStation 27" Gaming Monitor" src="https://cdn.mos.cms.futurecdn.net/8KdrpzRQcrmNzMzjga3S3A-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The only two real negatives about the 27-inch PlayStation gaming monitor are that it doesn’t have an OLED panel and it tops out at 1440p. If you absolutely need an OLED monitor or 4K resolution, then this could be a major deterrent. However, if that doesn’t matter to you, you might not see these as negatives at all.</p><p>I’m mostly sharing this as an expectation check, because while it’s a bummer that the display isn’t OLED and the resolution is 1440p tops, I don’t consider these major deal-breakers. The overall image quality is phenomenal, and arguably better than what you’d get on some similarly-priced monitors.</p><p>As for price, the $349 price tag makes it extremely easy to forgive any shortcomings, especially when its upsides vastly outweigh the negatives.</p><h3 class="article-body__section" id="section-playstation-27-gaming-monitor-review-verdict"><span>PlayStation 27" gaming monitor review: Verdict</span></h3><p>The PlayStation 27-inch gaming monitor is a worthwhile purchase for gamers who primarily play at their desk. Though it’s not the fanciest gaming monitor out there, it has everything you need for a great experience on PS5 and PC. And as I said before, it’s hard to knock this monitor because of its affordable $349 asking price.</p><p>If you absolutely need an OLED monitor, the $349 Alienware AW2726DM is a solid alternative. But if you want seamless integration with your PS5, plus a charging hook for your controller, the 27-inch PlayStation is an easy recommendation. It’s really that good!</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Marvel’s Wolverine PS5 console and controllers pre-orders LIVE — latest stock updates as pre-orders begin in the US ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="live-content"><div  class="fancy-box"><div class="fancy_box-title">Marvel's Wolverine PS5 console and controllers pre-orders</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="YZ6oxxyvkL4Cv8hUxRh7th" name="Wolverine LIST2" caption="" alt="PS5 console Wolverine edition with a DualSense controller and in-game screenshot of Logan on a yellow background" src="https://cdn.mos.cms.futurecdn.net/YZ6oxxyvkL4Cv8hUxRh7th-1920-80.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: Sony Interactive Entertainment)</span></figcaption></figure><p class="fancy-box__body-text"><strong>US (pre-orders now live)</strong><br><em>PS5 console bundle: </em><a data-analytics-id="inline-link" href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><br><em>DualSense controller: </em><a data-analytics-id="inline-link" href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><br><em>PS5 Slim Console Covers: </em><a data-analytics-id="inline-link" href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><br>----------------------------------<br><strong>UK (pre-orders now live)</strong><br><em>PS5 console bundle: </em><a data-analytics-id="inline-link" href="https://www.currys.co.uk/products/playstation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><em></em><br><em>DualSense controller: </em><a data-analytics-id="inline-link" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><em></em><br><em>PS5 Slim Console Covers: </em><a data-analytics-id="inline-link" href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><br>----------------------------------<br>1. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-pre-orders-quick-links">Quick Links</a><br>2. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-console-bundle-pre-orders">Wolverine PS5 console pre-orders</a><br>3. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-dualsense-controllers-pre-orders">Wolverine PS5 controller pre-orders</a><br>4. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-console-covers-pre-orders">Wolverine PS5 console cover pre-orders</a><br>5. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-console-and-controllers-uk-pre-orders">U.K. pre-orders</a><br>6. <a data-analytics-id="inline-link" href="#section-live-updates">LIVE: Latest updates</a></p></div></div><p>Your <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> console is about to get a Wolverine-themed makeover, as PlayStation is dropping a range of limited-edition items to mark the upcoming release of its new exclusive, Marvel’s Wolverine. <strong>Pre-orders are now LIVE in the U.S. and U.K.</strong>, and the available stock is being snapped up faster than Logan's healing factor can kick in!</p><p>The range includes a limited-edition Wolverine PS5 console bundle, two new DualSense controller designs, and, for those who already own a PS5, a range of <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a> and <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> Console Covers (sorry to launch model owners). The items come in two variants, Battle Yellow and Adamantium. The latter exclusive to PlayStation Direct. </p><p>If the limited-edition range for Insomniac’s last Marvel game, <a href="https://www.tomsguide.com/reviews/spider-man-2">Spider-Man 2</a>, is any indication, these Wolverine items are going to sell out very quickly. And you know resellers will be on the scene to ruin another gaming drop for the rest of us.</p><p>Fortunately, I’ve got more than six years of experience tracking pre-orders and restocks for in-demand items, from the original PS5 stock nightmare to the uber-popular (and very hard to buy) PlayStation 30th Anniversary Collection. I’m using all that knowledge to help you secure these limited-edition Wolverine PS5 products today. Below are all the retailer links you’ll need and the latest live update to make sure you get the bag!</p><h3 class="article-body__section" id="section-wolverine-ps5-pre-orders-quick-links"><span>Wolverine PS5 pre-orders - quick links</span></h3><ul><li><strong>Wolverine Battle Yellow PS5 bundle: </strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow">$649 @ Best Buy</a></li><li><strong>Wolverine Battle Yellow PS5 DualSense: </strong><a href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow">$84 @ Amazon</a></li><li><strong>Wolverine Adamantium PS5 DualSense: </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">$84 @ PS Direct</a></li><li><strong>Wolverine Battle Yellow PS5 Slim console covers: </strong><a href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">$74 @ PS Direct</a></li><li><strong>Wolverine Battle Yellow PS5 Pro console covers: </strong><a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li><li><strong>Wolverine Adamantium PS5 Pro console covers: </strong><a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li></ul><h3 class="article-body__section" id="section-wolverine-ps5-console-bundle-pre-orders"><span>Wolverine PS5 console bundle pre-orders</span></h3><div class="product"><a data-dimension112="b3876d3c-9b1e-11f1-86fd-3b12ad0ec66a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow" data-dimension112="b3876d3c-9b1e-11f1-86fd-3b12ad0ec66a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>Best Buy is now taking pre-orders of the PS5 Digital Edition Wolverine Battle Yellow Bundle, it costs $649. <a class="view-deal button" href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow" data-dimension112="b3876d3c-9b1e-11f1-86fd-3b12ad0ec66a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="b3876db4-9b1e-11f1-b3e3-553683ccd907" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://www.walmart.com/ip/PlayStation-5-Digital-Edition-nbsp-Marvel-s-Wolverine-nbsp-Battle-Yellow-nbsp-Limited-Edition-nbsp-Bundle/20881956449" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RZkKnBkdjDJ6QRZq2RmaPY" name="Walmart-Logo-2008" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RZkKnBkdjDJ6QRZq2RmaPY-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.walmart.com/ip/PlayStation-5-Digital-Edition-nbsp-Marvel-s-Wolverine-nbsp-Battle-Yellow-nbsp-Limited-Edition-nbsp-Bundle/20881956449" target="_blank" rel="nofollow" data-dimension112="b3876db4-9b1e-11f1-b3e3-553683ccd907" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>Walmart is another retailer that is always involved when limited-edition items drop. It currently has stock of the PS5 Digital Edition Wolverine Battle Yellow Bundle.<a class="view-deal button" href="https://www.walmart.com/ip/PlayStation-5-Digital-Edition-nbsp-Marvel-s-Wolverine-nbsp-Battle-Yellow-nbsp-Limited-Edition-nbsp-Bundle/20881956449" target="_blank" rel="nofollow" data-dimension112="b3876db4-9b1e-11f1-b3e3-553683ccd907" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="b3876e22-9b1e-11f1-a12e-a1ca3352f374" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:129.60%;"><img id="J4ioQbCcWu8knu9FrYgeRT" name="purepng.com-target-logologobrand-logoiconslogos-251519939485oxces" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J4ioQbCcWu8knu9FrYgeRT-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2592" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow" data-dimension112="b3876e22-9b1e-11f1-a12e-a1ca3352f374" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>Target has gone early and is now taking pre-orders for the PS5 Digital Edition Wolverine Battle Yellow Bundle ahead of its release on September 15. <a class="view-deal button" href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow" data-dimension112="b3876e22-9b1e-11f1-a12e-a1ca3352f374" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="b3876c2e-9b1e-11f1-b6e3-b38528b6413c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://direct.playstation.com/en-us/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow" data-dimension112="b3876c2e-9b1e-11f1-b6e3-b38528b6413c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>The PS5 Digital Edition Wolverine Battle Yellow Bundle includes the PS5 console (without a disc drive) decked out in a slick Wolverine theme, a matching DualSense controller, and a digital copy of Marvel's Wolverine. <a class="view-deal button" href="https://direct.playstation.com/en-us/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow" data-dimension112="b3876c2e-9b1e-11f1-b6e3-b38528b6413c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="b3876e90-9b1e-11f1-bba6-f742ddc5c311" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-digital-edition-console---marvels-wolverine-battle-yellow-limited-edition-bundle/450550.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EXpDruhoaAuddyN6RUCGyb" name="GameStop logo.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EXpDruhoaAuddyN6RUCGyb-1920-80.png" mos="" align="middle" fullscreen="" width="400" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-digital-edition-console---marvels-wolverine-battle-yellow-limited-edition-bundle/450550.html" target="_blank" rel="nofollow" data-dimension112="b3876e90-9b1e-11f1-bba6-f742ddc5c311" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>Naturally, as a gaming-dedicated retailer, GameStop is taking pre-orders for the PS5 Digital Edition Wolverine Battle Yellow Bundle. It cost $649, which is MSRP.<a class="view-deal button" href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-digital-edition-console---marvels-wolverine-battle-yellow-limited-edition-bundle/450550.html" target="_blank" rel="nofollow" data-dimension112="b3876e90-9b1e-11f1-bba6-f742ddc5c311" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="b3876cc4-9b1e-11f1-9981-5bb6aaa8a3d8" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://www.amazon.com/s?k=wolverine+ps5+console+bundle" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecjfqi2UgurxrA42rX7pML" name="Amazon-Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ecjfqi2UgurxrA42rX7pML-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/s?k=wolverine+ps5+console+bundle" target="_blank" rel="nofollow" data-dimension112="b3876cc4-9b1e-11f1-9981-5bb6aaa8a3d8" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>Amazon is likely to be taking pre-orders for the PS5 Digital Edition Wolverine Battle Yellow Bundle today. It'll ship on (or around) the game's release date, September 15.<a class="view-deal button" href="https://www.amazon.com/s?k=wolverine+ps5+console+bundle" target="_blank" rel="nofollow" data-dimension112="b3876cc4-9b1e-11f1-9981-5bb6aaa8a3d8" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><h3 class="article-body__section" id="section-wolverine-ps5-dualsense-controllers-pre-orders"><span>Wolverine PS5 DualSense controllers pre-orders</span></h3><div class="product"><a data-dimension112="b3876fee-9b1e-11f1-8967-d13a2326e64b" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecjfqi2UgurxrA42rX7pML" name="Amazon-Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ecjfqi2UgurxrA42rX7pML-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow" data-dimension112="b3876fee-9b1e-11f1-8967-d13a2326e64b" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>Amazon took its time, but after a lot of waiting, and hours later than its retail rivals, it's finally taking pre-orders for the DualSense controller in Battle Yellow. Lock in yours now.<a class="view-deal button" href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow" data-dimension112="b3876fee-9b1e-11f1-8967-d13a2326e64b" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b387705c-9b1e-11f1-bdfe-038091463737" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-marvels-wolverine-battle-limited-edition-for-ps5-pc-mac-mobile-yellow/JXHQ37ZQ8C" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-marvels-wolverine-battle-limited-edition-for-ps5-pc-mac-mobile-yellow/JXHQ37ZQ8C" target="_blank" rel="nofollow" data-dimension112="b387705c-9b1e-11f1-bdfe-038091463737" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>Best Buy will be a great place to pick up a Wolverine-themed PS5 DualSense controller. It retails for the base price of $84 and should ship in time for September 15. <a class="view-deal button" href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-marvels-wolverine-battle-limited-edition-for-ps5-pc-mac-mobile-yellow/JXHQ37ZQ8C" target="_blank" rel="nofollow" data-dimension112="b387705c-9b1e-11f1-bdfe-038091463737" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b38770d4-9b1e-11f1-a070-95dd54fdac1c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RZkKnBkdjDJ6QRZq2RmaPY" name="Walmart-Logo-2008" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RZkKnBkdjDJ6QRZq2RmaPY-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow" data-dimension112="b38770d4-9b1e-11f1-a070-95dd54fdac1c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>Walmart is now taking pre-orders of the limited-edition Wolverine Battle Yellow DualSense controllers. <a class="view-deal button" href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow" data-dimension112="b38770d4-9b1e-11f1-a070-95dd54fdac1c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b3877142-9b1e-11f1-8e71-53f97f1f2083" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:129.60%;"><img id="J4ioQbCcWu8knu9FrYgeRT" name="purepng.com-target-logologobrand-logoiconslogos-251519939485oxces" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J4ioQbCcWu8knu9FrYgeRT-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2592" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow" data-dimension112="b3877142-9b1e-11f1-8e71-53f97f1f2083" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>Pre-orders weren't supposed to begin until 10 a.m. ET, but Target has gone early, and you can secure the Wolverine Battle Yellow DualSense now!<a class="view-deal button" href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow" data-dimension112="b3877142-9b1e-11f1-8e71-53f97f1f2083" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b38771b0-9b1e-11f1-b380-cb36af9ceff5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EXpDruhoaAuddyN6RUCGyb" name="GameStop logo.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EXpDruhoaAuddyN6RUCGyb-1920-80.png" mos="" align="middle" fullscreen="" width="400" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow" data-dimension112="b38771b0-9b1e-11f1-b380-cb36af9ceff5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>GameStop is another retailer where you can currently lock in your pre-order of the Wolverine Battle Yellow DualSense. The limited-edition controller costs $84. <a class="view-deal button" href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow" data-dimension112="b38771b0-9b1e-11f1-b380-cb36af9ceff5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b3876f80-9b1e-11f1-b5c3-1ba0fde73688" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$84" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="b3876f80-9b1e-11f1-b5c3-1ba0fde73688" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$84">(Wolverine Adamantium): $84</a></strong><br>If you've got your eyes on the Adamantium version of the PS5 DualSense, there's only one place to get it: PS Direct. This variant of the controller is exclusive to the retailer.<a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="b3876f80-9b1e-11f1-b5c3-1ba0fde73688" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b3876f12-9b1e-11f1-a92e-9d7c8be7d5f9" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="b3876f12-9b1e-11f1-a92e-9d7c8be7d5f9" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>The DualSense controller in Wolverine Battle Yellow gives the popular PS5 pad a very cool Mutant makeover. PS Direct is currently sold out, but other retailers have stock.<a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="b3876f12-9b1e-11f1-a92e-9d7c8be7d5f9" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><h3 class="article-body__section" id="section-wolverine-ps5-console-covers-pre-orders"><span>Wolverine PS5 Console Covers pre-orders</span></h3><div class="product"><a data-dimension112="b3877228-9b1e-11f1-b46b-994dc623137a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74" href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877228-9b1e-11f1-b46b-994dc623137a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74">(Wolverine Battle Yellow): $74</a></strong><br>The Wolverine edition PS5 console covers are exclusive to PlayStation Direct, and if you own a PS5 Slim, your only option is the Battle Yellow variant. <a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877228-9b1e-11f1-b46b-994dc623137a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74">View Deal</a></p></div><div class="product"><a data-dimension112="b3877296-9b1e-11f1-abfd-15378f49f0a1" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74" href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877296-9b1e-11f1-abfd-15378f49f0a1" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74">(Wolverine Battle Yellow): $74</a></strong><br>The PS5 Pro Battle Yellow Console Covers were made available for pre-order at 10 a.m. ET and sold out in less than 30 minutes. Let's hope there's a restock very soon. <a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877296-9b1e-11f1-abfd-15378f49f0a1" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74">View Deal</a></p></div><div class="product"><a data-dimension112="b3877304-9b1e-11f1-8fa8-73ea4afaa5b0" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$74" href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877304-9b1e-11f1-8fa8-73ea4afaa5b0" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$74">(Wolverine Adamantium): $74</a></strong><br>The Adamantium PS5 Pro console covers didn't take long to sell out and are exclusive to PS Direct. There could be a restock, so keep checking stock just in case you get lucky. <a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877304-9b1e-11f1-8fa8-73ea4afaa5b0" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$74">View Deal</a></p></div><h3 class="article-body__section" id="section-wolverine-ps5-console-and-controllers-uk-pre-orders"><span>Wolverine PS5 console and controllers UK pre-orders</span></h3><p><em>As of 10 a.m. BST on Wednesday, August 19, pre-orders for the limited-edition Marvel's Wolverine range have begun in the U.K. See below for all the buying links you need.</em></p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.currys.co.uk/products/playstation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow">£569 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Adamantium): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>Wolverine PS5 Slim Battle Yellow console covers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a></li><li><strong>Wolverine PS5 Pro Battle Yellow console covers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li><li><strong>Wolverine PS5 Pro Adamantium console covers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li></ul><div class="product"><a data-dimension112="937367bc-9b28-11f1-9f02-11b91a4c4ed5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£569" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" 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:88.25%;"><img id="LDG8s4CZ5C7fZxW2AG9QW3" name="wolverine-ps5-yellow-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LDG8s4CZ5C7fZxW2AG9QW3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1412" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow" data-dimension112="937367bc-9b28-11f1-9f02-11b91a4c4ed5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£569">(Wolverine Battle Yellow): £569</a></strong><br>The PS5 Wolverine Digital Edition Bundle includes the base PS5 Slim with a very slick Mutant-themed design, a matching DualSense controller, and a digital copy of the Marvel's Wolverine game with a couple of extra DLC skins. <strong>Additional retailers</strong>: <a href="https://direct.playstation.com/en-gb/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow">£569 @ PS Direct</a> | <a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/games/marvels-wolverine/playstation-5-digital-edition-slim-wolverine-limited-edt-bundle/p/264695" target="_blank" rel="nofollow">£569 @ Smyths</a> | <a href="https://www.very.co.uk/playstation-5-playstationreg5-digital-edition-marvels-wolverine-battle-yellow-limited-edition-bundle-825gb/1601288149.prd" target="_blank" rel="nofollow">£569 @ Very</a><a class="view-deal button" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow" data-dimension112="937367bc-9b28-11f1-9f02-11b91a4c4ed5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£569">View Deal</a></p></div><div class="product"><a data-dimension112="937368b6-9b28-11f1-a254-51051ea66241" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£74" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" 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:63.44%;"><img id="t6pRnHE25F8YwaQQaDr8U3" name="wolverine-ds5-yellow-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/t6pRnHE25F8YwaQQaDr8U3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1015" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow" data-dimension112="937368b6-9b28-11f1-a254-51051ea66241" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£74">(Wolverine Battle Yellow): £74</a></strong><br>The Wolverine Battle Yellow controller gives the DualSense a design that combines the hero's classic color with scratch marks that could only have been made by his iconic claws. It'll retail for £74 in the U.K.<br><strong>Additional retailers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a> | <a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/games/marvels-wolverine/playstation-5-dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition/p/264704" target="_blank" rel="nofollow">£74 @ Smyths</a><a class="view-deal button" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow" data-dimension112="937368b6-9b28-11f1-a254-51051ea66241" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="93736848-9b28-11f1-9945-e3537bdd14f4" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£74" href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" 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:63.44%;"><img id="JmTPEnpSuC9uTQ6cijmCa3" name="wolverine-ds5-silver-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JmTPEnpSuC9uTQ6cijmCa3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1015" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="93736848-9b28-11f1-9945-e3537bdd14f4" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£74">(Wolverine Adamantium): £74</a></strong><br>The Wolverine Adamantium DualSense is exclusive to PlayStation Direct, and I expect it'll be one of the first items to sell out during this pre-order event.<a class="view-deal button" href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="93736848-9b28-11f1-9945-e3537bdd14f4" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="9373691a-9b28-11f1-b4e0-f32b30939b1d" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64" href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" 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:98.56%;"><img id="foXNtT5qZwXeAdw9S5GXS3" name="wolverine-ps5-disc-yellow-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/foXNtT5qZwXeAdw9S5GXS3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1577" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="9373691a-9b28-11f1-b4e0-f32b30939b1d" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64">(Wolverine Battle Yellow): £64</a></strong><br>If you already own a PS5 Slim console, you can give it the Wolverine look with these limited-edition Console Covers. <a class="view-deal button" href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="9373691a-9b28-11f1-b4e0-f32b30939b1d" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64">View Deal</a></p></div><div class="product"><a data-dimension112="9373697e-9b28-11f1-9f5e-d1ea5daaf494" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64" href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" 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:98.56%;"><img id="aHhTmzYbSqhdJsifUF9XY3" name="wolverine-ps5-pro-yellow-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aHhTmzYbSqhdJsifUF9XY3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1577" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="9373697e-9b28-11f1-9f5e-d1ea5daaf494" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64">(Wolverine Battle Yellow): £64</a></strong><br>It's the same deal if you already own a PS5 Pro, you don't have to buy a whole new console to get the Wolverine look; just pick up these limited-edition console covers. These covers went up for pre-order at 10 a.m. BST and sold out in about 30 minutes. I'm watching for a restock now. <a class="view-deal button" href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="9373697e-9b28-11f1-9f5e-d1ea5daaf494" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64">View Deal</a></p></div><div class="product"><a data-dimension112="937369d8-9b28-11f1-bf70-d337e88afed1" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£64" href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" 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:98.56%;"><img id="ZF5udBTuTQZ9YQgQ3BpeQ3" name="wolverine-ps5-pro-silver-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZF5udBTuTQZ9YQgQ3BpeQ3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1577" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow" data-dimension112="937369d8-9b28-11f1-bf70-d337e88afed1" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£64">(Wolverine Adamantium): £64</a></strong><br>Once again, the Adamantium look is exclusive to PlayStation Direct in the U.K. These console covers are further limited to the PS5 Pro; there's no PS5 Slim option. These covers went up for pre-order at 10 a.m. BST and sold out in about 30 minutes. I'm watching for a restock now. <a class="view-deal button" href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow" data-dimension112="937369d8-9b28-11f1-bf70-d337e88afed1" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£64">View Deal</a></p></div><h3 class="article-body__section" id="section-live-updates"><span>Live updates</span></h3></div><div class="live-content"><time datetime="2026-08-19T07:35:49+00:00">August 19, 2026 – 3:35 AM</time><h2 id="welcome-3">Welcome!</h2><p>Good morning! Welcome to Tom's Guide's live coverage of today's Marvel's Wolverine PS5 console and controllers pre-orders, there's plenty to cover ahead of the first stock appearing, so let's not waste time, and dive into what you need to know.</p></div><div class="live-content"><time datetime="2026-08-19T07:41:56+00:00">August 19, 2026 – 3:41 AM</time><h2 id="here-s-what-you-can-pre-order-today">Here's what you can pre-order today!</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/9KDStKJtMZY" allowfullscreen></iframe></div></div><p>So, if you're coming into this pre-order event wondering what will actually be available today, you can get a good look at the full range in the above trailer. But if you prefer to read rather than watch, here's the full Marvel's Wolverine limited edition range that will be available to pre-order today: </p><ul><li>PlayStation 5 Digital Edition – Marvel’s Wolverine Battle Yellow Limited Edition Bundle ($649.99 / £569.99)</li><li>DualSense Wireless Controller – Marvel’s Wolverine Battle Yellow Limited Edition ($84.99 / £74.99)</li><li>DualSense Wireless Controller – Marvel’s Wolverine Adamantium Limited Edition (84.99 / £74.99 GBP)</li><li>PlayStation 5 Console Covers – Battle Yellow Limited Edition ($74.99 / £64.99)</li><li>PlayStation 5 Pro Console Covers – Marvel’s Wolverine Battle Yellow Limited Edition ($74.99 / £64.99)</li><li>PlayStation 5 Pro Console Covers –Marvel’s Wolverine Adamantium Limited Edition ($74.99 / £64.99)</li></ul></div><div class="live-content"><time datetime="2026-08-19T07:44:50+00:00">August 19, 2026 – 3:44 AM</time><h2 id="watch-the-latest-marvel-s-wolverine-trailer-while-you-wait">Watch the latest Marvel's Wolverine trailer while you wait!</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/3Z42tBfBLJY" allowfullscreen></iframe></div></div><p>Today's pre-order event hasn't started yet, so why not get in the mood by watching the latest trailer for Marvel's Wolverine which arrives exclusively on PS5 on September 15.  </p></div><div class="live-content"><time datetime="2026-08-19T07:58:09+00:00">August 19, 2026 – 3:58 AM</time><h2 id="playstation-direct-is-the-only-place-to-get-the-full-range">PlayStation Direct is the only place to get the full range!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2s7pYFzTXPQbkDmreoQvoL" name="wolverine-ps5-promo-image" alt="Marvel's Wolverine screenshot showing Logan attacking an enemy" src="https://cdn.mos.cms.futurecdn.net/2s7pYFzTXPQbkDmreoQvoL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Insomniac Games / Sony Interactive Entertainment)</span></figcaption></figure><p>PlayStation has been increasingly eager to point shoppers towards it's own online retailer, PlayStation Direct. During previous limited edition drops, we've seen PS Direct take pre-orders first, or even offer exclusive items, and that's the case today. </p><p>The PS5 Digital Edition Bundle and PS5 DualSense Controller (Battle Yellow) will be stocked by PS Direct and "additional retailers," but the <strong>Adamantium DualSense Controller</strong> and <strong>Wolverine-themed PS5 Console Covers</strong>, are <strong>exclusive to PS Direct</strong>.</p></div><div class="live-content"><time datetime="2026-08-19T08:06:43+00:00">August 19, 2026 – 4:06 AM</time><h2 id="uk-stock-has-appeared-a-whole-hour-early">UK stock has appeared a whole hour early!</h2><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.currys.co.uk/products/playstation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow"><strong>£569 @ Currys</strong></a><strong></strong></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li></ul><p>Whelp, our first sighting of stock has arrived, and it's a whole hour earlier than the scheduled time of 10 a.m. BST in the U.K. Retailer Currys has broken rank and now has the PS5 bundle and Battle Yellow controller to pre-order. Go secure yours now!</p></div><div class="live-content"><time datetime="2026-08-19T08:18:28+00:00">August 19, 2026 – 4:18 AM</time><h2 id="currys-stock-appears-to-be-holding-for-now">Currys stock appears to be holding (for now)!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LgcgRcEBiRA8iH355bvuVL" name="wolverine-ps5-currys-listing-page" alt="Currys listing page for the limited edition Wolverine PS5 console bundle" src="https://cdn.mos.cms.futurecdn.net/LgcgRcEBiRA8iH355bvuVL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Currys)</span></figcaption></figure><p>If you're just joining us, U.K. pre-orders were supposed to kick off at 10 a.m. BST, but retailer Currys decided to go a little early, and already is taking pre-orders of the PS5 bundle and the Battle Yellow controller. Both appear to still be in stock now!</p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.currys.co.uk/products/playstation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow"><strong>£569 @ Currys</strong></a><strong></strong></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T08:29:29+00:00">August 19, 2026 – 4:29 AM</time><h2 id="i-ve-locked-in-my-dualsense-pre-order-have-you">I've locked in my DualSense pre-order, have you?</h2><p>Yes, I don't <em>need </em>another DualSense controller (I already have three...), but that Wolverine Battle Yellow pad is just too pretty to ignore. Thanks to Currys dropping early, I've got my pre-order locked. Let me know in the comments if you've secured either the limited-edition controller or PS5 console bundle. Or are you waiting until PS Direct drops the exclusive Adamantium controller and the PS5 console covers? </p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.currys.co.uk/products/playstation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow"><strong>£569 @ Currys</strong></a><strong></strong></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T08:37:42+00:00">August 19, 2026 – 4:37 AM</time><h2 id="us-readers-your-time-will-come">US readers, your time will come!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MWngwoh4ZhTfipjscrfsM9" name="Wolverine LIST" alt="PS5 console Wolverine edition with a DualSense controller on a yellow background" src="https://cdn.mos.cms.futurecdn.net/MWngwoh4ZhTfipjscrfsM9-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>To any readers in the U.S. following along right now, it's expected that stock will become available around 10 a.m. ET at PS Direct and select retailers. So you've got plenty of time left until you need to be ready to secure your pre-order. </p><p>For the next few hours, I'll be focusing on U.K. pre-orders, which technically begin in 30 minutes (but, as noted below, one retailer has set pre-orders live early). Once we're through the U.K. drop, I'll turn attention Stateside. Stay tuned for updates...</p></div><div class="live-content"><time datetime="2026-08-19T08:50:06+00:00">August 19, 2026 – 4:50 AM</time><h2 id="10-minutes-until-uk-pre-orders-are-live">10 minutes until UK pre-orders are live!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XivuTPH5BS5QKAjYARbWE" name="wolverine-ps5-limited-edition-console" alt="Wolverine PS5 limited-edition console" src="https://cdn.mos.cms.futurecdn.net/8XivuTPH5BS5QKAjYARbWE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>There's just 10 minutes until the pre-order floodgates open in the U.K. </p><p>Of course, you can already secure the limited-edition PS5 console bundle and the Battle Yellow DualSense thanks to Currys. But if you're waiting for PS Direct (or an alternative retailer) then the countdown is on. Remember, the only place to secure the Adamantium DualSense and the Wolverine-themed PS5 Console Covers is PS Direct, so that'll be the retailer to check if you're looking to grab these items!</p></div><div class="live-content"><time datetime="2026-08-19T09:00:13+00:00">August 19, 2026 – 5:00 AM</time><h2 id="ps-direct-has-the-adamantium-controller-up-for-grabs">PS Direct has the Adamantium controller up for grabs!</h2><p>It's go time, the exclusive Adamantium DualSense is now available for pre-order at PS Direct in the U.K. </p><ul><li><strong>Wolverine Adamantium PS5 DualSense: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T09:04:21+00:00">August 19, 2026 – 5:04 AM</time><h2 id="ps5-slim-console-covers-are-live-now">PS5 Slim Console Covers are live now!</h2><p>PS Direct in the U.K. is now taking pre-orders of the exclusive Wolverine Battle Yellow PS5 Slim Console Covers! </p><ul><li>PS5 Slim Console Covers (Wolverine Battle Yellow): <a href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T09:12:58+00:00">August 19, 2026 – 5:12 AM</time><h2 id="here-s-the-uk-pre-order-links-you-need">Here's the UK pre-order links you need!</h2><p>So the state of play in the U.K. right now is that PS Direct, Currys and Smyths Toys have all opened up pre-order. Got some fresh links for you below. I'm still looking for signs of the PS5 Pro Console Covers which are only available on PS Direct, but don't seem to have gone live yet. But if you're after a controller or bundle, get 'em!  </p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1424788826712694538&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow">£569 @ Currys</a></li><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://direct.playstation.com/en-gb/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow">£569 @ PS Direct</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1376858729709180831&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>Wolverine Adamantium DualSense: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-2366769774556268323/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fdualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>Wolverine PS5 Slim Battle Yellow console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-1197910723687512489/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T09:16:22+00:00">August 19, 2026 – 5:16 AM</time><h2 id="finally-we-have-ps5-pro-console-covers">Finally, we have PS5 Pro console covers!</h2><p>Just as I was wondering where the PS5 Pro console covers were, they appear on PS Direct, these won't be available at other retailers, get them locked in at PlayStation's online retailer now! </p><ul><li><strong>Wolverine PS5 Pro Battle Yellow console covers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a></li><li><strong>Wolverine PS5 Pro Adamantium console covers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a> </li></ul></div><div class="live-content"><time datetime="2026-08-19T09:31:58+00:00">August 19, 2026 – 5:31 AM</time><h2 id="plenty-of-options-for-the-wolverine-ps5-bundle">Plenty of options for the Wolverine PS5 bundle</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XivuTPH5BS5QKAjYARbWE" name="wolverine-ps5-limited-edition-console" alt="Wolverine PS5 limited-edition console" src="https://cdn.mos.cms.futurecdn.net/8XivuTPH5BS5QKAjYARbWE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>UK pre-orders are in full swing, and if you're picking up a PS5 ahead of Wolverine, you've got several retailer options for the Battle Yellow bundle. This package includes a PS5 Slim Digital Edition with a Wolverine-themed design, a matching DualSense controller and a (digital) copy of the Marvel's Wolverine game. It's everything you need to get gaming on PS5 this winter!</p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1085306643236310368&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow">£569 @ Currys</a></li><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://direct.playstation.com/en-gb/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow">£569 @ PS Direct</a></li><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.very.co.uk/playstation-5-playstationreg5-digital-edition-marvels-wolverine-battle-yellow-limited-edition-bundle-825gb/1601288149.prd" target="_blank" rel="nofollow">£569 @ Very</a></li><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/games/marvels-wolverine/playstation-5-digital-edition-slim-wolverine-limited-edt-bundle/p/264695" target="_blank" rel="nofollow">£569 @ Smyths</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T09:41:49+00:00">August 19, 2026 – 5:41 AM</time><h2 id="ps5-pro-plates-are-the-first-to-sell-out">PS5 Pro plates are the first to sell out</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="upjeCpwhK49bsZDvT7G9fW" name="wolverine-ps5-pro-covers-sold-out-ps-direct" alt="PS Direct listing page for Wolverine PS5 Pro Console Covers" src="https://cdn.mos.cms.futurecdn.net/upjeCpwhK49bsZDvT7G9fW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I always suspected it would be the PS Direct exclusive items that would sell out first, so it's no surprise to see the PS5 Pro Console Covers with the dreaded "currently unavailable" notification. You can still grab the Battle Yellow plates for the standard PS5 Slim, and the Adamantium DualSense (also exclusive to PS Direct) remains in stock, for now at least. </p><p>But take this as your warning sign, if you're eyeing up something in this limited-edition range, it might be worth locking in your pre-order now (you could always cancel if you change your mind). In the meantime, I'll keep checking for signs of a restock on the PS5 Pro console covers.</p><ul><li><strong>Wolverine PS5 Slim Battle Yellow console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-1422279364982660599/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a></li><li><strong>Wolverine PS5 Pro Battle Yellow console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-5672697732248293255/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fplaystation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li><li><strong>Wolverine PS5 Pro Adamantium console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-1268233240000381896/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fplaystation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T09:54:03+00:00">August 19, 2026 – 5:54 AM</time><h2 id="battle-yellow-dualsense-sells-out-at-ps-direct-but-you-can-still-get-one-elsewhere">Battle Yellow DualSense sells out at PS Direct, but you can still get one elsewhere! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6rLwnVPwjVWZo3aVyL8m6B" name="wolverine-dualsense-ps-direct-yellow" alt="PS Direct listing page for the Battle Yellow DualSense controller" src="https://cdn.mos.cms.futurecdn.net/6rLwnVPwjVWZo3aVyL8m6B-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Okay, so this one does surprise me. It appears the DualSense (Wolverine Battle Yellow) has sold out on PS Direct <em>before</em> the exclusive Adamantium variant. Clearly, gamers prefer that iconic Wolverine yellow to a metallic shade of grey. </p><p>Fortunately, while PS Direct is currently showing "unavailable," you can still grab a controller at Currys and Smyths. My advice is to lock in your pre-order ASAP in case these sell out soon.</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-9945375327193679394&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-9945375327193679394&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Smyths</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T10:16:11+00:00">August 19, 2026 – 6:16 AM</time><h2 id="uk-pre-order-stock-seems-steady-at-present">UK pre-order stock seems steady at present!</h2><p>The PS5 Pro console covers have sold out, but otherwise, you can still pick up the rest of the limited-edition Wolverine range in the U.K. That includes the Battle Yellow PS5 console bundle, the Battle Yellow DualSense, and matching PS5 Slim console covers. Here's the links you need. These could sell out at any moment, but for now they're holding, so take your pick!</p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1424788826712694538&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow">£569 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1376858729709180831&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li><li><strong>Wolverine Adamantium DualSense: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-2366769774556268323/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fdualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>Wolverine PS5 Slim Battle Yellow console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-1197910723687512489/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T10:46:48+00:00">August 19, 2026 – 6:46 AM</time><h2 id="which-dualsense-do-you-prefer">Which DualSense do you prefer? </h2><p>Help us settle an office debate that's raging this morning, which limited-edition Wolverine DualSense controller design do you prefer? The Battle Yellow or Adamantium. Personally, I'm all about the yellow, but I'm curious to hear from you, let me know in the poll down below...</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ODqyjX"></div>                            </div>                            <script src="https://kwizly.com/embed/ODqyjX.js" async></script></div><div class="live-content"><time datetime="2026-08-19T11:23:15+00:00">August 19, 2026 – 7:23 AM</time><h2 id="nothing-new-to-report-in-the-uk">Nothing new to report in the UK!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="brkRET2rLiiqB38ggQjQsW" name="wolverine-2025-state-of-play-ps5-game" alt="Marvel's Wolverine image showing Logan" src="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I'll be turning my attention shortly to the U.S. as we're now less than three hours away from the pre-orders going live for gamers in North America, but just to note for any U.K. Wolverine fans, the situation remains unchanged. Aside from the PS5 Pro console covers, which sold out in roughly 30 minutes, everything else is in stock at retailers like Currys, PS Direct and Smyths. Curiously the likes of Amazon and Argos haven't joined in the action yet, so I'll keep an eye out for those, just in case you're holding off locking in your pre-order(s) until those listings appear.</p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1424788826712694538&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow">£569 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1376858729709180831&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li><li><strong>Wolverine Adamantium DualSense: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-2366769774556268323/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fdualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>Wolverine PS5 Slim Battle Yellow console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-1197910723687512489/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T11:53:06+00:00">August 19, 2026 – 7:53 AM</time><h2 id="playstation-direct-exclusive-controller-still-in-stock">PlayStation Direct exclusive controller still in stock!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TRJy4KBKfTkV8NE2E2Be7U" name="ps-direct-wolverine-dualsense-adamantium" alt="PlayStation Direct listing page for the DualSense Adamantium controller" src="https://cdn.mos.cms.futurecdn.net/TRJy4KBKfTkV8NE2E2Be7U-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>As the U.S. starts to wake up, the big surprise this morning during the U.K. pre-order drop, which might give us some clues as to how the U.S. one will go, is that the limited-edition DualSense controller in Adamantium hasn't sold out. This item is exclusive to PS Direct, and I'd assumed this extra level of <em>limited-ness </em>(that's not a word), would see it sell out very quickly. </p><p>However, as our poll below shows, 77% of responders prefer the Battle Yellow, so maybe there just isn't all that much interest in the Adamantium variant? Perhaps the grey hue is just a bit too bland next to the striking very Wolverine-coded yellow. Time will tell if it'll be the same story in the U.S. But for now, if you're in the U.K., you can still pre-order both DualSenses.</p><ul><li><strong>PS5 DualSense Controller (Adamantium): </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-2366769774556268323/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fdualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1376858729709180831&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T12:30:35+00:00">August 19, 2026 – 8:30 AM</time><h2 id="90-minutes-until-u-s-pre-orders">90 minutes until U.S. pre-orders! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MWngwoh4ZhTfipjscrfsM9" name="Wolverine LIST" alt="PS5 console Wolverine edition with a DualSense controller on a yellow background" src="https://cdn.mos.cms.futurecdn.net/MWngwoh4ZhTfipjscrfsM9-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>It's just hit 8:30 a.m. ET, so we're 90 minutes away from the PlayStation Wolverine range pre-orders going live in the U.S. Now is the time to make sure you've got everything you need (check your details are correct on your preferred retailer!). However, in the U.K. we saw one retailer break rank and go a full hour early, so maybe a U.S. retailer will do the same. I'm keeping an eye on retailers right now, and will alert you if any pre-orders drop a little early. </p></div><div class="live-content"><time datetime="2026-08-19T12:55:20+00:00">August 19, 2026 – 8:55 AM</time><h2 id="here-s-the-full-wolverine-range-and-confirmed-pricing">Here's the full Wolverine range and confirmed pricing!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XivuTPH5BS5QKAjYARbWE" name="wolverine-ps5-limited-edition-console" alt="Wolverine PS5 limited-edition console" src="https://cdn.mos.cms.futurecdn.net/8XivuTPH5BS5QKAjYARbWE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>If you're coming into this cold and wondering what all the fuss is about, here's the scoop. PlayStation is releasing a limited-edition Wolverine range to mark the launch of its new PS5 exclusive, Marvel's Wolverine. Pre-orders go live today (Aug. 19) at 10 a.m. ET, and there will be six items: a PS5 console bundle, two DualSense controllers and three PS5 console covers. </p><p><strong>The items in bold below are exclusive to PlayStation Direct</strong>, while the PS5 console bundle and Battle Yellow controller will be available elsewhere. In the U.K., the PS5 Pro console covers sold out in 30 minutes, but the other four items are still in stock even almost four hours later.</p><ul><li>PlayStation 5 Digital Edition – Marvel’s Wolverine Battle Yellow Limited Edition Bundle ($649.99)</li><li>DualSense Wireless Controller – Marvel’s Wolverine Battle Yellow Limited Edition ($84.99)</li><li><strong>DualSense Wireless Controller – Marvel’s Wolverine Adamantium Limited Edition ($84.99)</strong></li><li><strong>PlayStation 5 Console Covers – Battle Yellow Limited Edition ($74.99)</strong></li><li><strong>PlayStation 5 Pro Console Covers – Marvel’s Wolverine Battle Yellow Limited Edition ($74.99)</strong></li><li><strong>PlayStation 5 Pro Console Covers –Marvel’s Wolverine Adamantium Limited Edition ($74.99)</strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:11:28+00:00">August 19, 2026 – 9:11 AM</time><h2 id="target-has-gone-live-with-the-ps5-bundle">Target has gone live with the PS5 bundle</h2><p>Looks like a U.S. retailer has gone earlier, because Target's listing page for the PS5 Slim Wolverine bundle is live and the "preorder" button is working and I can add to my cart! </p><ul><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow">$649 @ Target</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:17:51+00:00">August 19, 2026 – 9:17 AM</time><h2 id="and-the-dualsense-is-up-at-target-too">And the DualSense is up at Target, too</h2><p>Target has also dropped the Battle Yellow controller early, both items are available to pre-order now! </p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow"><strong>$84 @ Target</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow"><strong>$649 @ Target</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:22:58+00:00">August 19, 2026 – 9:22 AM</time><h2 id="target-is-taking-pre-orders-now">Target is taking pre-orders NOW!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uHuSCmTkFw3GzRPxhNLAwk" name="target-wolverine-limited-edition-cart" alt="Target cart with the Wolverine PS5 bundle and limited edition Battle Yellow DualSense controller" src="https://cdn.mos.cms.futurecdn.net/uHuSCmTkFw3GzRPxhNLAwk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Target)</span></figcaption></figure><p>Target clearly didn't want to wait until 10 a.m. ET, as you can see above I'm able to add both items to my cart now. So if you want to get ahead of the game, secure your pre-orders now!</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow"><strong>$84 @ Target</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow"><strong>$649 @ Target</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:35:59+00:00">August 19, 2026 – 9:35 AM</time><h2 id="ps-direct-listing-pages-have-appeared-but-no-pre-orders-yet">PS Direct listing pages have appeared, but no pre-orders yet</h2><p>PS Direct is getting ready to drop pre-orders at 10 a.m. ET, I've just spotted listing pages for the two DualSense controllers, including the PS Direct exclusive Adamantium variant. These are the links you'll need in just under 25 minutes. Or you can head to Target to secure the Battle Yellow controller already. </p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">$84 @ PS Direct</a></li><li><strong>PS5 DualSense Controller (Wolverine Adamantium): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">$84 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:39:40+00:00">August 19, 2026 – 9:39 AM</time><h2 id="another-ps-direct-listing-page-has-appeared">Another PS Direct listing page has appeared...</h2><p>I've spotted the listing page for the PS5 Slim Console Covers (Battle Yellow) over on PS Direct. This will be the only place to grab these plates, so make sure to use the link below so you're ready at 10 a.m. I'm closely watching out for the PS5 Pro Console Covers listing pages next!</p><ul><li><strong>PS5 Slim Console Covers (Wolverine Battle Yellow): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">$74 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:50:08+00:00">August 19, 2026 – 9:50 AM</time><h2 id="10-minutes-until-the-pre-order-floodgates-open">10 minutes until the pre-order floodgates open!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="brkRET2rLiiqB38ggQjQsW" name="wolverine-2025-state-of-play-ps5-game" alt="Marvel's Wolverine image showing Logan" src="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>The Wolverine limited-edition range will be up for pre-order from 10 a.m. ET. If the U.K. pre-order period earlier today was any indication, it'll be the PS5 Pro Console Covers that sell out first, so if you want to bag those, get ready; you'll need to be quick. However, if you're after the PS5 Digital Edition bundle or the Battle Yellow controller, you don't need to wait. Target has already opened its pre-orders, and you can secure both items at the retailer right now!</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow"><strong>$84 @ Target</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow"><strong>$649 @ Target</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:02:06+00:00">August 19, 2026 – 10:02 AM</time><h2 id="ps-direct-pre-orders-are-live-including-retailer-exclusive-items">PS Direct pre-orders are live, including retailer exclusive items!</h2><p>It's 10 a.m. ET, get over to PS Direct, and secure the Wolverine items you've been waiting for (if you didn't grab anything from Target already). I'm keeping any eye out for stock levels at PS Direct, and for any other retailers that open up pre-orders now!</p><ul><li><strong>PS5 Slim Console Covers (Wolverine Battle Yellow): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">$74 @ PS Direct</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">$84 @ PS Direct</a></li><li><strong>PS5 DualSense Controller (Wolverine Adamantium): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">$84 @ PS Direct</a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="  https://direct.playstation.com/en-us/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow">$649 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:08:55+00:00">August 19, 2026 – 10:08 AM</time><h2 id="these-ps5-pro-plates-will-be-popular">These PS5 Pro plates will be popular! </h2><p>Here's the links you'll need to pre-order the PS Direct exclusive Wolverine Console Covers, these sold out in 30 minutes in the U.K. so I'm expecting them to go very quickly in the U.S.</p><ul><li><strong>PS5 Pro Console Covers (Wolverine Battle Yellow):</strong> <a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">$74 @ PS Direct</a></li><li><strong>PS5 Pro Console Covers (Wolverine Adamantium):</strong> <a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow">$74 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:19:01+00:00">August 19, 2026 – 10:19 AM</time><h2 id="pre-orders-now-live-at-best-buy">Pre-orders now live at Best Buy!</h2><p>Best Buy is the next retailer on the scene, now taking pre-orders for the PS5 Slim console bundle and the Battle Yellow controller (remember, the rest of the items are exclusive to PS Direct)!</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><strong>$84 @ Best Buy</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><strong>$649 @ Best Buy</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:26:11+00:00">August 19, 2026 – 10:26 AM</time><h2 id="welcome-to-the-wolverine-party-gamestop">Welcome to the Wolverine party, GameStop</h2><p>Target, PS Direct, Best Buy and now GameStop are all taking pre-orders, so if you've been holding out for the gaming dedicated retailer, wait no longer, go secure your items!</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-digital-edition-console---marvels-wolverine-battle-yellow-limited-edition-bundle/450550.html" target="_blank" rel="nofollow"><strong>$649 @ GameStop</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:32:45+00:00">August 19, 2026 – 10:32 AM</time><h2 id="walmart-pre-orders-are-now-live">Walmart pre-orders are now live!</h2><p>Everybody is getting in on the action (apart from Amazon?), because now Walmart is taking pre-orders for the PS5 console bundle and the Battle Yellow console, if this is your retailer of choice, go lock in your items!</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.walmart.com/ip/PlayStation-5-Digital-Edition-nbsp-Marvel-s-Wolverine-nbsp-Battle-Yellow-nbsp-Limited-Edition-nbsp-Bundle/20881956449" target="_blank" rel="nofollow"><strong>$649 @ Walmart</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:49:34+00:00">August 19, 2026 – 10:49 AM</time><h2 id="ps5-pro-console-covers-are-sold-out-in-the-us">PS5 Pro console covers are sold out in the US</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kPSgUjZygnGfZTMcTJBBtV" name="ps-direct-wolverine-console-covers-sold-out" alt="PlayStation Direct listing page for the Wolverine Console Covers showing a sold out message" src="https://cdn.mos.cms.futurecdn.net/kPSgUjZygnGfZTMcTJBBtV-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Well, I thought this was coming...</p><p>During the U.K. pre-order drop earlier today, it was the PS5 Pro Console Covers that sold out in about 30 minutes, and it appears the same has happened in the U.S. I'm seeing the dreaded  "currently unavailable" notification on both sets of the console covers on PS Direct, both Battle Yellow and Adamantium are sold out. These are exclusive to PS Direct, so I can't point you to an alternative retailer with pre-orders open. However, I am keeping an eye out for restocks!</p></div><div class="live-content"><time datetime="2026-08-19T15:07:34+00:00">August 19, 2026 – 11:07 AM</time><h2 id="battle-yellow-dualsense-sells-out-at-ps-direct-but-don-t-worry">Battle Yellow DualSense sells out at PS Direct, but don't worry</h2><p>Another spooky repeat of the U.K. pre-order situation, PS Direct U.S. just sold out of the DualSense Battle Yellow variant. But fear not, you haven't missed the boat, there's plenty of other places to grab one like Best Buy, Walmart, Target and GameStop. Just use the links below. Meanwhile, the PS Direct exclusive Adamantium DualSense remains in stock (for now) </p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><strong>$84 @ Best Buy</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow"><strong>$84 @ Target</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Adamantium): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PS Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T15:39:32+00:00">August 19, 2026 – 11:39 AM</time><h2 id="console-pre-orders-are-still-live-at-most-retailers">Console pre-orders are still live at most retailers</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XivuTPH5BS5QKAjYARbWE" name="wolverine-ps5-limited-edition-console" alt="Wolverine PS5 limited-edition console" src="https://cdn.mos.cms.futurecdn.net/8XivuTPH5BS5QKAjYARbWE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>While the special edition DualSense and faceplates might be selling out, pre-orders for the console itself are still readily available. The recent PS5 price increase may be causing folks to hesitate to buy this special edition console. While price hikes certainly aren't ideal, they could be inadvertently making it possible to actually get one of these Wolverine-themed PS5s.</p><p>Though you probably don't want to wait too long to grab one of these consoles, there isn't the same sense of urgency as there was during the PS5's initial launch. However, if you see pre-orders go live again for the controller or faceplates, act fast, as those are going quickly!</p></div><div class="live-content"><time datetime="2026-08-19T16:06:13+00:00">August 19, 2026 – 12:06 PM</time><h2 id="wolverine-the-console-isn-t-on-amazon-but-wolverine-the-little-guy-is">Wolverine the console isn't on Amazon, but Wolverine the little guy is</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aBVopK42n7W5AZDGpFu6ub" name="wolverine-controller-holder" alt="Wolverine-themed controller holder on a desk" src="https://cdn.mos.cms.futurecdn.net/aBVopK42n7W5AZDGpFu6ub-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Cableguys)</span></figcaption></figure><p>For now, save a the Adamantium silver plates, most every retailer has pre-order options open. However, Amazon has yet to open any pages offering preorders. </p><p>That said, you could pick up this <a href="https://www.amazon.com/Cable-Guys-Wolverine-Xbox-360/dp/B07QTVFNVS/" target="_blank">Wolverine Controller Holder & Phone Stand </a>for only $33. It's classic little guy stepping on destroyed Sentinel parts in his 90s X-Men outfit. </p></div><div class="live-content"><time datetime="2026-08-19T16:29:45+00:00">August 19, 2026 – 12:29 PM</time><h2 id="amazon-finally-has-the-battle-yellow-dualsense">Amazon finally has the Battle Yellow DualSense</h2><p>It took a while, but finally some signs of life over at Amazon. Still no signs of the PS5 console bundle, but the DualSense in Battle Yellow is now up for pre-order at the world's biggest online retailer. Amazon being a little late to the pre-order party!</p><ul><li><strong>PS5 DualSense Controller (Battle Yellow): </strong><a href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T16:58:08+00:00">August 19, 2026 – 12:58 PM</time><h2 id="stock-sweep-target-out-of-contollers">Stock sweep - Target out of contollers</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1600px;"><p class="vanilla-image-block" style="padding-top:63.44%;"><img id="t6pRnHE25F8YwaQQaDr8U3" name="wolverine-ds5-yellow-le-image-block-01-en-19jun26" alt="DualSense Wireless Controller – Marvel’s Wolverine Battle Yellow Limited Edition" src="https://cdn.mos.cms.futurecdn.net/t6pRnHE25F8YwaQQaDr8U3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1015" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>I've taken a look through the major retailers to see what's available and most everywhere has stock on the consoles and controllers, except Target.</p><p>For those who prefer Target, the battle yellow Wolverine controller is sold out.  You'll need to look elsewhere if you're hunting for that version of the DualSense.</p><p>The PS5 Pro Console covers have been out of stock on PS Direct for an hour or more now.</p><p>Grab the controller here: </p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><strong>$84 @ Best Buy</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Adamantium): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PS Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T17:27:52+00:00">August 19, 2026 – 1:27 PM</time><h2 id="have-you-pre-ordered">Have you pre-ordered?</h2><p>If you pre-ordered the console or controllers I'd love to know what you picked. The yellow looks awesome, but I am leaning toward the adamantium version, I'm a sucker for a nice silver streak.</p><p>Let me know in the comments.</p></div><div class="live-content"><time datetime="2026-08-19T18:20:29+00:00">August 19, 2026 – 2:20 PM</time><h2 id="it-is-expensive">It is 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XivuTPH5BS5QKAjYARbWE" name="wolverine-ps5-limited-edition-console" alt="Wolverine PS5 limited-edition console" src="https://cdn.mos.cms.futurecdn.net/8XivuTPH5BS5QKAjYARbWE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>As a reminder this special edition console will cost you $649. If you want a second controller that adds $84 to the total. </p><p>But of the special edition consoles, this one looks pretty cool.</p></div><div class="live-content"><time datetime="2026-08-19T18:58:51+00:00">August 19, 2026 – 2:58 PM</time><h2 id="where-are-we-after-five-hours-of-tracking">Where are we after five hours of tracking</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="E2FWRC79FFmzmGvZwSRmVn" name="X-Men-1992.jpg" alt="Wolverine in the 1992 series X-Men" src="https://cdn.mos.cms.futurecdn.net/E2FWRC79FFmzmGvZwSRmVn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Alamy)</span></figcaption></figure><p>Pre-orders started going live about five hours ago, and for the most part, if you want Wolverine, you can get the console and controllers. </p><p>To add to the out-of-stock options, <a href="https://www.walmart.com/ip/Project-Flow/20347523715?clickid=RVhXImxrxxyZT1cw3KQmtUkEUkr0cU1xMUyy0s0&irgwc=1&afsrc=1&sourceid=imp_RVhXImxrxxyZT1cw3KQmtUkEUkr0cU1xMUyy0s0&veh=aff&wmlspartner=imp_1943169&affiliates_ad_id=568844&campaign_id=9383&sharedid=tomsguide-us" target="_blank">Walmart no longer appears</a> to have the Battle Yellow controller available for pre-order. That goes along with the Target option as well.</p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/news/live/marvels-wolverine-ps5-console-and-controllers-pre-orders-live-updates</link>
                                                                            <description>
                            <![CDATA[ Marvel's Wolverine PS5 console and controllers pre-orders begin today, and I've got all the live updates you need to secure yours. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NyEfjzvgXBsgpsBQPuL34L</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MWngwoh4ZhTfipjscrfsM9-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 19 Aug 2026 07:33:29 +0000</pubDate>                                                                                                                                <updated>Wed, 19 Aug 2026 20:10:13 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/MWngwoh4ZhTfipjscrfsM9-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony Interactive Entertainment]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PS5 console Wolverine edition with a DualSense controller on a yellow background]]></media:description>                                                            <media:text><![CDATA[PS5 console Wolverine edition with a DualSense controller on a yellow background]]></media:text>
                                <media:title type="plain"><![CDATA[PS5 console Wolverine edition with a DualSense controller on a yellow background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MWngwoh4ZhTfipjscrfsM9-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="live-content"><div  class="fancy-box"><div class="fancy_box-title">Marvel's Wolverine PS5 console and controllers pre-orders</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="YZ6oxxyvkL4Cv8hUxRh7th" name="Wolverine LIST2" caption="" alt="PS5 console Wolverine edition with a DualSense controller and in-game screenshot of Logan on a yellow background" src="https://cdn.mos.cms.futurecdn.net/YZ6oxxyvkL4Cv8hUxRh7th-1920-80.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: Sony Interactive Entertainment)</span></figcaption></figure><p class="fancy-box__body-text"><strong>US (pre-orders now live)</strong><br><em>PS5 console bundle: </em><a data-analytics-id="inline-link" href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><br><em>DualSense controller: </em><a data-analytics-id="inline-link" href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><br><em>PS5 Slim Console Covers: </em><a data-analytics-id="inline-link" href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><br>----------------------------------<br><strong>UK (pre-orders now live)</strong><br><em>PS5 console bundle: </em><a data-analytics-id="inline-link" href="https://www.currys.co.uk/products/playstation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><em></em><br><em>DualSense controller: </em><a data-analytics-id="inline-link" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><em></em><br><em>PS5 Slim Console Covers: </em><a data-analytics-id="inline-link" href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow"><em>pre-orders LIVE</em></a><br>----------------------------------<br>1. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-pre-orders-quick-links">Quick Links</a><br>2. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-console-bundle-pre-orders">Wolverine PS5 console pre-orders</a><br>3. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-dualsense-controllers-pre-orders">Wolverine PS5 controller pre-orders</a><br>4. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-console-covers-pre-orders">Wolverine PS5 console cover pre-orders</a><br>5. <a data-analytics-id="inline-link" href="#section-wolverine-ps5-console-and-controllers-uk-pre-orders">U.K. pre-orders</a><br>6. <a data-analytics-id="inline-link" href="#section-live-updates">LIVE: Latest updates</a></p></div></div><p>Your <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> console is about to get a Wolverine-themed makeover, as PlayStation is dropping a range of limited-edition items to mark the upcoming release of its new exclusive, Marvel’s Wolverine. <strong>Pre-orders are now LIVE in the U.S. and U.K.</strong>, and the available stock is being snapped up faster than Logan's healing factor can kick in!</p><p>The range includes a limited-edition Wolverine PS5 console bundle, two new DualSense controller designs, and, for those who already own a PS5, a range of <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a> and <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> Console Covers (sorry to launch model owners). The items come in two variants, Battle Yellow and Adamantium. The latter exclusive to PlayStation Direct. </p><p>If the limited-edition range for Insomniac’s last Marvel game, <a href="https://www.tomsguide.com/reviews/spider-man-2">Spider-Man 2</a>, is any indication, these Wolverine items are going to sell out very quickly. And you know resellers will be on the scene to ruin another gaming drop for the rest of us.</p><p>Fortunately, I’ve got more than six years of experience tracking pre-orders and restocks for in-demand items, from the original PS5 stock nightmare to the uber-popular (and very hard to buy) PlayStation 30th Anniversary Collection. I’m using all that knowledge to help you secure these limited-edition Wolverine PS5 products today. Below are all the retailer links you’ll need and the latest live update to make sure you get the bag!</p><h3 class="article-body__section" id="section-wolverine-ps5-pre-orders-quick-links"><span>Wolverine PS5 pre-orders - quick links</span></h3><ul><li><strong>Wolverine Battle Yellow PS5 bundle: </strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow">$649 @ Best Buy</a></li><li><strong>Wolverine Battle Yellow PS5 DualSense: </strong><a href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow">$84 @ Amazon</a></li><li><strong>Wolverine Adamantium PS5 DualSense: </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">$84 @ PS Direct</a></li><li><strong>Wolverine Battle Yellow PS5 Slim console covers: </strong><a href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">$74 @ PS Direct</a></li><li><strong>Wolverine Battle Yellow PS5 Pro console covers: </strong><a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li><li><strong>Wolverine Adamantium PS5 Pro console covers: </strong><a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li></ul><h3 class="article-body__section" id="section-wolverine-ps5-console-bundle-pre-orders"><span>Wolverine PS5 console bundle pre-orders</span></h3><div class="product"><a data-dimension112="b3876d3c-9b1e-11f1-86fd-3b12ad0ec66a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow" data-dimension112="b3876d3c-9b1e-11f1-86fd-3b12ad0ec66a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>Best Buy is now taking pre-orders of the PS5 Digital Edition Wolverine Battle Yellow Bundle, it costs $649. <a class="view-deal button" href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow" data-dimension112="b3876d3c-9b1e-11f1-86fd-3b12ad0ec66a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="b3876db4-9b1e-11f1-b3e3-553683ccd907" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://www.walmart.com/ip/PlayStation-5-Digital-Edition-nbsp-Marvel-s-Wolverine-nbsp-Battle-Yellow-nbsp-Limited-Edition-nbsp-Bundle/20881956449" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RZkKnBkdjDJ6QRZq2RmaPY" name="Walmart-Logo-2008" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RZkKnBkdjDJ6QRZq2RmaPY-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.walmart.com/ip/PlayStation-5-Digital-Edition-nbsp-Marvel-s-Wolverine-nbsp-Battle-Yellow-nbsp-Limited-Edition-nbsp-Bundle/20881956449" target="_blank" rel="nofollow" data-dimension112="b3876db4-9b1e-11f1-b3e3-553683ccd907" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>Walmart is another retailer that is always involved when limited-edition items drop. It currently has stock of the PS5 Digital Edition Wolverine Battle Yellow Bundle.<a class="view-deal button" href="https://www.walmart.com/ip/PlayStation-5-Digital-Edition-nbsp-Marvel-s-Wolverine-nbsp-Battle-Yellow-nbsp-Limited-Edition-nbsp-Bundle/20881956449" target="_blank" rel="nofollow" data-dimension112="b3876db4-9b1e-11f1-b3e3-553683ccd907" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="b3876e22-9b1e-11f1-a12e-a1ca3352f374" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:129.60%;"><img id="J4ioQbCcWu8knu9FrYgeRT" name="purepng.com-target-logologobrand-logoiconslogos-251519939485oxces" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J4ioQbCcWu8knu9FrYgeRT-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2592" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow" data-dimension112="b3876e22-9b1e-11f1-a12e-a1ca3352f374" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>Target has gone early and is now taking pre-orders for the PS5 Digital Edition Wolverine Battle Yellow Bundle ahead of its release on September 15. <a class="view-deal button" href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow" data-dimension112="b3876e22-9b1e-11f1-a12e-a1ca3352f374" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="b3876c2e-9b1e-11f1-b6e3-b38528b6413c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://direct.playstation.com/en-us/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow" data-dimension112="b3876c2e-9b1e-11f1-b6e3-b38528b6413c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>The PS5 Digital Edition Wolverine Battle Yellow Bundle includes the PS5 console (without a disc drive) decked out in a slick Wolverine theme, a matching DualSense controller, and a digital copy of Marvel's Wolverine. <a class="view-deal button" href="https://direct.playstation.com/en-us/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow" data-dimension112="b3876c2e-9b1e-11f1-b6e3-b38528b6413c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="b3876e90-9b1e-11f1-bba6-f742ddc5c311" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-digital-edition-console---marvels-wolverine-battle-yellow-limited-edition-bundle/450550.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EXpDruhoaAuddyN6RUCGyb" name="GameStop logo.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EXpDruhoaAuddyN6RUCGyb-1920-80.png" mos="" align="middle" fullscreen="" width="400" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-digital-edition-console---marvels-wolverine-battle-yellow-limited-edition-bundle/450550.html" target="_blank" rel="nofollow" data-dimension112="b3876e90-9b1e-11f1-bba6-f742ddc5c311" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>Naturally, as a gaming-dedicated retailer, GameStop is taking pre-orders for the PS5 Digital Edition Wolverine Battle Yellow Bundle. It cost $649, which is MSRP.<a class="view-deal button" href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-digital-edition-console---marvels-wolverine-battle-yellow-limited-edition-bundle/450550.html" target="_blank" rel="nofollow" data-dimension112="b3876e90-9b1e-11f1-bba6-f742ddc5c311" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="b3876cc4-9b1e-11f1-9981-5bb6aaa8a3d8" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649" href="https://www.amazon.com/s?k=wolverine+ps5+console+bundle" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecjfqi2UgurxrA42rX7pML" name="Amazon-Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ecjfqi2UgurxrA42rX7pML-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/s?k=wolverine+ps5+console+bundle" target="_blank" rel="nofollow" data-dimension112="b3876cc4-9b1e-11f1-9981-5bb6aaa8a3d8" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">(Wolverine Battle Yellow): $649</a></strong><br>Amazon is likely to be taking pre-orders for the PS5 Digital Edition Wolverine Battle Yellow Bundle today. It'll ship on (or around) the game's release date, September 15.<a class="view-deal button" href="https://www.amazon.com/s?k=wolverine+ps5+console+bundle" target="_blank" rel="nofollow" data-dimension112="b3876cc4-9b1e-11f1-9981-5bb6aaa8a3d8" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$649">View Deal</a></p></div><h3 class="article-body__section" id="section-wolverine-ps5-dualsense-controllers-pre-orders"><span>Wolverine PS5 DualSense controllers pre-orders</span></h3><div class="product"><a data-dimension112="b3876fee-9b1e-11f1-8967-d13a2326e64b" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecjfqi2UgurxrA42rX7pML" name="Amazon-Logo.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ecjfqi2UgurxrA42rX7pML-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow" data-dimension112="b3876fee-9b1e-11f1-8967-d13a2326e64b" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>Amazon took its time, but after a lot of waiting, and hours later than its retail rivals, it's finally taking pre-orders for the DualSense controller in Battle Yellow. Lock in yours now.<a class="view-deal button" href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow" data-dimension112="b3876fee-9b1e-11f1-8967-d13a2326e64b" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b387705c-9b1e-11f1-bdfe-038091463737" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-marvels-wolverine-battle-limited-edition-for-ps5-pc-mac-mobile-yellow/JXHQ37ZQ8C" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1331px;"><p class="vanilla-image-block" style="padding-top:68.52%;"><img id="yjsgCbZzcWDLMuhHtLHa7K" name="Best Buy deal block 2022.jpeg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yjsgCbZzcWDLMuhHtLHa7K-1920-80.jpeg" mos="" align="middle" fullscreen="" width="1331" height="912" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-marvels-wolverine-battle-limited-edition-for-ps5-pc-mac-mobile-yellow/JXHQ37ZQ8C" target="_blank" rel="nofollow" data-dimension112="b387705c-9b1e-11f1-bdfe-038091463737" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>Best Buy will be a great place to pick up a Wolverine-themed PS5 DualSense controller. It retails for the base price of $84 and should ship in time for September 15. <a class="view-deal button" href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-marvels-wolverine-battle-limited-edition-for-ps5-pc-mac-mobile-yellow/JXHQ37ZQ8C" target="_blank" rel="nofollow" data-dimension112="b387705c-9b1e-11f1-bdfe-038091463737" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b38770d4-9b1e-11f1-a070-95dd54fdac1c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RZkKnBkdjDJ6QRZq2RmaPY" name="Walmart-Logo-2008" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RZkKnBkdjDJ6QRZq2RmaPY-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow" data-dimension112="b38770d4-9b1e-11f1-a070-95dd54fdac1c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>Walmart is now taking pre-orders of the limited-edition Wolverine Battle Yellow DualSense controllers. <a class="view-deal button" href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow" data-dimension112="b38770d4-9b1e-11f1-a070-95dd54fdac1c" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b3877142-9b1e-11f1-8e71-53f97f1f2083" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:129.60%;"><img id="J4ioQbCcWu8knu9FrYgeRT" name="purepng.com-target-logologobrand-logoiconslogos-251519939485oxces" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J4ioQbCcWu8knu9FrYgeRT-1920-80.png" mos="" align="middle" fullscreen="" width="2000" height="2592" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow" data-dimension112="b3877142-9b1e-11f1-8e71-53f97f1f2083" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>Pre-orders weren't supposed to begin until 10 a.m. ET, but Target has gone early, and you can secure the Wolverine Battle Yellow DualSense now!<a class="view-deal button" href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow" data-dimension112="b3877142-9b1e-11f1-8e71-53f97f1f2083" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b38771b0-9b1e-11f1-b380-cb36af9ceff5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="EXpDruhoaAuddyN6RUCGyb" name="GameStop logo.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EXpDruhoaAuddyN6RUCGyb-1920-80.png" mos="" align="middle" fullscreen="" width="400" height="400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow" data-dimension112="b38771b0-9b1e-11f1-b380-cb36af9ceff5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>GameStop is another retailer where you can currently lock in your pre-order of the Wolverine Battle Yellow DualSense. The limited-edition controller costs $84. <a class="view-deal button" href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow" data-dimension112="b38771b0-9b1e-11f1-b380-cb36af9ceff5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b3876f80-9b1e-11f1-b5c3-1ba0fde73688" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$84" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="b3876f80-9b1e-11f1-b5c3-1ba0fde73688" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$84">(Wolverine Adamantium): $84</a></strong><br>If you've got your eyes on the Adamantium version of the PS5 DualSense, there's only one place to get it: PS Direct. This variant of the controller is exclusive to the retailer.<a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="b3876f80-9b1e-11f1-b5c3-1ba0fde73688" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$84">View Deal</a></p></div><div class="product"><a data-dimension112="b3876f12-9b1e-11f1-a92e-9d7c8be7d5f9" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="b3876f12-9b1e-11f1-a92e-9d7c8be7d5f9" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">(Wolverine Battle Yellow): $84</a></strong><br>The DualSense controller in Wolverine Battle Yellow gives the popular PS5 pad a very cool Mutant makeover. PS Direct is currently sold out, but other retailers have stock.<a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="b3876f12-9b1e-11f1-a92e-9d7c8be7d5f9" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$84">View Deal</a></p></div><h3 class="article-body__section" id="section-wolverine-ps5-console-covers-pre-orders"><span>Wolverine PS5 Console Covers pre-orders</span></h3><div class="product"><a data-dimension112="b3877228-9b1e-11f1-b46b-994dc623137a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74" href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877228-9b1e-11f1-b46b-994dc623137a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74">(Wolverine Battle Yellow): $74</a></strong><br>The Wolverine edition PS5 console covers are exclusive to PlayStation Direct, and if you own a PS5 Slim, your only option is the Battle Yellow variant. <a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877228-9b1e-11f1-b46b-994dc623137a" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74">View Deal</a></p></div><div class="product"><a data-dimension112="b3877296-9b1e-11f1-abfd-15378f49f0a1" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74" href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877296-9b1e-11f1-abfd-15378f49f0a1" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74">(Wolverine Battle Yellow): $74</a></strong><br>The PS5 Pro Battle Yellow Console Covers were made available for pre-order at 10 a.m. ET and sold out in less than 30 minutes. Let's hope there's a restock very soon. <a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877296-9b1e-11f1-abfd-15378f49f0a1" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="$74">View Deal</a></p></div><div class="product"><a data-dimension112="b3877304-9b1e-11f1-8fa8-73ea4afaa5b0" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$74" href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" 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="HZfFhWobR5BcFYUhfz5KbR" name="playstation-logo" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HZfFhWobR5BcFYUhfz5KbR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877304-9b1e-11f1-8fa8-73ea4afaa5b0" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$74">(Wolverine Adamantium): $74</a></strong><br>The Adamantium PS5 Pro console covers didn't take long to sell out and are exclusive to PS Direct. There could be a restock, so keep checking stock just in case you get lucky. <a class="view-deal button" href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow" data-dimension112="b3877304-9b1e-11f1-8fa8-73ea4afaa5b0" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="$74">View Deal</a></p></div><h3 class="article-body__section" id="section-wolverine-ps5-console-and-controllers-uk-pre-orders"><span>Wolverine PS5 console and controllers UK pre-orders</span></h3><p><em>As of 10 a.m. BST on Wednesday, August 19, pre-orders for the limited-edition Marvel's Wolverine range have begun in the U.K. See below for all the buying links you need.</em></p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.currys.co.uk/products/playstation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow">£569 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Adamantium): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>Wolverine PS5 Slim Battle Yellow console covers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a></li><li><strong>Wolverine PS5 Pro Battle Yellow console covers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li><li><strong>Wolverine PS5 Pro Adamantium console covers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li></ul><div class="product"><a data-dimension112="937367bc-9b28-11f1-9f02-11b91a4c4ed5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£569" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" 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:88.25%;"><img id="LDG8s4CZ5C7fZxW2AG9QW3" name="wolverine-ps5-yellow-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LDG8s4CZ5C7fZxW2AG9QW3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1412" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow" data-dimension112="937367bc-9b28-11f1-9f02-11b91a4c4ed5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£569">(Wolverine Battle Yellow): £569</a></strong><br>The PS5 Wolverine Digital Edition Bundle includes the base PS5 Slim with a very slick Mutant-themed design, a matching DualSense controller, and a digital copy of the Marvel's Wolverine game with a couple of extra DLC skins. <strong>Additional retailers</strong>: <a href="https://direct.playstation.com/en-gb/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow">£569 @ PS Direct</a> | <a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/games/marvels-wolverine/playstation-5-digital-edition-slim-wolverine-limited-edt-bundle/p/264695" target="_blank" rel="nofollow">£569 @ Smyths</a> | <a href="https://www.very.co.uk/playstation-5-playstationreg5-digital-edition-marvels-wolverine-battle-yellow-limited-edition-bundle-825gb/1601288149.prd" target="_blank" rel="nofollow">£569 @ Very</a><a class="view-deal button" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow" data-dimension112="937367bc-9b28-11f1-9f02-11b91a4c4ed5" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£569">View Deal</a></p></div><div class="product"><a data-dimension112="937368b6-9b28-11f1-a254-51051ea66241" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£74" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" 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:63.44%;"><img id="t6pRnHE25F8YwaQQaDr8U3" name="wolverine-ds5-yellow-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/t6pRnHE25F8YwaQQaDr8U3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1015" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow" data-dimension112="937368b6-9b28-11f1-a254-51051ea66241" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£74">(Wolverine Battle Yellow): £74</a></strong><br>The Wolverine Battle Yellow controller gives the DualSense a design that combines the hero's classic color with scratch marks that could only have been made by his iconic claws. It'll retail for £74 in the U.K.<br><strong>Additional retailers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a> | <a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/games/marvels-wolverine/playstation-5-dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition/p/264704" target="_blank" rel="nofollow">£74 @ Smyths</a><a class="view-deal button" href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow" data-dimension112="937368b6-9b28-11f1-a254-51051ea66241" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="93736848-9b28-11f1-9945-e3537bdd14f4" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£74" href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" 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:63.44%;"><img id="JmTPEnpSuC9uTQ6cijmCa3" name="wolverine-ds5-silver-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JmTPEnpSuC9uTQ6cijmCa3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1015" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="93736848-9b28-11f1-9945-e3537bdd14f4" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£74">(Wolverine Adamantium): £74</a></strong><br>The Wolverine Adamantium DualSense is exclusive to PlayStation Direct, and I expect it'll be one of the first items to sell out during this pre-order event.<a class="view-deal button" href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow" data-dimension112="93736848-9b28-11f1-9945-e3537bdd14f4" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£74">View Deal</a></p></div><div class="product"><a data-dimension112="9373691a-9b28-11f1-b4e0-f32b30939b1d" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64" href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" 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:98.56%;"><img id="foXNtT5qZwXeAdw9S5GXS3" name="wolverine-ps5-disc-yellow-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/foXNtT5qZwXeAdw9S5GXS3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1577" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="9373691a-9b28-11f1-b4e0-f32b30939b1d" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64">(Wolverine Battle Yellow): £64</a></strong><br>If you already own a PS5 Slim console, you can give it the Wolverine look with these limited-edition Console Covers. <a class="view-deal button" href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="9373691a-9b28-11f1-b4e0-f32b30939b1d" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64">View Deal</a></p></div><div class="product"><a data-dimension112="9373697e-9b28-11f1-9f5e-d1ea5daaf494" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64" href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" 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:98.56%;"><img id="aHhTmzYbSqhdJsifUF9XY3" name="wolverine-ps5-pro-yellow-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aHhTmzYbSqhdJsifUF9XY3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1577" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="9373697e-9b28-11f1-9f5e-d1ea5daaf494" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64">(Wolverine Battle Yellow): £64</a></strong><br>It's the same deal if you already own a PS5 Pro, you don't have to buy a whole new console to get the Wolverine look; just pick up these limited-edition console covers. These covers went up for pre-order at 10 a.m. BST and sold out in about 30 minutes. I'm watching for a restock now. <a class="view-deal button" href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow" data-dimension112="9373697e-9b28-11f1-9f5e-d1ea5daaf494" data-action="Deal Block" data-label="(Wolverine Battle Yellow)" data-dimension48="(Wolverine Battle Yellow)" data-dimension25="£64">View Deal</a></p></div><div class="product"><a data-dimension112="937369d8-9b28-11f1-bf70-d337e88afed1" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£64" href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" 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:98.56%;"><img id="ZF5udBTuTQZ9YQgQ3BpeQ3" name="wolverine-ps5-pro-silver-le-image-block-01-en-19jun26" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZF5udBTuTQZ9YQgQ3BpeQ3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1577" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow" data-dimension112="937369d8-9b28-11f1-bf70-d337e88afed1" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£64">(Wolverine Adamantium): £64</a></strong><br>Once again, the Adamantium look is exclusive to PlayStation Direct in the U.K. These console covers are further limited to the PS5 Pro; there's no PS5 Slim option. These covers went up for pre-order at 10 a.m. BST and sold out in about 30 minutes. I'm watching for a restock now. <a class="view-deal button" href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow" data-dimension112="937369d8-9b28-11f1-bf70-d337e88afed1" data-action="Deal Block" data-label="(Wolverine Adamantium)" data-dimension48="(Wolverine Adamantium)" data-dimension25="£64">View Deal</a></p></div><h3 class="article-body__section" id="section-live-updates"><span>Live updates</span></h3></div><div class="live-content"><time datetime="2026-08-19T07:35:49+00:00">August 19, 2026 – 3:35 AM</time><h2 id="welcome-3">Welcome!</h2><p>Good morning! Welcome to Tom's Guide's live coverage of today's Marvel's Wolverine PS5 console and controllers pre-orders, there's plenty to cover ahead of the first stock appearing, so let's not waste time, and dive into what you need to know.</p></div><div class="live-content"><time datetime="2026-08-19T07:41:56+00:00">August 19, 2026 – 3:41 AM</time><h2 id="here-s-what-you-can-pre-order-today">Here's what you can pre-order today!</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/9KDStKJtMZY" allowfullscreen></iframe></div></div><p>So, if you're coming into this pre-order event wondering what will actually be available today, you can get a good look at the full range in the above trailer. But if you prefer to read rather than watch, here's the full Marvel's Wolverine limited edition range that will be available to pre-order today: </p><ul><li>PlayStation 5 Digital Edition – Marvel’s Wolverine Battle Yellow Limited Edition Bundle ($649.99 / £569.99)</li><li>DualSense Wireless Controller – Marvel’s Wolverine Battle Yellow Limited Edition ($84.99 / £74.99)</li><li>DualSense Wireless Controller – Marvel’s Wolverine Adamantium Limited Edition (84.99 / £74.99 GBP)</li><li>PlayStation 5 Console Covers – Battle Yellow Limited Edition ($74.99 / £64.99)</li><li>PlayStation 5 Pro Console Covers – Marvel’s Wolverine Battle Yellow Limited Edition ($74.99 / £64.99)</li><li>PlayStation 5 Pro Console Covers –Marvel’s Wolverine Adamantium Limited Edition ($74.99 / £64.99)</li></ul></div><div class="live-content"><time datetime="2026-08-19T07:44:50+00:00">August 19, 2026 – 3:44 AM</time><h2 id="watch-the-latest-marvel-s-wolverine-trailer-while-you-wait">Watch the latest Marvel's Wolverine trailer while you wait!</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/3Z42tBfBLJY" allowfullscreen></iframe></div></div><p>Today's pre-order event hasn't started yet, so why not get in the mood by watching the latest trailer for Marvel's Wolverine which arrives exclusively on PS5 on September 15.  </p></div><div class="live-content"><time datetime="2026-08-19T07:58:09+00:00">August 19, 2026 – 3:58 AM</time><h2 id="playstation-direct-is-the-only-place-to-get-the-full-range">PlayStation Direct is the only place to get the full range!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2s7pYFzTXPQbkDmreoQvoL" name="wolverine-ps5-promo-image" alt="Marvel's Wolverine screenshot showing Logan attacking an enemy" src="https://cdn.mos.cms.futurecdn.net/2s7pYFzTXPQbkDmreoQvoL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Insomniac Games / Sony Interactive Entertainment)</span></figcaption></figure><p>PlayStation has been increasingly eager to point shoppers towards it's own online retailer, PlayStation Direct. During previous limited edition drops, we've seen PS Direct take pre-orders first, or even offer exclusive items, and that's the case today. </p><p>The PS5 Digital Edition Bundle and PS5 DualSense Controller (Battle Yellow) will be stocked by PS Direct and "additional retailers," but the <strong>Adamantium DualSense Controller</strong> and <strong>Wolverine-themed PS5 Console Covers</strong>, are <strong>exclusive to PS Direct</strong>.</p></div><div class="live-content"><time datetime="2026-08-19T08:06:43+00:00">August 19, 2026 – 4:06 AM</time><h2 id="uk-stock-has-appeared-a-whole-hour-early">UK stock has appeared a whole hour early!</h2><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.currys.co.uk/products/playstation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow"><strong>£569 @ Currys</strong></a><strong></strong></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li></ul><p>Whelp, our first sighting of stock has arrived, and it's a whole hour earlier than the scheduled time of 10 a.m. BST in the U.K. Retailer Currys has broken rank and now has the PS5 bundle and Battle Yellow controller to pre-order. Go secure yours now!</p></div><div class="live-content"><time datetime="2026-08-19T08:18:28+00:00">August 19, 2026 – 4:18 AM</time><h2 id="currys-stock-appears-to-be-holding-for-now">Currys stock appears to be holding (for now)!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LgcgRcEBiRA8iH355bvuVL" name="wolverine-ps5-currys-listing-page" alt="Currys listing page for the limited edition Wolverine PS5 console bundle" src="https://cdn.mos.cms.futurecdn.net/LgcgRcEBiRA8iH355bvuVL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Currys)</span></figcaption></figure><p>If you're just joining us, U.K. pre-orders were supposed to kick off at 10 a.m. BST, but retailer Currys decided to go a little early, and already is taking pre-orders of the PS5 bundle and the Battle Yellow controller. Both appear to still be in stock now!</p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.currys.co.uk/products/playstation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow"><strong>£569 @ Currys</strong></a><strong></strong></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T08:29:29+00:00">August 19, 2026 – 4:29 AM</time><h2 id="i-ve-locked-in-my-dualsense-pre-order-have-you">I've locked in my DualSense pre-order, have you?</h2><p>Yes, I don't <em>need </em>another DualSense controller (I already have three...), but that Wolverine Battle Yellow pad is just too pretty to ignore. Thanks to Currys dropping early, I've got my pre-order locked. Let me know in the comments if you've secured either the limited-edition controller or PS5 console bundle. Or are you waiting until PS Direct drops the exclusive Adamantium controller and the PS5 console covers? </p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.currys.co.uk/products/playstation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow"><strong>£569 @ Currys</strong></a><strong></strong></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.currys.co.uk/products/playstation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow"><strong>£74 @ Currys</strong></a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T08:37:42+00:00">August 19, 2026 – 4:37 AM</time><h2 id="us-readers-your-time-will-come">US readers, your time will come!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MWngwoh4ZhTfipjscrfsM9" name="Wolverine LIST" alt="PS5 console Wolverine edition with a DualSense controller on a yellow background" src="https://cdn.mos.cms.futurecdn.net/MWngwoh4ZhTfipjscrfsM9-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>To any readers in the U.S. following along right now, it's expected that stock will become available around 10 a.m. ET at PS Direct and select retailers. So you've got plenty of time left until you need to be ready to secure your pre-order. </p><p>For the next few hours, I'll be focusing on U.K. pre-orders, which technically begin in 30 minutes (but, as noted below, one retailer has set pre-orders live early). Once we're through the U.K. drop, I'll turn attention Stateside. Stay tuned for updates...</p></div><div class="live-content"><time datetime="2026-08-19T08:50:06+00:00">August 19, 2026 – 4:50 AM</time><h2 id="10-minutes-until-uk-pre-orders-are-live">10 minutes until UK pre-orders are live!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XivuTPH5BS5QKAjYARbWE" name="wolverine-ps5-limited-edition-console" alt="Wolverine PS5 limited-edition console" src="https://cdn.mos.cms.futurecdn.net/8XivuTPH5BS5QKAjYARbWE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>There's just 10 minutes until the pre-order floodgates open in the U.K. </p><p>Of course, you can already secure the limited-edition PS5 console bundle and the Battle Yellow DualSense thanks to Currys. But if you're waiting for PS Direct (or an alternative retailer) then the countdown is on. Remember, the only place to secure the Adamantium DualSense and the Wolverine-themed PS5 Console Covers is PS Direct, so that'll be the retailer to check if you're looking to grab these items!</p></div><div class="live-content"><time datetime="2026-08-19T09:00:13+00:00">August 19, 2026 – 5:00 AM</time><h2 id="ps-direct-has-the-adamantium-controller-up-for-grabs">PS Direct has the Adamantium controller up for grabs!</h2><p>It's go time, the exclusive Adamantium DualSense is now available for pre-order at PS Direct in the U.K. </p><ul><li><strong>Wolverine Adamantium PS5 DualSense: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T09:04:21+00:00">August 19, 2026 – 5:04 AM</time><h2 id="ps5-slim-console-covers-are-live-now">PS5 Slim Console Covers are live now!</h2><p>PS Direct in the U.K. is now taking pre-orders of the exclusive Wolverine Battle Yellow PS5 Slim Console Covers! </p><ul><li>PS5 Slim Console Covers (Wolverine Battle Yellow): <a href="https://direct.playstation.com/en-gb/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T09:12:58+00:00">August 19, 2026 – 5:12 AM</time><h2 id="here-s-the-uk-pre-order-links-you-need">Here's the UK pre-order links you need!</h2><p>So the state of play in the U.K. right now is that PS Direct, Currys and Smyths Toys have all opened up pre-order. Got some fresh links for you below. I'm still looking for signs of the PS5 Pro Console Covers which are only available on PS Direct, but don't seem to have gone live yet. But if you're after a controller or bundle, get 'em!  </p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1424788826712694538&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow">£569 @ Currys</a></li><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://direct.playstation.com/en-gb/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow">£569 @ PS Direct</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1376858729709180831&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>Wolverine Adamantium DualSense: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-2366769774556268323/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fdualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>Wolverine PS5 Slim Battle Yellow console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-1197910723687512489/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T09:16:22+00:00">August 19, 2026 – 5:16 AM</time><h2 id="finally-we-have-ps5-pro-console-covers">Finally, we have PS5 Pro console covers!</h2><p>Just as I was wondering where the PS5 Pro console covers were, they appear on PS Direct, these won't be available at other retailers, get them locked in at PlayStation's online retailer now! </p><ul><li><strong>Wolverine PS5 Pro Battle Yellow console covers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a></li><li><strong>Wolverine PS5 Pro Adamantium console covers: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a> </li></ul></div><div class="live-content"><time datetime="2026-08-19T09:31:58+00:00">August 19, 2026 – 5:31 AM</time><h2 id="plenty-of-options-for-the-wolverine-ps5-bundle">Plenty of options for the Wolverine PS5 bundle</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XivuTPH5BS5QKAjYARbWE" name="wolverine-ps5-limited-edition-console" alt="Wolverine PS5 limited-edition console" src="https://cdn.mos.cms.futurecdn.net/8XivuTPH5BS5QKAjYARbWE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>UK pre-orders are in full swing, and if you're picking up a PS5 ahead of Wolverine, you've got several retailer options for the Battle Yellow bundle. This package includes a PS5 Slim Digital Edition with a Wolverine-themed design, a matching DualSense controller and a (digital) copy of the Marvel's Wolverine game. It's everything you need to get gaming on PS5 this winter!</p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1085306643236310368&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow">£569 @ Currys</a></li><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://direct.playstation.com/en-gb/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow">£569 @ PS Direct</a></li><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.very.co.uk/playstation-5-playstationreg5-digital-edition-marvels-wolverine-battle-yellow-limited-edition-bundle-825gb/1601288149.prd" target="_blank" rel="nofollow">£569 @ Very</a></li><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/games/marvels-wolverine/playstation-5-digital-edition-slim-wolverine-limited-edt-bundle/p/264695" target="_blank" rel="nofollow">£569 @ Smyths</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T09:41:49+00:00">August 19, 2026 – 5:41 AM</time><h2 id="ps5-pro-plates-are-the-first-to-sell-out">PS5 Pro plates are the first to sell out</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="upjeCpwhK49bsZDvT7G9fW" name="wolverine-ps5-pro-covers-sold-out-ps-direct" alt="PS Direct listing page for Wolverine PS5 Pro Console Covers" src="https://cdn.mos.cms.futurecdn.net/upjeCpwhK49bsZDvT7G9fW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I always suspected it would be the PS Direct exclusive items that would sell out first, so it's no surprise to see the PS5 Pro Console Covers with the dreaded "currently unavailable" notification. You can still grab the Battle Yellow plates for the standard PS5 Slim, and the Adamantium DualSense (also exclusive to PS Direct) remains in stock, for now at least. </p><p>But take this as your warning sign, if you're eyeing up something in this limited-edition range, it might be worth locking in your pre-order now (you could always cancel if you change your mind). In the meantime, I'll keep checking for signs of a restock on the PS5 Pro console covers.</p><ul><li><strong>Wolverine PS5 Slim Battle Yellow console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-1422279364982660599/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a></li><li><strong>Wolverine PS5 Pro Battle Yellow console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-5672697732248293255/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fplaystation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li><li><strong>Wolverine PS5 Pro Adamantium console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-1268233240000381896/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fplaystation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow">check stock @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T09:54:03+00:00">August 19, 2026 – 5:54 AM</time><h2 id="battle-yellow-dualsense-sells-out-at-ps-direct-but-you-can-still-get-one-elsewhere">Battle Yellow DualSense sells out at PS Direct, but you can still get one elsewhere! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6rLwnVPwjVWZo3aVyL8m6B" name="wolverine-dualsense-ps-direct-yellow" alt="PS Direct listing page for the Battle Yellow DualSense controller" src="https://cdn.mos.cms.futurecdn.net/6rLwnVPwjVWZo3aVyL8m6B-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Okay, so this one does surprise me. It appears the DualSense (Wolverine Battle Yellow) has sold out on PS Direct <em>before</em> the exclusive Adamantium variant. Clearly, gamers prefer that iconic Wolverine yellow to a metallic shade of grey. </p><p>Fortunately, while PS Direct is currently showing "unavailable," you can still grab a controller at Currys and Smyths. My advice is to lock in your pre-order ASAP in case these sell out soon.</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-9945375327193679394&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-9945375327193679394&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Smyths</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T10:16:11+00:00">August 19, 2026 – 6:16 AM</time><h2 id="uk-pre-order-stock-seems-steady-at-present">UK pre-order stock seems steady at present!</h2><p>The PS5 Pro console covers have sold out, but otherwise, you can still pick up the rest of the limited-edition Wolverine range in the U.K. That includes the Battle Yellow PS5 console bundle, the Battle Yellow DualSense, and matching PS5 Slim console covers. Here's the links you need. These could sell out at any moment, but for now they're holding, so take your pick!</p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1424788826712694538&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow">£569 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1376858729709180831&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li><li><strong>Wolverine Adamantium DualSense: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-2366769774556268323/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fdualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>Wolverine PS5 Slim Battle Yellow console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-1197910723687512489/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T10:46:48+00:00">August 19, 2026 – 6:46 AM</time><h2 id="which-dualsense-do-you-prefer">Which DualSense do you prefer? </h2><p>Help us settle an office debate that's raging this morning, which limited-edition Wolverine DualSense controller design do you prefer? The Battle Yellow or Adamantium. Personally, I'm all about the yellow, but I'm curious to hear from you, let me know in the poll down below...</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-ODqyjX"></div>                            </div>                            <script src="https://kwizly.com/embed/ODqyjX.js" async></script></div><div class="live-content"><time datetime="2026-08-19T11:23:15+00:00">August 19, 2026 – 7:23 AM</time><h2 id="nothing-new-to-report-in-the-uk">Nothing new to report in the UK!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="brkRET2rLiiqB38ggQjQsW" name="wolverine-2025-state-of-play-ps5-game" alt="Marvel's Wolverine image showing Logan" src="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I'll be turning my attention shortly to the U.S. as we're now less than three hours away from the pre-orders going live for gamers in North America, but just to note for any U.K. Wolverine fans, the situation remains unchanged. Aside from the PS5 Pro console covers, which sold out in roughly 30 minutes, everything else is in stock at retailers like Currys, PS Direct and Smyths. Curiously the likes of Amazon and Argos haven't joined in the action yet, so I'll keep an eye out for those, just in case you're holding off locking in your pre-order(s) until those listings appear.</p><ul><li><strong>PS5 Wolverine Battle Yellow bundle: </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1424788826712694538&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-playstation-5-digital-wolverine-edition-10307230.html" target="_blank" rel="nofollow">£569 @ Currys</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1376858729709180831&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li><li><strong>Wolverine Adamantium DualSense: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-2366769774556268323/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fdualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>Wolverine PS5 Slim Battle Yellow console covers: </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-1197910723687512489/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">£64 @ PS Direct</a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T11:53:06+00:00">August 19, 2026 – 7:53 AM</time><h2 id="playstation-direct-exclusive-controller-still-in-stock">PlayStation Direct exclusive controller still in stock!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TRJy4KBKfTkV8NE2E2Be7U" name="ps-direct-wolverine-dualsense-adamantium" alt="PlayStation Direct listing page for the DualSense Adamantium controller" src="https://cdn.mos.cms.futurecdn.net/TRJy4KBKfTkV8NE2E2Be7U-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>As the U.S. starts to wake up, the big surprise this morning during the U.K. pre-order drop, which might give us some clues as to how the U.S. one will go, is that the limited-edition DualSense controller in Adamantium hasn't sold out. This item is exclusive to PS Direct, and I'd assumed this extra level of <em>limited-ness </em>(that's not a word), would see it sell out very quickly. </p><p>However, as our poll below shows, 77% of responders prefer the Battle Yellow, so maybe there just isn't all that much interest in the Adamantium variant? Perhaps the grey hue is just a bit too bland next to the striking very Wolverine-coded yellow. Time will tell if it'll be the same story in the U.S. But for now, if you're in the U.K., you can still pre-order both DualSenses.</p><ul><li><strong>PS5 DualSense Controller (Adamantium): </strong><a href="https://www.prf.hn/click/camref:1011lSfdj/pubref:tomsguide-gb-2366769774556268323/destination:https%3A%2F%2Fdirect.playstation.com%2Fen-gb%2Fbuy-accessories%2Fdualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">£74 @ PS Direct</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.awin1.com/awclick.php?awinmid=1599&awinaffid=103504&clickref=tomsguide-gb-1376858729709180831&p=https%3A%2F%2Fwww.currys.co.uk%2Fproducts%2Fplaystation-ps5-dualsense-wireless-controller-wolverine-edition-10307231.html" target="_blank" rel="nofollow">£74 @ Currys</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T12:30:35+00:00">August 19, 2026 – 8:30 AM</time><h2 id="90-minutes-until-u-s-pre-orders">90 minutes until U.S. pre-orders! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="MWngwoh4ZhTfipjscrfsM9" name="Wolverine LIST" alt="PS5 console Wolverine edition with a DualSense controller on a yellow background" src="https://cdn.mos.cms.futurecdn.net/MWngwoh4ZhTfipjscrfsM9-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>It's just hit 8:30 a.m. ET, so we're 90 minutes away from the PlayStation Wolverine range pre-orders going live in the U.S. Now is the time to make sure you've got everything you need (check your details are correct on your preferred retailer!). However, in the U.K. we saw one retailer break rank and go a full hour early, so maybe a U.S. retailer will do the same. I'm keeping an eye on retailers right now, and will alert you if any pre-orders drop a little early. </p></div><div class="live-content"><time datetime="2026-08-19T12:55:20+00:00">August 19, 2026 – 8:55 AM</time><h2 id="here-s-the-full-wolverine-range-and-confirmed-pricing">Here's the full Wolverine range and confirmed pricing!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XivuTPH5BS5QKAjYARbWE" name="wolverine-ps5-limited-edition-console" alt="Wolverine PS5 limited-edition console" src="https://cdn.mos.cms.futurecdn.net/8XivuTPH5BS5QKAjYARbWE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>If you're coming into this cold and wondering what all the fuss is about, here's the scoop. PlayStation is releasing a limited-edition Wolverine range to mark the launch of its new PS5 exclusive, Marvel's Wolverine. Pre-orders go live today (Aug. 19) at 10 a.m. ET, and there will be six items: a PS5 console bundle, two DualSense controllers and three PS5 console covers. </p><p><strong>The items in bold below are exclusive to PlayStation Direct</strong>, while the PS5 console bundle and Battle Yellow controller will be available elsewhere. In the U.K., the PS5 Pro console covers sold out in 30 minutes, but the other four items are still in stock even almost four hours later.</p><ul><li>PlayStation 5 Digital Edition – Marvel’s Wolverine Battle Yellow Limited Edition Bundle ($649.99)</li><li>DualSense Wireless Controller – Marvel’s Wolverine Battle Yellow Limited Edition ($84.99)</li><li><strong>DualSense Wireless Controller – Marvel’s Wolverine Adamantium Limited Edition ($84.99)</strong></li><li><strong>PlayStation 5 Console Covers – Battle Yellow Limited Edition ($74.99)</strong></li><li><strong>PlayStation 5 Pro Console Covers – Marvel’s Wolverine Battle Yellow Limited Edition ($74.99)</strong></li><li><strong>PlayStation 5 Pro Console Covers –Marvel’s Wolverine Adamantium Limited Edition ($74.99)</strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:11:28+00:00">August 19, 2026 – 9:11 AM</time><h2 id="target-has-gone-live-with-the-ps5-bundle">Target has gone live with the PS5 bundle</h2><p>Looks like a U.S. retailer has gone earlier, because Target's listing page for the PS5 Slim Wolverine bundle is live and the "preorder" button is working and I can add to my cart! </p><ul><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow">$649 @ Target</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:17:51+00:00">August 19, 2026 – 9:17 AM</time><h2 id="and-the-dualsense-is-up-at-target-too">And the DualSense is up at Target, too</h2><p>Target has also dropped the Battle Yellow controller early, both items are available to pre-order now! </p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow"><strong>$84 @ Target</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow"><strong>$649 @ Target</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:22:58+00:00">August 19, 2026 – 9:22 AM</time><h2 id="target-is-taking-pre-orders-now">Target is taking pre-orders NOW!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uHuSCmTkFw3GzRPxhNLAwk" name="target-wolverine-limited-edition-cart" alt="Target cart with the Wolverine PS5 bundle and limited edition Battle Yellow DualSense controller" src="https://cdn.mos.cms.futurecdn.net/uHuSCmTkFw3GzRPxhNLAwk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Target)</span></figcaption></figure><p>Target clearly didn't want to wait until 10 a.m. ET, as you can see above I'm able to add both items to my cart now. So if you want to get ahead of the game, secure your pre-orders now!</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow"><strong>$84 @ Target</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow"><strong>$649 @ Target</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:35:59+00:00">August 19, 2026 – 9:35 AM</time><h2 id="ps-direct-listing-pages-have-appeared-but-no-pre-orders-yet">PS Direct listing pages have appeared, but no pre-orders yet</h2><p>PS Direct is getting ready to drop pre-orders at 10 a.m. ET, I've just spotted listing pages for the two DualSense controllers, including the PS Direct exclusive Adamantium variant. These are the links you'll need in just under 25 minutes. Or you can head to Target to secure the Battle Yellow controller already. </p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">$84 @ PS Direct</a></li><li><strong>PS5 DualSense Controller (Wolverine Adamantium): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">$84 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:39:40+00:00">August 19, 2026 – 9:39 AM</time><h2 id="another-ps-direct-listing-page-has-appeared">Another PS Direct listing page has appeared...</h2><p>I've spotted the listing page for the PS5 Slim Console Covers (Battle Yellow) over on PS Direct. This will be the only place to grab these plates, so make sure to use the link below so you're ready at 10 a.m. I'm closely watching out for the PS5 Pro Console Covers listing pages next!</p><ul><li><strong>PS5 Slim Console Covers (Wolverine Battle Yellow): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">$74 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T13:50:08+00:00">August 19, 2026 – 9:50 AM</time><h2 id="10-minutes-until-the-pre-order-floodgates-open">10 minutes until the pre-order floodgates open!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="brkRET2rLiiqB38ggQjQsW" name="wolverine-2025-state-of-play-ps5-game" alt="Marvel's Wolverine image showing Logan" src="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>The Wolverine limited-edition range will be up for pre-order from 10 a.m. ET. If the U.K. pre-order period earlier today was any indication, it'll be the PS5 Pro Console Covers that sell out first, so if you want to bag those, get ready; you'll need to be quick. However, if you're after the PS5 Digital Edition bundle or the Battle Yellow controller, you don't need to wait. Target has already opened its pre-orders, and you can secure both items at the retailer right now!</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow"><strong>$84 @ Target</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.target.com/p/playstation-5-digital-console-marvel-39-s-wolverine-limited-edition-bundle/-/A-1013109923" target="_blank" rel="nofollow"><strong>$649 @ Target</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:02:06+00:00">August 19, 2026 – 10:02 AM</time><h2 id="ps-direct-pre-orders-are-live-including-retailer-exclusive-items">PS Direct pre-orders are live, including retailer exclusive items!</h2><p>It's 10 a.m. ET, get over to PS Direct, and secure the Wolverine items you've been waiting for (if you didn't grab anything from Target already). I'm keeping any eye out for stock levels at PS Direct, and for any other retailers that open up pre-orders now!</p><ul><li><strong>PS5 Slim Console Covers (Wolverine Battle Yellow): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/ps5-console-covers-model-group-slim-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">$74 @ PS Direct</a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-battle-yellow-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">$84 @ PS Direct</a></li><li><strong>PS5 DualSense Controller (Wolverine Adamantium): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow">$84 @ PS Direct</a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="  https://direct.playstation.com/en-us/buy-consoles/playstation5-digital-edition-console-825-gb-marvels-wolverine-battle-yellow-limited-edition-bundle" target="_blank" rel="nofollow">$649 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:08:55+00:00">August 19, 2026 – 10:08 AM</time><h2 id="these-ps5-pro-plates-will-be-popular">These PS5 Pro plates will be popular! </h2><p>Here's the links you'll need to pre-order the PS Direct exclusive Wolverine Console Covers, these sold out in 30 minutes in the U.K. so I'm expecting them to go very quickly in the U.S.</p><ul><li><strong>PS5 Pro Console Covers (Wolverine Battle Yellow):</strong> <a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-battle-yellow-limited-edition" target="_blank" rel="nofollow">$74 @ PS Direct</a></li><li><strong>PS5 Pro Console Covers (Wolverine Adamantium):</strong> <a href="https://direct.playstation.com/en-us/buy-accessories/playstation5-pro-console-covers-marvels-wolverine-adamantium-limited-edition" target="_blank" rel="nofollow">$74 @ PS Direct</a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:19:01+00:00">August 19, 2026 – 10:19 AM</time><h2 id="pre-orders-now-live-at-best-buy">Pre-orders now live at Best Buy!</h2><p>Best Buy is the next retailer on the scene, now taking pre-orders for the PS5 Slim console bundle and the Battle Yellow controller (remember, the rest of the items are exclusive to PS Direct)!</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><strong>$84 @ Best Buy</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><strong>$649 @ Best Buy</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:26:11+00:00">August 19, 2026 – 10:26 AM</time><h2 id="welcome-to-the-wolverine-party-gamestop">Welcome to the Wolverine party, GameStop</h2><p>Target, PS Direct, Best Buy and now GameStop are all taking pre-orders, so if you've been holding out for the gaming dedicated retailer, wait no longer, go secure your items!</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.gamestop.com/consoles-hardware/playstation-5/consoles/products/sony-playstation-5-digital-edition-console---marvels-wolverine-battle-yellow-limited-edition-bundle/450550.html" target="_blank" rel="nofollow"><strong>$649 @ GameStop</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:32:45+00:00">August 19, 2026 – 10:32 AM</time><h2 id="walmart-pre-orders-are-now-live">Walmart pre-orders are now live!</h2><p>Everybody is getting in on the action (apart from Amazon?), because now Walmart is taking pre-orders for the PS5 console bundle and the Battle Yellow console, if this is your retailer of choice, go lock in your items!</p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a></li><li><strong>PS5 Wolverine Battle Yellow bundle:</strong> <a href="https://www.walmart.com/ip/PlayStation-5-Digital-Edition-nbsp-Marvel-s-Wolverine-nbsp-Battle-Yellow-nbsp-Limited-Edition-nbsp-Bundle/20881956449" target="_blank" rel="nofollow"><strong>$649 @ Walmart</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T14:49:34+00:00">August 19, 2026 – 10:49 AM</time><h2 id="ps5-pro-console-covers-are-sold-out-in-the-us">PS5 Pro console covers are sold out in the US</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kPSgUjZygnGfZTMcTJBBtV" name="ps-direct-wolverine-console-covers-sold-out" alt="PlayStation Direct listing page for the Wolverine Console Covers showing a sold out message" src="https://cdn.mos.cms.futurecdn.net/kPSgUjZygnGfZTMcTJBBtV-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Well, I thought this was coming...</p><p>During the U.K. pre-order drop earlier today, it was the PS5 Pro Console Covers that sold out in about 30 minutes, and it appears the same has happened in the U.S. I'm seeing the dreaded  "currently unavailable" notification on both sets of the console covers on PS Direct, both Battle Yellow and Adamantium are sold out. These are exclusive to PS Direct, so I can't point you to an alternative retailer with pre-orders open. However, I am keeping an eye out for restocks!</p></div><div class="live-content"><time datetime="2026-08-19T15:07:34+00:00">August 19, 2026 – 11:07 AM</time><h2 id="battle-yellow-dualsense-sells-out-at-ps-direct-but-don-t-worry">Battle Yellow DualSense sells out at PS Direct, but don't worry</h2><p>Another spooky repeat of the U.K. pre-order situation, PS Direct U.S. just sold out of the DualSense Battle Yellow variant. But fear not, you haven't missed the boat, there's plenty of other places to grab one like Best Buy, Walmart, Target and GameStop. Just use the links below. Meanwhile, the PS Direct exclusive Adamantium DualSense remains in stock (for now) </p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><strong>$84 @ Best Buy</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.target.com/p/playstation-5-dualsense-controller-marvel-39-s-wolverine-le/-/A-1011953866" target="_blank" rel="nofollow"><strong>$84 @ Target</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Adamantium): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PS Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T15:39:32+00:00">August 19, 2026 – 11:39 AM</time><h2 id="console-pre-orders-are-still-live-at-most-retailers">Console pre-orders are still live at most retailers</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XivuTPH5BS5QKAjYARbWE" name="wolverine-ps5-limited-edition-console" alt="Wolverine PS5 limited-edition console" src="https://cdn.mos.cms.futurecdn.net/8XivuTPH5BS5QKAjYARbWE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>While the special edition DualSense and faceplates might be selling out, pre-orders for the console itself are still readily available. The recent PS5 price increase may be causing folks to hesitate to buy this special edition console. While price hikes certainly aren't ideal, they could be inadvertently making it possible to actually get one of these Wolverine-themed PS5s.</p><p>Though you probably don't want to wait too long to grab one of these consoles, there isn't the same sense of urgency as there was during the PS5's initial launch. However, if you see pre-orders go live again for the controller or faceplates, act fast, as those are going quickly!</p></div><div class="live-content"><time datetime="2026-08-19T16:06:13+00:00">August 19, 2026 – 12:06 PM</time><h2 id="wolverine-the-console-isn-t-on-amazon-but-wolverine-the-little-guy-is">Wolverine the console isn't on Amazon, but Wolverine the little guy is</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="aBVopK42n7W5AZDGpFu6ub" name="wolverine-controller-holder" alt="Wolverine-themed controller holder on a desk" src="https://cdn.mos.cms.futurecdn.net/aBVopK42n7W5AZDGpFu6ub-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Cableguys)</span></figcaption></figure><p>For now, save a the Adamantium silver plates, most every retailer has pre-order options open. However, Amazon has yet to open any pages offering preorders. </p><p>That said, you could pick up this <a href="https://www.amazon.com/Cable-Guys-Wolverine-Xbox-360/dp/B07QTVFNVS/" target="_blank">Wolverine Controller Holder & Phone Stand </a>for only $33. It's classic little guy stepping on destroyed Sentinel parts in his 90s X-Men outfit. </p></div><div class="live-content"><time datetime="2026-08-19T16:29:45+00:00">August 19, 2026 – 12:29 PM</time><h2 id="amazon-finally-has-the-battle-yellow-dualsense">Amazon finally has the Battle Yellow DualSense</h2><p>It took a while, but finally some signs of life over at Amazon. Still no signs of the PS5 console bundle, but the DualSense in Battle Yellow is now up for pre-order at the world's biggest online retailer. Amazon being a little late to the pre-order party!</p><ul><li><strong>PS5 DualSense Controller (Battle Yellow): </strong><a href="https://www.amazon.com/PlayStation-DualSense%C2%AE-Wireless-Controller-Gaming-Console/dp/B0HF1FBXSL" target="_blank" rel="nofollow"><strong>$84 @ Amazon</strong></a><strong></strong></li></ul></div><div class="live-content"><time datetime="2026-08-19T16:58:08+00:00">August 19, 2026 – 12:58 PM</time><h2 id="stock-sweep-target-out-of-contollers">Stock sweep - Target out of contollers</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1600px;"><p class="vanilla-image-block" style="padding-top:63.44%;"><img id="t6pRnHE25F8YwaQQaDr8U3" name="wolverine-ds5-yellow-le-image-block-01-en-19jun26" alt="DualSense Wireless Controller – Marvel’s Wolverine Battle Yellow Limited Edition" src="https://cdn.mos.cms.futurecdn.net/t6pRnHE25F8YwaQQaDr8U3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1015" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>I've taken a look through the major retailers to see what's available and most everywhere has stock on the consoles and controllers, except Target.</p><p>For those who prefer Target, the battle yellow Wolverine controller is sold out.  You'll need to look elsewhere if you're hunting for that version of the DualSense.</p><p>The PS5 Pro Console covers have been out of stock on PS Direct for an hour or more now.</p><p>Grab the controller here: </p><ul><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-marvels-wolverine-battle-limited-edition-bundle/JXHQ37ZQRV" target="_blank" rel="nofollow"><strong>$84 @ Best Buy</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.walmart.com/ip/Project-Flow/20347523715" target="_blank" rel="nofollow"><strong>$84 @ Walmart</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Battle Yellow): </strong><a href="https://www.gamestop.com/gaming-accessories/controllers/playstation-5/products/sony-dualsense-wireless-controller---marvels-wolverine-battle-yellow-limited-edition/450549.html" target="_blank" rel="nofollow"><strong>$84 @ GameStop</strong></a></li><li><strong>PS5 DualSense Controller (Wolverine Adamantium): </strong><a href="https://direct.playstation.com/en-us/buy-accessories/dualsense-wireless-controller-marvels-wolverine-adamantium-limited-edition-for-ps5-pc-mac-mobile" target="_blank" rel="nofollow"><strong>$84 @ PS Direct</strong></a></li></ul></div><div class="live-content"><time datetime="2026-08-19T17:27:52+00:00">August 19, 2026 – 1:27 PM</time><h2 id="have-you-pre-ordered">Have you pre-ordered?</h2><p>If you pre-ordered the console or controllers I'd love to know what you picked. The yellow looks awesome, but I am leaning toward the adamantium version, I'm a sucker for a nice silver streak.</p><p>Let me know in the comments.</p></div><div class="live-content"><time datetime="2026-08-19T18:20:29+00:00">August 19, 2026 – 2:20 PM</time><h2 id="it-is-expensive">It is 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XivuTPH5BS5QKAjYARbWE" name="wolverine-ps5-limited-edition-console" alt="Wolverine PS5 limited-edition console" src="https://cdn.mos.cms.futurecdn.net/8XivuTPH5BS5QKAjYARbWE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>As a reminder this special edition console will cost you $649. If you want a second controller that adds $84 to the total. </p><p>But of the special edition consoles, this one looks pretty cool.</p></div><div class="live-content"><time datetime="2026-08-19T18:58:51+00:00">August 19, 2026 – 2:58 PM</time><h2 id="where-are-we-after-five-hours-of-tracking">Where are we after five hours of tracking</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="E2FWRC79FFmzmGvZwSRmVn" name="X-Men-1992.jpg" alt="Wolverine in the 1992 series X-Men" src="https://cdn.mos.cms.futurecdn.net/E2FWRC79FFmzmGvZwSRmVn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Alamy)</span></figcaption></figure><p>Pre-orders started going live about five hours ago, and for the most part, if you want Wolverine, you can get the console and controllers. </p><p>To add to the out-of-stock options, <a href="https://www.walmart.com/ip/Project-Flow/20347523715?clickid=RVhXImxrxxyZT1cw3KQmtUkEUkr0cU1xMUyy0s0&irgwc=1&afsrc=1&sourceid=imp_RVhXImxrxxyZT1cw3KQmtUkEUkr0cU1xMUyy0s0&veh=aff&wmlspartner=imp_1943169&affiliates_ad_id=568844&campaign_id=9383&sharedid=tomsguide-us" target="_blank">Walmart no longer appears</a> to have the Battle Yellow controller available for pre-order. That goes along with the Target option as well.</p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Sony is ditching discs as storage prices explode — here's how much it will cost you to download all 37 first-party games to your PS5 in 2026 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>This week, Sony held its Q3 earnings call where the company confirmed that it is "cautiously" moving forward with plans to stop producing physical versions of PlayStation games starting in 2028, CFO Lin Tao said (see Tao's comments in this <a href="https://x.com/ethangach/status/2083096283720356284" target="_blank">video from Kotaku's Ethan Gach</a>).</p><p>“When we think about the future, and we put in a lot of thought and time, and we cautiously considered this, and we came to this conclusion. And we’re going to cautiously move this forward,” Tao said.</p><p>Sony has been receiving near-daily backlash from gamers online; most of the backlash isn't over the medium of discs itself but a perceived lack of ownership since most digital sales are "licenses," not something you actually own. Data from <a href="https://bsky.app/profile/matpiscatella.bsky.social/post/3mrd2dzqyvk2l" target="_blank">Circana analyst Mat Piscatella</a> highlighted that in 2008 over 100 PlayStation games sold more than 100,000 copies. This year, only 7 reached that mark.</p><p>Unfortunately, Sony made this announcement just as prices are <a href="https://www.tomsguide.com/computing/hardware/sk-hynix-warns-2027-will-be-worst-year-for-ram-prices-right-as-a-damning-report-reveals-something-that-will-add-fuel-to-the-price-fixing-lawsuit">skyrocketing for RAM and storage</a>, forcing hikes on <a href="https://www.tomsguide.com/phones/iphones/we-reluctantly-raised-prices-tim-cook-weighs-in-on-hikes-as-apple-reports-usd109-billion-in-revenue">everything from phones to laptops</a> and <a href="https://www.tomsguide.com/entertainment/streaming-devices/some-streaming-sticks-are-doubling-in-price-heres-whats-driving-up-costs">anything that requires memory</a> thanks to AI-driven supply constraints.</p><p>With that in mind, I decided to take a look at how much memory you would need for the 37 first-party games released for the PlayStation 5 since it launched in 2020. </p><p>Here's the full list of the games</p><ul><li><strong>Astro Bot</strong></li><li><strong>Astro’s Playroom</strong></li><li><strong>Days Gone Remastered</strong></li><li><strong>Death Stranding: Director’s Cut</strong></li><li><strong>Death Stranding 2: On the Beach</strong></li><li><strong>Demon’s Souls remake</strong></li><li><strong>Ghost of Tsushima: Director’s Cut</strong></li><li><strong>Ghost of Yōtei</strong></li><li><strong>God of War Ragnarök</strong></li><li><strong>God of War: Sons of Sparta</strong></li><li><strong>Gran Turismo 7</strong></li><li><strong>Helldivers 2</strong></li><li><strong>Horizon Forbidden West</strong></li><li><strong>Horizon Zero Dawn Remastered</strong></li><li><strong>Lego Horizon Adventures</strong></li><li><strong>Lost Soul Aside</strong></li><li><strong>Midnight Murder Club</strong></li><li><strong>MLB The Show 21</strong></li><li><strong>MLB The Show 22</strong></li><li><strong>MLB The Show 23</strong></li><li><strong>MLB The Show 24</strong></li><li><strong>MLB The Show 25</strong></li><li><strong>MLB The Show 26</strong></li><li><strong>Nioh collection (Nioh 1 & 2 Remastered)</strong></li><li><strong>Ratchet & Clank: Rift Apart</strong></li><li><strong>Returnal</strong></li><li><strong>Rise of the Ronin</strong></li><li><strong>Sackboy: A Big Adventure</strong></li><li><strong>Saros</strong></li><li><strong>Spider-Man Remastered</strong></li><li><strong>Spider-Man 2</strong></li><li><strong>Spider-Man: Miles Morales</strong></li><li><strong>Stellar Blade</strong></li><li><strong>The Last of Us Part 1 remake</strong></li><li><strong>The Last of Us Part 2 Remastered</strong></li><li><strong>Uncharted: Legacy of Thieves Collection</strong></li><li><strong>Until Dawn remake</strong></li></ul><p>Using the listed download size from the PlayStation Store, I found that the 37 games totaled 2,989.1 GB, or about 2.99 TB. </p><p>The PS5 comes with 1TB of storage, which you can expand with an m.2 SSD or an external hard drive. To fit all of these games, plus whatever extra space is needed for the operating system and any patches you're going to want, at a minimum, a 4TB hard drive. </p><p>At the time of writing, the officially licensed 4TB WD Black NVMe m.2 SSD that PlayStation recommends<a href="https://www.amazon.com/Western-Digital-Officially-Licensed-Expansion/dp/B0C48HN4Z9/" target="_blank" rel="nofollow"> sells for $789.99 on Amazon</a>. That is $400 more than the same hard drive cost a year ago, and about as much as the PS5 Pro.</p><p>The cheapest 4TB drive, possibly compatible with the PS5, that I could find is a <a href="https://www.bestbuy.com/product/samsung-geek-squad-certified-refurbished-990-pro-4tb-internal-ssd-pcie-gen-4x4-nvme-with-heatsink-for-ps5/JCQ6HW393J" target="_blank" rel="nofollow">refurbished Samsung 990 Pro for $419.99 from Best Buy</a>.</p><p>Unfortunately, those prices aren't likely to get better, as SK Hynix, one of the big three RAM manufacturers alongside Samsung and Micron, recently <a href="https://www.tomsguide.com/computing/hardware/sk-hynix-warns-2027-will-be-worst-year-for-ram-prices-right-as-a-damning-report-reveals-something-that-will-add-fuel-to-the-price-fixing-lawsuit">warned that 2027 will be even worse</a> for RAM prices. And it's unlikely to get better by 2028, when Sony will stop making and selling physical copies of PS5 games.</p><p>Between rising prices and fears over ownership, gamers are stuck in a rough spot for the next few years. And that doesn't even account for the higher price they'll likely have to pay for a PS6 to play games from the next console generation.</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/tvs/theres-no-way-around-it-sony-tvs-are-priced-higher-than-most-of-the-competition-heres-what-sonys-doing-right-what-its-doing-wrong-and-what-needs-to-change-in-2026">Sony TV report card 2026: Is the 'Sony tax' still worth paying?</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/if-playstation-wants-to-succeed-with-all-digital-it-needs-to-follow-the-steam-model-5-ways-it-can-win-over-gamers-like-me">If PlayStation wants to succeed with all-digital, it needs to follow the Steam model — 5 ways it can win over gamers like me</a></li><li><a href="https://www.tomsguide.com/tvs/theres-no-way-around-it-sony-tvs-are-priced-higher-than-most-of-the-competition-heres-what-sonys-doing-right-what-its-doing-wrong-and-what-needs-to-change-in-2026">Sony TV report card 2026: Is the 'Sony tax' still worth paying?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/sony-is-ditching-discs-as-storage-prices-explode-heres-how-much-it-will-cost-you-to-download-all-37-first-party-games-to-your-ps5-in-2026</link>
                                                                            <description>
                            <![CDATA[ Here's how much storage you need to download every first-party PS5 game, and how much that large-capacity M.2 SSD will cost you. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">PgENZJRXYEEpU3HnAst2ZR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/5hFD4w7688Ez8ofbMm7Kd5-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 01 Aug 2026 01:43:09 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/5hFD4w7688Ez8ofbMm7Kd5-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide/Rory Mellon]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PS5 hard drive and PS5 game cases]]></media:description>                                                            <media:text><![CDATA[PS5 hard drive and PS5 game cases]]></media:text>
                                <media:title type="plain"><![CDATA[PS5 hard drive and PS5 game cases]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/5hFD4w7688Ez8ofbMm7Kd5-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This week, Sony held its Q3 earnings call where the company confirmed that it is "cautiously" moving forward with plans to stop producing physical versions of PlayStation games starting in 2028, CFO Lin Tao said (see Tao's comments in this <a href="https://x.com/ethangach/status/2083096283720356284" target="_blank">video from Kotaku's Ethan Gach</a>).</p><p>“When we think about the future, and we put in a lot of thought and time, and we cautiously considered this, and we came to this conclusion. And we’re going to cautiously move this forward,” Tao said.</p><p>Sony has been receiving near-daily backlash from gamers online; most of the backlash isn't over the medium of discs itself but a perceived lack of ownership since most digital sales are "licenses," not something you actually own. Data from <a href="https://bsky.app/profile/matpiscatella.bsky.social/post/3mrd2dzqyvk2l" target="_blank">Circana analyst Mat Piscatella</a> highlighted that in 2008 over 100 PlayStation games sold more than 100,000 copies. This year, only 7 reached that mark.</p><p>Unfortunately, Sony made this announcement just as prices are <a href="https://www.tomsguide.com/computing/hardware/sk-hynix-warns-2027-will-be-worst-year-for-ram-prices-right-as-a-damning-report-reveals-something-that-will-add-fuel-to-the-price-fixing-lawsuit">skyrocketing for RAM and storage</a>, forcing hikes on <a href="https://www.tomsguide.com/phones/iphones/we-reluctantly-raised-prices-tim-cook-weighs-in-on-hikes-as-apple-reports-usd109-billion-in-revenue">everything from phones to laptops</a> and <a href="https://www.tomsguide.com/entertainment/streaming-devices/some-streaming-sticks-are-doubling-in-price-heres-whats-driving-up-costs">anything that requires memory</a> thanks to AI-driven supply constraints.</p><p>With that in mind, I decided to take a look at how much memory you would need for the 37 first-party games released for the PlayStation 5 since it launched in 2020. </p><p>Here's the full list of the games</p><ul><li><strong>Astro Bot</strong></li><li><strong>Astro’s Playroom</strong></li><li><strong>Days Gone Remastered</strong></li><li><strong>Death Stranding: Director’s Cut</strong></li><li><strong>Death Stranding 2: On the Beach</strong></li><li><strong>Demon’s Souls remake</strong></li><li><strong>Ghost of Tsushima: Director’s Cut</strong></li><li><strong>Ghost of Yōtei</strong></li><li><strong>God of War Ragnarök</strong></li><li><strong>God of War: Sons of Sparta</strong></li><li><strong>Gran Turismo 7</strong></li><li><strong>Helldivers 2</strong></li><li><strong>Horizon Forbidden West</strong></li><li><strong>Horizon Zero Dawn Remastered</strong></li><li><strong>Lego Horizon Adventures</strong></li><li><strong>Lost Soul Aside</strong></li><li><strong>Midnight Murder Club</strong></li><li><strong>MLB The Show 21</strong></li><li><strong>MLB The Show 22</strong></li><li><strong>MLB The Show 23</strong></li><li><strong>MLB The Show 24</strong></li><li><strong>MLB The Show 25</strong></li><li><strong>MLB The Show 26</strong></li><li><strong>Nioh collection (Nioh 1 & 2 Remastered)</strong></li><li><strong>Ratchet & Clank: Rift Apart</strong></li><li><strong>Returnal</strong></li><li><strong>Rise of the Ronin</strong></li><li><strong>Sackboy: A Big Adventure</strong></li><li><strong>Saros</strong></li><li><strong>Spider-Man Remastered</strong></li><li><strong>Spider-Man 2</strong></li><li><strong>Spider-Man: Miles Morales</strong></li><li><strong>Stellar Blade</strong></li><li><strong>The Last of Us Part 1 remake</strong></li><li><strong>The Last of Us Part 2 Remastered</strong></li><li><strong>Uncharted: Legacy of Thieves Collection</strong></li><li><strong>Until Dawn remake</strong></li></ul><p>Using the listed download size from the PlayStation Store, I found that the 37 games totaled 2,989.1 GB, or about 2.99 TB. </p><p>The PS5 comes with 1TB of storage, which you can expand with an m.2 SSD or an external hard drive. To fit all of these games, plus whatever extra space is needed for the operating system and any patches you're going to want, at a minimum, a 4TB hard drive. </p><p>At the time of writing, the officially licensed 4TB WD Black NVMe m.2 SSD that PlayStation recommends<a href="https://www.amazon.com/Western-Digital-Officially-Licensed-Expansion/dp/B0C48HN4Z9/" target="_blank" rel="nofollow"> sells for $789.99 on Amazon</a>. That is $400 more than the same hard drive cost a year ago, and about as much as the PS5 Pro.</p><p>The cheapest 4TB drive, possibly compatible with the PS5, that I could find is a <a href="https://www.bestbuy.com/product/samsung-geek-squad-certified-refurbished-990-pro-4tb-internal-ssd-pcie-gen-4x4-nvme-with-heatsink-for-ps5/JCQ6HW393J" target="_blank" rel="nofollow">refurbished Samsung 990 Pro for $419.99 from Best Buy</a>.</p><p>Unfortunately, those prices aren't likely to get better, as SK Hynix, one of the big three RAM manufacturers alongside Samsung and Micron, recently <a href="https://www.tomsguide.com/computing/hardware/sk-hynix-warns-2027-will-be-worst-year-for-ram-prices-right-as-a-damning-report-reveals-something-that-will-add-fuel-to-the-price-fixing-lawsuit">warned that 2027 will be even worse</a> for RAM prices. And it's unlikely to get better by 2028, when Sony will stop making and selling physical copies of PS5 games.</p><p>Between rising prices and fears over ownership, gamers are stuck in a rough spot for the next few years. And that doesn't even account for the higher price they'll likely have to pay for a PS6 to play games from the next console generation.</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/tvs/theres-no-way-around-it-sony-tvs-are-priced-higher-than-most-of-the-competition-heres-what-sonys-doing-right-what-its-doing-wrong-and-what-needs-to-change-in-2026">Sony TV report card 2026: Is the 'Sony tax' still worth paying?</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/if-playstation-wants-to-succeed-with-all-digital-it-needs-to-follow-the-steam-model-5-ways-it-can-win-over-gamers-like-me">If PlayStation wants to succeed with all-digital, it needs to follow the Steam model — 5 ways it can win over gamers like me</a></li><li><a href="https://www.tomsguide.com/tvs/theres-no-way-around-it-sony-tvs-are-priced-higher-than-most-of-the-competition-heres-what-sonys-doing-right-what-its-doing-wrong-and-what-needs-to-change-in-2026">Sony TV report card 2026: Is the 'Sony tax' still worth paying?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ If PlayStation wants to succeed with all-digital, it needs to follow the Steam model — 5 ways it can win over gamers like me ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">PlayStation is officially killing physical discs</a>, and gamers aren’t happy. The company’s social media accounts can’t post anything without being slammed with negative comments, and even websites and influencers who are usually fans of PlayStation are taking them to task. Sony has yet to respond to any of this, which is likely making the situation worse. In short, this whole no-disc situation is a mess.</p><p>Sony says that digital now accounts for the vast majority of PlayStation game sales — hitting 85% in the most recent quarter — and it also nets a greater profit from digital purchases than physical, so it’s unlikely the company will reverse this controversial decision. However, if Sony wants to start (re)building trust with its fanbase, there are ways to make an all-digital future more palatable, namely by copying some of what has made Steam successful.</p><p>Steam has been a rousing success on PC for many years. Though Valve doesn’t offer physical games, it provides users with plenty of incentives to remain satisfied with their digital purchases and with the platform overall. I don’t expect Sony to completely copy Steam, but it can adopt similar policies if it ends disc production in January 2028.</p><p>Here are five practical, realistic adaptations Sony can take to make PSN more player-friendly.</p><h2 id="more-frequent-and-enticing-sales">More frequent (and enticing) sales</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ykRy32GfJmDiDjqymNueJf" name="shutterstock_703264159.jpg" alt="Steam storefront on laptop screen." src="https://cdn.mos.cms.futurecdn.net/ykRy32GfJmDiDjqymNueJf-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>While PC gaming has higher upfront costs than consoles, it has become more affordable over time thanks to frequent Steam sales. Steam keeps its online store thriving with major seasonal sales and near-constant publisher promotions. Games also drop in price faster and more aggressively. This is why Steam users (like me) end up with libraries of hundreds of games. It’s hard to pass up a title when it’s just a few bucks!</p><p>The PlayStation Store has its own sales events, such as Days of Play, Black Friday, and other holiday sales, along with weekly deals. However, full-price windows for new games are longer, and we usually only see extreme deep discounts when a game is all but forgotten. I’ve taken advantage of PSN sales and snatched some good titles, but the sales and discounts still don’t match those of Steam.</p><p>In an all-digital world, Sony would have complete control over pricing. Using Steam-style volume-driven discounting on the back catalog (and even earlier on mid-tier titles) would encourage more impulse and library-building purchases, rather than people either waiting for huge discounts or skipping entirely.</p><h2 id="a-true-try-before-you-fully-commit-refund-policy">A true “try before you fully commit” refund policy</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:957px;"><p class="vanilla-image-block" style="padding-top:67.71%;"><img id="sEEJ2czKyykbmZiNdbohSe" name="Screenshot 2025-09-04 100754" alt="Hollow Knight: Silksong store page on Steam" src="https://cdn.mos.cms.futurecdn.net/sEEJ2czKyykbmZiNdbohSe-1920-80.png" mos="" align="middle" fullscreen="" width="957" height="648" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Steam)</span></figcaption></figure><p>Right now, Steam arguably has the best refund policy in gaming. So long as you play a game for less than two hours total, you have 14 days to receive a full refund. This is a fantastic way to avoid purchasing a game that doesn’t click for you. While not technically a game demo, it pretty much serves the same “try before you buy” ethos.</p><p>PlayStation also has a 14-day refund policy, but it only applies if you haven’t downloaded a game. Once you start downloading, you no longer qualify for a refund unless the file is corrupt or you make a strong case to customer support that you purchased a game in error. This is frustrating enough now, but it will feel even worse if you can’t refund a digital title priced at $70–$80.</p><p>A playtime-based refund window, similar to Steam’s, would go a long way toward increasing purchase confidence without requiring Sony to change its curated store model. It’s actually wild that Sony doesn’t already have a similar policy, but the company should try it now if it plans to go all-in on an all-digital console.</p><h2 id="stronger-household-family-sharing">Stronger household/family sharing</h2><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="kq426XFE2gzifzQdVzDYDU" name="steam-home-page.jpg" alt="The home page for Steam" src="https://cdn.mos.cms.futurecdn.net/kq426XFE2gzifzQdVzDYDU-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Steam)</span></figcaption></figure><p>Sharing games is one of the main reasons gamers love physical media. While sharing digital content isn’t the same as handing a copy to someone else, Steam has a digital sharing policy that could work well for Sony.</p><p>On Steam, up to six family members can share a unified game library. Multiple members can play different games at the same time (you need multiple owned copies of the same game for concurrent play). </p><p>PlayStation has sharing features, but they’re more limited.</p><p>Console Sharing lets you log in to your account on a friend’s PS5 so they can play your games. Share Play lets you share your screen with a friend online and virtually hand them your controller. Though both of these methods work as advertised, a person cannot simply play games from another account on their own console in a straightforward way.</p><p>Expanding sharing options on PlayStation so a household can more easily share a digital library (with reasonable restrictions against abuse) wouldn’t be as seamless as lending someone a physical game, but it would at least offer gamers something comparable.</p><h2 id="better-discovery-tools">Better discovery tools</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qvJ6bN35U3ezruK5peaaZk" name="20211213092912.jpg" alt="The Matrix Awakens product listing on the PlayStation Store on PS5" src="https://cdn.mos.cms.futurecdn.net/qvJ6bN35U3ezruK5peaaZk-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Steam does a fantastic job with its wishlists, price-drop notifications, “players also like,” and other recommendations driven by player data. PlayStation has its own versions of these, but they could be updated to be more useful.</p><p>The store’s recent lowest-price-in-30-days indicator is a good step, but Sony can go further with smarter recommendations, clearer sale calendars, and stronger wishlist alerts. That last one really needs work — I feel like wishlist alerts are random at best, if I get them at all.</p><p>Improving discovery is an easy way to help players find and buy more games within Sony’s closed ecosystem. If you want people to buy digital games, you need to make it easier for them to find games they would actually like.</p><h2 id="clearer-long-term-library-guarantees-and-library-management">Clearer long-term library guarantees and library management</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6jGE4qfxVjSEbbRvJ77xYf" name="Steam collection library" alt="Steam collection library" src="https://cdn.mos.cms.futurecdn.net/6jGE4qfxVjSEbbRvJ77xYf-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the biggest reasons Sony is facing so much heat right now is the lack of clear guarantees about long-term access to the games players buy. Without physical discs, players worry more about access, storage, and account longevity. This is something that <a href="https://www.tomsguide.com/gaming/playstation/customers-need-assurances-their-games-wont-be-taken-from-them-after-purchase-stop-killing-games-on-playstations-decision-to-kill-physical-discs">Stop Killing Games founder Ross Scott</a> detailed when we interviewed him about Sony's decision to stop manufacturing discs.</p><p>Sony can learn from Steam’s emphasis on transparent licensing, robust cloud saves, and better tools for managing large digital libraries. Explicit, public commitments to offline play and long-term download availability would go a long way toward easing the anxiety surrounding digital-only ownership.</p><p>This is arguably the most important issue Sony has to address. People (rightly) want some form of ownership of the games they buy, especially when those games are digital. I’m not saying this will please everyone — some folks are certainly ride-or-die physical gamers — but clearer guarantees would ease much of the current anxiety.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVm7W"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVm7W.js" async></script><h2 id="bottom-line">Bottom line</h2><p>I want to be clear that I am not dunking on Sony or PlayStation. The <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> is my primary gaming platform, after all. But as a PlayStation gamer since the early 2000s (thanks to the Gran Turismo 3 PS2 bundle!), I want to see the company do right by loyal customers like me.</p><p>PSN is not inherently broken. Sony already runs a polished, high-production store. However, things need to change when discs disappear. Adopting some of Steam’s more player-friendly policies would not only benefit gamers but also Sony, which would benefit from a more committed user base.</p><p>Sony will ultimately do what it believes is in its best interest. That said, prioritizing what customers want, genuinely listening, and addressing concerns would go a long way. Hopefully, Sony does right by its user base and makes an all-digital future on its consoles as acceptable as it is on Steam.</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/pc-gaming/my-wallet-gonna-cry-valve-gives-official-update-on-steam-machine-and-steam-frame-launch-but-still-wont-tell-us-the-price">Valve gives official update on Steam Machine and Steam Frame launch</a></li><li><a href="https://www.tomsguide.com/gaming/pc-gaming/steam-machine-reviews-are-here-even-valve-is-disappointed">Steam Machine reviews are here: 'Even Valve is disappointed'</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/steam-controller-review">The new Steam Controller is the only PC gamepad I'll ever need</a></li></ul><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=gaming&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/gaming/playstation/if-playstation-wants-to-succeed-with-all-digital-it-needs-to-follow-the-steam-model-5-ways-it-can-win-over-gamers-like-me</link>
                                                                            <description>
                            <![CDATA[ PlayStation appears to be going all-in on digital games. To make this easier on gamers, it should implement some of Steam's policies. Here's what Sony can do. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">RZxxLUXKiNi3NuokYLVCbf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 18 Jul 2026 15:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The PlayStation logo on a PS5 Pro]]></media:description>                                                            <media:text><![CDATA[The PlayStation logo on a PS5 Pro]]></media:text>
                                <media:title type="plain"><![CDATA[The PlayStation logo on a PS5 Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">PlayStation is officially killing physical discs</a>, and gamers aren’t happy. The company’s social media accounts can’t post anything without being slammed with negative comments, and even websites and influencers who are usually fans of PlayStation are taking them to task. Sony has yet to respond to any of this, which is likely making the situation worse. In short, this whole no-disc situation is a mess.</p><p>Sony says that digital now accounts for the vast majority of PlayStation game sales — hitting 85% in the most recent quarter — and it also nets a greater profit from digital purchases than physical, so it’s unlikely the company will reverse this controversial decision. However, if Sony wants to start (re)building trust with its fanbase, there are ways to make an all-digital future more palatable, namely by copying some of what has made Steam successful.</p><p>Steam has been a rousing success on PC for many years. Though Valve doesn’t offer physical games, it provides users with plenty of incentives to remain satisfied with their digital purchases and with the platform overall. I don’t expect Sony to completely copy Steam, but it can adopt similar policies if it ends disc production in January 2028.</p><p>Here are five practical, realistic adaptations Sony can take to make PSN more player-friendly.</p><h2 id="more-frequent-and-enticing-sales">More frequent (and enticing) sales</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ykRy32GfJmDiDjqymNueJf" name="shutterstock_703264159.jpg" alt="Steam storefront on laptop screen." src="https://cdn.mos.cms.futurecdn.net/ykRy32GfJmDiDjqymNueJf-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>While PC gaming has higher upfront costs than consoles, it has become more affordable over time thanks to frequent Steam sales. Steam keeps its online store thriving with major seasonal sales and near-constant publisher promotions. Games also drop in price faster and more aggressively. This is why Steam users (like me) end up with libraries of hundreds of games. It’s hard to pass up a title when it’s just a few bucks!</p><p>The PlayStation Store has its own sales events, such as Days of Play, Black Friday, and other holiday sales, along with weekly deals. However, full-price windows for new games are longer, and we usually only see extreme deep discounts when a game is all but forgotten. I’ve taken advantage of PSN sales and snatched some good titles, but the sales and discounts still don’t match those of Steam.</p><p>In an all-digital world, Sony would have complete control over pricing. Using Steam-style volume-driven discounting on the back catalog (and even earlier on mid-tier titles) would encourage more impulse and library-building purchases, rather than people either waiting for huge discounts or skipping entirely.</p><h2 id="a-true-try-before-you-fully-commit-refund-policy">A true “try before you fully commit” refund policy</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:957px;"><p class="vanilla-image-block" style="padding-top:67.71%;"><img id="sEEJ2czKyykbmZiNdbohSe" name="Screenshot 2025-09-04 100754" alt="Hollow Knight: Silksong store page on Steam" src="https://cdn.mos.cms.futurecdn.net/sEEJ2czKyykbmZiNdbohSe-1920-80.png" mos="" align="middle" fullscreen="" width="957" height="648" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Steam)</span></figcaption></figure><p>Right now, Steam arguably has the best refund policy in gaming. So long as you play a game for less than two hours total, you have 14 days to receive a full refund. This is a fantastic way to avoid purchasing a game that doesn’t click for you. While not technically a game demo, it pretty much serves the same “try before you buy” ethos.</p><p>PlayStation also has a 14-day refund policy, but it only applies if you haven’t downloaded a game. Once you start downloading, you no longer qualify for a refund unless the file is corrupt or you make a strong case to customer support that you purchased a game in error. This is frustrating enough now, but it will feel even worse if you can’t refund a digital title priced at $70–$80.</p><p>A playtime-based refund window, similar to Steam’s, would go a long way toward increasing purchase confidence without requiring Sony to change its curated store model. It’s actually wild that Sony doesn’t already have a similar policy, but the company should try it now if it plans to go all-in on an all-digital console.</p><h2 id="stronger-household-family-sharing">Stronger household/family sharing</h2><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="kq426XFE2gzifzQdVzDYDU" name="steam-home-page.jpg" alt="The home page for Steam" src="https://cdn.mos.cms.futurecdn.net/kq426XFE2gzifzQdVzDYDU-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Steam)</span></figcaption></figure><p>Sharing games is one of the main reasons gamers love physical media. While sharing digital content isn’t the same as handing a copy to someone else, Steam has a digital sharing policy that could work well for Sony.</p><p>On Steam, up to six family members can share a unified game library. Multiple members can play different games at the same time (you need multiple owned copies of the same game for concurrent play). </p><p>PlayStation has sharing features, but they’re more limited.</p><p>Console Sharing lets you log in to your account on a friend’s PS5 so they can play your games. Share Play lets you share your screen with a friend online and virtually hand them your controller. Though both of these methods work as advertised, a person cannot simply play games from another account on their own console in a straightforward way.</p><p>Expanding sharing options on PlayStation so a household can more easily share a digital library (with reasonable restrictions against abuse) wouldn’t be as seamless as lending someone a physical game, but it would at least offer gamers something comparable.</p><h2 id="better-discovery-tools">Better discovery tools</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="qvJ6bN35U3ezruK5peaaZk" name="20211213092912.jpg" alt="The Matrix Awakens product listing on the PlayStation Store on PS5" src="https://cdn.mos.cms.futurecdn.net/qvJ6bN35U3ezruK5peaaZk-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Steam does a fantastic job with its wishlists, price-drop notifications, “players also like,” and other recommendations driven by player data. PlayStation has its own versions of these, but they could be updated to be more useful.</p><p>The store’s recent lowest-price-in-30-days indicator is a good step, but Sony can go further with smarter recommendations, clearer sale calendars, and stronger wishlist alerts. That last one really needs work — I feel like wishlist alerts are random at best, if I get them at all.</p><p>Improving discovery is an easy way to help players find and buy more games within Sony’s closed ecosystem. If you want people to buy digital games, you need to make it easier for them to find games they would actually like.</p><h2 id="clearer-long-term-library-guarantees-and-library-management">Clearer long-term library guarantees and library management</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6jGE4qfxVjSEbbRvJ77xYf" name="Steam collection library" alt="Steam collection library" src="https://cdn.mos.cms.futurecdn.net/6jGE4qfxVjSEbbRvJ77xYf-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the biggest reasons Sony is facing so much heat right now is the lack of clear guarantees about long-term access to the games players buy. Without physical discs, players worry more about access, storage, and account longevity. This is something that <a href="https://www.tomsguide.com/gaming/playstation/customers-need-assurances-their-games-wont-be-taken-from-them-after-purchase-stop-killing-games-on-playstations-decision-to-kill-physical-discs">Stop Killing Games founder Ross Scott</a> detailed when we interviewed him about Sony's decision to stop manufacturing discs.</p><p>Sony can learn from Steam’s emphasis on transparent licensing, robust cloud saves, and better tools for managing large digital libraries. Explicit, public commitments to offline play and long-term download availability would go a long way toward easing the anxiety surrounding digital-only ownership.</p><p>This is arguably the most important issue Sony has to address. People (rightly) want some form of ownership of the games they buy, especially when those games are digital. I’m not saying this will please everyone — some folks are certainly ride-or-die physical gamers — but clearer guarantees would ease much of the current anxiety.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVm7W"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVm7W.js" async></script><h2 id="bottom-line">Bottom line</h2><p>I want to be clear that I am not dunking on Sony or PlayStation. The <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> is my primary gaming platform, after all. But as a PlayStation gamer since the early 2000s (thanks to the Gran Turismo 3 PS2 bundle!), I want to see the company do right by loyal customers like me.</p><p>PSN is not inherently broken. Sony already runs a polished, high-production store. However, things need to change when discs disappear. Adopting some of Steam’s more player-friendly policies would not only benefit gamers but also Sony, which would benefit from a more committed user base.</p><p>Sony will ultimately do what it believes is in its best interest. That said, prioritizing what customers want, genuinely listening, and addressing concerns would go a long way. Hopefully, Sony does right by its user base and makes an all-digital future on its consoles as acceptable as it is on Steam.</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/pc-gaming/my-wallet-gonna-cry-valve-gives-official-update-on-steam-machine-and-steam-frame-launch-but-still-wont-tell-us-the-price">Valve gives official update on Steam Machine and Steam Frame launch</a></li><li><a href="https://www.tomsguide.com/gaming/pc-gaming/steam-machine-reviews-are-here-even-valve-is-disappointed">Steam Machine reviews are here: 'Even Valve is disappointed'</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/steam-controller-review">The new Steam Controller is the only PC gamepad I'll ever need</a></li></ul><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=gaming&min_discount_ratio=0.95&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button, .tg-df-container .tg-df-card-cta { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover, .tg-df-container .tg-df-card-cta:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getRowsLimit() {          if (this.rowsSelect && this.rowsSelect.value) return parseInt(this.rowsSelect.value, 10);          let configSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {             configSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {             configSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(configSource);          if (params.has('rows')) return parseInt(params.get('rows'), 10) || 12;          return 12;        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = this.getRowsLimit();          } else {             this.displayLimit += this.getRowsLimit();          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    url.searchParams.append('rows', this.getRowsLimit().toString());          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = this.getRowsLimit();          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += this.getRowsLimit();                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');               document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How much would you pay for a PS6? I asked my colleagues how much they'd spend ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Whenever the conversation turns to the (unannounced) <a href="https://www.tomsguide.com/gaming/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak">PS6</a>, it’s not potential specs or launch games that people seem to want to discuss; it’s the price. The so-called <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">“RAMageddon”</a> has seen the cost of basically all tech items skyrocket, and gaming consoles are very much impacted. </p><p>The current-generation <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5</a> console hasn’t decreased in price over its lifespan, but instead, buying into the PlayStation platform has gotten more expensive. The base PS5 now costs $650 ($499 at launch), while the <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> is an eye-watering $899 ($699 at launch). This console generation is the first I can recall where launch-day buyers got a better deal than late adopters. </p><p><a href="https://www.tomsguide.com/gaming/steam-machine-review">Valve’s Steam Machine</a> finally hit shelves last month, with a $1,049 MSRP for its base model (which doesn’t even include a controller). In response, fears surrounding how much the PS6 will cost when it launches (<a href="https://www.tomsguide.com/gaming/playstation/sony-will-allegedly-launch-three-ps6-systems-including-two-consoles-and-a-handheld-claims-leaker">rumored as early as next year</a>) are only increasing as RAM costs spiral even higher. </p><p>But my question is, how much is too much? What is the tipping point for gamers? When does sticker shock go beyond reluctantly forking over your money to just outright refusal to buy into the next generation of gaming? That’s why I decided to ask some of my colleagues how much they would be willing to pay for a hypothetical PS6, and the answers varied a lot. </p><p>I also want to hear from you: what’s your PS6 price limit? <strong>Vote in our poll</strong> down below, and be sure to <strong>leave a comment</strong>, letting me know how much you’d pay for a new PlayStation console.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYd2YO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYd2YO.js" async></script><h2 id="the-price-of-the-ps6-is-only-half-the-battle">The price of the PS6 is only half the battle</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FY4VGTzod8PrjU4mryi8hn" name="shutterstock_2023742252.jpg" alt="PS5 DualSense controller next to a PS5 console" src="https://cdn.mos.cms.futurecdn.net/FY4VGTzod8PrjU4mryi8hn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rokas Tenys | Shutterstock)</span></figcaption></figure><p>Being a gamer isn’t just about the console. It is about the entire ecosystem, from your setup to the actual library of games. That’s why, when the PlayStation 6 eventually drops, <strong>$1,000</strong> is my absolute hard line. </p><p>If Sony pushes the price tag any higher, it completely breaks my budget for everything else that might make gaming worth it, since there can be other costs to it. As Grand Theft Auto 6 proved, big-name titles are at the $80 mark now. You'll also need extra controllers, a solid headset, and potentially expanded SSD storage. </p><p>When you tally up the extras, the console itself is only half of the price. If Sony wants to keep me as a PlayStation fan, they can't price me out! <em>— Arif Bacchus, Lab Tester</em></p><h2 id="i-m-not-sure-if-any-price-would-be-worth-it">I'm not sure if any price would be worth it</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gXSEaKYb5GTQcmF5VG443W" name="PS5" alt="PS5 Slim console positioned horizontally on table" src="https://cdn.mos.cms.futurecdn.net/gXSEaKYb5GTQcmF5VG443W-1920-80.jpg" mos="" align="middle" fullscreen="" width="1200" height="675" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>The current console generation has been something of a disappointment for me. Supply issues hampered the launch, and PS4 support persisted longer than necessary. It feels like the PS5 never really got going. Furthermore, the current cost of gaming means the console hasn't had much attention from me.</p><p>Games are a lot more expensive than they used to be. Paying full price feels like I'm being ripped off, and good game sales are rather hard to come by — <a href="https://www.tomsguide.com/gaming/playstation/playstation-killing-physical-games-could-make-gaming-deals-a-thing-of-the-past-and-thats-a-major-problem">especially if you're looking for physical discs</a>. So the prospect of paying several hundred dollars to replace my PS5 is not appealing. If Sony wants my money for the PS6, they're going to have to do a lot of things to grab my attention.</p><p>The least of which is offering an affordable console, noticeably cheaper than a competent gaming PC. For me, that means I won't bother to entertain prices above the PS5 Pro's <strong>$699 </strong>launch price. </p><p>The odds of this happening are about as likely as Wales winning the World Cup, so I've made peace with the fact that I will probably never own a PS6. Maybe the PS7 will change my mind when it arrives sometime around 2040. <em>— Tom Pritchard, UK Phones Editor</em></p><h2 id="shut-up-and-take-my-money-playstation">Shut up and take my money, PlayStation</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Bpj7CyihPnACavjptKtPnj" name="19_BaldursGate3_Gameplay_Screenshot.jpg" alt="baldur's gate 3" src="https://cdn.mos.cms.futurecdn.net/Bpj7CyihPnACavjptKtPnj-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Larian Studios)</span></figcaption></figure><p>I’ll be honest: I was on the fence about getting the PS5. I got as much use as I could out of my PS4 before biting the bullet and getting the PS5 Slim… and I really wanted to play Baldur’s Gate 3, which wasn’t on Sony’s fourth-gen console. I suspect it’ll be a similar story by the time the PS6 comes around.</p><p>My PS5 right now is my favorite console, and it’s what I’ve sunk thousands of hours into games on. Sony would have to price the PS6 <em>exorbitantly </em>to stop me from buying it. I’d happily spend <strong>up to $1,000 </strong>on it. I can’t say for certain whether I’d buy it at launch, but it will most certainly happen.</p><p>The only thing I can see potentially stopping me from getting the PS6 is the rising cost of games — especially as we won’t be able to buy second-hand discs of the latest titles. But given how happy playing on my PS5 (and PS4 before it) makes me, right now, I can’t see myself <em>not</em> buying the PS6. — <em>Nikita Achanta, Senior Reviews Writer</em></p><h2 id="i-may-have-already-reached-my-limit">I may have already reached my limit</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="D8e7NbR2UySVhGgY9YqwLM" name="PS5 Slim.jpg" alt="PS5 Slim" src="https://cdn.mos.cms.futurecdn.net/D8e7NbR2UySVhGgY9YqwLM-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I don’t consider myself a Sony fanboy, but PlayStation has been my console of choice since the original. Despite recent choices to lean into live service, PlayStation is where the types of games I want to play live. </p><p>That said, I choked paying $500 for the <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-console-review">Nintendo Switch 2</a> — hoarded gift cards allayed that frustration some —  and haven’t bothered upgrading to the PS5 Pro. Inflation aside, my sweet spot for a gaming console is around $400 to $600. With things steadily getting more expensive, I’ve had a hard time accepting that those prices may no longer be realistic. I had high hopes for the Steam Machine, but its $1,050 price tag put me off, and I’m not excited about whatever the PS6 might bring to the table.</p><p>Right now, I don’t know that I’d go more than <strong>$700</strong>, but I would hate every second of it until I got the console in my house. </p><p>PlayStation 6 might be the first generation I actively skip, but who am I kidding? I’ll probably wait until I’ve hoarded enough gift cards again. It won’t be day one, though; I promise you that. <em>— Scott Younker, West Coast Reporter</em></p><h2 id="sony-would-have-to-charge-a-fortune-to-stop-me-buying-a-ps6">Sony would have to charge a fortune to stop me buying a PS6</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bMX2buAmAL7uK2BwXXj5F" name="PS5 Pro-17" alt="PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/bMX2buAmAL7uK2BwXXj5F-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Truthfully, I’m more than prepared to pay a four-digit figure for the PS6. The thought of a $1,000+ PlayStation console certainly isn’t pleasant, but Sony would have to charge well north of <strong>$1,250</strong> before I reached my limit and felt forced to stick with my current PS5 Pro for a while longer. </p><p>I swear I’m not a corporate bootlicker; it’s a simple matter of determining value per dollar spent. PlayStation has been my primary gaming platform since the PS1, and each year, I get <em>thousands</em> of hours of use from my console. When you break it down into money spent to entertainment hours delivered, each PlayStation machine has been a complete bargain.</p><p>For me, it’s not the price that will put me off the PS6, but rather <a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">Sony’s decision to axe physical games</a> (I’m mostly digital already, but still want the option of using a disc), and my concerns that it’ll launch with a relatively small hard drive in an effort to reduce costs. <em>— Rory Mellon, Senior Entertainment Editor</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/best-picks/the-best-ps5-games">The best PS5 games in 2026</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak">PS6 price could be in the same stratosphere as the Steam Machine</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></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/how-much-would-you-pay-for-a-ps6-i-asked-my-colleagues-how-much-theyd-spend</link>
                                                                            <description>
                            <![CDATA[ How far would your wallet stretch for a new PlayStation? I asked the Tom's Guide team, and now it's your turn to sound off. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">YEPMPMVB7TL4FkwLNsXpYn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 12 Jul 2026 11:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                        <dc:contributor><![CDATA[ Tom&#039;s Guide Staff ]]></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/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The PlayStation logo on a PS5 Pro]]></media:description>                                                            <media:text><![CDATA[The PlayStation logo on a PS5 Pro]]></media:text>
                                <media:title type="plain"><![CDATA[The PlayStation logo on a PS5 Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Whenever the conversation turns to the (unannounced) <a href="https://www.tomsguide.com/gaming/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak">PS6</a>, it’s not potential specs or launch games that people seem to want to discuss; it’s the price. The so-called <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">“RAMageddon”</a> has seen the cost of basically all tech items skyrocket, and gaming consoles are very much impacted. </p><p>The current-generation <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5</a> console hasn’t decreased in price over its lifespan, but instead, buying into the PlayStation platform has gotten more expensive. The base PS5 now costs $650 ($499 at launch), while the <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> is an eye-watering $899 ($699 at launch). This console generation is the first I can recall where launch-day buyers got a better deal than late adopters. </p><p><a href="https://www.tomsguide.com/gaming/steam-machine-review">Valve’s Steam Machine</a> finally hit shelves last month, with a $1,049 MSRP for its base model (which doesn’t even include a controller). In response, fears surrounding how much the PS6 will cost when it launches (<a href="https://www.tomsguide.com/gaming/playstation/sony-will-allegedly-launch-three-ps6-systems-including-two-consoles-and-a-handheld-claims-leaker">rumored as early as next year</a>) are only increasing as RAM costs spiral even higher. </p><p>But my question is, how much is too much? What is the tipping point for gamers? When does sticker shock go beyond reluctantly forking over your money to just outright refusal to buy into the next generation of gaming? That’s why I decided to ask some of my colleagues how much they would be willing to pay for a hypothetical PS6, and the answers varied a lot. </p><p>I also want to hear from you: what’s your PS6 price limit? <strong>Vote in our poll</strong> down below, and be sure to <strong>leave a comment</strong>, letting me know how much you’d pay for a new PlayStation console.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYd2YO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYd2YO.js" async></script><h2 id="the-price-of-the-ps6-is-only-half-the-battle">The price of the PS6 is only half the battle</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FY4VGTzod8PrjU4mryi8hn" name="shutterstock_2023742252.jpg" alt="PS5 DualSense controller next to a PS5 console" src="https://cdn.mos.cms.futurecdn.net/FY4VGTzod8PrjU4mryi8hn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rokas Tenys | Shutterstock)</span></figcaption></figure><p>Being a gamer isn’t just about the console. It is about the entire ecosystem, from your setup to the actual library of games. That’s why, when the PlayStation 6 eventually drops, <strong>$1,000</strong> is my absolute hard line. </p><p>If Sony pushes the price tag any higher, it completely breaks my budget for everything else that might make gaming worth it, since there can be other costs to it. As Grand Theft Auto 6 proved, big-name titles are at the $80 mark now. You'll also need extra controllers, a solid headset, and potentially expanded SSD storage. </p><p>When you tally up the extras, the console itself is only half of the price. If Sony wants to keep me as a PlayStation fan, they can't price me out! <em>— Arif Bacchus, Lab Tester</em></p><h2 id="i-m-not-sure-if-any-price-would-be-worth-it">I'm not sure if any price would be worth it</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gXSEaKYb5GTQcmF5VG443W" name="PS5" alt="PS5 Slim console positioned horizontally on table" src="https://cdn.mos.cms.futurecdn.net/gXSEaKYb5GTQcmF5VG443W-1920-80.jpg" mos="" align="middle" fullscreen="" width="1200" height="675" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>The current console generation has been something of a disappointment for me. Supply issues hampered the launch, and PS4 support persisted longer than necessary. It feels like the PS5 never really got going. Furthermore, the current cost of gaming means the console hasn't had much attention from me.</p><p>Games are a lot more expensive than they used to be. Paying full price feels like I'm being ripped off, and good game sales are rather hard to come by — <a href="https://www.tomsguide.com/gaming/playstation/playstation-killing-physical-games-could-make-gaming-deals-a-thing-of-the-past-and-thats-a-major-problem">especially if you're looking for physical discs</a>. So the prospect of paying several hundred dollars to replace my PS5 is not appealing. If Sony wants my money for the PS6, they're going to have to do a lot of things to grab my attention.</p><p>The least of which is offering an affordable console, noticeably cheaper than a competent gaming PC. For me, that means I won't bother to entertain prices above the PS5 Pro's <strong>$699 </strong>launch price. </p><p>The odds of this happening are about as likely as Wales winning the World Cup, so I've made peace with the fact that I will probably never own a PS6. Maybe the PS7 will change my mind when it arrives sometime around 2040. <em>— Tom Pritchard, UK Phones Editor</em></p><h2 id="shut-up-and-take-my-money-playstation">Shut up and take my money, PlayStation</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Bpj7CyihPnACavjptKtPnj" name="19_BaldursGate3_Gameplay_Screenshot.jpg" alt="baldur's gate 3" src="https://cdn.mos.cms.futurecdn.net/Bpj7CyihPnACavjptKtPnj-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Larian Studios)</span></figcaption></figure><p>I’ll be honest: I was on the fence about getting the PS5. I got as much use as I could out of my PS4 before biting the bullet and getting the PS5 Slim… and I really wanted to play Baldur’s Gate 3, which wasn’t on Sony’s fourth-gen console. I suspect it’ll be a similar story by the time the PS6 comes around.</p><p>My PS5 right now is my favorite console, and it’s what I’ve sunk thousands of hours into games on. Sony would have to price the PS6 <em>exorbitantly </em>to stop me from buying it. I’d happily spend <strong>up to $1,000 </strong>on it. I can’t say for certain whether I’d buy it at launch, but it will most certainly happen.</p><p>The only thing I can see potentially stopping me from getting the PS6 is the rising cost of games — especially as we won’t be able to buy second-hand discs of the latest titles. But given how happy playing on my PS5 (and PS4 before it) makes me, right now, I can’t see myself <em>not</em> buying the PS6. — <em>Nikita Achanta, Senior Reviews Writer</em></p><h2 id="i-may-have-already-reached-my-limit">I may have already reached my limit</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="D8e7NbR2UySVhGgY9YqwLM" name="PS5 Slim.jpg" alt="PS5 Slim" src="https://cdn.mos.cms.futurecdn.net/D8e7NbR2UySVhGgY9YqwLM-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>I don’t consider myself a Sony fanboy, but PlayStation has been my console of choice since the original. Despite recent choices to lean into live service, PlayStation is where the types of games I want to play live. </p><p>That said, I choked paying $500 for the <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-console-review">Nintendo Switch 2</a> — hoarded gift cards allayed that frustration some —  and haven’t bothered upgrading to the PS5 Pro. Inflation aside, my sweet spot for a gaming console is around $400 to $600. With things steadily getting more expensive, I’ve had a hard time accepting that those prices may no longer be realistic. I had high hopes for the Steam Machine, but its $1,050 price tag put me off, and I’m not excited about whatever the PS6 might bring to the table.</p><p>Right now, I don’t know that I’d go more than <strong>$700</strong>, but I would hate every second of it until I got the console in my house. </p><p>PlayStation 6 might be the first generation I actively skip, but who am I kidding? I’ll probably wait until I’ve hoarded enough gift cards again. It won’t be day one, though; I promise you that. <em>— Scott Younker, West Coast Reporter</em></p><h2 id="sony-would-have-to-charge-a-fortune-to-stop-me-buying-a-ps6">Sony would have to charge a fortune to stop me buying a PS6</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bMX2buAmAL7uK2BwXXj5F" name="PS5 Pro-17" alt="PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/bMX2buAmAL7uK2BwXXj5F-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Truthfully, I’m more than prepared to pay a four-digit figure for the PS6. The thought of a $1,000+ PlayStation console certainly isn’t pleasant, but Sony would have to charge well north of <strong>$1,250</strong> before I reached my limit and felt forced to stick with my current PS5 Pro for a while longer. </p><p>I swear I’m not a corporate bootlicker; it’s a simple matter of determining value per dollar spent. PlayStation has been my primary gaming platform since the PS1, and each year, I get <em>thousands</em> of hours of use from my console. When you break it down into money spent to entertainment hours delivered, each PlayStation machine has been a complete bargain.</p><p>For me, it’s not the price that will put me off the PS6, but rather <a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">Sony’s decision to axe physical games</a> (I’m mostly digital already, but still want the option of using a disc), and my concerns that it’ll launch with a relatively small hard drive in an effort to reduce costs. <em>— Rory Mellon, Senior Entertainment Editor</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/best-picks/the-best-ps5-games">The best PS5 games in 2026</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak">PS6 price could be in the same stratosphere as the Steam Machine</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></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ A PlayStation 6 without a disc drive? I’m done with Sony ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It seems like there’s no going back. I initially thought that <a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">Sony’s decision to phase out physical discs for PlayStation 5</a> had such a long run-in time that there was deliberate wiggle room for a slightly embarrassing U-turn before 2028.</p><p>However, <a href="https://www.theverge.com/games/961203/sony-austria-thalgau-end-disc-production-microlenses-instead" target="_blank">The Verge</a> is reporting that <strong>Sony’s Thalgau plant is already being repurposed to make optical microlenses instead</strong>. In other words, this wasn’t testing the waters with an announcement and checking for feedback — this was<em> fait accompli</em>: a decision already decided upon, with loyal customers the last to know.</p><p>No wonder the company’s popular Xbox-baiting game loaning video from the PS4 era is now <a href="https://www.youtube.com/watch?v=uMrL8jwhMXg" target="_blank">being thrown back in its corporate face</a>. Despite effectively taking brutal advantage of Microsoft’s anti-consumer error with a viral marketing video, Sony got to a very similar place in the end. It just took them longer.</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/kWSIFh8ICaA" allowfullscreen></iframe></div></div><p>Assuming there is no room for the expensive U-turn that Microsoft ended up screeching around 13 years ago, then that’s the end of the road for me with PlayStation. </p><p><strong>It’s not that I’m averse to digital gaming, I just have very little faith in Sony’s ability to deliver it at a reasonable price.</strong></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVm7W"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVm7W.js" async></script><h2 id="the-worst-of-both-worlds">The worst of both worlds</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1890px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="QtC5XrBKmnRNJDnKmAV3QD" name="PS5 Gaming TV.jpg" alt="Ratchet & Clank being played on a PS5 and a Sony Bravia gaming TV." src="https://cdn.mos.cms.futurecdn.net/QtC5XrBKmnRNJDnKmAV3QD-1920-80.jpg" mos="" align="middle" fullscreen="" width="1890" height="1063" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>In theory, I can see the case for a digital-only console. A PS6 without a disc drive should be cheaper to manufacture (though that doesn’t mean cheap, given the soaring price of hardware), and as a PC gamer, I haven’t owned a computer with a disc drive in well over a decade.</p><p>But I consciously made the opposite choice when I pre-ordered my day-one PS5: <strong>I paid extra for the model with a disc drive, safe in the knowledge that over the long run, the extra cost would be recouped</strong>, after borrowing and trading in games had been taken into account. </p><p>Which isn’t to say I don’t see the benefit of digital. While nine times out of ten, I would buy the disc version for resale value and the ability to loan my favourite games to friends, I still would buy from the PlayStation store occasionally. After all, you can’t beat the convenience of instantly accessing a game no matter what time of day or night. The PlayStation Store never sleeps.</p><p>Indeed, 99% of my PC games come digitally via Steam, and it works brilliantly. But it’s not a like-for-like comparison, because ironically <strong>part of what makes Steam such a popular option is its competition</strong>. There’s no shortage of places to buy PC games from the Epic Store to GOG, so Steam can’t rest on its laurels: its prices have to stay competitive, especially during the frequent sales.</p><p>Sony could replicate this, allowing third-party game stores on PS6, but why would it? If there’s only one place to buy games, Sony can charge a healthy platform fee for every sale, safe in the knowledge that there’s no alternative (Valve gets away with <a href="https://steamcommunity.com/groups/steamworks/announcements/detail/1697191267930157838" target="_blank">between 20 and 30%</a> depending on sales figures, despite gamers being able to vote with their feet).</p><p>There was outrage when it was announced that <a href="https://www.tomsguide.com/news/ps5-and-xbox-series-x-games-will-cost-dollar70-and-subscriptions-may-be-the-future">PS5 games would cost $70</a>, but at least people knew they could recoup some of the costs when finished. With development costs spiralling,<strong> it wouldn’t be surprising if PS6 pricing goes even higher</strong> — and we’ve already seen some evidence of this price inflation with the <a href="https://www.tomsguide.com/gaming/gta-6s-ultimate-edition-is-the-real-full-game-and-the-rumors-of-it-costing-usd100-were-true-after-all">MSRP of $80 plus</a> for the digital-first <a href="https://www.tomsguide.com/news/gta-6">GTA 6</a>.</p><p><strong>Without physical game shops to compete with, Sony has far more control over sales too</strong>. The company can reduce both frequency and discount percentage, safe in the knowledge that <strong>you’ve got no alternative</strong>. If you want the game, you’ll have to pay whatever Sony wants or go without.</p><p>That’s not even considering the other downsides of digital-only games. What if your account gets hacked and Sony bans you? You’ve lost access to all the games you’d paid for. What if Sony decides to remove a game before you downloaded it? Tough luck, it’s gone forever. That’s why <a href="https://www.gamespot.com/articles/ps4s-with-pre-installed-pt-listed-on-ebay-for-as-m/1100-6426971/" target="_blank">PS4 consoles with the deleted PT demo were listed on Ebay for over $1,000 a decade ago</a>.</p><h2 id="farewell-playstation">Farewell PlayStation</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecidnCAguSkpYaD5oKosUH" name="TG_PS5_7.jpg" alt="PS5" src="https://cdn.mos.cms.futurecdn.net/ecidnCAguSkpYaD5oKosUH-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>With the <a href="https://www.tomsguide.com/gaming/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak">expected price of PS6 blowing past even those PT scalping prices</a>, I was already contemplating opting out of a Sony console for the first time since I was at university with my trusty GameCube. </p><p>This move seals the deal. I’ll keep playing PS5 games, but once publishers stop making them and I finish my substantial backlog, <strong>I’ll turn off a PlayStation console for the last time</strong>. If I have to play digital-only, my PC and Steam Deck will get all the love going forward. Thanks anyway, Sony.</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/playstation/customers-need-assurances-their-games-wont-be-taken-from-them-after-purchase-stop-killing-games-on-playstations-decision-to-kill-physical-discs">We spoke to Stop Killing Games about PlayStation killing discs</a></li><li><a href="https://www.tomsguide.com/gaming/steam-machine-vs-ps5-pro-theres-a-clear-winner-for-most-gamers">Steam Machine vs. PS5 Pro — there’s a clear winner</a></li><li><a href="https://www.tomsguide.com/gaming/splatoon-raiders-combines-ink-splatting-and-treasure-hunting-and-im-already-hooked">Splatoon Raiders hands-on preview: I'm already hooked</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/a-playstation-6-without-a-disc-drive-im-done-with-sony</link>
                                                                            <description>
                            <![CDATA[ I’m not averse to digital gaming, but I don’t have much faith in Sony’s ability to deliver it at a fair price. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4vGi6VscabZ3YMiWAh5pKV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/FY4VGTzod8PrjU4mryi8hn-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 06 Jul 2026 09:10:10 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Gaming]]></category>
                                                    <category><![CDATA[Playstation]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alan Martin ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xMmhmPSssqZHHFWveDgSs7-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/FY4VGTzod8PrjU4mryi8hn-1920-80.jpg">
                                                            <media:credit><![CDATA[Rokas Tenys | Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[How to watch Super Bowl with your PS5]]></media:description>                                                            <media:text><![CDATA[How to watch Super Bowl with your PS5]]></media:text>
                                <media:title type="plain"><![CDATA[How to watch Super Bowl with your PS5]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/FY4VGTzod8PrjU4mryi8hn-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It seems like there’s no going back. I initially thought that <a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">Sony’s decision to phase out physical discs for PlayStation 5</a> had such a long run-in time that there was deliberate wiggle room for a slightly embarrassing U-turn before 2028.</p><p>However, <a href="https://www.theverge.com/games/961203/sony-austria-thalgau-end-disc-production-microlenses-instead" target="_blank">The Verge</a> is reporting that <strong>Sony’s Thalgau plant is already being repurposed to make optical microlenses instead</strong>. In other words, this wasn’t testing the waters with an announcement and checking for feedback — this was<em> fait accompli</em>: a decision already decided upon, with loyal customers the last to know.</p><p>No wonder the company’s popular Xbox-baiting game loaning video from the PS4 era is now <a href="https://www.youtube.com/watch?v=uMrL8jwhMXg" target="_blank">being thrown back in its corporate face</a>. Despite effectively taking brutal advantage of Microsoft’s anti-consumer error with a viral marketing video, Sony got to a very similar place in the end. It just took them longer.</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/kWSIFh8ICaA" allowfullscreen></iframe></div></div><p>Assuming there is no room for the expensive U-turn that Microsoft ended up screeching around 13 years ago, then that’s the end of the road for me with PlayStation. </p><p><strong>It’s not that I’m averse to digital gaming, I just have very little faith in Sony’s ability to deliver it at a reasonable price.</strong></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVm7W"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVm7W.js" async></script><h2 id="the-worst-of-both-worlds">The worst of both worlds</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1890px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="QtC5XrBKmnRNJDnKmAV3QD" name="PS5 Gaming TV.jpg" alt="Ratchet & Clank being played on a PS5 and a Sony Bravia gaming TV." src="https://cdn.mos.cms.futurecdn.net/QtC5XrBKmnRNJDnKmAV3QD-1920-80.jpg" mos="" align="middle" fullscreen="" width="1890" height="1063" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>In theory, I can see the case for a digital-only console. A PS6 without a disc drive should be cheaper to manufacture (though that doesn’t mean cheap, given the soaring price of hardware), and as a PC gamer, I haven’t owned a computer with a disc drive in well over a decade.</p><p>But I consciously made the opposite choice when I pre-ordered my day-one PS5: <strong>I paid extra for the model with a disc drive, safe in the knowledge that over the long run, the extra cost would be recouped</strong>, after borrowing and trading in games had been taken into account. </p><p>Which isn’t to say I don’t see the benefit of digital. While nine times out of ten, I would buy the disc version for resale value and the ability to loan my favourite games to friends, I still would buy from the PlayStation store occasionally. After all, you can’t beat the convenience of instantly accessing a game no matter what time of day or night. The PlayStation Store never sleeps.</p><p>Indeed, 99% of my PC games come digitally via Steam, and it works brilliantly. But it’s not a like-for-like comparison, because ironically <strong>part of what makes Steam such a popular option is its competition</strong>. There’s no shortage of places to buy PC games from the Epic Store to GOG, so Steam can’t rest on its laurels: its prices have to stay competitive, especially during the frequent sales.</p><p>Sony could replicate this, allowing third-party game stores on PS6, but why would it? If there’s only one place to buy games, Sony can charge a healthy platform fee for every sale, safe in the knowledge that there’s no alternative (Valve gets away with <a href="https://steamcommunity.com/groups/steamworks/announcements/detail/1697191267930157838" target="_blank">between 20 and 30%</a> depending on sales figures, despite gamers being able to vote with their feet).</p><p>There was outrage when it was announced that <a href="https://www.tomsguide.com/news/ps5-and-xbox-series-x-games-will-cost-dollar70-and-subscriptions-may-be-the-future">PS5 games would cost $70</a>, but at least people knew they could recoup some of the costs when finished. With development costs spiralling,<strong> it wouldn’t be surprising if PS6 pricing goes even higher</strong> — and we’ve already seen some evidence of this price inflation with the <a href="https://www.tomsguide.com/gaming/gta-6s-ultimate-edition-is-the-real-full-game-and-the-rumors-of-it-costing-usd100-were-true-after-all">MSRP of $80 plus</a> for the digital-first <a href="https://www.tomsguide.com/news/gta-6">GTA 6</a>.</p><p><strong>Without physical game shops to compete with, Sony has far more control over sales too</strong>. The company can reduce both frequency and discount percentage, safe in the knowledge that <strong>you’ve got no alternative</strong>. If you want the game, you’ll have to pay whatever Sony wants or go without.</p><p>That’s not even considering the other downsides of digital-only games. What if your account gets hacked and Sony bans you? You’ve lost access to all the games you’d paid for. What if Sony decides to remove a game before you downloaded it? Tough luck, it’s gone forever. That’s why <a href="https://www.gamespot.com/articles/ps4s-with-pre-installed-pt-listed-on-ebay-for-as-m/1100-6426971/" target="_blank">PS4 consoles with the deleted PT demo were listed on Ebay for over $1,000 a decade ago</a>.</p><h2 id="farewell-playstation">Farewell PlayStation</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ecidnCAguSkpYaD5oKosUH" name="TG_PS5_7.jpg" alt="PS5" src="https://cdn.mos.cms.futurecdn.net/ecidnCAguSkpYaD5oKosUH-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>With the <a href="https://www.tomsguide.com/gaming/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak">expected price of PS6 blowing past even those PT scalping prices</a>, I was already contemplating opting out of a Sony console for the first time since I was at university with my trusty GameCube. </p><p>This move seals the deal. I’ll keep playing PS5 games, but once publishers stop making them and I finish my substantial backlog, <strong>I’ll turn off a PlayStation console for the last time</strong>. If I have to play digital-only, my PC and Steam Deck will get all the love going forward. Thanks anyway, Sony.</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/playstation/customers-need-assurances-their-games-wont-be-taken-from-them-after-purchase-stop-killing-games-on-playstations-decision-to-kill-physical-discs">We spoke to Stop Killing Games about PlayStation killing discs</a></li><li><a href="https://www.tomsguide.com/gaming/steam-machine-vs-ps5-pro-theres-a-clear-winner-for-most-gamers">Steam Machine vs. PS5 Pro — there’s a clear winner</a></li><li><a href="https://www.tomsguide.com/gaming/splatoon-raiders-combines-ink-splatting-and-treasure-hunting-and-im-already-hooked">Splatoon Raiders hands-on preview: I'm already hooked</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ PlayStation killing physical games could make gaming deals a thing of the past — and that’s a major problem ]]></title>
                                                                                                <dc:content><![CDATA[ <p>This week, PlayStation announced its plans to <a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">stop producing physical game discs</a> for titles released on its platform starting in January 2028. The internet's response has been strong and loud. In fact, I don’t think I’ve spoken to a single gamer who is in any way supportive of this decision.</p><p>Among the outraged, the main points of contention seem to be how this will affect those who take pride in displaying their vast physical game collection, and what this decision will mean for gaming preservation. There’s also a lot of fear about a theoretical future in which Sony decides to strip users of their digital purchases without warning — a nightmare outcome that I personally believe is not impossible, but highly improbable.</p><p>These are all valid points, but my real anger over this ill-judged decision is how it could make gaming deal-hunting a closed shop, robbing consumers of options to save money. I started my time at Tom’s Guide as a deals writer, and I know firsthand how many gamers are savvy shoppers, and how important scoring a big discount is for gamers who can’t afford to drop $70 (or $80 in the case of <a href="https://www.tomsguide.com/news/live/gta-6-pre-orders-news-and-live-updates">GTA VI</a>) on a brand new release day one. </p><p>Once PlayStation takes physical games away in early 2028, the economics of buying video games will likely completely change for millions of people, and that’s something to be mad about even if you're already all digital.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVm7W"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVm7W.js" async></script><h2 id="no-more-discs-could-destroy-gaming-deals">No more discs could destroy gaming deals</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AXNNW7PLmYmCxqswRjhu8R" name="God of War Ragnarok - Kratos vs creature.jpg" alt="God of War Ragnarok" src="https://cdn.mos.cms.futurecdn.net/AXNNW7PLmYmCxqswRjhu8R-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>For gamers who largely buy new releases day one, the removal of physical games won’t make all that much of a difference, at least in terms of affordability. Right now, if you want to pre-order an upcoming game — for example, <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5</a> exclusive Marvel’s Wolverine — it will cost you <a href="https://www.amazon.com/Wolverine-PS5-PlayStation-5/dp/B0G6157JKW/" target="_blank" rel="nofollow">$69 on Amazon</a> for a disc and also <a href="https://store.playstation.com/en-us/concept/10002861" target="_blank" rel="nofollow">$69 on the digital PlayStation Store</a>. </p><p>However, the shockwaves of no more physical games will be felt in the months after launch, and primarily by more patient gamers who don’t feel the need to pre-order to play on day one. Once a game has had its moment in the sun, retailers tend to discount remaining stock, but over on the PlayStation Store, prices can remain locked for months, even years. </p><p>In the table below, I’ve compared prices for some of the biggest PS5 exclusives across major retailers and on the PlayStation Store (prices correct as of Friday, July 3). It paints a bleak picture. If Sony’s desired future comes to pass (and there are no signs of a U-turn yet), then gamers looking to pick up older titles could be forced to pay launch day prices.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>PlayStation Store</strong></p></td><td  ><p><strong>Amazon</strong></p></td><td  ><p><strong>Best Buy</strong></p></td><td  ><p><strong>Walmart</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Astro Bot</strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA21564_00-0000000000000000" target="_blank" rel="nofollow">$59.99</a></p></td><td  ><p><a href="https://www.amazon.com/Astro-Bot-PS5-PlayStation-5/dp/B0D5SM3K4Q/" target="_blank" rel="nofollow">$39.99</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/astro-bot-playstation-5/JXHQ3C2TG8" target="_blank" rel="nofollow">$49.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/Astro-Bot-PlayStation-5/6261168812" target="_blank" rel="nofollow">$39</a></p></td></tr><tr><td class="firstcol " ><p><strong>Death Stranding 2: On the Beach</strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/JP9000-PPSA02015_00-DS2OTB0000000001" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/Death-Stranding-2-Beach-PlayStation-5/dp/B0F19GPDW3/" target="_blank" rel="nofollow">$54.97</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/death-stranding-2-on-the-beach-playstation-5/JXHQ3CX8WG" target="_blank" rel="nofollow">$57.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/Death-Stranding-2-On-The-Beach-Playstation-5/15583874414" target="_blank" rel="nofollow">$49.95</a></p></td></tr><tr><td class="firstcol " ><p><strong>Demon's Souls</strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA01342_00-DEMONSSOULS00000" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/Demons-Souls-PlayStation-5/dp/B08FC5TTBF" target="_blank" rel="nofollow">$37.99</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/demons-souls-standard-edition-playstation-5/JXHQ3C7QZY" target="_blank" rel="nofollow">$40.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/PlayStation-5-CD-Demon-s-Souls/741555735" target="_blank" rel="nofollow">$39.72</a></p></td></tr><tr><td class="firstcol " ><p><strong>God of War Ragnarök</strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA08329_00-GOWRAGNAROK00000" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/God-War-Ragnar%C3%B6k-PlayStation-5/dp/B0B61YDF5V/?th=1" target="_blank" rel="nofollow">$32.75</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/god-of-war-ragnarok-standard-edition-playstation-5/JXHQ3C7VHL" target="_blank" rel="nofollow">$34.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/God-of-War-Ragnar-k-Standard-Edition-Playstation-5-Physical/1336533270" target="_blank" rel="nofollow">$28.69</a></p></td></tr><tr><td class="firstcol " ><p><strong>Marvel's Spider-Man 2 </strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA03016_00-MARVELSPIDERMAN2" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/Marvels-Spider-Man-2-playstation-5/dp/B0CM27RYVC/" target="_blank" rel="nofollow">$44.48</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/marvels-spider-man-2-standard-edition-playstation-5/JXHQ3CCL82" target="_blank" rel="nofollow">$40.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/Marvel-s-Spider-Man-2-Playstation-5/3930621352" target="_blank" rel="nofollow">$31.47</a></p></td></tr><tr><td class="firstcol " ><p><strong>Ratchet & Clank: Rift Apart </strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA01473_00-RATCHETCLANKRIFT" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/Ratchet-Clank-Rift-Apart-PlayStation-5/dp/B095T8C99C/" target="_blank" rel="nofollow">$43.94</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/ratchet-clank-rift-apart-playstation-5/JXHQ3C7Q5R" target="_blank" rel="nofollow">$39.95</a></p></td><td  ><p><a href="https://www.walmart.com/ip/Ratchet-and-Clank-A-Rift-Apart-Playstation-5/150805682" target="_blank" rel="nofollow">$41.99</a></p></td></tr><tr><td class="firstcol " ><p><strong>The Last of Us Part 1 </strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA03396_00-THELASTOFUSPART1" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/Last-Us-Part-PlayStation-5/dp/B0B3QWRQL8/" target="_blank" rel="nofollow">$34.38</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/the-last-of-us-part-i-playstation-5/JXHQ3CJPS2" target="_blank" rel="nofollow">$48.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/The-Last-of-Us-Part-I-PlayStation-5/1643604134" target="_blank" rel="nofollow">$39.99</a></p></td></tr></tbody></table></div><h2 id="digital-deals-do-exist-but-choice-is-non-existent">Digital deals do exist, but choice is non-existent</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TSyiK2axFtwNAy77GRENuh" name="playstation-store-image-live-blog.jpg" alt="PlayStation Store image" src="https://cdn.mos.cms.futurecdn.net/TSyiK2axFtwNAy77GRENuh-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>All of this isn’t to say that deals don’t exist on digital games. I’ve been tracking PlayStation Store deals for years, and can say firsthand that there is pretty much always some form of sale running. Right now, it’s the <a href="https://store.playstation.com/en-us/category/d1fa27b1-da1f-4c4b-8e7a-997e59b787f7/1" target="_blank" rel="nofollow">July Savings sale</a>, offering up to 75% off <em>select </em>PS5 and PS4 titles. </p><p>The problem here is that PlayStation gamers will be at the mercy of these limited-time sales. Let's say right now in July 2026, you decide you want to pick up <a href="https://www.tomsguide.com/reviews/god-of-war-ragnarok">God of War Ragnarök</a>. While it’s been on sale digitally before, it’s not included in the July Savings promotion at present. It costs a full $70. Meanwhile, on Amazon you can grab a physical copy for just $32. </p><p>I can imagine a future where circling back to a game you skipped at launch means waiting months, if not longer, until it appears in one of the PlayStation Store’s rotating sales, unless you’re willing to pay the day-one price. In an all-digital future, shopping around for the best deal might be a non-starter; you will have only one storefront to buy PlayStation games on.</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="bSgJexzmBfwV8pzW9bKFJL" name="PS5 Pro-13" alt="PS5 Pro sitting horizontally on a table" src="https://cdn.mos.cms.futurecdn.net/bSgJexzmBfwV8pzW9bKFJL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>This situation could be mitigated by Sony allowing additional storefronts onto its consoles, but I would suggest the odds of this are slim to none. Or perhaps a more likely solution is hinted at in the <a href="https://blog.playstation.com/2026/07/01/physical-disc-production-ending-in-january-2028-for-new-games-releasing-on-playstation-consoles/" target="_blank">PlayStation Blog article</a> announcing this unwelcome news, which states “new games will be available on PlayStation Store <strong>and at retailers</strong> in digital formats only.”</p><p>Perhaps post-2028, PlayStation will permit the likes of Amazon, Best Buy and Target to sell digital game codes directly (at present, they only sell PlayStation Store credit vouchers). This could lead to more deals and discounts. Amazon could reduce the price of a digital game code in the months/years after launch. But remember, a digital code doesn't take up warehouse space, so retailers will have less incentive to clear out inventory.</p><p>However you slice it, any new game releasing on PlayStation platforms post January 2028 will seemingly be at the mercy of Sony’s and/or the publisher’s digital pricing strategy. That could mean that shopping for the best gaming deals whenever suits you becomes a thing of the past.</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/playstation/customers-need-assurances-their-games-wont-be-taken-from-them-after-purchase-stop-killing-games-on-playstations-decision-to-kill-physical-discs">We spoke to Stop Killing Games about PlayStation killing discs</a></li><li><a href="https://www.tomsguide.com/gaming/steam-machine-vs-ps5-pro-theres-a-clear-winner-for-most-gamers">Steam Machine vs. PS5 Pro — there’s a clear winner</a></li><li><a href="https://www.tomsguide.com/gaming/splatoon-raiders-combines-ink-splatting-and-treasure-hunting-and-im-already-hooked">Splatoon Raiders hands-on preview: I'm already hooked</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/playstation-killing-physical-games-could-make-gaming-deals-a-thing-of-the-past-and-thats-a-major-problem</link>
                                                                            <description>
                            <![CDATA[ PlayStation's decision to end physical games in January 2028 could have a major impact on bargain shopping. Here's why it's a problem. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NW32TykkmE79VYLsnLPjYG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 05 Jul 2026 08:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The PlayStation logo on a PS5 Pro]]></media:description>                                                            <media:text><![CDATA[The PlayStation logo on a PS5 Pro]]></media:text>
                                <media:title type="plain"><![CDATA[The PlayStation logo on a PS5 Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This week, PlayStation announced its plans to <a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">stop producing physical game discs</a> for titles released on its platform starting in January 2028. The internet's response has been strong and loud. In fact, I don’t think I’ve spoken to a single gamer who is in any way supportive of this decision.</p><p>Among the outraged, the main points of contention seem to be how this will affect those who take pride in displaying their vast physical game collection, and what this decision will mean for gaming preservation. There’s also a lot of fear about a theoretical future in which Sony decides to strip users of their digital purchases without warning — a nightmare outcome that I personally believe is not impossible, but highly improbable.</p><p>These are all valid points, but my real anger over this ill-judged decision is how it could make gaming deal-hunting a closed shop, robbing consumers of options to save money. I started my time at Tom’s Guide as a deals writer, and I know firsthand how many gamers are savvy shoppers, and how important scoring a big discount is for gamers who can’t afford to drop $70 (or $80 in the case of <a href="https://www.tomsguide.com/news/live/gta-6-pre-orders-news-and-live-updates">GTA VI</a>) on a brand new release day one. </p><p>Once PlayStation takes physical games away in early 2028, the economics of buying video games will likely completely change for millions of people, and that’s something to be mad about even if you're already all digital.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVm7W"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVm7W.js" async></script><h2 id="no-more-discs-could-destroy-gaming-deals">No more discs could destroy gaming deals</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AXNNW7PLmYmCxqswRjhu8R" name="God of War Ragnarok - Kratos vs creature.jpg" alt="God of War Ragnarok" src="https://cdn.mos.cms.futurecdn.net/AXNNW7PLmYmCxqswRjhu8R-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>For gamers who largely buy new releases day one, the removal of physical games won’t make all that much of a difference, at least in terms of affordability. Right now, if you want to pre-order an upcoming game — for example, <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5</a> exclusive Marvel’s Wolverine — it will cost you <a href="https://www.amazon.com/Wolverine-PS5-PlayStation-5/dp/B0G6157JKW/" target="_blank" rel="nofollow">$69 on Amazon</a> for a disc and also <a href="https://store.playstation.com/en-us/concept/10002861" target="_blank" rel="nofollow">$69 on the digital PlayStation Store</a>. </p><p>However, the shockwaves of no more physical games will be felt in the months after launch, and primarily by more patient gamers who don’t feel the need to pre-order to play on day one. Once a game has had its moment in the sun, retailers tend to discount remaining stock, but over on the PlayStation Store, prices can remain locked for months, even years. </p><p>In the table below, I’ve compared prices for some of the biggest PS5 exclusives across major retailers and on the PlayStation Store (prices correct as of Friday, July 3). It paints a bleak picture. If Sony’s desired future comes to pass (and there are no signs of a U-turn yet), then gamers looking to pick up older titles could be forced to pay launch day prices.</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>PlayStation Store</strong></p></td><td  ><p><strong>Amazon</strong></p></td><td  ><p><strong>Best Buy</strong></p></td><td  ><p><strong>Walmart</strong></p></td></tr><tr><td class="firstcol " ><p><strong>Astro Bot</strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA21564_00-0000000000000000" target="_blank" rel="nofollow">$59.99</a></p></td><td  ><p><a href="https://www.amazon.com/Astro-Bot-PS5-PlayStation-5/dp/B0D5SM3K4Q/" target="_blank" rel="nofollow">$39.99</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/astro-bot-playstation-5/JXHQ3C2TG8" target="_blank" rel="nofollow">$49.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/Astro-Bot-PlayStation-5/6261168812" target="_blank" rel="nofollow">$39</a></p></td></tr><tr><td class="firstcol " ><p><strong>Death Stranding 2: On the Beach</strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/JP9000-PPSA02015_00-DS2OTB0000000001" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/Death-Stranding-2-Beach-PlayStation-5/dp/B0F19GPDW3/" target="_blank" rel="nofollow">$54.97</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/death-stranding-2-on-the-beach-playstation-5/JXHQ3CX8WG" target="_blank" rel="nofollow">$57.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/Death-Stranding-2-On-The-Beach-Playstation-5/15583874414" target="_blank" rel="nofollow">$49.95</a></p></td></tr><tr><td class="firstcol " ><p><strong>Demon's Souls</strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA01342_00-DEMONSSOULS00000" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/Demons-Souls-PlayStation-5/dp/B08FC5TTBF" target="_blank" rel="nofollow">$37.99</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/demons-souls-standard-edition-playstation-5/JXHQ3C7QZY" target="_blank" rel="nofollow">$40.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/PlayStation-5-CD-Demon-s-Souls/741555735" target="_blank" rel="nofollow">$39.72</a></p></td></tr><tr><td class="firstcol " ><p><strong>God of War Ragnarök</strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA08329_00-GOWRAGNAROK00000" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/God-War-Ragnar%C3%B6k-PlayStation-5/dp/B0B61YDF5V/?th=1" target="_blank" rel="nofollow">$32.75</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/god-of-war-ragnarok-standard-edition-playstation-5/JXHQ3C7VHL" target="_blank" rel="nofollow">$34.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/God-of-War-Ragnar-k-Standard-Edition-Playstation-5-Physical/1336533270" target="_blank" rel="nofollow">$28.69</a></p></td></tr><tr><td class="firstcol " ><p><strong>Marvel's Spider-Man 2 </strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA03016_00-MARVELSPIDERMAN2" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/Marvels-Spider-Man-2-playstation-5/dp/B0CM27RYVC/" target="_blank" rel="nofollow">$44.48</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/marvels-spider-man-2-standard-edition-playstation-5/JXHQ3CCL82" target="_blank" rel="nofollow">$40.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/Marvel-s-Spider-Man-2-Playstation-5/3930621352" target="_blank" rel="nofollow">$31.47</a></p></td></tr><tr><td class="firstcol " ><p><strong>Ratchet & Clank: Rift Apart </strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA01473_00-RATCHETCLANKRIFT" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/Ratchet-Clank-Rift-Apart-PlayStation-5/dp/B095T8C99C/" target="_blank" rel="nofollow">$43.94</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/ratchet-clank-rift-apart-playstation-5/JXHQ3C7Q5R" target="_blank" rel="nofollow">$39.95</a></p></td><td  ><p><a href="https://www.walmart.com/ip/Ratchet-and-Clank-A-Rift-Apart-Playstation-5/150805682" target="_blank" rel="nofollow">$41.99</a></p></td></tr><tr><td class="firstcol " ><p><strong>The Last of Us Part 1 </strong></p></td><td  ><p><a href="https://store.playstation.com/en-us/product/UP9000-PPSA03396_00-THELASTOFUSPART1" target="_blank" rel="nofollow">$69.99</a></p></td><td  ><p><a href="https://www.amazon.com/Last-Us-Part-PlayStation-5/dp/B0B3QWRQL8/" target="_blank" rel="nofollow">$34.38</a></p></td><td  ><p><a href="https://www.bestbuy.com/product/the-last-of-us-part-i-playstation-5/JXHQ3CJPS2" target="_blank" rel="nofollow">$48.99</a></p></td><td  ><p><a href="https://www.walmart.com/ip/The-Last-of-Us-Part-I-PlayStation-5/1643604134" target="_blank" rel="nofollow">$39.99</a></p></td></tr></tbody></table></div><h2 id="digital-deals-do-exist-but-choice-is-non-existent">Digital deals do exist, but choice is non-existent</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TSyiK2axFtwNAy77GRENuh" name="playstation-store-image-live-blog.jpg" alt="PlayStation Store image" src="https://cdn.mos.cms.futurecdn.net/TSyiK2axFtwNAy77GRENuh-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>All of this isn’t to say that deals don’t exist on digital games. I’ve been tracking PlayStation Store deals for years, and can say firsthand that there is pretty much always some form of sale running. Right now, it’s the <a href="https://store.playstation.com/en-us/category/d1fa27b1-da1f-4c4b-8e7a-997e59b787f7/1" target="_blank" rel="nofollow">July Savings sale</a>, offering up to 75% off <em>select </em>PS5 and PS4 titles. </p><p>The problem here is that PlayStation gamers will be at the mercy of these limited-time sales. Let's say right now in July 2026, you decide you want to pick up <a href="https://www.tomsguide.com/reviews/god-of-war-ragnarok">God of War Ragnarök</a>. While it’s been on sale digitally before, it’s not included in the July Savings promotion at present. It costs a full $70. Meanwhile, on Amazon you can grab a physical copy for just $32. </p><p>I can imagine a future where circling back to a game you skipped at launch means waiting months, if not longer, until it appears in one of the PlayStation Store’s rotating sales, unless you’re willing to pay the day-one price. In an all-digital future, shopping around for the best deal might be a non-starter; you will have only one storefront to buy PlayStation games on.</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="bSgJexzmBfwV8pzW9bKFJL" name="PS5 Pro-13" alt="PS5 Pro sitting horizontally on a table" src="https://cdn.mos.cms.futurecdn.net/bSgJexzmBfwV8pzW9bKFJL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>This situation could be mitigated by Sony allowing additional storefronts onto its consoles, but I would suggest the odds of this are slim to none. Or perhaps a more likely solution is hinted at in the <a href="https://blog.playstation.com/2026/07/01/physical-disc-production-ending-in-january-2028-for-new-games-releasing-on-playstation-consoles/" target="_blank">PlayStation Blog article</a> announcing this unwelcome news, which states “new games will be available on PlayStation Store <strong>and at retailers</strong> in digital formats only.”</p><p>Perhaps post-2028, PlayStation will permit the likes of Amazon, Best Buy and Target to sell digital game codes directly (at present, they only sell PlayStation Store credit vouchers). This could lead to more deals and discounts. Amazon could reduce the price of a digital game code in the months/years after launch. But remember, a digital code doesn't take up warehouse space, so retailers will have less incentive to clear out inventory.</p><p>However you slice it, any new game releasing on PlayStation platforms post January 2028 will seemingly be at the mercy of Sony’s and/or the publisher’s digital pricing strategy. That could mean that shopping for the best gaming deals whenever suits you becomes a thing of the past.</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/playstation/customers-need-assurances-their-games-wont-be-taken-from-them-after-purchase-stop-killing-games-on-playstations-decision-to-kill-physical-discs">We spoke to Stop Killing Games about PlayStation killing discs</a></li><li><a href="https://www.tomsguide.com/gaming/steam-machine-vs-ps5-pro-theres-a-clear-winner-for-most-gamers">Steam Machine vs. PS5 Pro — there’s a clear winner</a></li><li><a href="https://www.tomsguide.com/gaming/splatoon-raiders-combines-ink-splatting-and-treasure-hunting-and-im-already-hooked">Splatoon Raiders hands-on preview: I'm already hooked</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 'The average person expects something marketed as a physical copy of something to be physical': Stop Killing Games on PlayStation killing discs ]]></title>
                                                                                                <dc:content><![CDATA[ <p>In case you didn’t know, <a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">PlayStation is officially killing physical discs</a>. The company says this is a natural step that aligns with how most players buy and play games. Considering how 85% of PlayStation games (via <a href="chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.sony.com/en/SonyInfo/IR/library/presen/er/pdf/25q4_supplement.pdf" target="_blank">PlayStation's financials</a>) are bought digitally, this move isn’t all that surprising — though that fact doesn’t ease the concern of many who see this as a wrong move.</p><p>Tom’s Guide reached out to Ross Scott, Founder of <a href="https://www.stopkillinggames.com/en" target="_blank">Stop Killing Games</a> — the campaign pushing for legal protections so games don’t disappear once publishers stop supporting them — to get their take on what this announcement means for PlayStation players and gamers as a whole.</p><p>The group’s responses were measured on some points but clear on others. While they didn’t outright call Sony’s consumer preference argument false, they argued that the bigger issue isn’t really about discs at all. Here are some highlights from their answers to our questions.</p><h2 id="the-disc-isn-t-the-problem">The disc isn't the problem</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hhrYrGQkptDpU5UMQUECcY" name="PS5 Slim-17.jpg" alt="PS5 Slim" src="https://cdn.mos.cms.futurecdn.net/hhrYrGQkptDpU5UMQUECcY-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Ross didn’t argue about whether most people preferred digital to physical. Instead, they challenged the notion that removing physical discs is the next logical step with no downsides. In their estimation, the conversation has become too focused on the format itself rather than on what players lose when that format disappears.</p><p>“<strong>The lack of the disc is just a symptom and not the core problem in itself</strong>,” Scott told us. They see the shift away from physical media as a surface-level change that masks a deeper issue: the gradual erosion of player ownership and long-term access to games.</p><div><blockquote><p>"What customers need [is] assurances their games won't be taken from them after purchase."</p><p>Ross Scott, Founder of Stop Killing Games</p></blockquote></div><p>Having a physical disc gives players something close to real ownership. Even if a publisher decided to shut down servers or stop supporting a game, you still (in most cases) had a working copy. This hasn’t been a thing on PC for a long time, and it appears the same will happen on consoles. Stop Killing Games thinks that’s why Sony’s response is wrong. Players are losing one of the last ways to keep a game they bought.</p><p>“<strong>What customers need [is] assurances their games won't be taken from them after purchase, which large publishers sometimes have a very poor track record on</strong>,” Scott said.</p><h2 id="second-hand-sales-and-publisher-incentives">Second-hand sales and publisher incentives</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5951px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="UNQTPWHvjo8WP4aCPUT58C" name="shutterstock_2302850573.jpg" alt="Video game collection in a drawer alongside a controller and wires packed neatly" src="https://cdn.mos.cms.futurecdn.net/UNQTPWHvjo8WP4aCPUT58C-1920-80.jpg" mos="" align="middle" fullscreen="" width="5951" height="3347" 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>We also asked about the impact on the used-games market and on retail competition. Their answer was more nuanced than you might expect from an anti-DRM campaign.</p><p>“<strong>I actually am sympathetic to publishers wanting to avoid secondhand sales, as in my opinion, that has led to lower prices overall (think of all the large sale events or digital game giveaways we see nowadays), but that also assumes competition in the market</strong>,” Scott added.</p><p>They also pointed out that copyrighted works already come with certain legal monopolies, and they’re wary of companies expanding that control through technical means without going through the proper legal process in different countries.</p><p>Additionally, they noted that recent examples, such as price increases following major acquisitions, show how quickly consumer-friendly promises can shift once competition decreases.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVm7W"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVm7W.js" async></script><h2 id="a-warning-from-the-past">A warning from the past</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="ehKH6GSEWqriffcToAJZgG" name="shutterstock_1870302739.jpg" alt="Xbox Series X controller being held" src="https://cdn.mos.cms.futurecdn.net/ehKH6GSEWqriffcToAJZgG-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>The all-digital future that many dreaded is effectively here, but the idea isn’t completely new. To that end, SKG pointed to Microsoft’s original Xbox One reveal as a cautionary example. Even though Microsoft walked back many of the most controversial features after receiving backlash, SKG sees the 2013 presentation as a sign of where parts of the industry still want to go.</p><div><blockquote><p>"I felt like the original Xbox One reveal was a sign of where the industry would like to take things"</p><p>Ross Scott, Founder of Stop Killing Games</p></blockquote></div><p>“<strong>Not to pick on Microsoft in particular, but I felt like the original Xbox One reveal was a sign of where the industry would like to take things</strong>,” Scott continued.</p><p>Some of Microsoft's original plans included: mandatory daily online checks, or your games would stop working, unclear rules around used games, and no guarantees that your library would survive once support for the console ended. Gamers decried all of these, but we’ve since seen them effectively become standard for all game consoles. Not having physical discs will just make it easier for companies to enact such measures.</p><p>Stop Killing Games added that they don’t believe digital games are inherently bad. When handled responsibly, digital-only games have real benefits, such as easier ways to back up purchases by copying games to an external hard drive. The danger lies when publishers treat digital ownership as something temporary or revocable.</p><h2 id="when-physical-doesn-t-mean-physical">When “physical” doesn’t mean physical</h2><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="Dr6t5xfKCVPGaaKmReweqN" name="GTA6-TV-02" alt="A GTA 6 screenshot on a TV." src="https://cdn.mos.cms.futurecdn.net/Dr6t5xfKCVPGaaKmReweqN-1920-80.jpg" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock / Rockstar / Tom's Guide)</span></figcaption></figure><p>One area where Stop Killing Games was more direct was the growing trend of retailers selling “physical editions” that contain nothing but a download code inside a box—such as <a href="https://www.tomsguide.com/news/live/gta-6-pre-orders-news-and-live-updates">GTA 6 not launching with a game disc</a>. They described this as misleading to consumers.</p><div><blockquote><p>"The average person expects something marketed as a physical copy of something to be physical."</p><p>Ross Scott, Founder of Stop Killing Games</p></blockquote></div><p>“<strong>I think this does create a sense of deception among consumers, since regardless of one's opinion on digital v. physical games, the average person expects something marketed as a physical copy of something to be physical</strong>.”</p><p>This practice also raises questions about what ownership even means. If the only thing inside the box is a code that can be revoked or tied to an account that might one day disappear, then the idea of “owning” a physical copy starts to feel hollow. They see this as part of the same broader pattern where the appearance of ownership is preserved while the reality of it quietly erodes.</p><p>To be clear, Sony did not say anything about selling “physical” copies of games in the manner that <a href="https://www.tomsguide.com/news/live/gta-6-pre-orders-news-and-live-updates">GTA 6 </a>will, so we can’t say the company will go down that route. Still, it was interesting getting SKG’s take on this, since it’s a related topic.</p><h2 id="outlook">Outlook</h2><p>While we likely can’t stop console manufacturers from reversing course, we can at least ask for assurances that our digital purchases actually belong to us. This is why Stop Killing Games’ efforts are so important, especially now.</p><p>We’ll see how things play out, but for now, it might be best to brace for what’s to come.</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/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak">PS6 price could be in the same stratosphere as the Steam Machine</a></li><li><a href="https://www.tomsguide.com/gaming/ps6-just-tipped-for-huge-specs-upgrade-to-take-on-gaming-pcs">PS6 just tipped for huge specs upgrade to take on gaming PCs</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/macbook-neo-at-usd699-is-it-still-worthwhile-or-should-you-get-the-new-xps-13-instead">MacBook Neo at $699 — is it still worthwhile?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/customers-need-assurances-their-games-wont-be-taken-from-them-after-purchase-stop-killing-games-on-playstations-decision-to-kill-physical-discs</link>
                                                                            <description>
                            <![CDATA[ We spoke with Stop Killing Games to get their take on Sony's announcement that it will no longer produce discs for new games starting in 2028. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">mYTe2Bh6rdFfLfoZstMzJ4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ecidnCAguSkpYaD5oKosUH-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 02 Jul 2026 04:15:00 +0000</pubDate>                                                                                                                                <updated>Thu, 02 Jul 2026 20:03:34 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ecidnCAguSkpYaD5oKosUH-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PS5]]></media:description>                                                            <media:text><![CDATA[PS5]]></media:text>
                                <media:title type="plain"><![CDATA[PS5]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ecidnCAguSkpYaD5oKosUH-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>In case you didn’t know, <a href="https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you">PlayStation is officially killing physical discs</a>. The company says this is a natural step that aligns with how most players buy and play games. Considering how 85% of PlayStation games (via <a href="chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.sony.com/en/SonyInfo/IR/library/presen/er/pdf/25q4_supplement.pdf" target="_blank">PlayStation's financials</a>) are bought digitally, this move isn’t all that surprising — though that fact doesn’t ease the concern of many who see this as a wrong move.</p><p>Tom’s Guide reached out to Ross Scott, Founder of <a href="https://www.stopkillinggames.com/en" target="_blank">Stop Killing Games</a> — the campaign pushing for legal protections so games don’t disappear once publishers stop supporting them — to get their take on what this announcement means for PlayStation players and gamers as a whole.</p><p>The group’s responses were measured on some points but clear on others. While they didn’t outright call Sony’s consumer preference argument false, they argued that the bigger issue isn’t really about discs at all. Here are some highlights from their answers to our questions.</p><h2 id="the-disc-isn-t-the-problem">The disc isn't the problem</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hhrYrGQkptDpU5UMQUECcY" name="PS5 Slim-17.jpg" alt="PS5 Slim" src="https://cdn.mos.cms.futurecdn.net/hhrYrGQkptDpU5UMQUECcY-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Ross didn’t argue about whether most people preferred digital to physical. Instead, they challenged the notion that removing physical discs is the next logical step with no downsides. In their estimation, the conversation has become too focused on the format itself rather than on what players lose when that format disappears.</p><p>“<strong>The lack of the disc is just a symptom and not the core problem in itself</strong>,” Scott told us. They see the shift away from physical media as a surface-level change that masks a deeper issue: the gradual erosion of player ownership and long-term access to games.</p><div><blockquote><p>"What customers need [is] assurances their games won't be taken from them after purchase."</p><p>Ross Scott, Founder of Stop Killing Games</p></blockquote></div><p>Having a physical disc gives players something close to real ownership. Even if a publisher decided to shut down servers or stop supporting a game, you still (in most cases) had a working copy. This hasn’t been a thing on PC for a long time, and it appears the same will happen on consoles. Stop Killing Games thinks that’s why Sony’s response is wrong. Players are losing one of the last ways to keep a game they bought.</p><p>“<strong>What customers need [is] assurances their games won't be taken from them after purchase, which large publishers sometimes have a very poor track record on</strong>,” Scott said.</p><h2 id="second-hand-sales-and-publisher-incentives">Second-hand sales and publisher incentives</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5951px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="UNQTPWHvjo8WP4aCPUT58C" name="shutterstock_2302850573.jpg" alt="Video game collection in a drawer alongside a controller and wires packed neatly" src="https://cdn.mos.cms.futurecdn.net/UNQTPWHvjo8WP4aCPUT58C-1920-80.jpg" mos="" align="middle" fullscreen="" width="5951" height="3347" 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>We also asked about the impact on the used-games market and on retail competition. Their answer was more nuanced than you might expect from an anti-DRM campaign.</p><p>“<strong>I actually am sympathetic to publishers wanting to avoid secondhand sales, as in my opinion, that has led to lower prices overall (think of all the large sale events or digital game giveaways we see nowadays), but that also assumes competition in the market</strong>,” Scott added.</p><p>They also pointed out that copyrighted works already come with certain legal monopolies, and they’re wary of companies expanding that control through technical means without going through the proper legal process in different countries.</p><p>Additionally, they noted that recent examples, such as price increases following major acquisitions, show how quickly consumer-friendly promises can shift once competition decreases.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVm7W"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVm7W.js" async></script><h2 id="a-warning-from-the-past">A warning from the past</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="ehKH6GSEWqriffcToAJZgG" name="shutterstock_1870302739.jpg" alt="Xbox Series X controller being held" src="https://cdn.mos.cms.futurecdn.net/ehKH6GSEWqriffcToAJZgG-1920-80.jpg" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>The all-digital future that many dreaded is effectively here, but the idea isn’t completely new. To that end, SKG pointed to Microsoft’s original Xbox One reveal as a cautionary example. Even though Microsoft walked back many of the most controversial features after receiving backlash, SKG sees the 2013 presentation as a sign of where parts of the industry still want to go.</p><div><blockquote><p>"I felt like the original Xbox One reveal was a sign of where the industry would like to take things"</p><p>Ross Scott, Founder of Stop Killing Games</p></blockquote></div><p>“<strong>Not to pick on Microsoft in particular, but I felt like the original Xbox One reveal was a sign of where the industry would like to take things</strong>,” Scott continued.</p><p>Some of Microsoft's original plans included: mandatory daily online checks, or your games would stop working, unclear rules around used games, and no guarantees that your library would survive once support for the console ended. Gamers decried all of these, but we’ve since seen them effectively become standard for all game consoles. Not having physical discs will just make it easier for companies to enact such measures.</p><p>Stop Killing Games added that they don’t believe digital games are inherently bad. When handled responsibly, digital-only games have real benefits, such as easier ways to back up purchases by copying games to an external hard drive. The danger lies when publishers treat digital ownership as something temporary or revocable.</p><h2 id="when-physical-doesn-t-mean-physical">When “physical” doesn’t mean physical</h2><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="Dr6t5xfKCVPGaaKmReweqN" name="GTA6-TV-02" alt="A GTA 6 screenshot on a TV." src="https://cdn.mos.cms.futurecdn.net/Dr6t5xfKCVPGaaKmReweqN-1920-80.jpg" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock / Rockstar / Tom's Guide)</span></figcaption></figure><p>One area where Stop Killing Games was more direct was the growing trend of retailers selling “physical editions” that contain nothing but a download code inside a box—such as <a href="https://www.tomsguide.com/news/live/gta-6-pre-orders-news-and-live-updates">GTA 6 not launching with a game disc</a>. They described this as misleading to consumers.</p><div><blockquote><p>"The average person expects something marketed as a physical copy of something to be physical."</p><p>Ross Scott, Founder of Stop Killing Games</p></blockquote></div><p>“<strong>I think this does create a sense of deception among consumers, since regardless of one's opinion on digital v. physical games, the average person expects something marketed as a physical copy of something to be physical</strong>.”</p><p>This practice also raises questions about what ownership even means. If the only thing inside the box is a code that can be revoked or tied to an account that might one day disappear, then the idea of “owning” a physical copy starts to feel hollow. They see this as part of the same broader pattern where the appearance of ownership is preserved while the reality of it quietly erodes.</p><p>To be clear, Sony did not say anything about selling “physical” copies of games in the manner that <a href="https://www.tomsguide.com/news/live/gta-6-pre-orders-news-and-live-updates">GTA 6 </a>will, so we can’t say the company will go down that route. Still, it was interesting getting SKG’s take on this, since it’s a related topic.</p><h2 id="outlook">Outlook</h2><p>While we likely can’t stop console manufacturers from reversing course, we can at least ask for assurances that our digital purchases actually belong to us. This is why Stop Killing Games’ efforts are so important, especially now.</p><p>We’ll see how things play out, but for now, it might be best to brace for what’s to come.</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/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak">PS6 price could be in the same stratosphere as the Steam Machine</a></li><li><a href="https://www.tomsguide.com/gaming/ps6-just-tipped-for-huge-specs-upgrade-to-take-on-gaming-pcs">PS6 just tipped for huge specs upgrade to take on gaming PCs</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/macbook-neo-at-usd699-is-it-still-worthwhile-or-should-you-get-the-new-xps-13-instead">MacBook Neo at $699 — is it still worthwhile?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ PlayStation is officially killing physical discs — here's when they disappear and what that means for you ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Not a rumor or speculation. PlayStation is officially ending physical disc production. That news comes directly from Sid Shuman, Senior Director of Sony Interactive Entertainment Content Communications.</p><p>On the <a href="https://blog.playstation.com/2026/07/01/physical-disc-production-ending-in-january-2028-for-new-games-releasing-on-playstation-consoles/" target="_blank">PlayStation Blog</a>, Shuman says the company made this decision because customers have continued to shift away from physical discs to digital. </p><p>To that end, “physical disc production for all new games releasing on PlayStation consoles will be discontinued starting in January 2028,” says Shuman. After that date, new games will only be available in digital format on the PlayStation Store and at retailers. Games released or due for release on disc before 2028 won’t be affected.</p><p>“This is a natural direction for Sony Interactive Entertainment to adapt to consumer trends as the general preference for digital media significantly outpaces physical discs,” says Shuman. “This transition will enable us to align more closely with how most of our community prefers to access and play games today.”</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVm7W"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVm7W.js" async></script><p>Today’s announcement might be shocking, but it isn’t all that surprising. In PlayStation’s 2025 Q4 financial report (<a href="https://x.com/Genki_JPN/status/2052587530835591595?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E2052587530835591595%7Ctwgr%5E43eab9650f32d4b8d603a2d9c3ece5a7f4428819%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fwww.g2a.com%2Fnews%2Ffeatures%2F85-of-playstation-game-sales-are-digital-is-physical-gaming-dying%2F" target="_blank"><u>via Genki on X</u></a>), the company stated that 85% of games sold on the platform were purchased digitally. This is a trend we’ve seen across all gaming consoles over the past decade, with acceleration during the pandemic.</p><p>Given this news, it’s safe to assume that the yet-to-be-announced PS6 won’t have a disc drive. The same might also be true for the upcoming <a href="https://www.tomsguide.com/gaming/xbox/next-xbox-will-play-your-xbox-and-pc-games-new-ceo-promises">Xbox Project Helix</a>, which is reportedly going to be a midway point between a console and a PC. Speaking of PC, that platform has been all-digital for ages as well, showing that gamers are generally already used to not owning physical copies of their games.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZzprM54qboYxMNpdopFayd" name="PS5 Pro-14" alt="PS5 Pro sitting horizontally in front of a TV" src="https://cdn.mos.cms.futurecdn.net/ZzprM54qboYxMNpdopFayd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>We reached out to <a href="https://www.stopkillinggames.com/en" target="_blank">Stop Killing Games</a> (a consumer rights group) for comment about this story. They said gamers want assurances that their games won’t be taken from them after purchase, and that decisions like this only serve to erode that trust.</p><p>“Digital games in themselves are not a problem and have multiple advantages for both parties when run responsibly, giving customers the freedom to back up their game sometimes in ways better than physical copies,” says Stop Killing Games. “When handled irresponsibly, they're a death sentence for games, which is what has led to the Stop Killing Games movement in the first place.”</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="y5T6EzpDkzjkm8NbGVewWW" name="PS5 Pro-9" alt="The PlayStation logo on a PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Lastly, PlayStation also says it is <a href="https://blog.playstation.com/2026/07/01/an-update-on-playstation-store-for-ps3-and-ps-vita/" target="_blank">closing the PS3 and PS Vita digital stores</a>. Closures start this August in select markets and will happen globally by July of 2027. You will still be able to download previously purchased games after the closing dates "for the foreseeable future." If you want to purchase any PS3 or Vita games digitally, do it now before those stores are closed for good.</p><p>This is certainly devastating news for fans of physical games. If you fall into that camp, there isn't much you can do when the time comes. However, I expect companies like Limited Run Games to release physical versions of PS5 games even after this policy goes into place, so that is at least one option for select games. But for the PS6, it appears there won't be any choice but to play games digitally.</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/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak">PS6 price could be in the same stratosphere as the Steam Machine</a></li><li><a href="https://www.tomsguide.com/gaming/ps6-just-tipped-for-huge-specs-upgrade-to-take-on-gaming-pcs">PS6 just tipped for huge specs upgrade to take on gaming PCs</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/macbook-neo-at-usd699-is-it-still-worthwhile-or-should-you-get-the-new-xps-13-instead">MacBook Neo at $699 — is it still worthwhile?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/playstation-is-officially-killing-physical-discs-heres-when-they-disappear-and-what-that-means-for-you</link>
                                                                            <description>
                            <![CDATA[ Sony is officially ending physical disc versions of brand-new games starting in January 2028. Here's why the company has decided to make this decision. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nijEupkVLPZDVrrD3NaWLE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/FY4VGTzod8PrjU4mryi8hn-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Jul 2026 14:09:10 +0000</pubDate>                                                                                                                                <updated>Wed, 01 Jul 2026 14:14:48 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/FY4VGTzod8PrjU4mryi8hn-1920-80.jpg">
                                                            <media:credit><![CDATA[Rokas Tenys | Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[How to watch Super Bowl with your PS5]]></media:description>                                                            <media:text><![CDATA[How to watch Super Bowl with your PS5]]></media:text>
                                <media:title type="plain"><![CDATA[How to watch Super Bowl with your PS5]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/FY4VGTzod8PrjU4mryi8hn-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Not a rumor or speculation. PlayStation is officially ending physical disc production. That news comes directly from Sid Shuman, Senior Director of Sony Interactive Entertainment Content Communications.</p><p>On the <a href="https://blog.playstation.com/2026/07/01/physical-disc-production-ending-in-january-2028-for-new-games-releasing-on-playstation-consoles/" target="_blank">PlayStation Blog</a>, Shuman says the company made this decision because customers have continued to shift away from physical discs to digital. </p><p>To that end, “physical disc production for all new games releasing on PlayStation consoles will be discontinued starting in January 2028,” says Shuman. After that date, new games will only be available in digital format on the PlayStation Store and at retailers. Games released or due for release on disc before 2028 won’t be affected.</p><p>“This is a natural direction for Sony Interactive Entertainment to adapt to consumer trends as the general preference for digital media significantly outpaces physical discs,” says Shuman. “This transition will enable us to align more closely with how most of our community prefers to access and play games today.”</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMVm7W"></div>                            </div>                            <script src="https://kwizly.com/embed/eMVm7W.js" async></script><p>Today’s announcement might be shocking, but it isn’t all that surprising. In PlayStation’s 2025 Q4 financial report (<a href="https://x.com/Genki_JPN/status/2052587530835591595?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E2052587530835591595%7Ctwgr%5E43eab9650f32d4b8d603a2d9c3ece5a7f4428819%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fwww.g2a.com%2Fnews%2Ffeatures%2F85-of-playstation-game-sales-are-digital-is-physical-gaming-dying%2F" target="_blank"><u>via Genki on X</u></a>), the company stated that 85% of games sold on the platform were purchased digitally. This is a trend we’ve seen across all gaming consoles over the past decade, with acceleration during the pandemic.</p><p>Given this news, it’s safe to assume that the yet-to-be-announced PS6 won’t have a disc drive. The same might also be true for the upcoming <a href="https://www.tomsguide.com/gaming/xbox/next-xbox-will-play-your-xbox-and-pc-games-new-ceo-promises">Xbox Project Helix</a>, which is reportedly going to be a midway point between a console and a PC. Speaking of PC, that platform has been all-digital for ages as well, showing that gamers are generally already used to not owning physical copies of their games.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZzprM54qboYxMNpdopFayd" name="PS5 Pro-14" alt="PS5 Pro sitting horizontally in front of a TV" src="https://cdn.mos.cms.futurecdn.net/ZzprM54qboYxMNpdopFayd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>We reached out to <a href="https://www.stopkillinggames.com/en" target="_blank">Stop Killing Games</a> (a consumer rights group) for comment about this story. They said gamers want assurances that their games won’t be taken from them after purchase, and that decisions like this only serve to erode that trust.</p><p>“Digital games in themselves are not a problem and have multiple advantages for both parties when run responsibly, giving customers the freedom to back up their game sometimes in ways better than physical copies,” says Stop Killing Games. “When handled irresponsibly, they're a death sentence for games, which is what has led to the Stop Killing Games movement in the first place.”</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="y5T6EzpDkzjkm8NbGVewWW" name="PS5 Pro-9" alt="The PlayStation logo on a PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Lastly, PlayStation also says it is <a href="https://blog.playstation.com/2026/07/01/an-update-on-playstation-store-for-ps3-and-ps-vita/" target="_blank">closing the PS3 and PS Vita digital stores</a>. Closures start this August in select markets and will happen globally by July of 2027. You will still be able to download previously purchased games after the closing dates "for the foreseeable future." If you want to purchase any PS3 or Vita games digitally, do it now before those stores are closed for good.</p><p>This is certainly devastating news for fans of physical games. If you fall into that camp, there isn't much you can do when the time comes. However, I expect companies like Limited Run Games to release physical versions of PS5 games even after this policy goes into place, so that is at least one option for select games. But for the PS6, it appears there won't be any choice but to play games digitally.</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/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak">PS6 price could be in the same stratosphere as the Steam Machine</a></li><li><a href="https://www.tomsguide.com/gaming/ps6-just-tipped-for-huge-specs-upgrade-to-take-on-gaming-pcs">PS6 just tipped for huge specs upgrade to take on gaming PCs</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/macbook-neo-at-usd699-is-it-still-worthwhile-or-should-you-get-the-new-xps-13-instead">MacBook Neo at $699 — is it still worthwhile?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ PS6 price could be in the same stratosphere as the Steam Machine, based on new leak ]]></title>
                                                                                                <dc:content><![CDATA[ <p>If you hoped the <a href="https://www.tomsguide.com/gaming/playstation/ps6-leaks-and-rumors">PS6</a> would cost less than $1,000, I have some potentially bad news for you. According to a new leak, the PS6 currently costs $960 in materials to manufacture. Unless Sony is willing to sell the yet-to-be-announced next-generation consoles, the PS6 could cost about as much as the equally pricey <a href="https://www.tomsguide.com/gaming/steam-machine-review">Steam Machine</a>.</p><p>The leak in question comes from <a href="https://www.resetera.com/threads/kepler_l2-says-the-bom-bill-of-materials-cost-of-the-ps6-has-increased-by-200-since-the-760-number-he-quoted-march-putting-it-close-to-1000.1562929/" target="_blank">Kepler_K2</a> (via <a href="https://insider-gaming.com/playstation-6-costs/" target="_blank">Insider Gamer</a>), who has a decent track record of hardware leaks. Kepler claims that the BoM (bill of materials) for the PS6 has jumped up by $200 since March of this year. Where the console cost $760 to manufacture, it will now cost $960. The <a href="https://www.tomsguide.com/gaming/playstation/major-sony-ps5-price-hike-just-hit-all-models-heres-what-youll-pay-now">PS5 Pro saw a similar price hike</a>, rising from $699 to $899 after two price increases.</p><p>Unfortunately, the PS6 could cost even more to manufacture. As <a href="https://wccftech.com/expert-warns-memory-prices-will-climb-up-to-50-per-quarter-with-no-relief-until-2028/" target="_blank">Wccftech</a> reports, an <a href="https://x.com/jukan05/status/2068895341706109191" target="_blank">X user named Jukan</a> posted a report from the banking firm Jefferies that claims to have spoken with a tech analyst about the <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAM crisis</a>. The expert predicts that RAM and SSD will see a 40% to 50% hike in Q3 2026 and another 30% to 40% hike in the final quarter of this year. If this happens, then the PS6’s cost will undoubtedly shoot beyond the $1,000 range.</p><p>Sony and other console manufacturers have typically sold systems at a loss to recoup their costs through software sales. <a href="https://www.videogameschronicle.com/news/sony-says-it-doesnt-plan-to-sell-hardware-at-significant-losses-but-is-monitoring-the-market-with-ps6-in-mind/" target="_blank">VGC</a> reports that during a Q&A session with Sony’s Game & Network Services division, one attendee asked if Sony would subsidize the cost of its next-gen hardware. Sony said the company doesn’t plan to sell hardware “at significant losses” but is “monitoring the market.”</p><p>Given all of these factors, it’s unrealistic to assume the PS6 will be south of $1,000 if things continue on their current trajectory. Indeed, if prices continue to skyrocket, a $1,000 asking price might be the best-case scenario. If that’s the case, then many folks will be priced out of next-gen consoles.</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/playstation/ps6-wont-abandon-physical-games-claims-new-report">PS6 won’t abandon physical games, claims new report</a></li><li><a href="https://www.tomsguide.com/gaming/ps6-just-tipped-for-huge-specs-upgrade-to-take-on-gaming-pcs">PS6 just tipped for huge specs upgrade to take on gaming PCs</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/sony-will-allegedly-launch-three-ps6-systems-including-two-consoles-and-a-handheld-claims-leaker">Sony will allegedly launch three PS6 systems</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/ps6-price-could-be-in-the-same-stratosphere-as-the-steam-machine-based-on-new-leak</link>
                                                                            <description>
                            <![CDATA[ A new leak claims that the PS6 currently costs $960 to manufacture. If true, Sony's next-gen system could cost as much as (or more than) the Steam Machine. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">WW33gSqPQRMgtXGVtTzXZ9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 29 Jun 2026 17:54:57 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The PlayStation logo on a PS5 Pro]]></media:description>                                                            <media:text><![CDATA[The PlayStation logo on a PS5 Pro]]></media:text>
                                <media:title type="plain"><![CDATA[The PlayStation logo on a PS5 Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you hoped the <a href="https://www.tomsguide.com/gaming/playstation/ps6-leaks-and-rumors">PS6</a> would cost less than $1,000, I have some potentially bad news for you. According to a new leak, the PS6 currently costs $960 in materials to manufacture. Unless Sony is willing to sell the yet-to-be-announced next-generation consoles, the PS6 could cost about as much as the equally pricey <a href="https://www.tomsguide.com/gaming/steam-machine-review">Steam Machine</a>.</p><p>The leak in question comes from <a href="https://www.resetera.com/threads/kepler_l2-says-the-bom-bill-of-materials-cost-of-the-ps6-has-increased-by-200-since-the-760-number-he-quoted-march-putting-it-close-to-1000.1562929/" target="_blank">Kepler_K2</a> (via <a href="https://insider-gaming.com/playstation-6-costs/" target="_blank">Insider Gamer</a>), who has a decent track record of hardware leaks. Kepler claims that the BoM (bill of materials) for the PS6 has jumped up by $200 since March of this year. Where the console cost $760 to manufacture, it will now cost $960. The <a href="https://www.tomsguide.com/gaming/playstation/major-sony-ps5-price-hike-just-hit-all-models-heres-what-youll-pay-now">PS5 Pro saw a similar price hike</a>, rising from $699 to $899 after two price increases.</p><p>Unfortunately, the PS6 could cost even more to manufacture. As <a href="https://wccftech.com/expert-warns-memory-prices-will-climb-up-to-50-per-quarter-with-no-relief-until-2028/" target="_blank">Wccftech</a> reports, an <a href="https://x.com/jukan05/status/2068895341706109191" target="_blank">X user named Jukan</a> posted a report from the banking firm Jefferies that claims to have spoken with a tech analyst about the <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAM crisis</a>. The expert predicts that RAM and SSD will see a 40% to 50% hike in Q3 2026 and another 30% to 40% hike in the final quarter of this year. If this happens, then the PS6’s cost will undoubtedly shoot beyond the $1,000 range.</p><p>Sony and other console manufacturers have typically sold systems at a loss to recoup their costs through software sales. <a href="https://www.videogameschronicle.com/news/sony-says-it-doesnt-plan-to-sell-hardware-at-significant-losses-but-is-monitoring-the-market-with-ps6-in-mind/" target="_blank">VGC</a> reports that during a Q&A session with Sony’s Game & Network Services division, one attendee asked if Sony would subsidize the cost of its next-gen hardware. Sony said the company doesn’t plan to sell hardware “at significant losses” but is “monitoring the market.”</p><p>Given all of these factors, it’s unrealistic to assume the PS6 will be south of $1,000 if things continue on their current trajectory. Indeed, if prices continue to skyrocket, a $1,000 asking price might be the best-case scenario. If that’s the case, then many folks will be priced out of next-gen consoles.</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/playstation/ps6-wont-abandon-physical-games-claims-new-report">PS6 won’t abandon physical games, claims new report</a></li><li><a href="https://www.tomsguide.com/gaming/ps6-just-tipped-for-huge-specs-upgrade-to-take-on-gaming-pcs">PS6 just tipped for huge specs upgrade to take on gaming PCs</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/sony-will-allegedly-launch-three-ps6-systems-including-two-consoles-and-a-handheld-claims-leaker">Sony will allegedly launch three PS6 systems</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I’m obsessed with my PS5 and these are the 9 Prime Day game deals I have my eye on, starting at just $9 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a> is one of the best gadgets I've ever bought with my own money, and I've spent thousands of hours playing my favorite games on it. I love revisiting the classics and I'm always looking to pick up a new one I've never heard of. But let's face it: PS5 games are expensive, and not everyone can afford to pay full price.</p><p>That's where <a href="https://www.tomsguide.com/live/news/prime-day-2026-handpicked-editor-recommended-deals-live">Amazon Prime Day sales</a> come in: they're a great time to grab a PS5 game without breaking the bank. As a lover of video games, I've handpicked my top deals. The cheapest game you can buy right now is <a href="https://www.amazon.com/Lost-Soul-Aside-PS5-PlayStation-5/dp/B0DX42RXMS/" target="_blank" rel="nofollow">Lost Soul Aside which is down to just $9 from $59 </a>— how could you say no to that? For football fans, <a href="https://www.amazon.com/EA-Sports-FC-26-Standard/dp/B0FH132GYR/" target="_blank" rel="nofollow">EA Sports FC 26 is 64% off right now</a>, and it's the ideal game to play during halftime as the FIFA World Cup gathers steam.</p><p>My top choice, though? Why, <a href="https://www.amazon.com/Clair-Obscur-Expedition-PS5-PlayStation-5/dp/B0DK6225DY/" target="_blank" rel="nofollow">Clair Obscur: Expedition 33, of course, which is available for $39 right now</a> ($33 would have been more fitting, but oh well). It's a game I can't shut up about and one I recommend every gamer needs to play at least once.</p><p>That's not all. There are plenty more deals to be taken advantage of, on sports, horror, RPG, and action-adventure games. So, without further ado, here are my top Prime Day PS5 game deals (so far).</p><h2 id="meet-your-ps5-games-deals-expert">Meet your PS5 games deals expert</h2><h2 class="article-body__section" id="section-quick-links"><span>Quick links</span></h2><ul><li><strong></strong><a href="https://www.amazon.com/primeday" target="_blank" rel="nofollow"><strong>Shop all Amazon Prime Day deals now</strong></a><strong></strong></li><li><strong>Lost Soul Aside: </strong><a href="https://www.amazon.com/Lost-Soul-Aside-PS5-PlayStation-5/dp/B0DX42RXMS/" target="_blank" rel="nofollow"><strong>was $59 now $9</strong></a><strong></strong></li><li><strong>EA Sports FC 26: </strong><a href="https://www.amazon.com/EA-SPORTS-FC-26-PlayStation-5/dp/B0FH132GYR/" target="_blank" rel="nofollow"><strong>was $69 now $24</strong></a><strong></strong></li><li><strong>Elden Ring: </strong><a href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" target="_blank" rel="nofollow"><strong>was $49 now $19</strong></a><strong></strong></li><li><strong>Metal Gear Solid Δ Snake Eater: </strong><a href="https://www.amazon.com/METAL-GEAR-SOLID-TACTICAL-PlayStation-5/dp/B0D4RJGFDT/" target="_blank" rel="nofollow"><strong>was $49 now $24</strong></a><strong></strong></li><li><strong>Silent Hill 2: </strong><a href="https://www.amazon.com/Silent-Hill-2-PS5-PlayStation-5/dp/B0CMC3C3Z9/" target="_blank" rel="nofollow"><strong>was $39 now $19</strong></a><strong></strong></li><li><strong>Assassin's Creed Shadows: </strong><a href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM/" target="_blank" rel="nofollow"><strong>was $50 now $29</strong></a><strong></strong></li><li><strong>Star Wars Outlaws: </strong><a href="https://www.amazon.com/Star-Wars-Outlaws-Limited-Exclusive-PlayStation/dp/B0D187PJHJ/" target="_blank" rel="nofollow"><strong>was $19 now $14</strong></a><strong></strong></li><li><strong>Clair Obscur: Expedition 33: </strong><a href="https://www.amazon.com/Clair-Obscur-Expedition-PS5-PlayStation-5/dp/B0DK6225DY/" target="_blank" rel="nofollow"><strong>was $49 now $39</strong></a><strong></strong></li><li><strong>Resident Evil Requiem:</strong><a href="https://www.amazon.com/Resident-Evil-Requiem-Amazon-Exclusive-PlayStation/dp/B0FY929QN1/" target="_blank" rel="nofollow"><strong> was $69 now $55</strong></a><strong></strong></li></ul><h2 class="article-body__section" id="section-best-prime-day-ps5-games-deals"><span>Best Prime Day PS5 games deals</span></h2><div class="product"><a data-dimension112="85bab94a-42e3-417d-9a12-ff94ec7132ec" data-action="Deal Block" data-label="Soul Aside" data-dimension48="Soul Aside" data-dimension25="$9" href="https://www.amazon.com/Lost-Soul-Aside-PS5-PlayStation-5/dp/B0DX42RXMS/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1204px;"><p class="vanilla-image-block" style="padding-top:124.58%;"><img id="YSgsNTgMVfmyRH9tioe37X" name="Lost Soul Aside deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YSgsNTgMVfmyRH9tioe37X-1920-80.jpg" mos="" align="middle" fullscreen="" width="1204" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Lost Soul Aside is a stylish action-RPG which follows the story of Kaser, a warrior entangled in a rebel group fighting a tyrannical empire. When a mysterious invasion called the Voidrax steals his sister's soul, he bonds with a dragon-like entity named Arena to save her and liberate humanity.<a class="view-deal button" href="https://www.amazon.com/Lost-Soul-Aside-PS5-PlayStation-5/dp/B0DX42RXMS/" target="_blank" rel="nofollow" data-dimension112="85bab94a-42e3-417d-9a12-ff94ec7132ec" data-action="Deal Block" data-label="Soul Aside" data-dimension48="Soul Aside" data-dimension25="$9">View Deal</a></p></div><div class="product"><a data-dimension112="19325f9d-722b-42ee-9c72-d840914df326" data-action="Deal Block" data-label="FC 26" data-dimension48="FC 26" data-dimension25="$24" href="https://www.amazon.com/EA-SPORTS-FC-26-PlayStation-5/dp/B0FH132GYR/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1232px;"><p class="vanilla-image-block" style="padding-top:121.75%;"><img id="8NnQFqwYorjYS4SR66BWG8" name="EAFC26 deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8NnQFqwYorjYS4SR66BWG8-1920-80.jpg" mos="" align="middle" fullscreen="" width="1232" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>What better time to pick up <a href="https://www.tomsguide.com/gaming/ea-sports-fc-26-review" data-dimension112="19325f9d-722b-42ee-9c72-d840914df326" data-action="Deal Block" data-label="FC 26" data-dimension48="FC 26" data-dimension25="$24">EA Sports FC 26 </a>than during the FIFA World Cup, am I right? The latest installment in EA's popular soccer simulator  comes feature-complete with Ultimate Team, Career Mode and more. FC 26 also includes licenses for all the biggest soccer leagues around, including the Premier League.<a class="view-deal button" href="https://www.amazon.com/EA-SPORTS-FC-26-PlayStation-5/dp/B0FH132GYR/" target="_blank" rel="nofollow" data-dimension112="19325f9d-722b-42ee-9c72-d840914df326" data-action="Deal Block" data-label="FC 26" data-dimension48="FC 26" data-dimension25="$24">View Deal</a></p></div><div class="product"><a data-dimension112="eddb8630-2dc2-4d70-aea6-f625a6be436a" data-action="Deal Block" data-label="Ring" data-dimension48="Ring" data-dimension25="$19" href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" 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="MbKNJXNrxvLH7LepfJuUAm" name="elden ring deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/MbKNJXNrxvLH7LepfJuUAm-1920-80.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/reviews/elden-ring" data-dimension112="eddb8630-2dc2-4d70-aea6-f625a6be436a" data-action="Deal Block" data-label="Ring" data-dimension48="Ring" data-dimension25="$19">Elden Ring</a> is an open-world wonder, offering rewarding gameplay, a cohesive setting and gripping lore. Some of the open-world systems feel clunkier than they should, though, but that isn't a dealbreaker, especially at the low, low price of just $19.<a class="view-deal button" href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" target="_blank" rel="nofollow" data-dimension112="eddb8630-2dc2-4d70-aea6-f625a6be436a" data-action="Deal Block" data-label="Ring" data-dimension48="Ring" data-dimension25="$19">View Deal</a></p></div><div class="product"><a data-dimension112="1c9c82d5-0a56-4a94-a831-07f481bcbec1" data-action="Deal Block" data-label="Δ: Snake Eater" data-dimension48="Δ: Snake Eater" data-dimension25="$24" href="https://www.amazon.com/METAL-GEAR-SOLID-TACTICAL-PlayStation-5/dp/B0D4RJGFDT/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1180px;"><p class="vanilla-image-block" style="padding-top:127.12%;"><img id="mXH3uuroBNsvrD4J4kvbA8" name="metal-gear-solid-delta-ps5-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mXH3uuroBNsvrD4J4kvbA8-1920-80.jpg" mos="" align="middle" fullscreen="" width="1180" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/METAL-GEAR-SOLID-TACTICAL-PlayStation-5/dp/B0D4RJGFDT/" target="_blank" rel="nofollow" data-dimension112="1c9c82d5-0a56-4a94-a831-07f481bcbec1" data-action="Deal Block" data-label="Δ: Snake Eater" data-dimension48="Δ: Snake Eater" data-dimension25="$24">Δ: Snake Eater: was $49 now $24</a></strong><br><a href="https://www.tomsguide.com/gaming/metal-gear-solid-delta-snake-eater-review">Metal Gear Solid Delta: Snake Eater</a> is a masterful remake of this beloved classic. The updated graphics and modernized controls make it viable for modern gamers, but you still get the same basic experience of the original. Right now, this is the definitive way to experience Metal Gear Solid 3.<a class="view-deal button" href="https://www.amazon.com/METAL-GEAR-SOLID-TACTICAL-PlayStation-5/dp/B0D4RJGFDT/" target="_blank" rel="nofollow" data-dimension112="1c9c82d5-0a56-4a94-a831-07f481bcbec1" data-action="Deal Block" data-label="Δ: Snake Eater" data-dimension48="Δ: Snake Eater" data-dimension25="$24">View Deal</a></p></div><div class="product"><a data-dimension112="dbcef586-8c4c-49c0-852b-b143dc9219a5" data-action="Deal Block" data-label="2" data-dimension48="2" data-dimension25="$19" href="https://www.amazon.com/Silent-Hill-2-PS5-PlayStation-5/dp/B0CMC3C3Z9/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1137px;"><p class="vanilla-image-block" style="padding-top:131.93%;"><img id="7qqzgFNziQmswnQyqqRBEm" name="71E3B-85r1L._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7qqzgFNziQmswnQyqqRBEm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1137" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>A loving remake of a true horror great, <a href="https://www.tomsguide.com/gaming/silent-hill-2-review" data-dimension112="dbcef586-8c4c-49c0-852b-b143dc9219a5" data-action="Deal Block" data-label="2" data-dimension48="2" data-dimension25="$19">Silent Hill 2</a> is creepy, a little too bloated and confusing, but hot dang does it feel good to shotgun monsters that look too X-rated for the “Terrifier” movies. It's a brutal, beautiful survival horror remake, and for just $19, it's a steal right now.<a class="view-deal button" href="https://www.amazon.com/Silent-Hill-2-PS5-PlayStation-5/dp/B0CMC3C3Z9/" target="_blank" rel="nofollow" data-dimension112="dbcef586-8c4c-49c0-852b-b143dc9219a5" data-action="Deal Block" data-label="2" data-dimension48="2" data-dimension25="$19">View Deal</a></p></div><div class="product"><a data-dimension112="091075f6-9225-457d-8383-919e7ce538b8" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$29" href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1158px;"><p class="vanilla-image-block" style="padding-top:129.53%;"><img id="tEFopvifi8tQ9BfBHB9rUF" name="81yVcGESG9L._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tEFopvifi8tQ9BfBHB9rUF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1158" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/gaming/assassins-creed-shadows-review" data-dimension112="091075f6-9225-457d-8383-919e7ce538b8" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$29">Assassin’s Creed Shadows</a> delivers on its promise of bringing back classic stealth mechanics while introducing new ones and combining the best of the older and RPG titles. The detailed open-world of feudal Japan feels full of life with compelling playable and non-playable characters, and different fighting tactics enrich the combat.<a class="view-deal button" href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM/" target="_blank" rel="nofollow" data-dimension112="091075f6-9225-457d-8383-919e7ce538b8" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$29">View Deal</a></p></div><div class="product"><a data-dimension112="342f55ea-b223-4dec-a73a-0cb4fdb2650b" data-action="Deal Block" data-label="Outlaws" data-dimension48="Outlaws" data-dimension25="$14" href="https://www.amazon.com/Star-Wars-Outlaws-Limited-Exclusive-PlayStation/dp/B0D187PJHJ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1172px;"><p class="vanilla-image-block" style="padding-top:127.99%;"><img id="7orWhqyGvCd2P6VXQEnLMm" name="star-wars-outlaws-ps5-na-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7orWhqyGvCd2P6VXQEnLMm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1172" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/gaming/star-wars-outlaws-review-a-quintessential-outing-in-a-galaxy-far-far-away" data-dimension112="342f55ea-b223-4dec-a73a-0cb4fdb2650b" data-action="Deal Block" data-label="Outlaws" data-dimension48="Outlaws" data-dimension25="$14">Star Wars Outlaws</a> delivers a true Star Wars experience, featuring four total worlds teeming with expansive maps and various side quests for hours of unending fun. Space-based combat and general gunplay are solid with rare moments of stealth that can frustrate at times. If you didn't fancy it at launch, you might do now when it's available for $14.<a class="view-deal button" href="https://www.amazon.com/Star-Wars-Outlaws-Limited-Exclusive-PlayStation/dp/B0D187PJHJ/" target="_blank" rel="nofollow" data-dimension112="342f55ea-b223-4dec-a73a-0cb4fdb2650b" data-action="Deal Block" data-label="Outlaws" data-dimension48="Outlaws" data-dimension25="$14">View Deal</a></p></div><div class="product"><a data-dimension112="466a9e0c-a7df-42a1-a1cb-78d6638f73ae" data-action="Deal Block" data-label="Expedition 33" data-dimension48="Expedition 33" data-dimension25="$39" href="https://www.amazon.com/Clair-Obscur-Expedition-PS5-PlayStation-5/dp/B0DK6225DY/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:522px;"><p class="vanilla-image-block" style="padding-top:115.52%;"><img id="rT7AZpcNQnSsRCYbodpyCo" name="Clair Obscur Expedition 33" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rT7AZpcNQnSsRCYbodpyCo-1920-80.jpg" mos="" align="middle" fullscreen="" width="522" height="603" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/gaming/clair-obscur-expedition-33-review" data-dimension112="466a9e0c-a7df-42a1-a1cb-78d6638f73ae" data-action="Deal Block" data-label="Expedition 33" data-dimension48="Expedition 33" data-dimension25="$39">Clair Obscur: Expedition 33</a> is an addition to the turn-based RPG genre, one that boasts challenging, engaging combat mechanics and plays out in a distinct and utterly beautiful fantasy world. From start to finish, we were fascinated by the sights, sounds and tasks that lay ahead. If you love RPGs, it should be at the top of your list; we really can’t recommend it enough.<a class="view-deal button" href="https://www.amazon.com/Clair-Obscur-Expedition-PS5-PlayStation-5/dp/B0DK6225DY/" target="_blank" rel="nofollow" data-dimension112="466a9e0c-a7df-42a1-a1cb-78d6638f73ae" data-action="Deal Block" data-label="Expedition 33" data-dimension48="Expedition 33" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="b4cb35ea-3bb2-41d9-a6d1-f2cda4ac354d" data-action="Deal Block" data-label="Requiem" data-dimension48="Requiem" data-dimension25="$55" href="https://www.amazon.com/Resident-Evil-Requiem-Amazon-Exclusive-PlayStation/dp/B0FY929QN1/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1298px;"><p class="vanilla-image-block" style="padding-top:115.56%;"><img id="t6iarbisuGMy5SzXoHtF9Q" name="resident-evil-requiem-ps5-na-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/t6iarbisuGMy5SzXoHtF9Q-1920-80.jpg" mos="" align="middle" fullscreen="" width="1298" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/gaming/resident-evil-requiem-review" data-dimension112="b4cb35ea-3bb2-41d9-a6d1-f2cda4ac354d" data-action="Deal Block" data-label="Requiem" data-dimension48="Requiem" data-dimension25="$55">Resident Evil Requiem</a> combines elements from prior installments to deliver one of the strongest entries yet. Though it doesn’t take risks, its thrilling gameplay and stunning graphics keep you engaged from beginning to end.<a class="view-deal button" href="https://www.amazon.com/Resident-Evil-Requiem-Amazon-Exclusive-PlayStation/dp/B0FY929QN1/" target="_blank" rel="nofollow" data-dimension112="b4cb35ea-3bb2-41d9-a6d1-f2cda4ac354d" data-action="Deal Block" data-label="Requiem" data-dimension48="Requiem" data-dimension25="$55">View Deal</a></p></div><h3 class="article-body__section" id="section-we-re-tracking-all-the-best-prime-day-ps5-deals"><span>We're tracking all the best Prime Day PS5 deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=video+games&min_discount_ratio=0.95&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));               }            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/amazon-prime-day-2026-ps5-games-deals</link>
                                                                            <description>
                            <![CDATA[ I love playing video games on my PS5, and this Amazon Prime Day, I've found the best deals, whether you're looking to revisit a favorite or pick up a new one. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4GUniVM5GneRxYYudVcWfd</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/znydGj3sLSUiWpVbHxdgPh-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 23 Jun 2026 18:47:24 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ nikita.achanta@futurenet.com (Nikita Achanta) ]]></author>                    <dc:creator><![CDATA[ Nikita Achanta ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oXuvixDz99SbZp9z8Uoor3-320-70.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Nikita is a Senior Writer on the Reviews team at Tom&#039;s Guide. She is a lifelong gaming and photography enthusiast, especially interested in wildlife photography. Having worked as a Sub Editor and Writer for Canon EMEA, she’s a bit of a grammar nerd (and a supporter of the Oxford comma), and has also interviewed photographers from all over the world and working in different genres.&lt;/p&gt;&lt;p&gt;A holder of two master’s degrees, the most recent one being in Magazine Journalism from Cardiff University, Nikita’s work has appeared in several publications such as Motor Sport Magazine, NME, Marriott Bonvoy, The Independent, and Metro. Her favorite tech includes the PS5, the DJI Air 3S, and the Fujifilm X-T50. She&#039;s also a licensed drone pilot and cameras expert so you&#039;ll find her testing those nearly every week.&lt;/p&gt;&lt;p&gt;In her downtime, Nikita can usually be found sinking hours into RPGs on her PS5, flying a drone, out on a walk with a camera in hand, at a concert, watching F1, or planning her next tattoo. You can follow her photography account on Instagram&lt;a href=&quot;https://www.instagram.com/photos.bynikita/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt; here&lt;/a&gt;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/znydGj3sLSUiWpVbHxdgPh-1920-80.jpg">
                                                            <media:credit><![CDATA[EA / Ubisoft / Capcom / Sandfall Interactive / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of PS5 games]]></media:description>                                                            <media:text><![CDATA[A selection of PS5 games]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of PS5 games]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/znydGj3sLSUiWpVbHxdgPh-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a> is one of the best gadgets I've ever bought with my own money, and I've spent thousands of hours playing my favorite games on it. I love revisiting the classics and I'm always looking to pick up a new one I've never heard of. But let's face it: PS5 games are expensive, and not everyone can afford to pay full price.</p><p>That's where <a href="https://www.tomsguide.com/live/news/prime-day-2026-handpicked-editor-recommended-deals-live">Amazon Prime Day sales</a> come in: they're a great time to grab a PS5 game without breaking the bank. As a lover of video games, I've handpicked my top deals. The cheapest game you can buy right now is <a href="https://www.amazon.com/Lost-Soul-Aside-PS5-PlayStation-5/dp/B0DX42RXMS/" target="_blank" rel="nofollow">Lost Soul Aside which is down to just $9 from $59 </a>— how could you say no to that? For football fans, <a href="https://www.amazon.com/EA-Sports-FC-26-Standard/dp/B0FH132GYR/" target="_blank" rel="nofollow">EA Sports FC 26 is 64% off right now</a>, and it's the ideal game to play during halftime as the FIFA World Cup gathers steam.</p><p>My top choice, though? Why, <a href="https://www.amazon.com/Clair-Obscur-Expedition-PS5-PlayStation-5/dp/B0DK6225DY/" target="_blank" rel="nofollow">Clair Obscur: Expedition 33, of course, which is available for $39 right now</a> ($33 would have been more fitting, but oh well). It's a game I can't shut up about and one I recommend every gamer needs to play at least once.</p><p>That's not all. There are plenty more deals to be taken advantage of, on sports, horror, RPG, and action-adventure games. So, without further ado, here are my top Prime Day PS5 game deals (so far).</p><h2 id="meet-your-ps5-games-deals-expert">Meet your PS5 games deals expert</h2><h2 class="article-body__section" id="section-quick-links"><span>Quick links</span></h2><ul><li><strong></strong><a href="https://www.amazon.com/primeday" target="_blank" rel="nofollow"><strong>Shop all Amazon Prime Day deals now</strong></a><strong></strong></li><li><strong>Lost Soul Aside: </strong><a href="https://www.amazon.com/Lost-Soul-Aside-PS5-PlayStation-5/dp/B0DX42RXMS/" target="_blank" rel="nofollow"><strong>was $59 now $9</strong></a><strong></strong></li><li><strong>EA Sports FC 26: </strong><a href="https://www.amazon.com/EA-SPORTS-FC-26-PlayStation-5/dp/B0FH132GYR/" target="_blank" rel="nofollow"><strong>was $69 now $24</strong></a><strong></strong></li><li><strong>Elden Ring: </strong><a href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" target="_blank" rel="nofollow"><strong>was $49 now $19</strong></a><strong></strong></li><li><strong>Metal Gear Solid Δ Snake Eater: </strong><a href="https://www.amazon.com/METAL-GEAR-SOLID-TACTICAL-PlayStation-5/dp/B0D4RJGFDT/" target="_blank" rel="nofollow"><strong>was $49 now $24</strong></a><strong></strong></li><li><strong>Silent Hill 2: </strong><a href="https://www.amazon.com/Silent-Hill-2-PS5-PlayStation-5/dp/B0CMC3C3Z9/" target="_blank" rel="nofollow"><strong>was $39 now $19</strong></a><strong></strong></li><li><strong>Assassin's Creed Shadows: </strong><a href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM/" target="_blank" rel="nofollow"><strong>was $50 now $29</strong></a><strong></strong></li><li><strong>Star Wars Outlaws: </strong><a href="https://www.amazon.com/Star-Wars-Outlaws-Limited-Exclusive-PlayStation/dp/B0D187PJHJ/" target="_blank" rel="nofollow"><strong>was $19 now $14</strong></a><strong></strong></li><li><strong>Clair Obscur: Expedition 33: </strong><a href="https://www.amazon.com/Clair-Obscur-Expedition-PS5-PlayStation-5/dp/B0DK6225DY/" target="_blank" rel="nofollow"><strong>was $49 now $39</strong></a><strong></strong></li><li><strong>Resident Evil Requiem:</strong><a href="https://www.amazon.com/Resident-Evil-Requiem-Amazon-Exclusive-PlayStation/dp/B0FY929QN1/" target="_blank" rel="nofollow"><strong> was $69 now $55</strong></a><strong></strong></li></ul><h2 class="article-body__section" id="section-best-prime-day-ps5-games-deals"><span>Best Prime Day PS5 games deals</span></h2><div class="product"><a data-dimension112="85bab94a-42e3-417d-9a12-ff94ec7132ec" data-action="Deal Block" data-label="Soul Aside" data-dimension48="Soul Aside" data-dimension25="$9" href="https://www.amazon.com/Lost-Soul-Aside-PS5-PlayStation-5/dp/B0DX42RXMS/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1204px;"><p class="vanilla-image-block" style="padding-top:124.58%;"><img id="YSgsNTgMVfmyRH9tioe37X" name="Lost Soul Aside deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YSgsNTgMVfmyRH9tioe37X-1920-80.jpg" mos="" align="middle" fullscreen="" width="1204" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Lost Soul Aside is a stylish action-RPG which follows the story of Kaser, a warrior entangled in a rebel group fighting a tyrannical empire. When a mysterious invasion called the Voidrax steals his sister's soul, he bonds with a dragon-like entity named Arena to save her and liberate humanity.<a class="view-deal button" href="https://www.amazon.com/Lost-Soul-Aside-PS5-PlayStation-5/dp/B0DX42RXMS/" target="_blank" rel="nofollow" data-dimension112="85bab94a-42e3-417d-9a12-ff94ec7132ec" data-action="Deal Block" data-label="Soul Aside" data-dimension48="Soul Aside" data-dimension25="$9">View Deal</a></p></div><div class="product"><a data-dimension112="19325f9d-722b-42ee-9c72-d840914df326" data-action="Deal Block" data-label="FC 26" data-dimension48="FC 26" data-dimension25="$24" href="https://www.amazon.com/EA-SPORTS-FC-26-PlayStation-5/dp/B0FH132GYR/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1232px;"><p class="vanilla-image-block" style="padding-top:121.75%;"><img id="8NnQFqwYorjYS4SR66BWG8" name="EAFC26 deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/8NnQFqwYorjYS4SR66BWG8-1920-80.jpg" mos="" align="middle" fullscreen="" width="1232" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>What better time to pick up <a href="https://www.tomsguide.com/gaming/ea-sports-fc-26-review" data-dimension112="19325f9d-722b-42ee-9c72-d840914df326" data-action="Deal Block" data-label="FC 26" data-dimension48="FC 26" data-dimension25="$24">EA Sports FC 26 </a>than during the FIFA World Cup, am I right? The latest installment in EA's popular soccer simulator  comes feature-complete with Ultimate Team, Career Mode and more. FC 26 also includes licenses for all the biggest soccer leagues around, including the Premier League.<a class="view-deal button" href="https://www.amazon.com/EA-SPORTS-FC-26-PlayStation-5/dp/B0FH132GYR/" target="_blank" rel="nofollow" data-dimension112="19325f9d-722b-42ee-9c72-d840914df326" data-action="Deal Block" data-label="FC 26" data-dimension48="FC 26" data-dimension25="$24">View Deal</a></p></div><div class="product"><a data-dimension112="eddb8630-2dc2-4d70-aea6-f625a6be436a" data-action="Deal Block" data-label="Ring" data-dimension48="Ring" data-dimension25="$19" href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" 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="MbKNJXNrxvLH7LepfJuUAm" name="elden ring deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/MbKNJXNrxvLH7LepfJuUAm-1920-80.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/reviews/elden-ring" data-dimension112="eddb8630-2dc2-4d70-aea6-f625a6be436a" data-action="Deal Block" data-label="Ring" data-dimension48="Ring" data-dimension25="$19">Elden Ring</a> is an open-world wonder, offering rewarding gameplay, a cohesive setting and gripping lore. Some of the open-world systems feel clunkier than they should, though, but that isn't a dealbreaker, especially at the low, low price of just $19.<a class="view-deal button" href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" target="_blank" rel="nofollow" data-dimension112="eddb8630-2dc2-4d70-aea6-f625a6be436a" data-action="Deal Block" data-label="Ring" data-dimension48="Ring" data-dimension25="$19">View Deal</a></p></div><div class="product"><a data-dimension112="1c9c82d5-0a56-4a94-a831-07f481bcbec1" data-action="Deal Block" data-label="Δ: Snake Eater" data-dimension48="Δ: Snake Eater" data-dimension25="$24" href="https://www.amazon.com/METAL-GEAR-SOLID-TACTICAL-PlayStation-5/dp/B0D4RJGFDT/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1180px;"><p class="vanilla-image-block" style="padding-top:127.12%;"><img id="mXH3uuroBNsvrD4J4kvbA8" name="metal-gear-solid-delta-ps5-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/mXH3uuroBNsvrD4J4kvbA8-1920-80.jpg" mos="" align="middle" fullscreen="" width="1180" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/METAL-GEAR-SOLID-TACTICAL-PlayStation-5/dp/B0D4RJGFDT/" target="_blank" rel="nofollow" data-dimension112="1c9c82d5-0a56-4a94-a831-07f481bcbec1" data-action="Deal Block" data-label="Δ: Snake Eater" data-dimension48="Δ: Snake Eater" data-dimension25="$24">Δ: Snake Eater: was $49 now $24</a></strong><br><a href="https://www.tomsguide.com/gaming/metal-gear-solid-delta-snake-eater-review">Metal Gear Solid Delta: Snake Eater</a> is a masterful remake of this beloved classic. The updated graphics and modernized controls make it viable for modern gamers, but you still get the same basic experience of the original. Right now, this is the definitive way to experience Metal Gear Solid 3.<a class="view-deal button" href="https://www.amazon.com/METAL-GEAR-SOLID-TACTICAL-PlayStation-5/dp/B0D4RJGFDT/" target="_blank" rel="nofollow" data-dimension112="1c9c82d5-0a56-4a94-a831-07f481bcbec1" data-action="Deal Block" data-label="Δ: Snake Eater" data-dimension48="Δ: Snake Eater" data-dimension25="$24">View Deal</a></p></div><div class="product"><a data-dimension112="dbcef586-8c4c-49c0-852b-b143dc9219a5" data-action="Deal Block" data-label="2" data-dimension48="2" data-dimension25="$19" href="https://www.amazon.com/Silent-Hill-2-PS5-PlayStation-5/dp/B0CMC3C3Z9/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1137px;"><p class="vanilla-image-block" style="padding-top:131.93%;"><img id="7qqzgFNziQmswnQyqqRBEm" name="71E3B-85r1L._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7qqzgFNziQmswnQyqqRBEm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1137" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>A loving remake of a true horror great, <a href="https://www.tomsguide.com/gaming/silent-hill-2-review" data-dimension112="dbcef586-8c4c-49c0-852b-b143dc9219a5" data-action="Deal Block" data-label="2" data-dimension48="2" data-dimension25="$19">Silent Hill 2</a> is creepy, a little too bloated and confusing, but hot dang does it feel good to shotgun monsters that look too X-rated for the “Terrifier” movies. It's a brutal, beautiful survival horror remake, and for just $19, it's a steal right now.<a class="view-deal button" href="https://www.amazon.com/Silent-Hill-2-PS5-PlayStation-5/dp/B0CMC3C3Z9/" target="_blank" rel="nofollow" data-dimension112="dbcef586-8c4c-49c0-852b-b143dc9219a5" data-action="Deal Block" data-label="2" data-dimension48="2" data-dimension25="$19">View Deal</a></p></div><div class="product"><a data-dimension112="091075f6-9225-457d-8383-919e7ce538b8" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$29" href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1158px;"><p class="vanilla-image-block" style="padding-top:129.53%;"><img id="tEFopvifi8tQ9BfBHB9rUF" name="81yVcGESG9L._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tEFopvifi8tQ9BfBHB9rUF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1158" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/gaming/assassins-creed-shadows-review" data-dimension112="091075f6-9225-457d-8383-919e7ce538b8" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$29">Assassin’s Creed Shadows</a> delivers on its promise of bringing back classic stealth mechanics while introducing new ones and combining the best of the older and RPG titles. The detailed open-world of feudal Japan feels full of life with compelling playable and non-playable characters, and different fighting tactics enrich the combat.<a class="view-deal button" href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM/" target="_blank" rel="nofollow" data-dimension112="091075f6-9225-457d-8383-919e7ce538b8" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$29">View Deal</a></p></div><div class="product"><a data-dimension112="342f55ea-b223-4dec-a73a-0cb4fdb2650b" data-action="Deal Block" data-label="Outlaws" data-dimension48="Outlaws" data-dimension25="$14" href="https://www.amazon.com/Star-Wars-Outlaws-Limited-Exclusive-PlayStation/dp/B0D187PJHJ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1172px;"><p class="vanilla-image-block" style="padding-top:127.99%;"><img id="7orWhqyGvCd2P6VXQEnLMm" name="star-wars-outlaws-ps5-na-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7orWhqyGvCd2P6VXQEnLMm-1920-80.jpg" mos="" align="middle" fullscreen="" width="1172" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/gaming/star-wars-outlaws-review-a-quintessential-outing-in-a-galaxy-far-far-away" data-dimension112="342f55ea-b223-4dec-a73a-0cb4fdb2650b" data-action="Deal Block" data-label="Outlaws" data-dimension48="Outlaws" data-dimension25="$14">Star Wars Outlaws</a> delivers a true Star Wars experience, featuring four total worlds teeming with expansive maps and various side quests for hours of unending fun. Space-based combat and general gunplay are solid with rare moments of stealth that can frustrate at times. If you didn't fancy it at launch, you might do now when it's available for $14.<a class="view-deal button" href="https://www.amazon.com/Star-Wars-Outlaws-Limited-Exclusive-PlayStation/dp/B0D187PJHJ/" target="_blank" rel="nofollow" data-dimension112="342f55ea-b223-4dec-a73a-0cb4fdb2650b" data-action="Deal Block" data-label="Outlaws" data-dimension48="Outlaws" data-dimension25="$14">View Deal</a></p></div><div class="product"><a data-dimension112="466a9e0c-a7df-42a1-a1cb-78d6638f73ae" data-action="Deal Block" data-label="Expedition 33" data-dimension48="Expedition 33" data-dimension25="$39" href="https://www.amazon.com/Clair-Obscur-Expedition-PS5-PlayStation-5/dp/B0DK6225DY/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:522px;"><p class="vanilla-image-block" style="padding-top:115.52%;"><img id="rT7AZpcNQnSsRCYbodpyCo" name="Clair Obscur Expedition 33" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rT7AZpcNQnSsRCYbodpyCo-1920-80.jpg" mos="" align="middle" fullscreen="" width="522" height="603" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/gaming/clair-obscur-expedition-33-review" data-dimension112="466a9e0c-a7df-42a1-a1cb-78d6638f73ae" data-action="Deal Block" data-label="Expedition 33" data-dimension48="Expedition 33" data-dimension25="$39">Clair Obscur: Expedition 33</a> is an addition to the turn-based RPG genre, one that boasts challenging, engaging combat mechanics and plays out in a distinct and utterly beautiful fantasy world. From start to finish, we were fascinated by the sights, sounds and tasks that lay ahead. If you love RPGs, it should be at the top of your list; we really can’t recommend it enough.<a class="view-deal button" href="https://www.amazon.com/Clair-Obscur-Expedition-PS5-PlayStation-5/dp/B0DK6225DY/" target="_blank" rel="nofollow" data-dimension112="466a9e0c-a7df-42a1-a1cb-78d6638f73ae" data-action="Deal Block" data-label="Expedition 33" data-dimension48="Expedition 33" data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="b4cb35ea-3bb2-41d9-a6d1-f2cda4ac354d" data-action="Deal Block" data-label="Requiem" data-dimension48="Requiem" data-dimension25="$55" href="https://www.amazon.com/Resident-Evil-Requiem-Amazon-Exclusive-PlayStation/dp/B0FY929QN1/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1298px;"><p class="vanilla-image-block" style="padding-top:115.56%;"><img id="t6iarbisuGMy5SzXoHtF9Q" name="resident-evil-requiem-ps5-na-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/t6iarbisuGMy5SzXoHtF9Q-1920-80.jpg" mos="" align="middle" fullscreen="" width="1298" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/gaming/resident-evil-requiem-review" data-dimension112="b4cb35ea-3bb2-41d9-a6d1-f2cda4ac354d" data-action="Deal Block" data-label="Requiem" data-dimension48="Requiem" data-dimension25="$55">Resident Evil Requiem</a> combines elements from prior installments to deliver one of the strongest entries yet. Though it doesn’t take risks, its thrilling gameplay and stunning graphics keep you engaged from beginning to end.<a class="view-deal button" href="https://www.amazon.com/Resident-Evil-Requiem-Amazon-Exclusive-PlayStation/dp/B0FY929QN1/" target="_blank" rel="nofollow" data-dimension112="b4cb35ea-3bb2-41d9-a6d1-f2cda4ac354d" data-action="Deal Block" data-label="Requiem" data-dimension48="Requiem" data-dimension25="$55">View Deal</a></p></div><h3 class="article-body__section" id="section-we-re-tracking-all-the-best-prime-day-ps5-deals"><span>We're tracking all the best Prime Day PS5 deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=video+games&min_discount_ratio=0.95&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-left,    .tg-df-container .tg-df-carousel-scroll-right {      position: absolute;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-left { left: 8px; }    .tg-df-container .tg-df-carousel-scroll-right { right: 8px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left { left: 0px; }    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right { right: 0px; }    .tg-df-carousel-filters-outer { margin-left: -24px; margin-right: -24px; padding-left: 24px; padding-right: 24px; }    @container tg-df (max-width: 599px) { .tg-df-carousel-filters-outer { margin-left: -16px; margin-right: -16px; padding-left: 16px; padding-right: 16px; } }        .tg-df-container .tg-df-carousel-scroll-left:hover,    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-left,    .tg-df-carousel-filters-outer .tg-df-carousel-scroll-right {      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right { right: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-left { left: 0; }    .tg-df-grid-wrapper .tg-df-carousel-scroll-right { right: 0; }        .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-left:hover,    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.parentElement.querySelector('.tg-df-carousel-roundels').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-outer" style="position: relative;">          \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>          \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>        \x3C/div>        \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('.tg-df-carousel-filters-wrap').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3C/div>    \x3C/div>    \x3C/div>      \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cbutton class="tg-df-carousel-scroll-left" type="button" aria-label="Scroll left" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: -200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m15 18-6-6 6-6">\x3C/path>\x3C/svg>\x3C/button>      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>      \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" style="display:none;" onclick="this.parentElement.querySelector('#tg-df-grid').scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }          const website = params.get('website') || 'tomsguide';          this.website = website;          if (website === 'techradar') {            const squadHeader = this.root.querySelector('.tg-df-savings-squad-header');            if (squadHeader) {               const pic = squadHeader.querySelector('picture');               if (pic) pic.style.display = 'none';            }            const style = document.createElement('style');            style.innerHTML = `              .tg-df-container .hawk-affiliate-link-deal-button { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a8c06 !important; }            `;            this.root.appendChild(style);          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: q,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }          this.setupScrollListeners();        }        setupScrollListeners() {          const containers = [             this.root.querySelector('.tg-df-carousel-roundels'),             this.root.querySelector('.tg-df-carousel-filters-wrap'),             this.root.querySelector('#tg-df-grid')          ];                    containers.forEach(container => {             if (!container) return;                          const checkScroll = () => {                if (!container.parentElement) return;                const leftBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-left');                const rightBtn = container.parentElement.querySelector('.tg-df-carousel-scroll-right');                                if (leftBtn) {                   if (container.scrollLeft <= 5) leftBtn.style.display = 'none';                   else leftBtn.style.display = 'flex';                }                                if (rightBtn) {                   if (container.scrollWidth <= container.clientWidth) {                       rightBtn.style.display = 'none';                   } else if (container.scrollLeft >= container.scrollWidth - container.clientWidth - 5) {                       rightBtn.style.display = 'none';                   } else {                       rightBtn.style.display = 'flex';                   }                }             };                          container.addEventListener('scroll', checkScroll);             checkScroll();                          window.addEventListener('resize', checkScroll);                          const observer = new MutationObserver(checkScroll);             observer.observe(container, { childList: true, subtree: true, characterData: false });          });        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const cleanTag = this.activeDealTag.toLowerCase().replace(/&/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');             const encodedTag = encodeURIComponent(cleanTag);             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, idx) => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              const revenueIdVal = generateRevenueId(linkUrl, offerName, merchantName, null);              const rewrittenLinkUrl = rewriteAffiliateLink(linkUrl, area, revenueIdVal);              return `                \x3Ca href="${this.escapeHTML(rewrittenLinkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item"                  data-action="voucher-click"                  data-product-name="${this.escapeHTML(offerName)}"                  data-merchant-name="${this.escapeHTML(merchantName)}"                  data-analytics-id="${this.escapeHTML(offerObj.offer_id || offerObj.id || v.id || '')}"                  data-price=""                  data-previous-price=""                  data-original-link="${this.escapeHTML(linkUrl)}"                  data-revenue-id="${revenueIdVal}"                  data-index="${idx}"                  data-total="${offers.length}"                  data-in-stock="true"                  data-currency="USD"                  data-model-id="${this.escapeHTML(offerObj.model_id || v.model_id || offerObj.id || v.id || '')}"                  data-merchant-id="${this.escapeHTML(offerObj.merchant_id || offerObj.merchant?.id || '')}"                >                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });            // Attach voucher click tracking            const voucherBtns = content.querySelectorAll('[data-action="voucher-click"]');            voucherBtns.forEach(btn => {              btn.addEventListener('click', (e) => {                if (e.target.closest('[data-action="copy-code"]')) return;                                const productName = btn.getAttribute('data-product-name');                const merchantNameAttr = btn.getAttribute('data-merchant-name');                const productId = btn.getAttribute('data-analytics-id');                const price = parseFloat(btn.getAttribute('data-price')) || null;                const prevPriceStr = btn.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = btn.getAttribute('data-original-link');                const rewrittenLink = btn.getAttribute('href');                const revenueId = btn.getAttribute('data-revenue-id');                const index = parseInt(btn.getAttribute('data-index'), 10) || 0;                const inStock = btn.getAttribute('data-in-stock') === 'true';                const totalText = btn.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: btn.getAttribute('data-model-id') || null,                    matchId: btn.getAttribute('data-match-id') || null,                    brand: btn.getAttribute('data-model-brand') || null,                    parent: btn.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: btn.getAttribute('data-merchant-id') || null,                    network: btn.getAttribute('data-merchant-network') || null,                    url: btn.getAttribute('data-merchant-url') || null,                    name: merchantNameAttr                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: btn.getAttribute('data-currency') || 'USD'                };                if (typeof trackDealClick === 'function') {                  trackDealClick(trackingParams);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = deal.merchant && deal.merchant.toLowerCase().includes('amazon') ? '' : `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;          // Inject JSON-LD          try {            let targetNode = this.hostContainer || document.head;            let jsonLdScript = targetNode.querySelector('#tg-df-json-ld-' + this.widgetId);            if (!jsonLdScript) {                jsonLdScript = document.createElement('script');                jsonLdScript.type = 'application/ld+json';                jsonLdScript.id = 'tg-df-json-ld-' + this.widgetId;                targetNode.appendChild(jsonLdScript);            }            const jsonLdData = {              "@context": "https://schema.org",              "@type": "ItemList",              "itemListElement": displayDeals.slice(0, this.displayLimit).map((deal, index) => {                 let isoCurrency = "USD";                 if (deal.currency === '£') isoCurrency = "GBP";                 else if (deal.currency === '€') isoCurrency = "EUR";                 else if (deal.currency === 'A$') isoCurrency = "AUD";                 else if (deal.currency === 'CA$') isoCurrency = "CAD";                 const areaCode = typeof this.getAreaCode === 'function' ? this.getAreaCode() : 'US';                 const revenueId = typeof generateRevenueId === 'function' ? generateRevenueId(deal.url, deal.title, deal.merchant, null) : '';                 const rewrittenLink = typeof rewriteAffiliateLink === 'function' ? rewriteAffiliateLink(deal.url, areaCode, revenueId) : deal.url;                 return {                   "@type": "ListItem",                   "position": index + 1,                   "item": {                     "@type": "Product",                     "name": deal.title,                     "image": deal.image || "",                     "description": deal.description || "",                     "brand": {                       "@type": "Brand",                       "name": deal.brand || ""                     },                     "offers": {                       "@type": "Offer",                       "priceCurrency": isoCurrency,                       "price": deal.rawPrice || 0,                       "url": rewrittenLink,                       "seller": {                         "@type": "Organization",                         "name": deal.merchant || ""                       }                     }                   }                 };              }).filter(item => item.item.name)            };            jsonLdScript.textContent = JSON.stringify(jsonLdData);          } catch(e) { console.warn("JSON-LD generation failed", e); }                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let rightChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             let leftChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-left');             if (this.getViewMode() === 'carousel') {                 // The observer set up in setupScrollListeners handles visibility.                 if (rightChevron) rightChevron.style.display = 'flex';                 if (leftChevron) leftChevron.style.display = 'none'; // reset correctly             } else {                 if (rightChevron) rightChevron.style.display = 'none';                 if (leftChevron) leftChevron.style.display = 'none';             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));               }            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 12 classic PS5 games I wish I could experience again for the first time ]]></title>
                                                                                                <dc:content><![CDATA[ <p>This doesn't feel real as I'm typing it, but the PS5 released over five years ago. I am one of the lucky ones that has had a console since launch day, and I've played through a lot of different games in the last five years. </p><p>Some games were simply fun to play or made me laugh with friends, but didn't stick with me after the credits rolled (if I made it to the credits). And then, some games consumed my thoughts and made me want to stay up way too late or abandon all my responsibilities to play them, thanks to mesmerizing worlds, gripping stories, and/or addictive combat.</p><p>Luckily, there are some highly rated gems I still haven't played yet (top of list is <a href="https://www.amazon.com/Astro-Bot-PS5-PlayStation-5/dp/B0D5SM3K4Q" target="_blank" rel="nofollow">Astro Bot</a>), but the 12 titles below will always be some of my favorite games.</p>        <div class="featured_product_block featured_block_hero" data-id="0559f028-94d2-488d-97b7-123dcf71cd48">            <a href="https://www.amazon.com/Hogwarts-Legacy-PlayStation-5/dp/B09VXBDJ9N" data-model-name="Hogwarts Legacy" 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/UiicnPULzfZuA5hScvNgqY.jpg" alt="Cover art for Hogwart's Legacy."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>WARNER BROS</div>                                        <div class="featured__title">Hogwarts Legacy</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6ed58c6f-e676-4a81-939e-4340febb6564">            <a href="https://www.amazon.com/Kena-Bridge-Spirits-Deluxe-PS5-PlayStation/dp/B09H73CXNT" data-model-name="Kena: Bridge of Spirits" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jXjFwFqwJThi3zybLkUP3n.jpg" alt="Kena: Bridge of Spirits - Deluxe Edition (ps5) - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Maximum Entertainment</div>                                        <div class="featured__title">Kena: Bridge of Spirits</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b147b4e5-d210-4a23-be7c-38d89ed34e88">            <a href="https://www.amazon.com/Horizon-Zero-Dawn-Remastered-PlayStation-5/dp/B0DJ7W2WXV" data-model-name="Horizon Zero Dawn" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QK3cvzrsMbq9WsjG2K9C6j.jpg" alt="Horizon Zero Dawn Remastered Ps5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Horizon Zero Dawn</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_standard" data-id="adb487b1-7470-43ad-b20e-7a631ded0421">            <a href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" data-model-name="Elden Ring" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YGqFfWsanFpVVVwkbcV3Eo.jpg" alt="Elden Ring - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Bandai Namco</div>                                        <div class="featured__title">Elden Ring</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e8cc7efc-18ec-4d69-8ee4-1abdf67b9cea">            <a href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB" data-model-name="Marvel’s Spider-Man 2" 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/Xabic3Jw9SG4FyvwjXSuU5.jpg" alt="Cover art for Marvel's Spider-Man 2."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sony</div>                                        <div class="featured__title">Marvel’s Spider-Man 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="04e2115c-01a6-4e8b-aaf4-8b961e2b2371">            <a href="https://www.amazon.com/God-War-Ragnar%C3%B6k-PlayStation-5/dp/B0B61YDF5V" data-model-name="God of War Ragnarök" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/dSuWnY7U8NEhnbeRNPzC75.jpg" alt="God of War Ragnarök - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">God of War Ragnarök</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="39be6a37-e168-414b-9947-7017c680f8c6">            <a href="https://www.amazon.com/Sackboy-Big-Adventure-PlayStation-5/dp/B08J6F4ZSL" data-model-name="Sackboy: A Big Adventure" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wQSk4yfUoWqq7cmQx7cKj9.jpg" alt="Sackboy: a Big Adventure - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Sackboy: A Big Adventure</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="85776d5c-d9cc-468a-aed6-67f3f1383820">            <a href="https://www.amazon.com/Last-Us-Part-PlayStation-5/dp/B0B3QWRQL8" data-model-name="The Last of Us Part I" 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/sQF27GcqGKbEaF4yNbnatg.jpg" alt="Cover art for The Last of Us Part 1."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">The Last of Us Part I</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="41be40a7-4816-43db-8113-aaa903e8d42c">            <a href="https://www.amazon.com/Ratchet-Clank-Rift-Apart-PlayStation-5/dp/B095T8C99C" data-model-name="Ratchet & Clank: Rift Apart" 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/LEgy6j933D5r3gaNdG6Le4.jpg" alt="Cover art for Ratchet & Clank: Rift Apart."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Ratchet & Clank: Rift Apart</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a8becd31-ea3d-46b3-8ce2-4f9a14472afc">            <a href="https://www.amazon.com/Ghost-Tsushima-Directors-Cut-PlayStation-5/dp/B098G34GBT" data-model-name="Ghost of Tsushima Director's Cut" 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/XSiRRXfyuD5EWY28XwPTki.jpg" alt="Cover art for Ghost of Tsushima."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Ghost of Tsushima Director's Cut</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="91e34ab9-443e-4809-a288-a88a258db661">            <a href="https://www.amazon.com/Horizon-Forbidden-West-Complete-PlayStation-5/dp/B0CK4VWNYL" data-model-name="Horizon Forbidden West" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/vUPU2Hqv3qXQDgdj4x3wMk.jpg" alt="Horizon Forbidden West Complete Edition - Ps5™"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Horizon Forbidden West</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5f956b0f-60c4-4d39-8bb3-f72dbd6ed8bc">            <a href="https://www.amazon.com/Ghost-Y%C5%8Dtei-PS5-PlayStation-5/dp/B0F6F41T4H" data-model-name="Ghost of Yōtei" 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/TDpyaXsJVEdpW424VcKE8c.jpg" alt="Cover art for Ghost of Yotei."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Ghost of Yōtei</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/12-classic-ps5-games-i-wish-i-could-experience-again-for-the-first-time</link>
                                                                            <description>
                            <![CDATA[ If you haven't played any of these 12 games yet, make sure you take the time to fully appreciate them during your first playthrough. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">tMyfxViUHtuWwhopAhLAhV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/WZ2h7iHU8J6wBDbi3fdRV4-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 19 Jun 2026 18:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Sarah Chaney ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/suPHU879S6aTM4FZ2htzD5-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Sarah Chaney is a freelance tech writer with 4 years of experience across multiple outlets, including How-To Geek, MakeUseOf, SlashGear, Laptop Mag, and of course, Tom&#039;s Guide. She loves reviewing the latest gadgets, from inventive robot vacuums to new laptops, wearables, and anything PC-related. When she&#039;s not writing, she&#039;s probably playing a video game, exploring the outdoors, or listening to her current favorite song or album on repeat.&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/WZ2h7iHU8J6wBDbi3fdRV4-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A selection of PS5 games on a blue background.]]></media:description>                                                            <media:text><![CDATA[A selection of PS5 games on a blue background.]]></media:text>
                                <media:title type="plain"><![CDATA[A selection of PS5 games on a blue background.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/WZ2h7iHU8J6wBDbi3fdRV4-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>This doesn't feel real as I'm typing it, but the PS5 released over five years ago. I am one of the lucky ones that has had a console since launch day, and I've played through a lot of different games in the last five years. </p><p>Some games were simply fun to play or made me laugh with friends, but didn't stick with me after the credits rolled (if I made it to the credits). And then, some games consumed my thoughts and made me want to stay up way too late or abandon all my responsibilities to play them, thanks to mesmerizing worlds, gripping stories, and/or addictive combat.</p><p>Luckily, there are some highly rated gems I still haven't played yet (top of list is <a href="https://www.amazon.com/Astro-Bot-PS5-PlayStation-5/dp/B0D5SM3K4Q" target="_blank" rel="nofollow">Astro Bot</a>), but the 12 titles below will always be some of my favorite games.</p>        <div class="featured_product_block featured_block_hero" data-id="0559f028-94d2-488d-97b7-123dcf71cd48">            <a href="https://www.amazon.com/Hogwarts-Legacy-PlayStation-5/dp/B09VXBDJ9N" data-model-name="Hogwarts Legacy" 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/UiicnPULzfZuA5hScvNgqY.jpg" alt="Cover art for Hogwart's Legacy."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>WARNER BROS</div>                                        <div class="featured__title">Hogwarts Legacy</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6ed58c6f-e676-4a81-939e-4340febb6564">            <a href="https://www.amazon.com/Kena-Bridge-Spirits-Deluxe-PS5-PlayStation/dp/B09H73CXNT" data-model-name="Kena: Bridge of Spirits" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/jXjFwFqwJThi3zybLkUP3n.jpg" alt="Kena: Bridge of Spirits - Deluxe Edition (ps5) - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Maximum Entertainment</div>                                        <div class="featured__title">Kena: Bridge of Spirits</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b147b4e5-d210-4a23-be7c-38d89ed34e88">            <a href="https://www.amazon.com/Horizon-Zero-Dawn-Remastered-PlayStation-5/dp/B0DJ7W2WXV" data-model-name="Horizon Zero Dawn" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QK3cvzrsMbq9WsjG2K9C6j.jpg" alt="Horizon Zero Dawn Remastered Ps5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Horizon Zero Dawn</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_standard" data-id="adb487b1-7470-43ad-b20e-7a631ded0421">            <a href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" data-model-name="Elden Ring" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YGqFfWsanFpVVVwkbcV3Eo.jpg" alt="Elden Ring - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Bandai Namco</div>                                        <div class="featured__title">Elden Ring</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e8cc7efc-18ec-4d69-8ee4-1abdf67b9cea">            <a href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB" data-model-name="Marvel’s Spider-Man 2" 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/Xabic3Jw9SG4FyvwjXSuU5.jpg" alt="Cover art for Marvel's Spider-Man 2."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sony</div>                                        <div class="featured__title">Marvel’s Spider-Man 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="04e2115c-01a6-4e8b-aaf4-8b961e2b2371">            <a href="https://www.amazon.com/God-War-Ragnar%C3%B6k-PlayStation-5/dp/B0B61YDF5V" data-model-name="God of War Ragnarök" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/dSuWnY7U8NEhnbeRNPzC75.jpg" alt="God of War Ragnarök - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">God of War Ragnarök</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="39be6a37-e168-414b-9947-7017c680f8c6">            <a href="https://www.amazon.com/Sackboy-Big-Adventure-PlayStation-5/dp/B08J6F4ZSL" data-model-name="Sackboy: A Big Adventure" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wQSk4yfUoWqq7cmQx7cKj9.jpg" alt="Sackboy: a Big Adventure - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Sackboy: A Big Adventure</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="85776d5c-d9cc-468a-aed6-67f3f1383820">            <a href="https://www.amazon.com/Last-Us-Part-PlayStation-5/dp/B0B3QWRQL8" data-model-name="The Last of Us Part I" 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/sQF27GcqGKbEaF4yNbnatg.jpg" alt="Cover art for The Last of Us Part 1."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">The Last of Us Part I</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="41be40a7-4816-43db-8113-aaa903e8d42c">            <a href="https://www.amazon.com/Ratchet-Clank-Rift-Apart-PlayStation-5/dp/B095T8C99C" data-model-name="Ratchet & Clank: Rift Apart" 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/LEgy6j933D5r3gaNdG6Le4.jpg" alt="Cover art for Ratchet & Clank: Rift Apart."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Ratchet & Clank: Rift Apart</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a8becd31-ea3d-46b3-8ce2-4f9a14472afc">            <a href="https://www.amazon.com/Ghost-Tsushima-Directors-Cut-PlayStation-5/dp/B098G34GBT" data-model-name="Ghost of Tsushima Director's Cut" 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/XSiRRXfyuD5EWY28XwPTki.jpg" alt="Cover art for Ghost of Tsushima."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Ghost of Tsushima Director's Cut</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="91e34ab9-443e-4809-a288-a88a258db661">            <a href="https://www.amazon.com/Horizon-Forbidden-West-Complete-PlayStation-5/dp/B0CK4VWNYL" data-model-name="Horizon Forbidden West" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/vUPU2Hqv3qXQDgdj4x3wMk.jpg" alt="Horizon Forbidden West Complete Edition - Ps5™"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Horizon Forbidden West</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5f956b0f-60c4-4d39-8bb3-f72dbd6ed8bc">            <a href="https://www.amazon.com/Ghost-Y%C5%8Dtei-PS5-PlayStation-5/dp/B0F6F41T4H" data-model-name="Ghost of Yōtei" 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/TDpyaXsJVEdpW424VcKE8c.jpg" alt="Cover art for Ghost of Yotei."></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Ghost of Yōtei</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to pre-order PS5 FlexStrike fight stick — these are the retailers to check ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Today is the day we expect the PlayStation’s first official wireless fight stick to become available to pre-order. The FlexStrike Wireless Fight Stick was previously codenamed <a href="https://www.tomsguide.com/gaming/playstation/sony-reveals-project-defiant-arcade-fighting-stick">Project Defiant</a> when it was revealed during the <a href="https://www.tomsguide.com/news/live/playstation-state-of-play-feb-2025-live-updates">June 2025 PlayStation State of Play.</a></p><p>Now, many months later, you'll have your first opportunity to stake your claim on one before the accessory goes on sale on August 6. <strong>You’re able to pre-order the PS5 FlexStrike Wireless Fight Stick right now</strong>, just scroll down for all the buying links. </p><p>The FlexStrike is compatible with both the <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> and a PC and works both as a wired or wireless controller with a PlayStation Link adapter. The latter is Sony’s low-latency wireless technology, which devices like the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/sony-playstation-pulse-elite-headset-review">Pulse Elite Wireless Headset</a> also utilize. </p><p>As fighting fans will know, input lag can mean the difference between victory and defeat, so it's crucial Sony does everything it can to minimize it while playing wirelessly.</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:2424px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="N6LTKNQi66tSXXqZMZpNSE" name="Sony Fightstick and Speakers-2" alt="PlayStation FlexStrike Wireless Fight Stick and Pulse Elevate Wireless Speakers in a glass cabinet" src="https://cdn.mos.cms.futurecdn.net/N6LTKNQi66tSXXqZMZpNSE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2424" height="1363" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><div><blockquote><p>The FlexStrike Wireless Fight Stick costs $199 in the U.S. and £179 in the U.K.</p></blockquote></div><p>However, because this is a first-party accessory, you can expect a higher price than many third-party alternatives. The <strong>FlexStrike Wireless Fight Stick costs $199 in the U.S. and £179 in the U.K</strong>.</p><p>If you want to know how it feels to use, my colleague Rory Mellon was able to get some early access hands on time with the controller at PlayStation HQ. You can <a href="https://www.tomsguide.com/gaming/playstation/ps5-flexstrike-fight-stick-and-pulse-elevate-speakers-preview">read his hands-on right here</a>, along with his thoughts on PlayStation's other accessory: the Pulse Elevate desktop speakers.</p><p>To help you secure the Fight Stick, we've got all the details you need below. Just be sure to bookmark this page, as we’ll update it with more retailers as and when we can. And be warned that pre-orders could sell out fast. </p><h3 class="article-body__section" id="section-where-to-pre-order-ps5-flexstrike-wireless-fight-stick"><span>Where to pre-order PS5 FlexStrike Wireless Fight Stick</span></h3><p><strong>As of 6:00 a.m. ET on Friday, June 12,</strong> the PS5 FlexStrike Wireless Fight Stick pre-orders are currently<strong> sold out at </strong><a href="https://www.amazon.com/dp/B0CCSQMBL1" target="_blank" rel="nofollow"><strong>Amazon</strong></a><strong> and unavailable at PlayStation Direct, Target, Best Buy and Walmart. </strong>However, we will keep checking back and update this page as soon as we see stock. If you spot any retailer that we've missed offering pre-orders, let us know in the comments below this article and we'll update this page.</p><p><strong>Over in the U.K</strong>., things are looking a lot more promising. Pre-orders are live and in stock at<strong> </strong><a href="https://www.amazon.co.uk/PlayStation-Flexstrike-Wireless-Fight-Stick/dp/B0H3P7YRHW" target="_blank" rel="nofollow"><strong>Amazon</strong></a><strong>, </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/flexstrike-wireless-fight-stick/p/263331"><strong>Smyths Toys</strong></a> and <a href="https://direct.playstation.com/en-gb/buy-accessories/flexstrike-wireless-fight-stick" target="_blank" rel="nofollow"><strong>PlayStation Direct</strong></a>. However, we can't see them at other retailers like Currys or Argos.<strong> </strong></p><div class="product"><a data-dimension112="96726712-45c8-4ffa-873a-1646aea2dc8e" data-action="Deal Block" data-label="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension48="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension25="$" href="https://www.amazon.com/dp/B0CCSQMBL1" 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="QYJVQF3AoHXZsMn64iDHMA" name="51tc0o8qfML._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QYJVQF3AoHXZsMn64iDHMA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: </strong><a href="https://www.amazon.com/PlayStation-FlexStrike-Wireless-Fight-Gaming-Console/dp/B0H3WPPVR3" target="_blank" rel="nofollow" data-dimension112="96726712-45c8-4ffa-873a-1646aea2dc8e" data-action="Deal Block" data-label="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension48="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension25="$"><strong>$199 @ Amazon</strong></a><strong> </strong><br>The PlayStation 5's first official fight stick also works with PC and features a custom-designed digital stick tested for up to six million rotations, buttons with mechanical switches, toolless interchangeable restrictor gates (square, circle, and octagon), and a durable ergonomic design that's tailor made for fighting fans. It also features built-in storage for keeping your restrictor gates and PlayStation Link wireless adapter tucked into the device for convenience and portability.<a class="view-deal button" href="https://www.amazon.com/dp/B0CCSQMBL1" target="_blank" rel="nofollow" data-dimension112="96726712-45c8-4ffa-873a-1646aea2dc8e" data-action="Deal Block" data-label="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension48="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension25="$">View Deal</a></p></div><h3 class="article-body__section" id="section-pre-order-ps5-flexstrike-wireless-fight-stick-in-the-u-k"><span>Pre-order PS5 FlexStrike Wireless Fight Stick in the U.K.</span></h3><div class="product"><a data-dimension112="fe063950-13b9-48b9-900f-30df664ce81c" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" href="https://www.amazon.co.uk/PlayStation-Flexstrike-Wireless-Fight-Stick/dp/B0H3P7YRHW" 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="QYJVQF3AoHXZsMn64iDHMA" name="51tc0o8qfML._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QYJVQF3AoHXZsMn64iDHMA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>(Pre-order) PS5 FlexStrike Wirless Fight Stick: </strong><a href="https://www.amazon.co.uk/PlayStation-Flexstrike-Wireless-Fight-Stick/dp/B0H3P7YRHW" target="_blank" rel="nofollow" data-dimension112="fe063950-13b9-48b9-900f-30df664ce81c" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" data-dimension25=""><strong>$179 @ Amazon UK</strong></a><strong> </strong><br>The PlayStation 5's first official fight stick also works with PC and features a custom-designed digital stick tested for up to six million rotations, buttons with mechanical switches, toolless interchangeable restrictor gates (square, circle, and octagon), and a durable ergonomic design that's tailor made for fighting fans. It also features built-in storage for keeping your restrictor gates and PlayStation Link wireless adapter tucked into the device for convenience and portability.<a class="view-deal button" href="https://www.amazon.co.uk/PlayStation-Flexstrike-Wireless-Fight-Stick/dp/B0H3P7YRHW" target="_blank" rel="nofollow" data-dimension112="fe063950-13b9-48b9-900f-30df664ce81c" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="e2993578-46b7-4664-a190-fcd865728173" data-action="Deal Block" data-label="FlexStrike Wireless Fight Stick" data-dimension48="FlexStrike Wireless Fight Stick" data-dimension25="£179" href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/flexstrike-wireless-fight-stick/p/263331" 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="QYJVQF3AoHXZsMn64iDHMA" name="51tc0o8qfML._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QYJVQF3AoHXZsMn64iDHMA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/flexstrike-wireless-fight-stick/p/263331" target="_blank" rel="nofollow" data-dimension112="e2993578-46b7-4664-a190-fcd865728173" data-action="Deal Block" data-label="FlexStrike Wireless Fight Stick" data-dimension48="FlexStrike Wireless Fight Stick" data-dimension25="£179">FlexStrike Wireless Fight Stick: £179</a></strong><br><strong>(Pre-order) PS5 FlexStrike Wirless Fight Stick: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/flexstrike-wireless-fight-stick/p/263331" target="_blank" rel="nofollow"><strong>£179 @ Smyths Toys</strong></a><strong> </strong><br>The PlayStation 5's first official fight stick also works with PC and features a custom-designed digital stick tested for up to six million rotations, buttons with mechanical switches, toolless interchangeable restrictor gates (square, circle, and octagon), and a durable ergonomic design that's tailor made for fighting fans. It also features built-in storage for keeping your restrictor gates and PlayStation Link wireless adapter tucked into the device for convenience and portability.<a class="view-deal button" href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/flexstrike-wireless-fight-stick/p/263331" target="_blank" rel="nofollow" data-dimension112="e2993578-46b7-4664-a190-fcd865728173" data-action="Deal Block" data-label="FlexStrike Wireless Fight Stick" data-dimension48="FlexStrike Wireless Fight Stick" data-dimension25="£179">View Deal</a></p></div><div class="product"><a data-dimension112="701d0d7b-dddc-414e-bfc8-93839178b2c4" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" href="https://www.bestbuy.com/site/sony-playstation-5-console-marvels-spider-man-2-limited-edition-bundle/6554388.p" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="QYJVQF3AoHXZsMn64iDHMA" name="51tc0o8qfML._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QYJVQF3AoHXZsMn64iDHMA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>(Pre-order) PS5 FlexStrike Wirless Fight Stick: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/flexstrike-wireless-fight-stick" target="_blank" rel="nofollow" data-dimension112="701d0d7b-dddc-414e-bfc8-93839178b2c4" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" data-dimension25=""><strong>£179 @ PlayStation Direct</strong></a><strong> </strong><br>The PlayStation 5's first official fight stick also works with PC and features a custom-designed digital stick tested for up to six million rotations, buttons with mechanical switches, toolless interchangeable restrictor gates (square, circle, and octagon), and a durable ergonomic design that's tailor made for fighting fans. It also features built-in storage for keeping your restrictor gates and PlayStation Link wireless adapter tucked into the device for convenience and portability.<a class="view-deal button" href="https://www.bestbuy.com/site/sony-playstation-5-console-marvels-spider-man-2-limited-edition-bundle/6554388.p" target="_blank" rel="nofollow" data-dimension112="701d0d7b-dddc-414e-bfc8-93839178b2c4" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" data-dimension25="">View Deal</a></p></div><h2 id="ps5-flexstrike-wireless-fight-stick-features">PS5 FlexStrike Wireless Fight Stick features</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/TTGmg6uYXKc" allowfullscreen></iframe></div></div><p>The FlexStrike is a good-looking controller but Sony has pulled out all the stops to make it as functional as possible. It's got mechanical switch buttons and toolless swappable restrictor gates — including square, circle and octagonal gates that fit into the peripheral’s built-in storage compartments. That's also where you can keep the included PS Link USB adapter. </p><p>It’s rare for the <a href="https://www.tomsguide.com/best-picks/best-fight-sticks">best fight sticks</a> to have more than one restrictor gate included, so this is a nice bonus. It also makes sense since it’s possible that standard Sanwa parts aren’t compatible with the FlexStrike.</p><p>The FlexStrike also comes with a sling carry case, along with a USB-C cable for wired play.</p><p>Other features include the ability to use a single PS Link USB adapter to connect the FlexStrike and a Pulse Elite headset or Pulse Explore earbuds, or to connect two FlexStrike controllers simultaneously. </p><p>You can also keep your regular <a href="https://www.tomsguide.com/news/ps5-dualsense-controller-hands-on-this-is-a-game-changer">PS5 DualSense controller</a> connected at the same time as the FlexStrike if you need that controller to navigate menus between fights. Finally, the benefit of this being a first-party Sony accessory is that you can turn on your PS5 by pressing the FlexStrike’s PS button. You're not going to find that same feature in third-party fight sticks.</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/playstations-wireless-flexstrike-fight-stick-is-coming-these-are-the-9-best-and-cheapest-ps5-fighting-games-worth-getting">PlayStation’s Wireless FlexStrike Fight Stick is coming — these are the 9 best (and cheapest) PS5 fighting games worth getting</a></li><li><a href="https://www.tomsguide.com/ai/i-got-my-ass-handed-to-me-by-a-chess-playing-robot-and-now-im-worried-magnus-carlsen-may-be-cooked-by-ai">I got my ass handed to me by a chess-playing robot — and now I'm worried Magnus Carlsen may be cooked by AI</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/ps5-flexstrike-fight-stick-and-pulse-elevate-speakers-preview">I got hands-on with PS5 FlexStrike fight stick and Pulse Elevate desktop speakers — and I’m seriously impressed with one in particular</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/how-to-pre-order-ps5-flexstrike-fight-stick-these-are-the-retailers-to-check</link>
                                                                            <description>
                            <![CDATA[ The PS5 is getting its first limited-edition redesign to mark the launch of Marvel's Spider-Man 2 this fall — here's how to pre-order your Spidey-themed console. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">EgnqFTQbCTSNMGJcpyfa7G</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TVvjQayTQdsBypxvcKzG2K-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 12 Jun 2026 12:04:33 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ jeff.parsons@futurenet.com (Jeff Parsons) ]]></author>                    <dc:creator><![CDATA[ Jeff Parsons ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/7z3UTGGrmSokMKxTWHmhjX-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jeff is U.K. Editor-in-Chief for Tom’s Guide looking after the day-to-day output of the site’s British contingent. &lt;/p&gt;&lt;p&gt;Rising early and heading straight for the coffee machine, Jeff loves nothing more than dialling into the zeitgeist of the day’s tech news. A journalist for over a decade, he&#039;s travelled around the world testing and reviewing any gadget he can get his hands on.&lt;/p&gt;&lt;p&gt;Before joining the team at Tom’s Guide, Jeff covered technology and science for two of the U.K.’s biggest national news sites: Metro.co.uk and the Daily Mirror. Memorable moments include getting lost in Vienna in an electric Audi, touring Lockheed Martin’s mile-long jet factory in Fort Worth and filming a Netflix documentary about Elon Musk in West London.&lt;/p&gt;&lt;p&gt;When not plugged into the current news agenda, editing or commissioning a series of articles or debating the merits of Apple vs Android, Jeff can usually be found out for a run trying to shave precious seconds off his PB. Or lifting weights in a vain attempt to offset the ageing process.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/TVvjQayTQdsBypxvcKzG2K-1920-80.jpg">
                                                            <media:credit><![CDATA[Future / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PlayStation FlexStrike Wireless Fight Stick in a glass cabinet]]></media:description>                                                            <media:text><![CDATA[PlayStation FlexStrike Wireless Fight Stick in a glass cabinet]]></media:text>
                                <media:title type="plain"><![CDATA[PlayStation FlexStrike Wireless Fight Stick in a glass cabinet]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TVvjQayTQdsBypxvcKzG2K-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Today is the day we expect the PlayStation’s first official wireless fight stick to become available to pre-order. The FlexStrike Wireless Fight Stick was previously codenamed <a href="https://www.tomsguide.com/gaming/playstation/sony-reveals-project-defiant-arcade-fighting-stick">Project Defiant</a> when it was revealed during the <a href="https://www.tomsguide.com/news/live/playstation-state-of-play-feb-2025-live-updates">June 2025 PlayStation State of Play.</a></p><p>Now, many months later, you'll have your first opportunity to stake your claim on one before the accessory goes on sale on August 6. <strong>You’re able to pre-order the PS5 FlexStrike Wireless Fight Stick right now</strong>, just scroll down for all the buying links. </p><p>The FlexStrike is compatible with both the <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> and a PC and works both as a wired or wireless controller with a PlayStation Link adapter. The latter is Sony’s low-latency wireless technology, which devices like the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/sony-playstation-pulse-elite-headset-review">Pulse Elite Wireless Headset</a> also utilize. </p><p>As fighting fans will know, input lag can mean the difference between victory and defeat, so it's crucial Sony does everything it can to minimize it while playing wirelessly.</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:2424px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="N6LTKNQi66tSXXqZMZpNSE" name="Sony Fightstick and Speakers-2" alt="PlayStation FlexStrike Wireless Fight Stick and Pulse Elevate Wireless Speakers in a glass cabinet" src="https://cdn.mos.cms.futurecdn.net/N6LTKNQi66tSXXqZMZpNSE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2424" height="1363" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><div><blockquote><p>The FlexStrike Wireless Fight Stick costs $199 in the U.S. and £179 in the U.K.</p></blockquote></div><p>However, because this is a first-party accessory, you can expect a higher price than many third-party alternatives. The <strong>FlexStrike Wireless Fight Stick costs $199 in the U.S. and £179 in the U.K</strong>.</p><p>If you want to know how it feels to use, my colleague Rory Mellon was able to get some early access hands on time with the controller at PlayStation HQ. You can <a href="https://www.tomsguide.com/gaming/playstation/ps5-flexstrike-fight-stick-and-pulse-elevate-speakers-preview">read his hands-on right here</a>, along with his thoughts on PlayStation's other accessory: the Pulse Elevate desktop speakers.</p><p>To help you secure the Fight Stick, we've got all the details you need below. Just be sure to bookmark this page, as we’ll update it with more retailers as and when we can. And be warned that pre-orders could sell out fast. </p><h3 class="article-body__section" id="section-where-to-pre-order-ps5-flexstrike-wireless-fight-stick"><span>Where to pre-order PS5 FlexStrike Wireless Fight Stick</span></h3><p><strong>As of 6:00 a.m. ET on Friday, June 12,</strong> the PS5 FlexStrike Wireless Fight Stick pre-orders are currently<strong> sold out at </strong><a href="https://www.amazon.com/dp/B0CCSQMBL1" target="_blank" rel="nofollow"><strong>Amazon</strong></a><strong> and unavailable at PlayStation Direct, Target, Best Buy and Walmart. </strong>However, we will keep checking back and update this page as soon as we see stock. If you spot any retailer that we've missed offering pre-orders, let us know in the comments below this article and we'll update this page.</p><p><strong>Over in the U.K</strong>., things are looking a lot more promising. Pre-orders are live and in stock at<strong> </strong><a href="https://www.amazon.co.uk/PlayStation-Flexstrike-Wireless-Fight-Stick/dp/B0H3P7YRHW" target="_blank" rel="nofollow"><strong>Amazon</strong></a><strong>, </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/flexstrike-wireless-fight-stick/p/263331"><strong>Smyths Toys</strong></a> and <a href="https://direct.playstation.com/en-gb/buy-accessories/flexstrike-wireless-fight-stick" target="_blank" rel="nofollow"><strong>PlayStation Direct</strong></a>. However, we can't see them at other retailers like Currys or Argos.<strong> </strong></p><div class="product"><a data-dimension112="96726712-45c8-4ffa-873a-1646aea2dc8e" data-action="Deal Block" data-label="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension48="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension25="$" href="https://www.amazon.com/dp/B0CCSQMBL1" 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="QYJVQF3AoHXZsMn64iDHMA" name="51tc0o8qfML._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QYJVQF3AoHXZsMn64iDHMA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: </strong><a href="https://www.amazon.com/PlayStation-FlexStrike-Wireless-Fight-Gaming-Console/dp/B0H3WPPVR3" target="_blank" rel="nofollow" data-dimension112="96726712-45c8-4ffa-873a-1646aea2dc8e" data-action="Deal Block" data-label="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension48="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension25="$"><strong>$199 @ Amazon</strong></a><strong> </strong><br>The PlayStation 5's first official fight stick also works with PC and features a custom-designed digital stick tested for up to six million rotations, buttons with mechanical switches, toolless interchangeable restrictor gates (square, circle, and octagon), and a durable ergonomic design that's tailor made for fighting fans. It also features built-in storage for keeping your restrictor gates and PlayStation Link wireless adapter tucked into the device for convenience and portability.<a class="view-deal button" href="https://www.amazon.com/dp/B0CCSQMBL1" target="_blank" rel="nofollow" data-dimension112="96726712-45c8-4ffa-873a-1646aea2dc8e" data-action="Deal Block" data-label="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension48="(Currently unavailable) PS5 FlexStrike Wirless Fight Stick: $199 @ Amazon" data-dimension25="$">View Deal</a></p></div><h3 class="article-body__section" id="section-pre-order-ps5-flexstrike-wireless-fight-stick-in-the-u-k"><span>Pre-order PS5 FlexStrike Wireless Fight Stick in the U.K.</span></h3><div class="product"><a data-dimension112="fe063950-13b9-48b9-900f-30df664ce81c" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" href="https://www.amazon.co.uk/PlayStation-Flexstrike-Wireless-Fight-Stick/dp/B0H3P7YRHW" 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="QYJVQF3AoHXZsMn64iDHMA" name="51tc0o8qfML._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QYJVQF3AoHXZsMn64iDHMA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>(Pre-order) PS5 FlexStrike Wirless Fight Stick: </strong><a href="https://www.amazon.co.uk/PlayStation-Flexstrike-Wireless-Fight-Stick/dp/B0H3P7YRHW" target="_blank" rel="nofollow" data-dimension112="fe063950-13b9-48b9-900f-30df664ce81c" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" data-dimension25=""><strong>$179 @ Amazon UK</strong></a><strong> </strong><br>The PlayStation 5's first official fight stick also works with PC and features a custom-designed digital stick tested for up to six million rotations, buttons with mechanical switches, toolless interchangeable restrictor gates (square, circle, and octagon), and a durable ergonomic design that's tailor made for fighting fans. It also features built-in storage for keeping your restrictor gates and PlayStation Link wireless adapter tucked into the device for convenience and portability.<a class="view-deal button" href="https://www.amazon.co.uk/PlayStation-Flexstrike-Wireless-Fight-Stick/dp/B0H3P7YRHW" target="_blank" rel="nofollow" data-dimension112="fe063950-13b9-48b9-900f-30df664ce81c" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: $179 @ Amazon UK" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="e2993578-46b7-4664-a190-fcd865728173" data-action="Deal Block" data-label="FlexStrike Wireless Fight Stick" data-dimension48="FlexStrike Wireless Fight Stick" data-dimension25="£179" href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/flexstrike-wireless-fight-stick/p/263331" 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="QYJVQF3AoHXZsMn64iDHMA" name="51tc0o8qfML._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QYJVQF3AoHXZsMn64iDHMA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/flexstrike-wireless-fight-stick/p/263331" target="_blank" rel="nofollow" data-dimension112="e2993578-46b7-4664-a190-fcd865728173" data-action="Deal Block" data-label="FlexStrike Wireless Fight Stick" data-dimension48="FlexStrike Wireless Fight Stick" data-dimension25="£179">FlexStrike Wireless Fight Stick: £179</a></strong><br><strong>(Pre-order) PS5 FlexStrike Wirless Fight Stick: </strong><a href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/flexstrike-wireless-fight-stick/p/263331" target="_blank" rel="nofollow"><strong>£179 @ Smyths Toys</strong></a><strong> </strong><br>The PlayStation 5's first official fight stick also works with PC and features a custom-designed digital stick tested for up to six million rotations, buttons with mechanical switches, toolless interchangeable restrictor gates (square, circle, and octagon), and a durable ergonomic design that's tailor made for fighting fans. It also features built-in storage for keeping your restrictor gates and PlayStation Link wireless adapter tucked into the device for convenience and portability.<a class="view-deal button" href="https://www.smythstoys.com/uk/en-gb/gaming-and-tech/playstation-5/playstation-5-accessories/flexstrike-wireless-fight-stick/p/263331" target="_blank" rel="nofollow" data-dimension112="e2993578-46b7-4664-a190-fcd865728173" data-action="Deal Block" data-label="FlexStrike Wireless Fight Stick" data-dimension48="FlexStrike Wireless Fight Stick" data-dimension25="£179">View Deal</a></p></div><div class="product"><a data-dimension112="701d0d7b-dddc-414e-bfc8-93839178b2c4" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" href="https://www.bestbuy.com/site/sony-playstation-5-console-marvels-spider-man-2-limited-edition-bundle/6554388.p" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="QYJVQF3AoHXZsMn64iDHMA" name="51tc0o8qfML._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QYJVQF3AoHXZsMn64iDHMA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>(Pre-order) PS5 FlexStrike Wirless Fight Stick: </strong><a href="https://direct.playstation.com/en-gb/buy-accessories/flexstrike-wireless-fight-stick" target="_blank" rel="nofollow" data-dimension112="701d0d7b-dddc-414e-bfc8-93839178b2c4" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" data-dimension25=""><strong>£179 @ PlayStation Direct</strong></a><strong> </strong><br>The PlayStation 5's first official fight stick also works with PC and features a custom-designed digital stick tested for up to six million rotations, buttons with mechanical switches, toolless interchangeable restrictor gates (square, circle, and octagon), and a durable ergonomic design that's tailor made for fighting fans. It also features built-in storage for keeping your restrictor gates and PlayStation Link wireless adapter tucked into the device for convenience and portability.<a class="view-deal button" href="https://www.bestbuy.com/site/sony-playstation-5-console-marvels-spider-man-2-limited-edition-bundle/6554388.p" target="_blank" rel="nofollow" data-dimension112="701d0d7b-dddc-414e-bfc8-93839178b2c4" data-action="Deal Block" data-label="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" data-dimension48="(Pre-order) PS5 FlexStrike Wirless Fight Stick: £179 @ PlayStation Direct" data-dimension25="">View Deal</a></p></div><h2 id="ps5-flexstrike-wireless-fight-stick-features">PS5 FlexStrike Wireless Fight Stick features</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/TTGmg6uYXKc" allowfullscreen></iframe></div></div><p>The FlexStrike is a good-looking controller but Sony has pulled out all the stops to make it as functional as possible. It's got mechanical switch buttons and toolless swappable restrictor gates — including square, circle and octagonal gates that fit into the peripheral’s built-in storage compartments. That's also where you can keep the included PS Link USB adapter. </p><p>It’s rare for the <a href="https://www.tomsguide.com/best-picks/best-fight-sticks">best fight sticks</a> to have more than one restrictor gate included, so this is a nice bonus. It also makes sense since it’s possible that standard Sanwa parts aren’t compatible with the FlexStrike.</p><p>The FlexStrike also comes with a sling carry case, along with a USB-C cable for wired play.</p><p>Other features include the ability to use a single PS Link USB adapter to connect the FlexStrike and a Pulse Elite headset or Pulse Explore earbuds, or to connect two FlexStrike controllers simultaneously. </p><p>You can also keep your regular <a href="https://www.tomsguide.com/news/ps5-dualsense-controller-hands-on-this-is-a-game-changer">PS5 DualSense controller</a> connected at the same time as the FlexStrike if you need that controller to navigate menus between fights. Finally, the benefit of this being a first-party Sony accessory is that you can turn on your PS5 by pressing the FlexStrike’s PS button. You're not going to find that same feature in third-party fight sticks.</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/playstations-wireless-flexstrike-fight-stick-is-coming-these-are-the-9-best-and-cheapest-ps5-fighting-games-worth-getting">PlayStation’s Wireless FlexStrike Fight Stick is coming — these are the 9 best (and cheapest) PS5 fighting games worth getting</a></li><li><a href="https://www.tomsguide.com/ai/i-got-my-ass-handed-to-me-by-a-chess-playing-robot-and-now-im-worried-magnus-carlsen-may-be-cooked-by-ai">I got my ass handed to me by a chess-playing robot — and now I'm worried Magnus Carlsen may be cooked by AI</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/ps5-flexstrike-fight-stick-and-pulse-elevate-speakers-preview">I got hands-on with PS5 FlexStrike fight stick and Pulse Elevate desktop speakers — and I’m seriously impressed with one in particular</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ PS5 State of Play June 2026 live updates — every game reveal and new trailer at latest PlayStation showcase ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="live-content"><p>PlayStation State of Play for June 2025 is now over, and it was certainly a packed showcase with loads of new games announced, a bunch of release dates for highly anticipated titles, and plenty of exciting trailers to watch.</p><p>The biggest news was the confirmation of the new God of War: Laufey, a new title in the popular series that swaps Kratos for his wife Faye, as she battles through the afterlife of the gods. Other big reveals included Until Dawn 2, The Lost Wild, Stuntman: Hollywood and plenty more new titles.</p><p>Below you can find every single announcement from State of Play June 2026, along with all the trailers. So if you missed the showcase, our live coverage will guide you through all the biggest news and announcements. </p><h2 id="how-to-re-watch-state-of-play-for-june-2026">How to (re)watch State of Play for June 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/cvh0xXmu0bs" allowfullscreen></iframe></div></div><p>Missed State of Play June 2026? Don't worry, you can use the VOD link above to catch up with the whole showcase available to rewatch. Or you can read on for our live coverage to pick out the trailers you want to watch.</p><h3 class="article-body__section" id="section-live-updates"><span>LIVE UPDATES</span></h3></div><div class="live-content"><time datetime="2026-06-02T11:55:46+00:00">June 2, 2026 – 7:55 AM</time><h2 id="welcome-4">Welcome! </h2><p>Good morning! Welcome to Tom's Guide's live coverage of the PS5 State of Play for June 2026. I'm Rory, a senior entertainment editor, and one of biggest gamers on staff. I'll be bring you all the last-minute rumors, and also guiding you through the State of Play itself when it begins later today. So, let's get into the good stuff...</p></div><div class="live-content"><time datetime="2026-06-02T12:09:13+00:00">June 2, 2026 – 8:09 AM</time><h2 id="the-one-game-we-can-bank-on-being-at-state-of-play">The one game we can bank on being at State of Play</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="brkRET2rLiiqB38ggQjQsW" name="wolverine-2025-state-of-play-ps5-game" alt="Marvel's Wolverine image showing Logan" src="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>There's a lot we don't know about today's State of Play, but Sony has confirmed one game that will present: Marvel's Wolverine. Set to release on September 15, this superhero action game comes from Insomniac Games, the developer of the PS5 Marvel's Spider-Man games, and it looks brutal in the best way possible.  </p><p>We've been waiting a long time to get our hands (claws?) on Wolverine. It was announced during the PlayStation Showcase in September 2021, and almost five years later, we're finally entering the home straight with launch just a few months away. I'm expecting to see more gameplay today, and maybe new story details. </p><p>My other prediction when it comes to Marvel's Wolverine is that PlayStation might confirm a limited-edition Wolverine-themed DualSense and maybe even console.</p></div><div class="live-content"><time datetime="2026-06-02T12:17:41+00:00">June 2, 2026 – 8:17 AM</time><h2 id="ps5-state-of-play-june-2026-everything-you-need-to-know">PS5 State of Play June 2026: Everything you need to know</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:920px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="YjQgFQT9J6kopyr5nu4evh" name="Playstation store.jpg" alt="PlayStation Store Holiday Sale" src="https://cdn.mos.cms.futurecdn.net/YjQgFQT9J6kopyr5nu4evh-1920-80.jpg" mos="" align="middle" fullscreen="" width="920" height="518" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>So, the key details for State of Play are as follows. The live-streamed presentation takes place today (Tuesday, June 2), and it will run for "more than 60 minutes." Sony is promising "updates, announcements, and gameplay reveals from top studios around the world" with at least some presence from its own PlayStation Studios. </p><p>The timings for State of Play June 2026 are as follows: </p><ul><li><strong>2 p.m. PT</strong></li><li><strong>5 p.m. ET</strong></li><li><strong>10 p.m. BST </strong></li><li><strong>11 p.m. CEST</strong></li><li><strong>6 a.m. JST (June 3)</strong></li><li><strong>7 a.m. AEDT (June 3)</strong></li></ul><p>You'll be able to watch along live via PlayStation's channels on YouTube and Twitch, but fear not if you can't get to a stream, that's what I'm here for. In this live blog, I'll bring you all the pre-show build-up, and full live coverage of every announcement. </p></div><div class="live-content"><time datetime="2026-06-02T12:25:27+00:00">June 2, 2026 – 8:25 AM</time><h2 id="you-can-watch-state-of-play-on-the-big-screen">You can watch State of Play on the big screen!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="URqrajEiPL87bAUgpp89kZ" name="GettyImages-1177482185.jpg" alt="movie theater" src="https://cdn.mos.cms.futurecdn.net/URqrajEiPL87bAUgpp89kZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Baona/Getty Images)</span></figcaption></figure><p>How about this for the ultimate way to enjoy the State of Play? Sony has partnered with Alamo Drafthouse (a cinema chain the Japanese tech giant recently bought) to host State of Play fan events, showing the event on the big screen!</p><p><a href="https://drafthouse.com/event/free-fan-event-sony-state-of-play" target="_blank" rel="nofollow"><strong>Tickets are free</strong></a>, and the State of Play will be shown in Drafthouse's across the U.S., including in Los Angeles, New York, Austin, Boston and Chicago. I can't think of a better way to enjoy the occasion than watching all the announcements in a movie theater with an audience that will no doubt only add to the atmosphere. </p><p>I'll be watching at my desk (after all, I need to bring TG readers the latest updates!), but if you're fortunate enough to live near one of the locations hosting the event, check out the link above. Just be aware that tickets might have sold out.</p></div><div class="live-content"><time datetime="2026-06-02T12:32:29+00:00">June 2, 2026 – 8:32 AM</time><h2 id="would-you-like-fries-with-that">Would you like fries with that?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EtgXweYbB7JaJN9QQvWuA3" name="state-of-play-themed-menu" alt="State of Play themed menu at Alamo Drafthouse" src="https://cdn.mos.cms.futurecdn.net/EtgXweYbB7JaJN9QQvWuA3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Daniel Ahmad)</span></figcaption></figure><p>Alongside screening the State of Play at select Alamo Drafthouse locations, it looks like there will be Wolverine themed-food on offer as well (source <a href="https://x.com/ZhugeEX/status/2061091369616105577?s=20" target="_blank">@ZhugeEX</a>). This includes "Savage Sticks," "Rage Pizza" and a "Mutant Instinct" cocktail. Just looking at the menu is making me hungry. I wonder if you can order these themed items on DoorDash?</p></div><div class="live-content"><time datetime="2026-06-02T12:45:01+00:00">June 2, 2026 – 8:45 AM</time><h2 id="here-s-when-i-think-we-ll-see-wolverine-during-state-of-play">Here's when I think we'll see Wolverine during State of Play</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2s7pYFzTXPQbkDmreoQvoL" name="wolverine-ps5-promo-image" alt="Marvel's Wolverine screenshot showing Logan attacking an enemy" src="https://cdn.mos.cms.futurecdn.net/2s7pYFzTXPQbkDmreoQvoL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Insomniac Games / Sony Interactive Entertainment)</span></figcaption></figure><p>We'll be diving into the world of rumors, leaks and speculation soon enough, but for now, let's keep the focus on what we do know. So, it's been confirmed that Marvel's Wolverine will feature, but the big question, is when will it be showcased? </p><p>My prediction is that Wolverine will open the show. For starters, PlayStation will want to lead off with a big game, which Wolverine most certainly is. Secondly, because Logan's involvement has been pre-confirmed, it makes sense to open the show, leaving the final reveal to be something unexpectedly and hype generating. </p><p>Furthermore, the opening slot is definitely a prime position, and it would make sense for PlayStation to reverse it for one of its own titles rather than a third-party.</p></div><div class="live-content"><time datetime="2026-06-02T13:01:50+00:00">June 2, 2026 – 9:01 AM</time><h2 id="the-next-god-of-war-could-be-revealed-today">The next God of War could be revealed today</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AXNNW7PLmYmCxqswRjhu8R" name="God of War Ragnarok - Kratos vs creature.jpg" alt="God of War Ragnarok" src="https://cdn.mos.cms.futurecdn.net/AXNNW7PLmYmCxqswRjhu8R-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>There's one rumor that just won't go away ahead of the State of Play. Various sources, including <a href="https://www.youtube.com/watch?t=3513&v=NoxlKQRhF34&feature=youtu.be" target="_blank">Insider Gaming's Tom Henderson,</a> have claimed the next game in the God of War series will be announced during State of Play June 2026. </p><p>It's already been a big year for the GoW series. In the February State of Play, a remake of the original trilogy was revealed, and the side-scrolling spin-off title God of War: Sons of Sparta was announced and released the same day. But if the rumors are correct, PlayStation is already ready to show what's next for the series.</p><p>The unconfirmed suggestion is that the next God of War will be a prequel game focused on Faye, Kratos' second wife, whose death kicked off the events of God of War (2018). It's also rumored this title will be directed by Cory Barlog, who was the sole director on the reboot and a co-director on sequel God of War Ragnarök. </p><p>As with all rumors, I advise taking this one with a grain of salt, but there's certainly a lot of online noise about this. We'll find out if it's true in just a matter of hours.</p></div><div class="live-content"><time datetime="2026-06-02T13:20:20+00:00">June 2, 2026 – 9:20 AM</time><h2 id="fairgames-could-be-re-revealed-as-break-in">Fairgames could be re-revealed as Break In</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Y2mAwzqCspkL6rk6eS5Zw8" name="fairgames-ps5-screenshot" alt="Fairgames promotional image" src="https://cdn.mos.cms.futurecdn.net/Y2mAwzqCspkL6rk6eS5Zw8-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Haven Studios / Sony Interactive Entertainment)</span></figcaption></figure><p>The upcoming live-service shooter Fairgames from new team Haven Studios was announced back in 2023, but we've not seen it since. Therefore, it stands to reason that it could resurface at today's State of Play, but perhaps with a new name.</p><p>Last month, it was reported that Sony had filed a trademark for a new game called "Break In," but the internet rumor mill, tipped off by a not-so-subtle clue from Bloomberg's Jason Schreier (per <a href="https://www.ign.com/articles/sony-files-trademark-for-new-game-called-break-in" target="_blank">IGN</a>), suggests this might not be a new game at all, but rather a rebranding of Fairgames. </p><p>Rightly or wrongly, the online reception to Fairgames was pretty mixed, with many fans suggesting it'll be the next Concord (a PlayStation live service game that was shut down within just a few weeks). So, giving it a new title and a fresh slate, and hoping to make a better impression this time around, could be a smart play.</p></div><div class="live-content"><time datetime="2026-06-02T13:40:33+00:00">June 2, 2026 – 9:40 AM</time><h2 id="i-need-to-see-more-from-intergalactic">I need to see more from Intergalactic!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gGHYy9kM2a4pZMfY2DzSSQ" name="intergalactic-the-heretic-prophet-screenshot" alt="Intergalactic: The Heretic Prophet screenshot" src="https://cdn.mos.cms.futurecdn.net/gGHYy9kM2a4pZMfY2DzSSQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / Naughty Dog)</span></figcaption></figure><p>If there's one already-announced game I'm desperate to see at the State of Play, it's Intergalactic: The Heretic Prophet. Naughty Dog are a top 3 developer in my book, so anything with the ND logo has my instant attention, and Intergalactic looks epic. </p><p>We've not seen this one since it was revealed at The Game Awards in December 2024, and while a 2026 release date seems very unlikely, a fresh look during today's State of Play isn't out of the question. The game is a sci-fi title that stars a futuristic bounty hunter who becomes stuck on a planet cut off from contact for 600 years. </p><p>If I were a betting man, I think a second trailer at this year's Game Awards might be a more likely slot for Intergalactic to resurface but I'm keeping my fingers crossed.</p></div><div class="live-content"><time datetime="2026-06-02T13:57:07+00:00">June 2, 2026 – 9:57 AM</time><h2 id="the-state-of-play-hype-is-building-already">The State of Play hype is building already</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kah7qoXLLHvHCTTWqYJnoZ" name="state-of-play-youtube-viewers-june-2-2026" alt="PlayStation's YouTube Channel showing number of viewing waiting for State of Play June 2026" src="https://cdn.mos.cms.futurecdn.net/kah7qoXLLHvHCTTWqYJnoZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>There's no doubt that there's a lot of excitement in the air about today's State of Play. In fact, some 5,000 fans are already in the waiting room as we speak. The showcase might not go live for around seven hours, but that isn't stopping some viewers from booting up the stream and essentially staring at an empty screen!  </p></div><div class="live-content"><time datetime="2026-06-02T14:22:50+00:00">June 2, 2026 – 10:22 AM</time><h2 id="could-rayman-return-at-state-of-play">Could Rayman return at State of Play?</h2><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="Ykv8FdP83PDfxrKegmZPnC" name="Rayman Legends Hero.jpg" alt="Rayman Legends screenshot" src="https://cdn.mos.cms.futurecdn.net/Ykv8FdP83PDfxrKegmZPnC-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ubisoft)</span></figcaption></figure><p>Well, looks like the cat is out of the bag when it comes to Rayman. Unless somebody is playing a very cruel joke, it appears that Rayman Legends is getting a remake in the form of Rayman Legends: Retold. Could this be one of the State of Play announcements that has leaked a little early? It certainly seems possible.</p><p>Per <a href="https://insider-gaming.com/rayman-legends-retold-gameplay/" target="_blank">Insider Gaming</a>, Rayman Legends: Retold is a re-release of the original game launched in 2013. It reportedly swaps the original's 2D art style for a 2D.5 approach, and even better, it might come bundled with a copy of its predecessor, Rayman Origins (hot takes: Legends is very good, but I actually preferred Origins overall).</p><p>Rayman Legends has such a timeless look that I'm not convinced we <em>need </em>a remake, and thanks to a PS4 port, the game is already playable on PS5, but still, Rayman fans likely won't be complaining about the often-neglect heroes return.</p></div><div class="live-content"><time datetime="2026-06-02T14:42:33+00:00">June 2, 2026 – 10:42 AM</time><h2 id="i-got-hands-on-with-two-upcoming-ps5-accessories">I got hands-on with two upcoming PS5 accessories</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2424px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="N6LTKNQi66tSXXqZMZpNSE" name="Sony Fightstick and Speakers-2" alt="PlayStation FlexStrike Wireless Fight Stick and Pulse Elevate Wireless Speakers in a glass cabinet" src="https://cdn.mos.cms.futurecdn.net/N6LTKNQi66tSXXqZMZpNSE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2424" height="1363" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>If you're looking to fill some of the time until State of Play, read <a href="https://www.tomsguide.com/gaming/playstation/ps5-flexstrike-fight-stick-and-pulse-elevate-speakers-preview">my hands-on report</a> with the upcoming FlexStrike fight stick and the Pulse Elevate desktop speakers. </p><p>I recently took a trip to the PlayStation U.K. office to check out these new PS5 accessories, due for launch in 2026, and I came away seriously impressed with both. The FlexStrike in particular has become an accessory I'm eager to add to my gaming setup, especially as it launches on August 8 alongside Marvel Tokon.</p><p>We might even see more of these new products in today's State of Play!</p></div><div class="live-content"><time datetime="2026-06-02T14:59:31+00:00">June 2, 2026 – 10:59 AM</time><h2 id="i-m-taking-a-big-huff-of-hopium-let-s-talk-bloodborne">I'm taking a big huff of hopium, let's talk Bloodborne</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NXxKpabzwq9kkLRRjzEUEn" name="bloodborne-ps4-screenshot-02.jpg" alt="Bloodborne screenshot" src="https://cdn.mos.cms.futurecdn.net/NXxKpabzwq9kkLRRjzEUEn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: FromSoftware / Sony)</span></figcaption></figure><p>If you'll let me indulge in a little wishing here, like many PlayStation fans, my dream announcement today would be something Bloodborne-related. Sequel, remaster, remake, <em>just </em>a 60 fps patch for the game on PS4, I'd take just about anything. </p><p>The 2015 action-RPG from developer From Software is quite simply a masterpiece, and much as I've loved replaying it on PS4 regularly over the years, I'd love either a proper follow-up or a remastered version that bumps the framerate and makes its haunting world look even prettier. </p><p>I certainly wouldn't bank on Bloodborne being present at today's State of Play, but if the name did pop up in pretty much any form, I'd be squealing with delight.</p></div><div class="live-content"><time datetime="2026-06-02T15:19:29+00:00">June 2, 2026 – 11:19 AM</time><h2 id="don-t-forget-about-the-future-games-show-this-week">Don't forget about the Future Games Show this week!</h2><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="ksyUW3v9CrjneEmwwfDX2h" name="FGS.0312_hero1_1920x1080" alt="Future Games Show Summer Showcase 2026" src="https://cdn.mos.cms.futurecdn.net/ksyUW3v9CrjneEmwwfDX2h-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>It's set to be a huge week for gaming news. There's today's PS5 State of Play, Friday brings Summer Game Fest 2026, and Sunday sees Microsoft take the stage with the Xbox Showcase. But don't forget about the <strong>Future Games Show</strong> on Saturday. </p><p>Hosted by Troy Baker and Alex Wilton, it takes place on Saturday, June 6 at 12 p.m. PT / 3 p.m. ET / 8 p.m. BST and will feature trailers and reveals for more than 50 games, from AAA to indie, including Halloween: The Game, WARDOGS and more. </p><p>It's going to be a great showcase, and all that wasn't enough, it'll be followed by FGS Live from Los Angeles, with more trailers, premieres and developer interviews.</p></div><div class="live-content"><time datetime="2026-06-02T15:44:42+00:00">June 2, 2026 – 11:44 AM</time><h2 id="a-spooky-prediction-i-m-feeling-confident-about">A spooky prediction I'm feeling confident about</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Us6AjqR5vrdSCAa6xcKoa9" name="silent-hill-townfall-screenshot" alt="Silent Hill: Townfall screenshot" src="https://cdn.mos.cms.futurecdn.net/Us6AjqR5vrdSCAa6xcKoa9-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Konami / Annapurna Interactive)</span></figcaption></figure><p>I'm fairly confident we'll be seeing more from Silent Hill: Townfall in today's State of Play. We might even get a release date considering it's been slated for 2026. </p><p>My reasoning is twofold. Firstly, earlier today, an ESRB rating for the game was discovered via <a href="https://mp1st.com/news/silent-hill-townfall-esrb-rating-surfaces-ahead-state-of-play" target="_blank">MP1st</a> (no surprises here, it's rated M). This would suggest it's gearing up for launch if the game's already been submitted for an age rating. </p><p>Secondly, the last State of Play offered a first: PlayStation gave the stage to Konami to host its own mini-showcase within a SOP. A portion of the event was dedicated to new reveals from the publisher, including a first trailer for Silent Hill: Townfall. </p><p>If Townfall is going to hit its confirmed 2026 window, then it stands to reason we'll see more from it soon, and with PlayStation already showing its strong partnership with Konami, I reckon we'll see more from Silent Hill: Townfall later today.</p></div><div class="live-content"><time datetime="2026-06-02T16:00:35+00:00">June 2, 2026 – 12:00 PM</time><h2 id="just-5-hours-to-go">Just 5 hours to go! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ALK6jc8sVtnXdoztzrN4BT" name="state-of-play-june-2-2026-info" alt="State of Play info graphic showing timings for the June 2, 2026 event" src="https://cdn.mos.cms.futurecdn.net/ALK6jc8sVtnXdoztzrN4BT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>It's not quite time to get seated and gets your snacks to hand, but we're <em>only </em>five hours away from the State of Play for June 2026 kicking off. Don't worry, we're not going anywhere, I'll be stepping back for a quick break before the show, but I'm tagging in some colleagues to keep you entertained as we get closer to the State of Play going live. For those curious how the waiting room is looking, it's dropped down to 2,300 viewers, but those numbers will explode as go-time approaches.</p></div><div class="live-content"><time datetime="2026-06-02T16:26:26+00:00">June 2, 2026 – 12:26 PM</time><h2 id="a-little-football">A little football</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EsdXUwUzf3UFM8tWSAy4Yn" name="CFB27 cover" alt="College Football 27 deluxe edition cover" src="https://cdn.mos.cms.futurecdn.net/EsdXUwUzf3UFM8tWSAy4Yn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: EA Sports)</span></figcaption></figure><p>EA Sports just revealed the cover images for the third iteration of its revived College Football series. </p><p>CFB 27 will launch later this summer, so I wouldn't be surprised if we get a glimpse of the new game during State of Play. Chat will be chuffed I'm sure.</p></div><div class="live-content"><time datetime="2026-06-02T17:07:58+00:00">June 2, 2026 – 1:07 PM</time><h2 id="team-asobi-teases-sly-cooper">Team Asobi teases Sly Cooper</h2><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2061720031222759559"><p lang="en" dir="ltr">If you can’t find Sly, check the nearest safe.🦝😉#AstroBot #SlyCooper pic.twitter.com/CstQ6RbAwl<a href="https://twitter.com/cantworkitout/status/2061720031222759559">June 2, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Team Asobi, the developers behind the excellent AstroBot, teased Sly Cooper in a little video earlier today. </p><p>It's no real guarantee but it is an interesting video to post on the day of a State of Play. Comments under the GIF are cautiously excited about a potential Sly 5. </p><p>What do you think, will we see the return of the raccoon thief today?</p></div><div class="live-content"><time datetime="2026-06-02T17:35:49+00:00">June 2, 2026 – 1:35 PM</time><h2 id="what-are-you-excited-to-maybe-see">What are you excited to maybe see?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cgx4DpiYHGNVhb5WsXGfSo" name="155615_0002 (1).jpg" alt="(L to R) King sits on Luz's shoulder waving as Luz stands with an excited smile and her hands clasped together in The Owl House Episode "Sense and Insensitivity"" src="https://cdn.mos.cms.futurecdn.net/cgx4DpiYHGNVhb5WsXGfSo-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Disney)</span></figcaption></figure><p>I have my own predictions but what do you think Sony will show off today? Or what do you want to see? </p><p>Let us know in the comments or shoot me an email at scott.younker@futurenet.com</p></div><div class="live-content"><time datetime="2026-06-02T18:02:13+00:00">June 2, 2026 – 2:02 PM</time><h2 id="a-fresh-look-at-horizon-hunters-gathering">A fresh look at Horizon Hunters Gathering</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YhffejPLEhTLJYVz8sAmMn" name="horizon-hunters-gathering-ps5" alt="Horizon Hunters Gathering screenshot" src="https://cdn.mos.cms.futurecdn.net/YhffejPLEhTLJYVz8sAmMn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Sony announced Horizon Hunters Gathering back in February as a cooperative team game that sees players taking on different robo-dinos. </p><p>It seems cartoon-y, which isn't bad but maybe not what I personally want from the Horizon series. That said, if we're leaning into the silliness, I would love a sequel Lego Horizon game.</p><p>Anyway, it's very likely we'll get a fresh look at Hunters Gathering.</p></div><div class="live-content"><time datetime="2026-06-02T18:30:16+00:00">June 2, 2026 – 2:30 PM</time><h2 id="lara-croft-pops-up">Lara Croft pops up</h2><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2061868897276416408"><p lang="en" dir="ltr">New Tomb Raider: Legacy of Atlantis screenshots just went up on PlayStation Store: https://t.co/AuBEh3cIUzAppearance at State of Play later today? https://t.co/2TAczrHw0c(one more screenshot in the next reply) pic.twitter.com/D9o1pxee0c<a href="https://twitter.com/cantworkitout/status/2061868897276416408">June 2, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Hmm, <a href="https://x.com/gematsu/status/2061868897276416408?s=20" target="_blank">Gematsu </a>noticed that new Tomb Raider: Legacy of Atlantis screenshots just popped up on the PlayStation Store.</p><p>This could mean that Lara Croft gets some shine today.</p><p>We don't have a release date for the next Tomb Raider game, so this could be a good opportunity for Sony to reveal one. </p><p>Some commenters pointed out that Summer Games Fest kicks off on June 5 this Friday. It's possible that we won't hear anything until then.</p></div><div class="live-content"><time datetime="2026-06-02T19:00:47+00:00">June 2, 2026 – 3:00 PM</time><h2 id="a-wishlist-of-sequels">A wishlist of sequels</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:62.50%;"><img id="SK3bf8TwUHEtiiAZCZJJqH" name="khiii.jpg" alt="kingdom hearts" src="https://cdn.mos.cms.futurecdn.net/SK3bf8TwUHEtiiAZCZJJqH-1920-80.jpg" mos="" align="middle" fullscreen="" width="1200" height="750" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Square Enix)</span></figcaption></figure><p>I've been looking around Reddit, X and some forums and I keep seeing a wishlist of sequels. </p><p>Here are the most common ones:</p><ul><li>Bloodborne 2</li><li>Devil May Cry 6</li><li>Final Fantasy 7 number 3</li><li>God of War: Faye</li><li>Infamous 4</li><li>Kingdom Hearts 4</li><li>Nier 2</li><li>Uncharted 5</li><li>Twisted Metal something</li><li>Spider-Man 3</li></ul><p>Some are more realistic than others. Spider-Man 3 and Infamous for example are probably not showing up as Sucker Punch shows off Wolverine. </p><p>We have heard some inklings of a new Uncharted, but Naughty Dog has seemingly been a single game at a time studio for a couple decades now.</p><p>And Bloodborne 2 is just a dream to upset Bloodborne fans.</p></div><div class="live-content"><time datetime="2026-06-02T19:29:13+00:00">June 2, 2026 – 3:29 PM</time><h2 id="90-minutes-to-showtime">90 minutes to showtime</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:920px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="YjQgFQT9J6kopyr5nu4evh" name="Playstation store.jpg" alt="PlayStation Store Holiday Sale" src="https://cdn.mos.cms.futurecdn.net/YjQgFQT9J6kopyr5nu4evh-1920-80.jpg" mos="" align="middle" fullscreen="" width="920" height="518" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>As a reminder the show kicks off at<strong> at 2:00 p.m. PT / 5:00 p.m. ET / 10 p.m. BST.</strong> </p><p>That's 90 minutes from now. </p></div><div class="live-content"><time datetime="2026-06-02T19:55:37+00:00">June 2, 2026 – 3:55 PM</time><h2 id="mario-kart-is-about-to-have-some-extra-competition">Mario Kart is about to have some (extra) competition </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zXXitwNxbyY7wHD8QBGSq3" name="yooka-laylee-kart-image" alt="Keyart image for Super Yooka-Laylee Kart" src="https://cdn.mos.cms.futurecdn.net/zXXitwNxbyY7wHD8QBGSq3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Playtonic Games)</span></figcaption></figure><p>Hey all! It's Rory here, back from break to guide you through the final hour of build-up and, of course, give you all the live updates from the State of Play June 2026. </p><p>It looks like another soon-to-be-announced game has leaked, and this time, thanks to <a href="https://steamdb.info/app/4809050/" target="_blank">SteamDB</a>. The game in question is Super Yooka-Laylee Kart, presumably a kart racing spin-off from the 3D platforming series Yooka-Laylee. I guess the lizard-bat combo has already taken on Mario in the 3D collectathon arena, and now they're ready to take on Nintendo's mascot in the kart racing genre. </p><p>A kart racer seems a pretty natural next step for Yooka-Laylee, especially after the duo stepped into the 2D side-scrolling world for 2019's Impossible Lair. They've done platforming in 3D and 2D, so what's left to take to the race track? </p><p>However, there is some online speculation rumbling that this game might be announced at Friday's Summer Game Fest event rather than at the State of Play. We'll find out in just over an hour, but Yooka-Laylee fans, how are you feeling?</p></div><div class="live-content"><time datetime="2026-06-02T20:01:06+00:00">June 2, 2026 – 4:01 PM</time><h2 id="what-ps5-game-are-you-hoping-to-see-at-state-of-play">What PS5 game are you hoping to see at State of Play?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X16BMe"></div>                            </div>                            <script src="https://kwizly.com/embed/X16BMe.js" async></script><p>I've given you a few of my wishes, and some heavily rumored games, but I want to hear from you. Vote in the poll above, and let me know what PS5 game you want to see at State of Play. And if you top pick isn't in the poll, let me in the comments!</p></div><div class="live-content"><time datetime="2026-06-02T20:16:45+00:00">June 2, 2026 – 4:16 PM</time><h2 id="tomb-raider-legacy-of-atlantis-may-have-been-delayed">Tomb Raider Legacy of Atlantis may have been delayed</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pdLNJU9AXCKPZ2wnkm3SnG" name="tomb-raider-legacy-of-atlantis-image" alt="Tomb Raider: Legacy of Atlantis keyart image" src="https://cdn.mos.cms.futurecdn.net/pdLNJU9AXCKPZ2wnkm3SnG-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Crystal Dynamics / Flying Wild Hog)</span></figcaption></figure><p>Earlier today new screenshots for the upcoming Tomb Raider: Legacy of Atlantis (a remake of the first Tomb Raider game released in 1996) surfaced on the PlayStation Store, hinting we might get a new trailer at the State of Play. But Amazon just went a step further and appears to have leaked the release date and pre-order details (via <a href="https://x.com/RaidersSociety/status/2061884858205450602?s=20" target="_blank">@RaiderSociety</a>)</p><p>The bad news is, if this listing is accurate (Amazon has since removed it), the game has been delayed out of its previously 2026 window until February 10, 2027. But the listing appears to have confirmed a Deluxe Edition which includes a "post-launch DLC story pack" and a 48-hour early access period for players who pre-order. There's also a bonus outfit based on Lara's gear from the 2013 Tomb Raider reboot. </p><p>We'll find out soon if this listing was legit, but considering Amazon Game Studios is the publisher of both Tomb Raider: Legacy of Atlantis and the upcoming Tomb Raider: Catalyst (the next mainline entry in the series), the smart money says it is. </p></div><div class="live-content"><time datetime="2026-06-02T20:28:20+00:00">June 2, 2026 – 4:28 PM</time><h2 id="will-we-see-any-xbox-logos-during-today-s-state-of-play">Will we see any Xbox logos during today's State of Play?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:809px;"><p class="vanilla-image-block" style="padding-top:56.37%;"><img id="ztD9L9fCjfUCfPmL5bJ3qd" name="xbox-logo-2" alt="Xbox logo" src="https://cdn.mos.cms.futurecdn.net/ztD9L9fCjfUCfPmL5bJ3qd-1920-80.jpg" mos="" align="middle" fullscreen="" width="809" height="456" 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>One of the stranger topics of conversation this week has been the intense debate on comments from Xbox CEO Asha Sharma regarding previous Xbox Showcases opting to include the PS5 logo in trailers for games releasing on PS5. </p><p>Some Xbox fans believe this was a mistake, and Sharma appears to agree, posting on social media that she was "Seeing the feedback on logos. It was a miss, and I own it." (as reported by <a href="https://www.videogameschronicle.com/news/xbox-ceo-calls-ps5-logo-decision-a-miss-and-promises-to-rethink-games-showcase-policy/" target="_blank">VGC</a>). Personally, I think more transparency is a good thing. If a game is releasing on multiple platforms, why try to hide that fact? </p><p>That leads to today, and some humorous speculation on whether PlayStation will include the Xbox logo in its own State of Play. The history books suggest that's unlikely; PlayStation has historically excluded the Xbox logo when spotlighting multi-platform games. But for me, I'd rather all companies were just upfront. </p><p>If a game is landing on Xbox and PlayStation, let gamers know, don't hide it! </p></div><div class="live-content"><time datetime="2026-06-02T20:33:35+00:00">June 2, 2026 – 4:33 PM</time><h2 id="the-countdown-has-started-the-stream-is-live">The countdown has started, the stream is LIVE</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/cvh0xXmu0bs" allowfullscreen></iframe></div></div><p>This is when you know we're almost there! The PlayStation State of Play livestream has gone LIVE. Okay, so it's just a 30-minute countdown clock, but it at least gives us all some nice ambient music, and it means we're in the final home straight!</p></div><div class="live-content"><time datetime="2026-06-02T20:44:06+00:00">June 2, 2026 – 4:44 PM</time><h2 id="state-of-play-is-already-attracting-plenty-of-attention">State of Play is already attracting plenty of attention </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Wwck8ERZDrcCnHLpXxkr4Q" name="ps5-state-of-play-june-2026-youtube-screencap" alt="YouTube screencap showing viewership figures for State of Play June 2026" src="https://cdn.mos.cms.futurecdn.net/Wwck8ERZDrcCnHLpXxkr4Q-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We're just under 20 minutes from the State of Play June 2026 beginning and already thousands of gamers are flooding to watch the countdown. Even in the time it took me to take the above screenshot and write this post, the viewing figures have jumped up to more than 82,000. Hopefully PlayStation has a suitably big show planned for all the thousands of people watching around the world.</p></div><div class="live-content"><time datetime="2026-06-02T20:50:33+00:00">June 2, 2026 – 4:50 PM</time><h2 id="10-minute-warning-now-is-the-time-to-get-ready">10 minute warning, now is the time to get 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="ALK6jc8sVtnXdoztzrN4BT" name="state-of-play-june-2-2026-info" alt="State of Play info graphic showing timings for the June 2, 2026 event" src="https://cdn.mos.cms.futurecdn.net/ALK6jc8sVtnXdoztzrN4BT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>There's just 10 minutes until PS5 State of Play for June 2026 begins. If you haven't already now is the time to get ready. Boot up a live stream (there's one embedded above), get your snacks/drinks prepared, and maybe take a quick bathroom break!</p></div><div class="live-content"><time datetime="2026-06-02T20:56:22+00:00">June 2, 2026 – 4:56 PM</time><h2 id="time-for-one-final-prediction">Time for one final prediction!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Hrpjom7VxZqWBjNmh3PKZC" name="media-molecule-image" alt="Media Molecule image showing characters from LittleBigPlanet, Tearaway and Dreams" src="https://cdn.mos.cms.futurecdn.net/Hrpjom7VxZqWBjNmh3PKZC-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Media Molecule / Sony)</span></figcaption></figure><p>With just five minutes to go, I've got time for a final prediction. I think we might <em>finally </em>see what's next from British developer Media Molecule. The Guildford-based studio behind the popular LittleBigPlanet series hasn't released a game since 2020's Dreams, and this creation tool experience was dropped back in 2023. It's been long enough now that I have a inkling we might see what's next from MM.</p></div><div class="live-content"><time datetime="2026-06-02T21:00:48+00:00">June 2, 2026 – 5:00 PM</time><h2 id="the-waiting-is-over-state-of-play-june-2025-begins-now">The waiting is over! State of Play June 2025 begins now!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pwng4PmYEyMUmsMmXTrcgR" name="playstation-stock-image-state-of-play.jpg" alt="State of Play July 2021" src="https://cdn.mos.cms.futurecdn.net/pwng4PmYEyMUmsMmXTrcgR-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>After all the build-up, predictions, leaks and rumors, now is the time for PlayStation to do the talking as State of Play 2026 begins right now...</p></div><div class="live-content"><time datetime="2026-06-02T21:02:46+00:00">June 2, 2026 – 5:02 PM</time><h2 id="wolverine-opens-the-state-of-play">Wolverine opens the State of Play!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2s7pYFzTXPQbkDmreoQvoL" name="wolverine-ps5-promo-image" alt="Marvel's Wolverine screenshot showing Logan attacking an enemy" src="https://cdn.mos.cms.futurecdn.net/2s7pYFzTXPQbkDmreoQvoL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Insomniac Games / Sony Interactive Entertainment)</span></figcaption></figure><p>I predicted this one, and it's Marvel's Wolverine that kicks off the State of Play, with new gameplay, and some fresh details about this upcoming superhero title!</p></div><div class="live-content"><time datetime="2026-06-02T21:06:38+00:00">June 2, 2026 – 5:06 PM</time><h2 id="wolverine-will-include-other-mutants">Wolverine will include other mutants</h2><p>The first look at proper gameplay from Wolverine confirms that Logan won't be alone with other mutants to encounter during the campaign, it looks like Jean Grey will be one of them. It's also as violent and bloody as any Wolverine fan could want! </p></div><div class="live-content"><time datetime="2026-06-02T21:11:33+00:00">June 2, 2026 – 5:11 PM</time><h2 id="wolverine-gets-state-of-play-off-to-a-strong-start">Wolverine gets State of Play off to a strong start!</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/OiBo_NgYI5Q" allowfullscreen></iframe></div></div><p>That's a pretty action-packed way to kick off a State of Play. Wolverine looks great, but I do have some worries that most of what we saw was cutscenes, I'm hoping that actually <em>playing</em> this new Marvel game will be as fun as watching footage.</p></div><div class="live-content"><time datetime="2026-06-02T21:13:44+00:00">June 2, 2026 – 5:13 PM</time><h2 id="marvel-tokon-is-the-next-game-showcased">Marvel Tokon is the next game showcased</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/cen2Lbmmo_Q" allowfullscreen></iframe></div></div><p>We're in for a Marvel section, as after Wolverine, we move on to Marvel Tokon: Fight Souls, the new fighting game from Arc System Works. I recently got to play a few rounds of this superhero brawler during a trip to PlayStation's U.K. office, and it was very good fun. It's rocketed up my must-play list. It's launching on August 6, 2026.</p></div><div class="live-content"><time datetime="2026-06-02T21:16:10+00:00">June 2, 2026 – 5:16 PM</time><h2 id="marvel-time-is-over-time-for-rayman">Marvel time is over, time for Rayman! </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/TKfG9hiueak" allowfullscreen></iframe></div></div><p>Whelp, the leaks were spot on, next up is the reveal of Rayman Legends Retold. A remake of the excellent Rayman Legends title, this reworked spin on the platforming classic sports a 2.5D look and some new 3D sections.</p><p>It's dropping on October 1 on PS5. </p></div><div class="live-content"><time datetime="2026-06-02T21:18:09+00:00">June 2, 2026 – 5:18 PM</time><h2 id="bancho-the-chef-is-the-next-game-revealed">Bancho the Chef is the next game revealed</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/nJP_ZiDYfxY" allowfullscreen></iframe></div></div><p>I'm not really sure what to make of this one, but it's a new game called Bancho the Chef, and it looks like it mixes cartoonish graphics with a narrative driven approach. </p></div><div class="live-content"><time datetime="2026-06-02T21:21:04+00:00">June 2, 2026 – 5:21 PM</time><h2 id="next-up-a-new-trailer-for-kemuri">Next up, a new trailer for Kemuri</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/yWMwRfJj8So" allowfullscreen></iframe></div></div><p>This game looks wild; it's called Kemuri: Hunt the Unseen, and it's dropping in 2027. You play a hunter in a city trying to track down paranormal forces. Naturally, combat is a big focus of the title, and the art style has definitely caught my eye.</p></div><div class="live-content"><time datetime="2026-06-02T21:22:55+00:00">June 2, 2026 – 5:22 PM</time><h2 id="tomb-raider-legacy-of-atlantis-gets-the-spotlight">Tomb Raider: Legacy of Atlantis gets the spotlight</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/0wEjbSYNUM8" allowfullscreen></iframe></div></div><p>Next up, it's a new trailer for the Tomb Raider remake, subtitled Legacy of Atlantis. It looks cinematic, as any good Tomb Raider game should, but sadly, unless the Amazon listing page leak was incorrect, we know a delay into 2027 is coming.</p><p>There is, the game releases on February 12, 2027!</p></div><div class="live-content"><time datetime="2026-06-02T21:26:29+00:00">June 2, 2026 – 5:26 PM</time><h2 id="trailer-for-the-lost-world-no-it-s-not-jurassic-park">Trailer for The Lost World (No, it's not Jurassic Park)</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/nlt4o-mLxyM" allowfullscreen></iframe></div></div><p>I thought this was our latest look at the previously announced Jurassic Park: Survival, but I was wrong. It's actually <em>another </em>dino-themed game called The Lost World. No prizes for guessing what movie franchise inspired this title.</p></div><div class="live-content"><time datetime="2026-06-02T21:27:29+00:00">June 2, 2026 – 5:27 PM</time><h2 id="some-quick-fire-trailers-now">Some quick fire trailers now!</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/ZX8mHo0aSbc" allowfullscreen></iframe></div></div><p>We're getting a quick fire dose of trailers now, first up is another quick glimpse at Phantom Blade 0 (which launches in September), and in just a few seconds, we're heading over to check out Dune: Awakening. </p></div><div class="live-content"><time datetime="2026-06-02T21:29:13+00:00">June 2, 2026 – 5:29 PM</time><h2 id="dune-awakening-comes-to-ps5-on-september-22">Dune Awakening comes to PS5 on September 22</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/iCKflvFn4p4" allowfullscreen></iframe></div></div><p>Dune Awakening is console-bound and coming on September 22. New for the console edition is a single-player option, letting you explore the spice-rich deserts solo, if you'd rather not be pestered by online players doing silly emotes. </p></div><div class="live-content"><time datetime="2026-06-02T21:30:30+00:00">June 2, 2026 – 5:30 PM</time><h2 id="trailers-for-dynasty-warriors-3-remastered-and-no-rest-for-the-wicked">Trailers for Dynasty Warriors 3 Remastered and No Rest for the Wicked</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/UTVVw9fsHVA" allowfullscreen></iframe></div></div><p>I told you the trailers were coming fast now. We got a look at Dynasty Warriors 3: Complete Edition, followed by the news that No Rest For the Wicked is coming to PS5 with a major 1.0 update in October 2026.</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/dzOnRaQVoeI" allowfullscreen></iframe></div></div></div><div class="live-content"><time datetime="2026-06-02T21:33:08+00:00">June 2, 2026 – 5:33 PM</time><h2 id="can-onimusha-way-of-the-sword-keep-up-capcom-s-hot-streak">Can Onimusha: Way of the Sword keep up Capcom's hot streak?</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/LNq35HHUtNc" allowfullscreen></iframe></div></div><p>Capcom is on an insane run right now, and I'm hoping that Onimusha: Way of the Sword will keep that hot streak going. It certainly looks promising and is due to land on PS5 on September 25, 2026. Even better, <strong>a demo for the game is dropping on PS5 today.</strong> That's my post State of Play plans sorted, I guess!</p></div><div class="live-content"><time datetime="2026-06-02T21:35:33+00:00">June 2, 2026 – 5:35 PM</time><h2 id="i-d-know-that-music-anywhere">I'd know that music anywhere!</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/eXLfSEipn7I" allowfullscreen></iframe></div></div><p>Silent Hill: Townfall up next, I could tell just from the eerie musical chimes alone! This new entry in the survival-horror series takes the franchise to Scotland, and is played in first-person. I wasn't a huge fan of Silent Hill f (hot take, I know), but I'm hoping that Townfall will hook me in the way that Silent Hill 2 remake managed.</p><p>Silent Hill: Townfall is releasing on September 24, 2025 (just 1 day before Onimusha, September is going to be <em>so </em>packed with new games)</p></div><div class="live-content"><time datetime="2026-06-02T21:38:37+00:00">June 2, 2026 – 5:38 PM</time><h2 id="ace-combat-8-wings-of-theve-lands-in-october">Ace Combat 8: Wings of Theve lands in October</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/c2bgoQhlzqE" allowfullscreen></iframe></div></div><p>It feels like every game is dropping in September/October, no doubt they're all trying to get out of the way of GTA 6. Ace Combat 8: Wings of Theve is the latest title to confirm it's releasing into what is looking like a crowed couple of months.</p></div><div class="live-content"><time datetime="2026-06-02T21:42:01+00:00">June 2, 2026 – 5:42 PM</time><h2 id="it-s-a-knight-rider-game-or-is-it-back-to-the-future">It's a Knight Rider game? Or is it Back to the Future?</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/A7NZpeAmdxk" allowfullscreen></iframe></div></div><p>What sort of mashup is this! Saber just announced a new title called Hollywood Stuntman, where, as the game suggests, you play as a stunt driver on movie sets. There appear to be licensed flicks involved with Knight Rider and Back to the Future teased in the trailer. I'm kind of completely sold on this concept! </p></div><div class="live-content"><time datetime="2026-06-02T21:43:45+00:00">June 2, 2026 – 5:43 PM</time><h2 id="this-horror-game-makes-wolverine-look-pg">This horror game makes Wolverine look PG</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/TFHcVsPNbsY" allowfullscreen></iframe></div></div><p>Ill gets a new trailer, and it's bloody and violent, it makes the Wolverine gameplay from earlier look tame. Don't watch the above trailer if you can't stomach lots of guts and intestines. </p></div><div class="live-content"><time datetime="2026-06-02T21:44:54+00:00">June 2, 2026 – 5:44 PM</time><h2 id="control-resonant-gets-a-story-trailer-and-release-date">Control: Resonant gets a story trailer (and release date)</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/TAzxTMaA6j4" allowfullscreen></iframe></div></div><p>One of my most anticipated games of 2026, Control Resonant is out September 24, 2026. And I can't wait. I didn't even want to watch the trailer as I'm sold already! </p></div><div class="live-content"><time datetime="2026-06-02T21:47:17+00:00">June 2, 2026 – 5:47 PM</time><h2 id="marathon-season-2-takes-the-spotlight">Marathon Season 2 takes the spotlight</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/-WVhTcByDyY" allowfullscreen></iframe></div></div><p>Well, if you need a quick bathroom break, I guess this Marathon Season 2 trailer isn't a bad time for one. Seeing as the chat has been spamming "We Want Destiny 3" all day long, there are quite a few unhappy comments about it. Marathon Season 2 launches today with a free trial weekend, and the base game gets a discount.</p></div><div class="live-content"><time datetime="2026-06-02T21:49:26+00:00">June 2, 2026 – 5:49 PM</time><h2 id="runescape-is-arriving-on-ps5">Runescape is arriving on PS5</h2><p>My nostalgia levels are rising as for the first time a Runescape game is coming to PS5. Okay, it's not the base game but a spin-off, but still, Runescape on PS5! It's also be added to the PlayStation+ catalog on day one. </p><p>Sony's also confirming a new PlayStation Classics being added to PS+ including PSI-Ops, which has hit with another dose of childhood memories.</p></div><div class="live-content"><time datetime="2026-06-02T21:50:37+00:00">June 2, 2026 – 5:50 PM</time><h2 id="could-this-be-the-until-dawn-sequel">Could this be the Until Dawn Sequel?</h2><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="swTtov7dnGkenzGkkFCfWA" name="until dawn trailer (3).jpg" alt="A screenshot showing characters from Until Dawn" src="https://cdn.mos.cms.futurecdn.net/swTtov7dnGkenzGkkFCfWA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / SuperMassive Games)</span></figcaption></figure><p>Rumors of an Until Dawn sequel have been ever-present for years, and this trailer that shows young adults having fun in paradise over sinister music is screaming Until Dawn to me! </p></div><div class="live-content"><time datetime="2026-06-02T21:52:15+00:00">June 2, 2026 – 5:52 PM</time><h2 id="yup-until-dawn-2-is-confirmed">Yup, Until Dawn 2 is confirmed</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/QpVZ9OvRLZI" allowfullscreen></iframe></div></div><p>And there you have it, in 2027 we are getting a follow-up to fan-favorite PS4 game Until Dawn 2. It's about a group of "fake" ghost hunters, who travel to a tropical island and find themselves trapped in a real nightmare. </p></div><div class="live-content"><time datetime="2026-06-02T21:53:36+00:00">June 2, 2026 – 5:53 PM</time><h2 id="the-final-reveal-will-be-20-minutes-long">The final reveal will be 20 minutes long!</h2><p>Wow, our last reveal of the night will be a "big" one, and it'll be 20 minutes of uninterrupted gameplay rather than merely a quick trailer or logo. Could it be the rumored God of War prequel starring Faye? </p><p>The Santa Monica Studio logo has appeared, I think it just might be...</p></div><div class="live-content"><time datetime="2026-06-02T21:56:25+00:00">June 2, 2026 – 5:56 PM</time><h2 id="that-s-god-of-war-alright">That's God of War alright!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZjP4fqAEcPtL4Km8XsFF2d" name="state-of-play-june-2-god-of-war" alt="State of Play June 2026 screenshot" src="https://cdn.mos.cms.futurecdn.net/ZjP4fqAEcPtL4Km8XsFF2d-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Yup, it looks like all the rumors were correct, our last reveal is a new God of War game, and it will be starring Faye. Who awakes <em>somewhere </em>after her death! </p></div><div class="live-content"><time datetime="2026-06-02T21:59:23+00:00">June 2, 2026 – 5:59 PM</time><h2 id="our-first-look-at-faye-in-action">Our first look at Faye in action!</h2><p>Whelp, she might not be Kratos, but Faye can certainly kick some butt. Our first look at this new God of War title (assuming it'll adopt the GoW name) sees Faye attacked by planet creatures and easily dispatch them with aggressive move set of her own </p></div><div class="live-content"><time datetime="2026-06-02T22:07:39+00:00">June 2, 2026 – 6:07 PM</time><h2 id="move-over-kratos-i-m-team-faye-now">Move over Kratos, I'm Team Faye now</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="X94e4UCURnQV3K4kkLeGgB" name="state-of-play-june-2-god-of-war-01" alt="state of play june 2 screenshot" src="https://cdn.mos.cms.futurecdn.net/X94e4UCURnQV3K4kkLeGgB-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>I wasn't totally sold on a God of War prequel/spin-off without Kratos, but this gameplay is convincing me quickly. I'm wondering if PlayStation is showing us 20 minutes of gameplay out of the gate, could this game be closer to release? </p></div><div class="live-content"><time datetime="2026-06-02T22:15:47+00:00">June 2, 2026 – 6:15 PM</time><h2 id="and-it-s-called-god-of-war-laufey">And it's called God of War: Laufey</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/HLMX2w3cwuE" allowfullscreen></iframe></div></div><p>And there you have it, God of War: Laufey is coming to PS5. Not even a release year, so I guess my prediction that showing us so much of it today was a sign we might be close(ish) to release was wrong. I expect this is probably a late 2027 game at least.</p></div><div class="live-content"><time datetime="2026-06-02T22:16:54+00:00">June 2, 2026 – 6:16 PM</time><h2 id="and-that-s-the-state-of-play-june-2026-wrapped-up">And that's the State of Play June 2026 wrapped up!</h2><p>God of War: Laufey concludes today's State of Play. It was a suitably epic ending!</p></div><div class="live-content"><time datetime="2026-06-02T22:19:57+00:00">June 2, 2026 – 6:19 PM</time><h2 id="give-me-your-rating-for-today-s-state-of-play">Give me your rating for today's State of Play!</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O6jBVO"></div>                            </div>                            <script src="https://kwizly.com/embed/O6jBVO.js" async></script><p>Now that State of Play is over, I want to know what you make of the showcase from PlayStation. I'm going with a solid B+. It was a good showing, but lacked major surprises, and I'm quite disappointed we didn't see Intergalactic whatsoever.  </p></div><div class="live-content"><time datetime="2026-06-02T22:53:47+00:00">June 2, 2026 – 6:53 PM</time><h2 id="what-was-missing">What was missing?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="oSXnTeeWyDNn8CXYkWPAwN" name="resi-9-switch-2" alt="Resident Evil" src="https://cdn.mos.cms.futurecdn.net/oSXnTeeWyDNn8CXYkWPAwN-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We put up a poll earlier asking what games you were excited to see. </p><p>Unfortunately, every game on the list (except Wolverine) didn't make an appearance. </p><p>That includes Bloodborne (anything), FF7, RE9 DLC, Intergalactic, Horizon, Ken or Fairgames. It's actually surprising how many games were missing. </p><p>I did mention earlier that Summer Games Fest is on Friday. So, perhaps we'll see some of these games at that show, especially since they'll likely be multiplatform compared to some of the games shown today.</p></div><div class="live-content"><time datetime="2026-06-02T23:34:32+00:00">June 2, 2026 – 7:34 PM</time><h2 id="most-exciting-announcement">Most exciting announcement</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/nlt4o-mLxyM" allowfullscreen></iframe></div></div><p>Yes, God of War and Wolverine took up most of the but I think there were a couple of trailers that looked interesting.</p><p>For me, the Jurassic Park-esque "The Lost Wild" has my interest. I'm not sure where it's going, but I am curious.</p><p>Additionally, there was the trailer for Kemori. Look, I'm a surprisingly simple man, it turns out, and any game where you can grind wires like a skater will pique my interest.</p><p>There were more but I wanted to call those two out. Anything catch your eye?</p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/news/live/ps5-state-of-play-june-2026-live-updates</link>
                                                                            <description>
                            <![CDATA[ State of Play returns for June 2025, and this "more than 60-minute" showcase promises fresh updates and new PS5 game reveals. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">EuZbPBLjCe7bj8sT2WzjJo</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/YLQe3Dc5ZooPurHxRPgwWB-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 02 Jun 2026 12:04:32 +0000</pubDate>                                                                                                                                <updated>Tue, 02 Jun 2026 23:34:36 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                        <dc:contributor><![CDATA[ Scott Younker ]]></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/YLQe3Dc5ZooPurHxRPgwWB-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony Interactive Entertainment]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A screenshot for Marvel&#039;s Wolverine with a PS5 State of Play graphics overlay]]></media:description>                                                            <media:text><![CDATA[A screenshot for Marvel&#039;s Wolverine with a PS5 State of Play graphics overlay]]></media:text>
                                <media:title type="plain"><![CDATA[A screenshot for Marvel&#039;s Wolverine with a PS5 State of Play graphics overlay]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/YLQe3Dc5ZooPurHxRPgwWB-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="live-content"><p>PlayStation State of Play for June 2025 is now over, and it was certainly a packed showcase with loads of new games announced, a bunch of release dates for highly anticipated titles, and plenty of exciting trailers to watch.</p><p>The biggest news was the confirmation of the new God of War: Laufey, a new title in the popular series that swaps Kratos for his wife Faye, as she battles through the afterlife of the gods. Other big reveals included Until Dawn 2, The Lost Wild, Stuntman: Hollywood and plenty more new titles.</p><p>Below you can find every single announcement from State of Play June 2026, along with all the trailers. So if you missed the showcase, our live coverage will guide you through all the biggest news and announcements. </p><h2 id="how-to-re-watch-state-of-play-for-june-2026">How to (re)watch State of Play for June 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/cvh0xXmu0bs" allowfullscreen></iframe></div></div><p>Missed State of Play June 2026? Don't worry, you can use the VOD link above to catch up with the whole showcase available to rewatch. Or you can read on for our live coverage to pick out the trailers you want to watch.</p><h3 class="article-body__section" id="section-live-updates"><span>LIVE UPDATES</span></h3></div><div class="live-content"><time datetime="2026-06-02T11:55:46+00:00">June 2, 2026 – 7:55 AM</time><h2 id="welcome-4">Welcome! </h2><p>Good morning! Welcome to Tom's Guide's live coverage of the PS5 State of Play for June 2026. I'm Rory, a senior entertainment editor, and one of biggest gamers on staff. I'll be bring you all the last-minute rumors, and also guiding you through the State of Play itself when it begins later today. So, let's get into the good stuff...</p></div><div class="live-content"><time datetime="2026-06-02T12:09:13+00:00">June 2, 2026 – 8:09 AM</time><h2 id="the-one-game-we-can-bank-on-being-at-state-of-play">The one game we can bank on being at State of Play</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="brkRET2rLiiqB38ggQjQsW" name="wolverine-2025-state-of-play-ps5-game" alt="Marvel's Wolverine image showing Logan" src="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>There's a lot we don't know about today's State of Play, but Sony has confirmed one game that will present: Marvel's Wolverine. Set to release on September 15, this superhero action game comes from Insomniac Games, the developer of the PS5 Marvel's Spider-Man games, and it looks brutal in the best way possible.  </p><p>We've been waiting a long time to get our hands (claws?) on Wolverine. It was announced during the PlayStation Showcase in September 2021, and almost five years later, we're finally entering the home straight with launch just a few months away. I'm expecting to see more gameplay today, and maybe new story details. </p><p>My other prediction when it comes to Marvel's Wolverine is that PlayStation might confirm a limited-edition Wolverine-themed DualSense and maybe even console.</p></div><div class="live-content"><time datetime="2026-06-02T12:17:41+00:00">June 2, 2026 – 8:17 AM</time><h2 id="ps5-state-of-play-june-2026-everything-you-need-to-know">PS5 State of Play June 2026: Everything you need to know</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:920px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="YjQgFQT9J6kopyr5nu4evh" name="Playstation store.jpg" alt="PlayStation Store Holiday Sale" src="https://cdn.mos.cms.futurecdn.net/YjQgFQT9J6kopyr5nu4evh-1920-80.jpg" mos="" align="middle" fullscreen="" width="920" height="518" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>So, the key details for State of Play are as follows. The live-streamed presentation takes place today (Tuesday, June 2), and it will run for "more than 60 minutes." Sony is promising "updates, announcements, and gameplay reveals from top studios around the world" with at least some presence from its own PlayStation Studios. </p><p>The timings for State of Play June 2026 are as follows: </p><ul><li><strong>2 p.m. PT</strong></li><li><strong>5 p.m. ET</strong></li><li><strong>10 p.m. BST </strong></li><li><strong>11 p.m. CEST</strong></li><li><strong>6 a.m. JST (June 3)</strong></li><li><strong>7 a.m. AEDT (June 3)</strong></li></ul><p>You'll be able to watch along live via PlayStation's channels on YouTube and Twitch, but fear not if you can't get to a stream, that's what I'm here for. In this live blog, I'll bring you all the pre-show build-up, and full live coverage of every announcement. </p></div><div class="live-content"><time datetime="2026-06-02T12:25:27+00:00">June 2, 2026 – 8:25 AM</time><h2 id="you-can-watch-state-of-play-on-the-big-screen">You can watch State of Play on the big screen!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="URqrajEiPL87bAUgpp89kZ" name="GettyImages-1177482185.jpg" alt="movie theater" src="https://cdn.mos.cms.futurecdn.net/URqrajEiPL87bAUgpp89kZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Baona/Getty Images)</span></figcaption></figure><p>How about this for the ultimate way to enjoy the State of Play? Sony has partnered with Alamo Drafthouse (a cinema chain the Japanese tech giant recently bought) to host State of Play fan events, showing the event on the big screen!</p><p><a href="https://drafthouse.com/event/free-fan-event-sony-state-of-play" target="_blank" rel="nofollow"><strong>Tickets are free</strong></a>, and the State of Play will be shown in Drafthouse's across the U.S., including in Los Angeles, New York, Austin, Boston and Chicago. I can't think of a better way to enjoy the occasion than watching all the announcements in a movie theater with an audience that will no doubt only add to the atmosphere. </p><p>I'll be watching at my desk (after all, I need to bring TG readers the latest updates!), but if you're fortunate enough to live near one of the locations hosting the event, check out the link above. Just be aware that tickets might have sold out.</p></div><div class="live-content"><time datetime="2026-06-02T12:32:29+00:00">June 2, 2026 – 8:32 AM</time><h2 id="would-you-like-fries-with-that">Would you like fries with that?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EtgXweYbB7JaJN9QQvWuA3" name="state-of-play-themed-menu" alt="State of Play themed menu at Alamo Drafthouse" src="https://cdn.mos.cms.futurecdn.net/EtgXweYbB7JaJN9QQvWuA3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Daniel Ahmad)</span></figcaption></figure><p>Alongside screening the State of Play at select Alamo Drafthouse locations, it looks like there will be Wolverine themed-food on offer as well (source <a href="https://x.com/ZhugeEX/status/2061091369616105577?s=20" target="_blank">@ZhugeEX</a>). This includes "Savage Sticks," "Rage Pizza" and a "Mutant Instinct" cocktail. Just looking at the menu is making me hungry. I wonder if you can order these themed items on DoorDash?</p></div><div class="live-content"><time datetime="2026-06-02T12:45:01+00:00">June 2, 2026 – 8:45 AM</time><h2 id="here-s-when-i-think-we-ll-see-wolverine-during-state-of-play">Here's when I think we'll see Wolverine during State of Play</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2s7pYFzTXPQbkDmreoQvoL" name="wolverine-ps5-promo-image" alt="Marvel's Wolverine screenshot showing Logan attacking an enemy" src="https://cdn.mos.cms.futurecdn.net/2s7pYFzTXPQbkDmreoQvoL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Insomniac Games / Sony Interactive Entertainment)</span></figcaption></figure><p>We'll be diving into the world of rumors, leaks and speculation soon enough, but for now, let's keep the focus on what we do know. So, it's been confirmed that Marvel's Wolverine will feature, but the big question, is when will it be showcased? </p><p>My prediction is that Wolverine will open the show. For starters, PlayStation will want to lead off with a big game, which Wolverine most certainly is. Secondly, because Logan's involvement has been pre-confirmed, it makes sense to open the show, leaving the final reveal to be something unexpectedly and hype generating. </p><p>Furthermore, the opening slot is definitely a prime position, and it would make sense for PlayStation to reverse it for one of its own titles rather than a third-party.</p></div><div class="live-content"><time datetime="2026-06-02T13:01:50+00:00">June 2, 2026 – 9:01 AM</time><h2 id="the-next-god-of-war-could-be-revealed-today">The next God of War could be revealed today</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AXNNW7PLmYmCxqswRjhu8R" name="God of War Ragnarok - Kratos vs creature.jpg" alt="God of War Ragnarok" src="https://cdn.mos.cms.futurecdn.net/AXNNW7PLmYmCxqswRjhu8R-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>There's one rumor that just won't go away ahead of the State of Play. Various sources, including <a href="https://www.youtube.com/watch?t=3513&v=NoxlKQRhF34&feature=youtu.be" target="_blank">Insider Gaming's Tom Henderson,</a> have claimed the next game in the God of War series will be announced during State of Play June 2026. </p><p>It's already been a big year for the GoW series. In the February State of Play, a remake of the original trilogy was revealed, and the side-scrolling spin-off title God of War: Sons of Sparta was announced and released the same day. But if the rumors are correct, PlayStation is already ready to show what's next for the series.</p><p>The unconfirmed suggestion is that the next God of War will be a prequel game focused on Faye, Kratos' second wife, whose death kicked off the events of God of War (2018). It's also rumored this title will be directed by Cory Barlog, who was the sole director on the reboot and a co-director on sequel God of War Ragnarök. </p><p>As with all rumors, I advise taking this one with a grain of salt, but there's certainly a lot of online noise about this. We'll find out if it's true in just a matter of hours.</p></div><div class="live-content"><time datetime="2026-06-02T13:20:20+00:00">June 2, 2026 – 9:20 AM</time><h2 id="fairgames-could-be-re-revealed-as-break-in">Fairgames could be re-revealed as Break In</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Y2mAwzqCspkL6rk6eS5Zw8" name="fairgames-ps5-screenshot" alt="Fairgames promotional image" src="https://cdn.mos.cms.futurecdn.net/Y2mAwzqCspkL6rk6eS5Zw8-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Haven Studios / Sony Interactive Entertainment)</span></figcaption></figure><p>The upcoming live-service shooter Fairgames from new team Haven Studios was announced back in 2023, but we've not seen it since. Therefore, it stands to reason that it could resurface at today's State of Play, but perhaps with a new name.</p><p>Last month, it was reported that Sony had filed a trademark for a new game called "Break In," but the internet rumor mill, tipped off by a not-so-subtle clue from Bloomberg's Jason Schreier (per <a href="https://www.ign.com/articles/sony-files-trademark-for-new-game-called-break-in" target="_blank">IGN</a>), suggests this might not be a new game at all, but rather a rebranding of Fairgames. </p><p>Rightly or wrongly, the online reception to Fairgames was pretty mixed, with many fans suggesting it'll be the next Concord (a PlayStation live service game that was shut down within just a few weeks). So, giving it a new title and a fresh slate, and hoping to make a better impression this time around, could be a smart play.</p></div><div class="live-content"><time datetime="2026-06-02T13:40:33+00:00">June 2, 2026 – 9:40 AM</time><h2 id="i-need-to-see-more-from-intergalactic">I need to see more from Intergalactic!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gGHYy9kM2a4pZMfY2DzSSQ" name="intergalactic-the-heretic-prophet-screenshot" alt="Intergalactic: The Heretic Prophet screenshot" src="https://cdn.mos.cms.futurecdn.net/gGHYy9kM2a4pZMfY2DzSSQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / Naughty Dog)</span></figcaption></figure><p>If there's one already-announced game I'm desperate to see at the State of Play, it's Intergalactic: The Heretic Prophet. Naughty Dog are a top 3 developer in my book, so anything with the ND logo has my instant attention, and Intergalactic looks epic. </p><p>We've not seen this one since it was revealed at The Game Awards in December 2024, and while a 2026 release date seems very unlikely, a fresh look during today's State of Play isn't out of the question. The game is a sci-fi title that stars a futuristic bounty hunter who becomes stuck on a planet cut off from contact for 600 years. </p><p>If I were a betting man, I think a second trailer at this year's Game Awards might be a more likely slot for Intergalactic to resurface but I'm keeping my fingers crossed.</p></div><div class="live-content"><time datetime="2026-06-02T13:57:07+00:00">June 2, 2026 – 9:57 AM</time><h2 id="the-state-of-play-hype-is-building-already">The State of Play hype is building already</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kah7qoXLLHvHCTTWqYJnoZ" name="state-of-play-youtube-viewers-june-2-2026" alt="PlayStation's YouTube Channel showing number of viewing waiting for State of Play June 2026" src="https://cdn.mos.cms.futurecdn.net/kah7qoXLLHvHCTTWqYJnoZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>There's no doubt that there's a lot of excitement in the air about today's State of Play. In fact, some 5,000 fans are already in the waiting room as we speak. The showcase might not go live for around seven hours, but that isn't stopping some viewers from booting up the stream and essentially staring at an empty screen!  </p></div><div class="live-content"><time datetime="2026-06-02T14:22:50+00:00">June 2, 2026 – 10:22 AM</time><h2 id="could-rayman-return-at-state-of-play">Could Rayman return at State of Play?</h2><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="Ykv8FdP83PDfxrKegmZPnC" name="Rayman Legends Hero.jpg" alt="Rayman Legends screenshot" src="https://cdn.mos.cms.futurecdn.net/Ykv8FdP83PDfxrKegmZPnC-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ubisoft)</span></figcaption></figure><p>Well, looks like the cat is out of the bag when it comes to Rayman. Unless somebody is playing a very cruel joke, it appears that Rayman Legends is getting a remake in the form of Rayman Legends: Retold. Could this be one of the State of Play announcements that has leaked a little early? It certainly seems possible.</p><p>Per <a href="https://insider-gaming.com/rayman-legends-retold-gameplay/" target="_blank">Insider Gaming</a>, Rayman Legends: Retold is a re-release of the original game launched in 2013. It reportedly swaps the original's 2D art style for a 2D.5 approach, and even better, it might come bundled with a copy of its predecessor, Rayman Origins (hot takes: Legends is very good, but I actually preferred Origins overall).</p><p>Rayman Legends has such a timeless look that I'm not convinced we <em>need </em>a remake, and thanks to a PS4 port, the game is already playable on PS5, but still, Rayman fans likely won't be complaining about the often-neglect heroes return.</p></div><div class="live-content"><time datetime="2026-06-02T14:42:33+00:00">June 2, 2026 – 10:42 AM</time><h2 id="i-got-hands-on-with-two-upcoming-ps5-accessories">I got hands-on with two upcoming PS5 accessories</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2424px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="N6LTKNQi66tSXXqZMZpNSE" name="Sony Fightstick and Speakers-2" alt="PlayStation FlexStrike Wireless Fight Stick and Pulse Elevate Wireless Speakers in a glass cabinet" src="https://cdn.mos.cms.futurecdn.net/N6LTKNQi66tSXXqZMZpNSE-1920-80.jpg" mos="" align="middle" fullscreen="" width="2424" height="1363" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>If you're looking to fill some of the time until State of Play, read <a href="https://www.tomsguide.com/gaming/playstation/ps5-flexstrike-fight-stick-and-pulse-elevate-speakers-preview">my hands-on report</a> with the upcoming FlexStrike fight stick and the Pulse Elevate desktop speakers. </p><p>I recently took a trip to the PlayStation U.K. office to check out these new PS5 accessories, due for launch in 2026, and I came away seriously impressed with both. The FlexStrike in particular has become an accessory I'm eager to add to my gaming setup, especially as it launches on August 8 alongside Marvel Tokon.</p><p>We might even see more of these new products in today's State of Play!</p></div><div class="live-content"><time datetime="2026-06-02T14:59:31+00:00">June 2, 2026 – 10:59 AM</time><h2 id="i-m-taking-a-big-huff-of-hopium-let-s-talk-bloodborne">I'm taking a big huff of hopium, let's talk Bloodborne</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NXxKpabzwq9kkLRRjzEUEn" name="bloodborne-ps4-screenshot-02.jpg" alt="Bloodborne screenshot" src="https://cdn.mos.cms.futurecdn.net/NXxKpabzwq9kkLRRjzEUEn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: FromSoftware / Sony)</span></figcaption></figure><p>If you'll let me indulge in a little wishing here, like many PlayStation fans, my dream announcement today would be something Bloodborne-related. Sequel, remaster, remake, <em>just </em>a 60 fps patch for the game on PS4, I'd take just about anything. </p><p>The 2015 action-RPG from developer From Software is quite simply a masterpiece, and much as I've loved replaying it on PS4 regularly over the years, I'd love either a proper follow-up or a remastered version that bumps the framerate and makes its haunting world look even prettier. </p><p>I certainly wouldn't bank on Bloodborne being present at today's State of Play, but if the name did pop up in pretty much any form, I'd be squealing with delight.</p></div><div class="live-content"><time datetime="2026-06-02T15:19:29+00:00">June 2, 2026 – 11:19 AM</time><h2 id="don-t-forget-about-the-future-games-show-this-week">Don't forget about the Future Games Show this week!</h2><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="ksyUW3v9CrjneEmwwfDX2h" name="FGS.0312_hero1_1920x1080" alt="Future Games Show Summer Showcase 2026" src="https://cdn.mos.cms.futurecdn.net/ksyUW3v9CrjneEmwwfDX2h-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>It's set to be a huge week for gaming news. There's today's PS5 State of Play, Friday brings Summer Game Fest 2026, and Sunday sees Microsoft take the stage with the Xbox Showcase. But don't forget about the <strong>Future Games Show</strong> on Saturday. </p><p>Hosted by Troy Baker and Alex Wilton, it takes place on Saturday, June 6 at 12 p.m. PT / 3 p.m. ET / 8 p.m. BST and will feature trailers and reveals for more than 50 games, from AAA to indie, including Halloween: The Game, WARDOGS and more. </p><p>It's going to be a great showcase, and all that wasn't enough, it'll be followed by FGS Live from Los Angeles, with more trailers, premieres and developer interviews.</p></div><div class="live-content"><time datetime="2026-06-02T15:44:42+00:00">June 2, 2026 – 11:44 AM</time><h2 id="a-spooky-prediction-i-m-feeling-confident-about">A spooky prediction I'm feeling confident about</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Us6AjqR5vrdSCAa6xcKoa9" name="silent-hill-townfall-screenshot" alt="Silent Hill: Townfall screenshot" src="https://cdn.mos.cms.futurecdn.net/Us6AjqR5vrdSCAa6xcKoa9-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Konami / Annapurna Interactive)</span></figcaption></figure><p>I'm fairly confident we'll be seeing more from Silent Hill: Townfall in today's State of Play. We might even get a release date considering it's been slated for 2026. </p><p>My reasoning is twofold. Firstly, earlier today, an ESRB rating for the game was discovered via <a href="https://mp1st.com/news/silent-hill-townfall-esrb-rating-surfaces-ahead-state-of-play" target="_blank">MP1st</a> (no surprises here, it's rated M). This would suggest it's gearing up for launch if the game's already been submitted for an age rating. </p><p>Secondly, the last State of Play offered a first: PlayStation gave the stage to Konami to host its own mini-showcase within a SOP. A portion of the event was dedicated to new reveals from the publisher, including a first trailer for Silent Hill: Townfall. </p><p>If Townfall is going to hit its confirmed 2026 window, then it stands to reason we'll see more from it soon, and with PlayStation already showing its strong partnership with Konami, I reckon we'll see more from Silent Hill: Townfall later today.</p></div><div class="live-content"><time datetime="2026-06-02T16:00:35+00:00">June 2, 2026 – 12:00 PM</time><h2 id="just-5-hours-to-go">Just 5 hours to go! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ALK6jc8sVtnXdoztzrN4BT" name="state-of-play-june-2-2026-info" alt="State of Play info graphic showing timings for the June 2, 2026 event" src="https://cdn.mos.cms.futurecdn.net/ALK6jc8sVtnXdoztzrN4BT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>It's not quite time to get seated and gets your snacks to hand, but we're <em>only </em>five hours away from the State of Play for June 2026 kicking off. Don't worry, we're not going anywhere, I'll be stepping back for a quick break before the show, but I'm tagging in some colleagues to keep you entertained as we get closer to the State of Play going live. For those curious how the waiting room is looking, it's dropped down to 2,300 viewers, but those numbers will explode as go-time approaches.</p></div><div class="live-content"><time datetime="2026-06-02T16:26:26+00:00">June 2, 2026 – 12:26 PM</time><h2 id="a-little-football">A little football</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EsdXUwUzf3UFM8tWSAy4Yn" name="CFB27 cover" alt="College Football 27 deluxe edition cover" src="https://cdn.mos.cms.futurecdn.net/EsdXUwUzf3UFM8tWSAy4Yn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: EA Sports)</span></figcaption></figure><p>EA Sports just revealed the cover images for the third iteration of its revived College Football series. </p><p>CFB 27 will launch later this summer, so I wouldn't be surprised if we get a glimpse of the new game during State of Play. Chat will be chuffed I'm sure.</p></div><div class="live-content"><time datetime="2026-06-02T17:07:58+00:00">June 2, 2026 – 1:07 PM</time><h2 id="team-asobi-teases-sly-cooper">Team Asobi teases Sly Cooper</h2><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2061720031222759559"><p lang="en" dir="ltr">If you can’t find Sly, check the nearest safe.🦝😉#AstroBot #SlyCooper pic.twitter.com/CstQ6RbAwl<a href="https://twitter.com/cantworkitout/status/2061720031222759559">June 2, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Team Asobi, the developers behind the excellent AstroBot, teased Sly Cooper in a little video earlier today. </p><p>It's no real guarantee but it is an interesting video to post on the day of a State of Play. Comments under the GIF are cautiously excited about a potential Sly 5. </p><p>What do you think, will we see the return of the raccoon thief today?</p></div><div class="live-content"><time datetime="2026-06-02T17:35:49+00:00">June 2, 2026 – 1:35 PM</time><h2 id="what-are-you-excited-to-maybe-see">What are you excited to maybe see?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cgx4DpiYHGNVhb5WsXGfSo" name="155615_0002 (1).jpg" alt="(L to R) King sits on Luz's shoulder waving as Luz stands with an excited smile and her hands clasped together in The Owl House Episode "Sense and Insensitivity"" src="https://cdn.mos.cms.futurecdn.net/cgx4DpiYHGNVhb5WsXGfSo-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Disney)</span></figcaption></figure><p>I have my own predictions but what do you think Sony will show off today? Or what do you want to see? </p><p>Let us know in the comments or shoot me an email at scott.younker@futurenet.com</p></div><div class="live-content"><time datetime="2026-06-02T18:02:13+00:00">June 2, 2026 – 2:02 PM</time><h2 id="a-fresh-look-at-horizon-hunters-gathering">A fresh look at Horizon Hunters Gathering</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YhffejPLEhTLJYVz8sAmMn" name="horizon-hunters-gathering-ps5" alt="Horizon Hunters Gathering screenshot" src="https://cdn.mos.cms.futurecdn.net/YhffejPLEhTLJYVz8sAmMn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Sony announced Horizon Hunters Gathering back in February as a cooperative team game that sees players taking on different robo-dinos. </p><p>It seems cartoon-y, which isn't bad but maybe not what I personally want from the Horizon series. That said, if we're leaning into the silliness, I would love a sequel Lego Horizon game.</p><p>Anyway, it's very likely we'll get a fresh look at Hunters Gathering.</p></div><div class="live-content"><time datetime="2026-06-02T18:30:16+00:00">June 2, 2026 – 2:30 PM</time><h2 id="lara-croft-pops-up">Lara Croft pops up</h2><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2061868897276416408"><p lang="en" dir="ltr">New Tomb Raider: Legacy of Atlantis screenshots just went up on PlayStation Store: https://t.co/AuBEh3cIUzAppearance at State of Play later today? https://t.co/2TAczrHw0c(one more screenshot in the next reply) pic.twitter.com/D9o1pxee0c<a href="https://twitter.com/cantworkitout/status/2061868897276416408">June 2, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Hmm, <a href="https://x.com/gematsu/status/2061868897276416408?s=20" target="_blank">Gematsu </a>noticed that new Tomb Raider: Legacy of Atlantis screenshots just popped up on the PlayStation Store.</p><p>This could mean that Lara Croft gets some shine today.</p><p>We don't have a release date for the next Tomb Raider game, so this could be a good opportunity for Sony to reveal one. </p><p>Some commenters pointed out that Summer Games Fest kicks off on June 5 this Friday. It's possible that we won't hear anything until then.</p></div><div class="live-content"><time datetime="2026-06-02T19:00:47+00:00">June 2, 2026 – 3:00 PM</time><h2 id="a-wishlist-of-sequels">A wishlist of sequels</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:62.50%;"><img id="SK3bf8TwUHEtiiAZCZJJqH" name="khiii.jpg" alt="kingdom hearts" src="https://cdn.mos.cms.futurecdn.net/SK3bf8TwUHEtiiAZCZJJqH-1920-80.jpg" mos="" align="middle" fullscreen="" width="1200" height="750" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Square Enix)</span></figcaption></figure><p>I've been looking around Reddit, X and some forums and I keep seeing a wishlist of sequels. </p><p>Here are the most common ones:</p><ul><li>Bloodborne 2</li><li>Devil May Cry 6</li><li>Final Fantasy 7 number 3</li><li>God of War: Faye</li><li>Infamous 4</li><li>Kingdom Hearts 4</li><li>Nier 2</li><li>Uncharted 5</li><li>Twisted Metal something</li><li>Spider-Man 3</li></ul><p>Some are more realistic than others. Spider-Man 3 and Infamous for example are probably not showing up as Sucker Punch shows off Wolverine. </p><p>We have heard some inklings of a new Uncharted, but Naughty Dog has seemingly been a single game at a time studio for a couple decades now.</p><p>And Bloodborne 2 is just a dream to upset Bloodborne fans.</p></div><div class="live-content"><time datetime="2026-06-02T19:29:13+00:00">June 2, 2026 – 3:29 PM</time><h2 id="90-minutes-to-showtime">90 minutes to showtime</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:920px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="YjQgFQT9J6kopyr5nu4evh" name="Playstation store.jpg" alt="PlayStation Store Holiday Sale" src="https://cdn.mos.cms.futurecdn.net/YjQgFQT9J6kopyr5nu4evh-1920-80.jpg" mos="" align="middle" fullscreen="" width="920" height="518" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>As a reminder the show kicks off at<strong> at 2:00 p.m. PT / 5:00 p.m. ET / 10 p.m. BST.</strong> </p><p>That's 90 minutes from now. </p></div><div class="live-content"><time datetime="2026-06-02T19:55:37+00:00">June 2, 2026 – 3:55 PM</time><h2 id="mario-kart-is-about-to-have-some-extra-competition">Mario Kart is about to have some (extra) competition </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zXXitwNxbyY7wHD8QBGSq3" name="yooka-laylee-kart-image" alt="Keyart image for Super Yooka-Laylee Kart" src="https://cdn.mos.cms.futurecdn.net/zXXitwNxbyY7wHD8QBGSq3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Playtonic Games)</span></figcaption></figure><p>Hey all! It's Rory here, back from break to guide you through the final hour of build-up and, of course, give you all the live updates from the State of Play June 2026. </p><p>It looks like another soon-to-be-announced game has leaked, and this time, thanks to <a href="https://steamdb.info/app/4809050/" target="_blank">SteamDB</a>. The game in question is Super Yooka-Laylee Kart, presumably a kart racing spin-off from the 3D platforming series Yooka-Laylee. I guess the lizard-bat combo has already taken on Mario in the 3D collectathon arena, and now they're ready to take on Nintendo's mascot in the kart racing genre. </p><p>A kart racer seems a pretty natural next step for Yooka-Laylee, especially after the duo stepped into the 2D side-scrolling world for 2019's Impossible Lair. They've done platforming in 3D and 2D, so what's left to take to the race track? </p><p>However, there is some online speculation rumbling that this game might be announced at Friday's Summer Game Fest event rather than at the State of Play. We'll find out in just over an hour, but Yooka-Laylee fans, how are you feeling?</p></div><div class="live-content"><time datetime="2026-06-02T20:01:06+00:00">June 2, 2026 – 4:01 PM</time><h2 id="what-ps5-game-are-you-hoping-to-see-at-state-of-play">What PS5 game are you hoping to see at State of Play?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X16BMe"></div>                            </div>                            <script src="https://kwizly.com/embed/X16BMe.js" async></script><p>I've given you a few of my wishes, and some heavily rumored games, but I want to hear from you. Vote in the poll above, and let me know what PS5 game you want to see at State of Play. And if you top pick isn't in the poll, let me in the comments!</p></div><div class="live-content"><time datetime="2026-06-02T20:16:45+00:00">June 2, 2026 – 4:16 PM</time><h2 id="tomb-raider-legacy-of-atlantis-may-have-been-delayed">Tomb Raider Legacy of Atlantis may have been delayed</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pdLNJU9AXCKPZ2wnkm3SnG" name="tomb-raider-legacy-of-atlantis-image" alt="Tomb Raider: Legacy of Atlantis keyart image" src="https://cdn.mos.cms.futurecdn.net/pdLNJU9AXCKPZ2wnkm3SnG-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Crystal Dynamics / Flying Wild Hog)</span></figcaption></figure><p>Earlier today new screenshots for the upcoming Tomb Raider: Legacy of Atlantis (a remake of the first Tomb Raider game released in 1996) surfaced on the PlayStation Store, hinting we might get a new trailer at the State of Play. But Amazon just went a step further and appears to have leaked the release date and pre-order details (via <a href="https://x.com/RaidersSociety/status/2061884858205450602?s=20" target="_blank">@RaiderSociety</a>)</p><p>The bad news is, if this listing is accurate (Amazon has since removed it), the game has been delayed out of its previously 2026 window until February 10, 2027. But the listing appears to have confirmed a Deluxe Edition which includes a "post-launch DLC story pack" and a 48-hour early access period for players who pre-order. There's also a bonus outfit based on Lara's gear from the 2013 Tomb Raider reboot. </p><p>We'll find out soon if this listing was legit, but considering Amazon Game Studios is the publisher of both Tomb Raider: Legacy of Atlantis and the upcoming Tomb Raider: Catalyst (the next mainline entry in the series), the smart money says it is. </p></div><div class="live-content"><time datetime="2026-06-02T20:28:20+00:00">June 2, 2026 – 4:28 PM</time><h2 id="will-we-see-any-xbox-logos-during-today-s-state-of-play">Will we see any Xbox logos during today's State of Play?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:809px;"><p class="vanilla-image-block" style="padding-top:56.37%;"><img id="ztD9L9fCjfUCfPmL5bJ3qd" name="xbox-logo-2" alt="Xbox logo" src="https://cdn.mos.cms.futurecdn.net/ztD9L9fCjfUCfPmL5bJ3qd-1920-80.jpg" mos="" align="middle" fullscreen="" width="809" height="456" 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>One of the stranger topics of conversation this week has been the intense debate on comments from Xbox CEO Asha Sharma regarding previous Xbox Showcases opting to include the PS5 logo in trailers for games releasing on PS5. </p><p>Some Xbox fans believe this was a mistake, and Sharma appears to agree, posting on social media that she was "Seeing the feedback on logos. It was a miss, and I own it." (as reported by <a href="https://www.videogameschronicle.com/news/xbox-ceo-calls-ps5-logo-decision-a-miss-and-promises-to-rethink-games-showcase-policy/" target="_blank">VGC</a>). Personally, I think more transparency is a good thing. If a game is releasing on multiple platforms, why try to hide that fact? </p><p>That leads to today, and some humorous speculation on whether PlayStation will include the Xbox logo in its own State of Play. The history books suggest that's unlikely; PlayStation has historically excluded the Xbox logo when spotlighting multi-platform games. But for me, I'd rather all companies were just upfront. </p><p>If a game is landing on Xbox and PlayStation, let gamers know, don't hide it! </p></div><div class="live-content"><time datetime="2026-06-02T20:33:35+00:00">June 2, 2026 – 4:33 PM</time><h2 id="the-countdown-has-started-the-stream-is-live">The countdown has started, the stream is LIVE</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/cvh0xXmu0bs" allowfullscreen></iframe></div></div><p>This is when you know we're almost there! The PlayStation State of Play livestream has gone LIVE. Okay, so it's just a 30-minute countdown clock, but it at least gives us all some nice ambient music, and it means we're in the final home straight!</p></div><div class="live-content"><time datetime="2026-06-02T20:44:06+00:00">June 2, 2026 – 4:44 PM</time><h2 id="state-of-play-is-already-attracting-plenty-of-attention">State of Play is already attracting plenty of attention </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Wwck8ERZDrcCnHLpXxkr4Q" name="ps5-state-of-play-june-2026-youtube-screencap" alt="YouTube screencap showing viewership figures for State of Play June 2026" src="https://cdn.mos.cms.futurecdn.net/Wwck8ERZDrcCnHLpXxkr4Q-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Google)</span></figcaption></figure><p>We're just under 20 minutes from the State of Play June 2026 beginning and already thousands of gamers are flooding to watch the countdown. Even in the time it took me to take the above screenshot and write this post, the viewing figures have jumped up to more than 82,000. Hopefully PlayStation has a suitably big show planned for all the thousands of people watching around the world.</p></div><div class="live-content"><time datetime="2026-06-02T20:50:33+00:00">June 2, 2026 – 4:50 PM</time><h2 id="10-minute-warning-now-is-the-time-to-get-ready">10 minute warning, now is the time to get 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="ALK6jc8sVtnXdoztzrN4BT" name="state-of-play-june-2-2026-info" alt="State of Play info graphic showing timings for the June 2, 2026 event" src="https://cdn.mos.cms.futurecdn.net/ALK6jc8sVtnXdoztzrN4BT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>There's just 10 minutes until PS5 State of Play for June 2026 begins. If you haven't already now is the time to get ready. Boot up a live stream (there's one embedded above), get your snacks/drinks prepared, and maybe take a quick bathroom break!</p></div><div class="live-content"><time datetime="2026-06-02T20:56:22+00:00">June 2, 2026 – 4:56 PM</time><h2 id="time-for-one-final-prediction">Time for one final prediction!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Hrpjom7VxZqWBjNmh3PKZC" name="media-molecule-image" alt="Media Molecule image showing characters from LittleBigPlanet, Tearaway and Dreams" src="https://cdn.mos.cms.futurecdn.net/Hrpjom7VxZqWBjNmh3PKZC-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Media Molecule / Sony)</span></figcaption></figure><p>With just five minutes to go, I've got time for a final prediction. I think we might <em>finally </em>see what's next from British developer Media Molecule. The Guildford-based studio behind the popular LittleBigPlanet series hasn't released a game since 2020's Dreams, and this creation tool experience was dropped back in 2023. It's been long enough now that I have a inkling we might see what's next from MM.</p></div><div class="live-content"><time datetime="2026-06-02T21:00:48+00:00">June 2, 2026 – 5:00 PM</time><h2 id="the-waiting-is-over-state-of-play-june-2025-begins-now">The waiting is over! State of Play June 2025 begins now!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="pwng4PmYEyMUmsMmXTrcgR" name="playstation-stock-image-state-of-play.jpg" alt="State of Play July 2021" src="https://cdn.mos.cms.futurecdn.net/pwng4PmYEyMUmsMmXTrcgR-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>After all the build-up, predictions, leaks and rumors, now is the time for PlayStation to do the talking as State of Play 2026 begins right now...</p></div><div class="live-content"><time datetime="2026-06-02T21:02:46+00:00">June 2, 2026 – 5:02 PM</time><h2 id="wolverine-opens-the-state-of-play">Wolverine opens the State of Play!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2s7pYFzTXPQbkDmreoQvoL" name="wolverine-ps5-promo-image" alt="Marvel's Wolverine screenshot showing Logan attacking an enemy" src="https://cdn.mos.cms.futurecdn.net/2s7pYFzTXPQbkDmreoQvoL-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Insomniac Games / Sony Interactive Entertainment)</span></figcaption></figure><p>I predicted this one, and it's Marvel's Wolverine that kicks off the State of Play, with new gameplay, and some fresh details about this upcoming superhero title!</p></div><div class="live-content"><time datetime="2026-06-02T21:06:38+00:00">June 2, 2026 – 5:06 PM</time><h2 id="wolverine-will-include-other-mutants">Wolverine will include other mutants</h2><p>The first look at proper gameplay from Wolverine confirms that Logan won't be alone with other mutants to encounter during the campaign, it looks like Jean Grey will be one of them. It's also as violent and bloody as any Wolverine fan could want! </p></div><div class="live-content"><time datetime="2026-06-02T21:11:33+00:00">June 2, 2026 – 5:11 PM</time><h2 id="wolverine-gets-state-of-play-off-to-a-strong-start">Wolverine gets State of Play off to a strong start!</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/OiBo_NgYI5Q" allowfullscreen></iframe></div></div><p>That's a pretty action-packed way to kick off a State of Play. Wolverine looks great, but I do have some worries that most of what we saw was cutscenes, I'm hoping that actually <em>playing</em> this new Marvel game will be as fun as watching footage.</p></div><div class="live-content"><time datetime="2026-06-02T21:13:44+00:00">June 2, 2026 – 5:13 PM</time><h2 id="marvel-tokon-is-the-next-game-showcased">Marvel Tokon is the next game showcased</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/cen2Lbmmo_Q" allowfullscreen></iframe></div></div><p>We're in for a Marvel section, as after Wolverine, we move on to Marvel Tokon: Fight Souls, the new fighting game from Arc System Works. I recently got to play a few rounds of this superhero brawler during a trip to PlayStation's U.K. office, and it was very good fun. It's rocketed up my must-play list. It's launching on August 6, 2026.</p></div><div class="live-content"><time datetime="2026-06-02T21:16:10+00:00">June 2, 2026 – 5:16 PM</time><h2 id="marvel-time-is-over-time-for-rayman">Marvel time is over, time for Rayman! </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/TKfG9hiueak" allowfullscreen></iframe></div></div><p>Whelp, the leaks were spot on, next up is the reveal of Rayman Legends Retold. A remake of the excellent Rayman Legends title, this reworked spin on the platforming classic sports a 2.5D look and some new 3D sections.</p><p>It's dropping on October 1 on PS5. </p></div><div class="live-content"><time datetime="2026-06-02T21:18:09+00:00">June 2, 2026 – 5:18 PM</time><h2 id="bancho-the-chef-is-the-next-game-revealed">Bancho the Chef is the next game revealed</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/nJP_ZiDYfxY" allowfullscreen></iframe></div></div><p>I'm not really sure what to make of this one, but it's a new game called Bancho the Chef, and it looks like it mixes cartoonish graphics with a narrative driven approach. </p></div><div class="live-content"><time datetime="2026-06-02T21:21:04+00:00">June 2, 2026 – 5:21 PM</time><h2 id="next-up-a-new-trailer-for-kemuri">Next up, a new trailer for Kemuri</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/yWMwRfJj8So" allowfullscreen></iframe></div></div><p>This game looks wild; it's called Kemuri: Hunt the Unseen, and it's dropping in 2027. You play a hunter in a city trying to track down paranormal forces. Naturally, combat is a big focus of the title, and the art style has definitely caught my eye.</p></div><div class="live-content"><time datetime="2026-06-02T21:22:55+00:00">June 2, 2026 – 5:22 PM</time><h2 id="tomb-raider-legacy-of-atlantis-gets-the-spotlight">Tomb Raider: Legacy of Atlantis gets the spotlight</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/0wEjbSYNUM8" allowfullscreen></iframe></div></div><p>Next up, it's a new trailer for the Tomb Raider remake, subtitled Legacy of Atlantis. It looks cinematic, as any good Tomb Raider game should, but sadly, unless the Amazon listing page leak was incorrect, we know a delay into 2027 is coming.</p><p>There is, the game releases on February 12, 2027!</p></div><div class="live-content"><time datetime="2026-06-02T21:26:29+00:00">June 2, 2026 – 5:26 PM</time><h2 id="trailer-for-the-lost-world-no-it-s-not-jurassic-park">Trailer for The Lost World (No, it's not Jurassic Park)</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/nlt4o-mLxyM" allowfullscreen></iframe></div></div><p>I thought this was our latest look at the previously announced Jurassic Park: Survival, but I was wrong. It's actually <em>another </em>dino-themed game called The Lost World. No prizes for guessing what movie franchise inspired this title.</p></div><div class="live-content"><time datetime="2026-06-02T21:27:29+00:00">June 2, 2026 – 5:27 PM</time><h2 id="some-quick-fire-trailers-now">Some quick fire trailers now!</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/ZX8mHo0aSbc" allowfullscreen></iframe></div></div><p>We're getting a quick fire dose of trailers now, first up is another quick glimpse at Phantom Blade 0 (which launches in September), and in just a few seconds, we're heading over to check out Dune: Awakening. </p></div><div class="live-content"><time datetime="2026-06-02T21:29:13+00:00">June 2, 2026 – 5:29 PM</time><h2 id="dune-awakening-comes-to-ps5-on-september-22">Dune Awakening comes to PS5 on September 22</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/iCKflvFn4p4" allowfullscreen></iframe></div></div><p>Dune Awakening is console-bound and coming on September 22. New for the console edition is a single-player option, letting you explore the spice-rich deserts solo, if you'd rather not be pestered by online players doing silly emotes. </p></div><div class="live-content"><time datetime="2026-06-02T21:30:30+00:00">June 2, 2026 – 5:30 PM</time><h2 id="trailers-for-dynasty-warriors-3-remastered-and-no-rest-for-the-wicked">Trailers for Dynasty Warriors 3 Remastered and No Rest for the Wicked</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/UTVVw9fsHVA" allowfullscreen></iframe></div></div><p>I told you the trailers were coming fast now. We got a look at Dynasty Warriors 3: Complete Edition, followed by the news that No Rest For the Wicked is coming to PS5 with a major 1.0 update in October 2026.</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/dzOnRaQVoeI" allowfullscreen></iframe></div></div></div><div class="live-content"><time datetime="2026-06-02T21:33:08+00:00">June 2, 2026 – 5:33 PM</time><h2 id="can-onimusha-way-of-the-sword-keep-up-capcom-s-hot-streak">Can Onimusha: Way of the Sword keep up Capcom's hot streak?</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/LNq35HHUtNc" allowfullscreen></iframe></div></div><p>Capcom is on an insane run right now, and I'm hoping that Onimusha: Way of the Sword will keep that hot streak going. It certainly looks promising and is due to land on PS5 on September 25, 2026. Even better, <strong>a demo for the game is dropping on PS5 today.</strong> That's my post State of Play plans sorted, I guess!</p></div><div class="live-content"><time datetime="2026-06-02T21:35:33+00:00">June 2, 2026 – 5:35 PM</time><h2 id="i-d-know-that-music-anywhere">I'd know that music anywhere!</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/eXLfSEipn7I" allowfullscreen></iframe></div></div><p>Silent Hill: Townfall up next, I could tell just from the eerie musical chimes alone! This new entry in the survival-horror series takes the franchise to Scotland, and is played in first-person. I wasn't a huge fan of Silent Hill f (hot take, I know), but I'm hoping that Townfall will hook me in the way that Silent Hill 2 remake managed.</p><p>Silent Hill: Townfall is releasing on September 24, 2025 (just 1 day before Onimusha, September is going to be <em>so </em>packed with new games)</p></div><div class="live-content"><time datetime="2026-06-02T21:38:37+00:00">June 2, 2026 – 5:38 PM</time><h2 id="ace-combat-8-wings-of-theve-lands-in-october">Ace Combat 8: Wings of Theve lands in October</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/c2bgoQhlzqE" allowfullscreen></iframe></div></div><p>It feels like every game is dropping in September/October, no doubt they're all trying to get out of the way of GTA 6. Ace Combat 8: Wings of Theve is the latest title to confirm it's releasing into what is looking like a crowed couple of months.</p></div><div class="live-content"><time datetime="2026-06-02T21:42:01+00:00">June 2, 2026 – 5:42 PM</time><h2 id="it-s-a-knight-rider-game-or-is-it-back-to-the-future">It's a Knight Rider game? Or is it Back to the Future?</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/A7NZpeAmdxk" allowfullscreen></iframe></div></div><p>What sort of mashup is this! Saber just announced a new title called Hollywood Stuntman, where, as the game suggests, you play as a stunt driver on movie sets. There appear to be licensed flicks involved with Knight Rider and Back to the Future teased in the trailer. I'm kind of completely sold on this concept! </p></div><div class="live-content"><time datetime="2026-06-02T21:43:45+00:00">June 2, 2026 – 5:43 PM</time><h2 id="this-horror-game-makes-wolverine-look-pg">This horror game makes Wolverine look PG</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/TFHcVsPNbsY" allowfullscreen></iframe></div></div><p>Ill gets a new trailer, and it's bloody and violent, it makes the Wolverine gameplay from earlier look tame. Don't watch the above trailer if you can't stomach lots of guts and intestines. </p></div><div class="live-content"><time datetime="2026-06-02T21:44:54+00:00">June 2, 2026 – 5:44 PM</time><h2 id="control-resonant-gets-a-story-trailer-and-release-date">Control: Resonant gets a story trailer (and release date)</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/TAzxTMaA6j4" allowfullscreen></iframe></div></div><p>One of my most anticipated games of 2026, Control Resonant is out September 24, 2026. And I can't wait. I didn't even want to watch the trailer as I'm sold already! </p></div><div class="live-content"><time datetime="2026-06-02T21:47:17+00:00">June 2, 2026 – 5:47 PM</time><h2 id="marathon-season-2-takes-the-spotlight">Marathon Season 2 takes the spotlight</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/-WVhTcByDyY" allowfullscreen></iframe></div></div><p>Well, if you need a quick bathroom break, I guess this Marathon Season 2 trailer isn't a bad time for one. Seeing as the chat has been spamming "We Want Destiny 3" all day long, there are quite a few unhappy comments about it. Marathon Season 2 launches today with a free trial weekend, and the base game gets a discount.</p></div><div class="live-content"><time datetime="2026-06-02T21:49:26+00:00">June 2, 2026 – 5:49 PM</time><h2 id="runescape-is-arriving-on-ps5">Runescape is arriving on PS5</h2><p>My nostalgia levels are rising as for the first time a Runescape game is coming to PS5. Okay, it's not the base game but a spin-off, but still, Runescape on PS5! It's also be added to the PlayStation+ catalog on day one. </p><p>Sony's also confirming a new PlayStation Classics being added to PS+ including PSI-Ops, which has hit with another dose of childhood memories.</p></div><div class="live-content"><time datetime="2026-06-02T21:50:37+00:00">June 2, 2026 – 5:50 PM</time><h2 id="could-this-be-the-until-dawn-sequel">Could this be the Until Dawn Sequel?</h2><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="swTtov7dnGkenzGkkFCfWA" name="until dawn trailer (3).jpg" alt="A screenshot showing characters from Until Dawn" src="https://cdn.mos.cms.futurecdn.net/swTtov7dnGkenzGkkFCfWA-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / SuperMassive Games)</span></figcaption></figure><p>Rumors of an Until Dawn sequel have been ever-present for years, and this trailer that shows young adults having fun in paradise over sinister music is screaming Until Dawn to me! </p></div><div class="live-content"><time datetime="2026-06-02T21:52:15+00:00">June 2, 2026 – 5:52 PM</time><h2 id="yup-until-dawn-2-is-confirmed">Yup, Until Dawn 2 is confirmed</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/QpVZ9OvRLZI" allowfullscreen></iframe></div></div><p>And there you have it, in 2027 we are getting a follow-up to fan-favorite PS4 game Until Dawn 2. It's about a group of "fake" ghost hunters, who travel to a tropical island and find themselves trapped in a real nightmare. </p></div><div class="live-content"><time datetime="2026-06-02T21:53:36+00:00">June 2, 2026 – 5:53 PM</time><h2 id="the-final-reveal-will-be-20-minutes-long">The final reveal will be 20 minutes long!</h2><p>Wow, our last reveal of the night will be a "big" one, and it'll be 20 minutes of uninterrupted gameplay rather than merely a quick trailer or logo. Could it be the rumored God of War prequel starring Faye? </p><p>The Santa Monica Studio logo has appeared, I think it just might be...</p></div><div class="live-content"><time datetime="2026-06-02T21:56:25+00:00">June 2, 2026 – 5:56 PM</time><h2 id="that-s-god-of-war-alright">That's God of War alright!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZjP4fqAEcPtL4Km8XsFF2d" name="state-of-play-june-2-god-of-war" alt="State of Play June 2026 screenshot" src="https://cdn.mos.cms.futurecdn.net/ZjP4fqAEcPtL4Km8XsFF2d-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Yup, it looks like all the rumors were correct, our last reveal is a new God of War game, and it will be starring Faye. Who awakes <em>somewhere </em>after her death! </p></div><div class="live-content"><time datetime="2026-06-02T21:59:23+00:00">June 2, 2026 – 5:59 PM</time><h2 id="our-first-look-at-faye-in-action">Our first look at Faye in action!</h2><p>Whelp, she might not be Kratos, but Faye can certainly kick some butt. Our first look at this new God of War title (assuming it'll adopt the GoW name) sees Faye attacked by planet creatures and easily dispatch them with aggressive move set of her own </p></div><div class="live-content"><time datetime="2026-06-02T22:07:39+00:00">June 2, 2026 – 6:07 PM</time><h2 id="move-over-kratos-i-m-team-faye-now">Move over Kratos, I'm Team Faye now</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="X94e4UCURnQV3K4kkLeGgB" name="state-of-play-june-2-god-of-war-01" alt="state of play june 2 screenshot" src="https://cdn.mos.cms.futurecdn.net/X94e4UCURnQV3K4kkLeGgB-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>I wasn't totally sold on a God of War prequel/spin-off without Kratos, but this gameplay is convincing me quickly. I'm wondering if PlayStation is showing us 20 minutes of gameplay out of the gate, could this game be closer to release? </p></div><div class="live-content"><time datetime="2026-06-02T22:15:47+00:00">June 2, 2026 – 6:15 PM</time><h2 id="and-it-s-called-god-of-war-laufey">And it's called God of War: Laufey</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/HLMX2w3cwuE" allowfullscreen></iframe></div></div><p>And there you have it, God of War: Laufey is coming to PS5. Not even a release year, so I guess my prediction that showing us so much of it today was a sign we might be close(ish) to release was wrong. I expect this is probably a late 2027 game at least.</p></div><div class="live-content"><time datetime="2026-06-02T22:16:54+00:00">June 2, 2026 – 6:16 PM</time><h2 id="and-that-s-the-state-of-play-june-2026-wrapped-up">And that's the State of Play June 2026 wrapped up!</h2><p>God of War: Laufey concludes today's State of Play. It was a suitably epic ending!</p></div><div class="live-content"><time datetime="2026-06-02T22:19:57+00:00">June 2, 2026 – 6:19 PM</time><h2 id="give-me-your-rating-for-today-s-state-of-play">Give me your rating for today's State of Play!</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O6jBVO"></div>                            </div>                            <script src="https://kwizly.com/embed/O6jBVO.js" async></script><p>Now that State of Play is over, I want to know what you make of the showcase from PlayStation. I'm going with a solid B+. It was a good showing, but lacked major surprises, and I'm quite disappointed we didn't see Intergalactic whatsoever.  </p></div><div class="live-content"><time datetime="2026-06-02T22:53:47+00:00">June 2, 2026 – 6:53 PM</time><h2 id="what-was-missing">What was missing?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="oSXnTeeWyDNn8CXYkWPAwN" name="resi-9-switch-2" alt="Resident Evil" src="https://cdn.mos.cms.futurecdn.net/oSXnTeeWyDNn8CXYkWPAwN-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We put up a poll earlier asking what games you were excited to see. </p><p>Unfortunately, every game on the list (except Wolverine) didn't make an appearance. </p><p>That includes Bloodborne (anything), FF7, RE9 DLC, Intergalactic, Horizon, Ken or Fairgames. It's actually surprising how many games were missing. </p><p>I did mention earlier that Summer Games Fest is on Friday. So, perhaps we'll see some of these games at that show, especially since they'll likely be multiplatform compared to some of the games shown today.</p></div><div class="live-content"><time datetime="2026-06-02T23:34:32+00:00">June 2, 2026 – 7:34 PM</time><h2 id="most-exciting-announcement">Most exciting announcement</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/nlt4o-mLxyM" allowfullscreen></iframe></div></div><p>Yes, God of War and Wolverine took up most of the but I think there were a couple of trailers that looked interesting.</p><p>For me, the Jurassic Park-esque "The Lost Wild" has my interest. I'm not sure where it's going, but I am curious.</p><p>Additionally, there was the trailer for Kemori. Look, I'm a surprisingly simple man, it turns out, and any game where you can grind wires like a skater will pique my interest.</p><p>There were more but I wanted to call those two out. Anything catch your eye?</p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I got hands-on with PS5 FlexStrike fight stick and Pulse Elevate desktop speakers — and I’m seriously impressed with one in particular ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Last year, PlayStation announced the already diverse PS5 accessory range was set to grow further with two new products: the <a href="https://www.tomsguide.com/gaming/playstation/playstations-first-fight-stick-gets-an-official-name-meet-the-flexstrike">FlexStrike fight stick</a> and the <a href="https://www.tomsguide.com/audio/speakers/sony-used-a-ps5-state-of-play-to-reveal-desktop-gaming-speakers-heres-what-they-bring-to-the-table">Pulse Elevate desktop speakers</a>. What makes these two upcoming accessories more intriguing is that they represent firsts for PlayStation.</p><p>FlexStrike is the first official PlayStation fight stick, while the Elevate expands the Pulse range beyond headsets and into the speaker arena. I’ve been curious to learn more and, of course, to get my hands on these two products since they were announced last summer and fall, respectively.</p><p>After getting to demo both during a trip to PlayStation’s U.K. office, I’ve come away impressed and confident that they will bolster the already strong range of optional extras available to <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5</a> and <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> owners.</p><p>Both have their use cases and seem primed to deliver exactly what gamers want from a wireless fight stick and a pair of desktop speakers. However, it was the FlexStrike that really left the strongest impression. Just a short hands-on session took the accessory from a curiosity to a peripheral I’m eager to add to my own gaming setup as soon as possible.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYxkZO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYxkZO.js" async></script><h3 class="article-body__section" id="section-flexstrike-wireless-fight-stick-hands-on-impressions"><span>FlexStrike wireless fight stick hands-on impressions</span></h3><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/TTGmg6uYXKc" allowfullscreen></iframe></div></div><p>Settling down into a plush gaming pod within PlayStation’s slick London base, I was first introduced to the FlexStrike and given insight into its creation by Edwin Foo, VP of Product Development at Sony Interactive Entertainment. During this presentation, what stood out to me was the clear passion the development team has for PlayStation’s first fight stick.</p><p>Foo explained that one of the development mantras was to create a stick that could appeal to both serious players, the types hoping to compete at tournaments like Evo 2026, and newcomers who perhaps haven’t used a fight stick before. The sort of gamer used to playing fighting games like Street Fighter, Mortal Kombat, and more on a traditional controller. I fall into that camp, so I was curious to see if a newbie like me could adapt.</p><p>Even just admiring the FlexStrike with my eyes, I was won over instantly by the design. The PS5’s aesthetics have always been a divisive subject, but I’m a fan, and I love how the FlexStrike pairs up PlayStation’s flagship console with a similar two-tone look that mixes Black and White plastic. It looks futuristic, without veering into the neon-garish look of some rivals.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TVvjQayTQdsBypxvcKzG2K" name="Sony Fightstick" alt="PlayStation FlexStrike Wireless Fight Stick in a glass cabinet" src="https://cdn.mos.cms.futurecdn.net/TVvjQayTQdsBypxvcKzG2K-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>As Foo highlighted some of the features, I got a sense that PlayStation really hasn’t skimped on functionality with the FlexStrike. Naturally, you’ve got a singular joystick on the left side and pleasingly large buttons on the right, one for each of the inputs on a DualSense.</p><p>Along the top, you’ll find the Options and Share buttons, alongside the ability to lock the top bar. Foo informed me that accidentally pressing pause during a fighting game competition results in an automatic forfeit, so this lock feature is essential.</p><p>Soon enough, it was time for me to test out the FlexStrike for myself. The bottom of the controller is covered in a rubber material that prevents it from slipping around and virtually locks it in place on my lap (another big positive).</p><p>When initially running my fingers over the FlexStrike, I started to understand why there’s so much negative space below the joystick and buttons. There's a generous surface area to rest your palms, and I can imagine that over longer play sessions, it’ll make finding a comfortable position a breeze.  </p><p>For my FlexStrike hands-on, PlayStation had selected the upcoming Marvel Tōkon: Fighting Souls (launching August 6), which was an extra treat. My opponent would be Kyungsoo Kim, Product Development Program Manager at Sony Interactive Entertainment.</p><p>After a brief fumble locating the X button — very on brand for me to embarrass myself at least once — I locked in my characters and was ready for our superhero bout.</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="3rEG5K4dK5UFvhY3qUb3MV" name="marvel-tokon-fighting-souls-screenshot" alt="Marvel Tōkon: Fighting Souls screenshot showing Captain America fighting Danger" src="https://cdn.mos.cms.futurecdn.net/3rEG5K4dK5UFvhY3qUb3MV-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Arc System Works / Sony Interactive Entertainment)</span></figcaption></figure><p>Okay, so I lost. But, in my defense, it was a close match. Kim’s mastery of projectile attacks won out in the end (though I suspect they <em>may </em>have been taking it easy on me). But more importantly, within just a few moments of using the FlexStrike, I started to understand the appeal of playing a fighting game on a fight stick rather than a standard controller.</p><p>The satisfying click of the FlexStrike’s joystick and the significantly larger buttons made stringing together combinations of presses much easier. Foo explained to me that via the PlayStation Link USB adapter, the FlexStrike offers latency of just four milliseconds. So I couldn’t blame my defeat on my inputs not coming through quickly enough. Plus, you can connect two FlexStrikes via a single USB adapter without impacting latency. Impressive!</p><p>And if all of the above reasons to consider a FlexStrike weren’t enough. The controller also comes with a sling carry case included. So you can take it to tournaments all over the world with ease. As my session was coming to an end, Foo revealed one final inclusion: remove the FlexStrike’s rubber bottom, and you get access to additional customization options. </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="Js6gLNWsGgZhoE3C9wM7eT" name="FlexStrike Wireless Fight Stick.jpg" alt="PlayStation FlexStrike Wireless Fight Stick" src="https://cdn.mos.cms.futurecdn.net/Js6gLNWsGgZhoE3C9wM7eT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Underneath the controller, you can swap out the “restrictor gate,” choosing between a square, octagonal, or round gate. For those out of the loop (like I was), this sets the joystick movement. A square gate is more restrictive, making moving into corners easier, whereas an octagonal gate gives you more freedom, but requires greater precision. I’ve since learned that which gate is best is a hotly contested topic, so the FlexStrike giving you the option to pick your preferred gate seems very smart.</p><p>Even after a brief time with the FlexStrike, I came away suitably impressed and already sold on it as my preferred method of play for fighting games going forward. I’ll have to wait until later in the summer to put it through its paces fully. But on first use, I think it’s a PS5 accessory that players who take fighting games seriously are going to love, and even newcomers to the world of fight sticks (like me) will find themselves quite taken with it.</p><h3 class="article-body__section" id="section-pulse-elevate-wireless-speakers-hands-on-impressions"><span>Pulse Elevate wireless speakers hands-on impressions</span></h3><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/lgn9VHKFDd0" allowfullscreen></iframe></div></div><p>After being pried away from the FlexStrike, I was ushered into a new room to get my first look at the Pulse Elevate wireless speakers. These take on an unassuming look, with only the small PlayStation insignia in the corner denoting that these are speakers made specifically for gaming on a PS5. A design decision, I appreciate. For this demo, two Pulse Elevate speakers were placed on either side of a monitor, hooked up to a PS5 Pro console.</p><p>To test their functionality, I was shown a <a href="https://www.tomsguide.com/gaming/ghost-of-yotei-review">Ghost of Yotei</a> presentation, which highlighted the Tempest 3D AudioTech at its best. During one sequence, a gust of wind blew across the screen, with the audio simultaneously shifting from one speaker to the other, which was unbelievably cool. Next up, I got to play through the intro sequence of the excellent PS5 exclusive <a href="https://www.tomsguide.com/gaming/saros-review">Saros</a>, which was a fine choice considering its incredibly strong sound. </p><p>What stood out to me most as I attempted to display my Saros skills to my watching audience was how easy it was to decipher each element of the soundscape. Saros throws a lot of noise at players, but I could pick out individual cues and clearly make out the ghostly whispers that add to the game’s sci-fi atmosphere. Pulse Elevate certainly seems up to scratch when delivering an excellent audio experience. Which, of course, is critical.</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:2758px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="FWbyq3qT8vtezAn3fmKvwJ" name="Sony Speakers-1" alt="Pulse Elevate Speakers in a glass cabinet" src="https://cdn.mos.cms.futurecdn.net/FWbyq3qT8vtezAn3fmKvwJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2758" height="1551" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>But it was after my hands-on (ears-on?) that I got a sense of what makes the Pulse Elevate worthy of consideration beyond just delivering fantastic audio. For starters, the speakers are wireless. They sit on a charging dock, but with a single lifting motion, you can unhook them and place them wherever you’d like. This offers versatility to even users with limited desktop space. Secondly, the speaker’s curved stand allows you to point the speaker upwards.</p><p>Foo pointed out that many speakers currently on the market sit flat, so the sound is blasted at a user's chest when they're sitting at a desk. The Pulse Elevate aims to push audio directly to your ears. Plus, they’re not only designed for PS5 but also compatible with PC and mobile devices.</p><p>Switching between PS5 and PC takes mere seconds, so long as you have a USB adapter plugged into both devices. However, because the speakers come with only one in the box, near-instant switching requires purchasing a second USB dongle. And while the Pulse Elevate speakers are designed to utilize PlayStation Link, Bluetooth is also supported. The <a href="https://blog.playstation.com/2025/09/24/introducing-pulse-elevate-sony-interactive-entertainments-first-wireless-speakers-for-desktop-gaming/" target="_blank">PS Blog</a> notes that you can connect via PlayStation Link and Bluetooth simultaneously.</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:2674px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6ui332dM2fJra7sqzgt4wJ" name="Sony Speakers" alt="Pulse Elevate Speakers in a glass cabinet" src="https://cdn.mos.cms.futurecdn.net/6ui332dM2fJra7sqzgt4wJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2674" height="1504" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>Much like the DualSense controller, the Pulse Elevate sports an in-built microphone, located in the right speaker. I was skeptical of this functionality. Surely, the mic would also pick up the gaming audio? But Foo put this concern of mine to bed by playing loud music while also quietly talking into the speaker. On playback, I could hear Foo’s voice clearly, and the AI-enhanced noise-rejection technology (not reduction, <em>rejection</em>) had removed the music entirely. </p><p>As somebody who spent much of my 20s playing <a href="https://www.tomsguide.com/us/ps4-pro,review-4036.html">PS4</a> at a desk across college dorms and rented apartments, I can certainly see the use case for the Pulse Elevate speakers. As with the FlexStrike, one of my big takeaways was the clear extra mile PlayStation has gone to cram in additional functionality beyond just nailing the all-important audio experience.</p><h3 class="article-body__section" id="section-which-new-ps5-accessory-should-you-buy"><span>Which new PS5 accessory should you buy?</span></h3><p>I can’t definitively say whether the FlexStrike and Pulse Elevate are worth buying until I’ve added them to my own gaming setup and truly put them through their paces over several days (watch out for our full reviews around launch). However, as far as first reactions go, both impressed me.</p><p>The FlexStrike was definitely the one I gravitated towards most, and the one that, as I made the long trek home in the summer heat, I was wishing would be waiting there to greet me. Nevertheless, at this pre-launch stage, I’m confident that both the FlexStrike and Pulse Elevate will represent strong additions to PlayStation’s robust lineup of PS5 accessories. </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/playstation-days-of-play-2026-deals-are-finally-live-these-are-the-ones-worth-your-money">PS5 Days of Play 2026 is live — here's the best deals</a></li><li><a href="https://www.tomsguide.com/gaming/007-first-light-review">007 First Light is the best Bond game ever made</a></li><li><a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">The best PS5 games in 2026</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/ps5-flexstrike-fight-stick-and-pulse-elevate-speakers-preview</link>
                                                                            <description>
                            <![CDATA[ I got an early look at new PS5 accessories, the FlexStrike Fight Stick and Pulse Elevate desktop speakers. Here are my first impressions. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Fc2dXnMCg2VxavCpXhJEhQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/N6LTKNQi66tSXXqZMZpNSE-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 01 Jun 2026 15:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/N6LTKNQi66tSXXqZMZpNSE-1920-80.jpg">
                                                            <media:credit><![CDATA[Future / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PlayStation FlexStrike Wireless Fight Stick and Pulse Elevate Wireless Speakers in a glass cabinet]]></media:description>                                                            <media:text><![CDATA[PlayStation FlexStrike Wireless Fight Stick and Pulse Elevate Wireless Speakers in a glass cabinet]]></media:text>
                                <media:title type="plain"><![CDATA[PlayStation FlexStrike Wireless Fight Stick and Pulse Elevate Wireless Speakers in a glass cabinet]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/N6LTKNQi66tSXXqZMZpNSE-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Last year, PlayStation announced the already diverse PS5 accessory range was set to grow further with two new products: the <a href="https://www.tomsguide.com/gaming/playstation/playstations-first-fight-stick-gets-an-official-name-meet-the-flexstrike">FlexStrike fight stick</a> and the <a href="https://www.tomsguide.com/audio/speakers/sony-used-a-ps5-state-of-play-to-reveal-desktop-gaming-speakers-heres-what-they-bring-to-the-table">Pulse Elevate desktop speakers</a>. What makes these two upcoming accessories more intriguing is that they represent firsts for PlayStation.</p><p>FlexStrike is the first official PlayStation fight stick, while the Elevate expands the Pulse range beyond headsets and into the speaker arena. I’ve been curious to learn more and, of course, to get my hands on these two products since they were announced last summer and fall, respectively.</p><p>After getting to demo both during a trip to PlayStation’s U.K. office, I’ve come away impressed and confident that they will bolster the already strong range of optional extras available to <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5</a> and <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> owners.</p><p>Both have their use cases and seem primed to deliver exactly what gamers want from a wireless fight stick and a pair of desktop speakers. However, it was the FlexStrike that really left the strongest impression. Just a short hands-on session took the accessory from a curiosity to a peripheral I’m eager to add to my own gaming setup as soon as possible.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XYxkZO"></div>                            </div>                            <script src="https://kwizly.com/embed/XYxkZO.js" async></script><h3 class="article-body__section" id="section-flexstrike-wireless-fight-stick-hands-on-impressions"><span>FlexStrike wireless fight stick hands-on impressions</span></h3><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/TTGmg6uYXKc" allowfullscreen></iframe></div></div><p>Settling down into a plush gaming pod within PlayStation’s slick London base, I was first introduced to the FlexStrike and given insight into its creation by Edwin Foo, VP of Product Development at Sony Interactive Entertainment. During this presentation, what stood out to me was the clear passion the development team has for PlayStation’s first fight stick.</p><p>Foo explained that one of the development mantras was to create a stick that could appeal to both serious players, the types hoping to compete at tournaments like Evo 2026, and newcomers who perhaps haven’t used a fight stick before. The sort of gamer used to playing fighting games like Street Fighter, Mortal Kombat, and more on a traditional controller. I fall into that camp, so I was curious to see if a newbie like me could adapt.</p><p>Even just admiring the FlexStrike with my eyes, I was won over instantly by the design. The PS5’s aesthetics have always been a divisive subject, but I’m a fan, and I love how the FlexStrike pairs up PlayStation’s flagship console with a similar two-tone look that mixes Black and White plastic. It looks futuristic, without veering into the neon-garish look of some rivals.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TVvjQayTQdsBypxvcKzG2K" name="Sony Fightstick" alt="PlayStation FlexStrike Wireless Fight Stick in a glass cabinet" src="https://cdn.mos.cms.futurecdn.net/TVvjQayTQdsBypxvcKzG2K-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>As Foo highlighted some of the features, I got a sense that PlayStation really hasn’t skimped on functionality with the FlexStrike. Naturally, you’ve got a singular joystick on the left side and pleasingly large buttons on the right, one for each of the inputs on a DualSense.</p><p>Along the top, you’ll find the Options and Share buttons, alongside the ability to lock the top bar. Foo informed me that accidentally pressing pause during a fighting game competition results in an automatic forfeit, so this lock feature is essential.</p><p>Soon enough, it was time for me to test out the FlexStrike for myself. The bottom of the controller is covered in a rubber material that prevents it from slipping around and virtually locks it in place on my lap (another big positive).</p><p>When initially running my fingers over the FlexStrike, I started to understand why there’s so much negative space below the joystick and buttons. There's a generous surface area to rest your palms, and I can imagine that over longer play sessions, it’ll make finding a comfortable position a breeze.  </p><p>For my FlexStrike hands-on, PlayStation had selected the upcoming Marvel Tōkon: Fighting Souls (launching August 6), which was an extra treat. My opponent would be Kyungsoo Kim, Product Development Program Manager at Sony Interactive Entertainment.</p><p>After a brief fumble locating the X button — very on brand for me to embarrass myself at least once — I locked in my characters and was ready for our superhero bout.</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="3rEG5K4dK5UFvhY3qUb3MV" name="marvel-tokon-fighting-souls-screenshot" alt="Marvel Tōkon: Fighting Souls screenshot showing Captain America fighting Danger" src="https://cdn.mos.cms.futurecdn.net/3rEG5K4dK5UFvhY3qUb3MV-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Arc System Works / Sony Interactive Entertainment)</span></figcaption></figure><p>Okay, so I lost. But, in my defense, it was a close match. Kim’s mastery of projectile attacks won out in the end (though I suspect they <em>may </em>have been taking it easy on me). But more importantly, within just a few moments of using the FlexStrike, I started to understand the appeal of playing a fighting game on a fight stick rather than a standard controller.</p><p>The satisfying click of the FlexStrike’s joystick and the significantly larger buttons made stringing together combinations of presses much easier. Foo explained to me that via the PlayStation Link USB adapter, the FlexStrike offers latency of just four milliseconds. So I couldn’t blame my defeat on my inputs not coming through quickly enough. Plus, you can connect two FlexStrikes via a single USB adapter without impacting latency. Impressive!</p><p>And if all of the above reasons to consider a FlexStrike weren’t enough. The controller also comes with a sling carry case included. So you can take it to tournaments all over the world with ease. As my session was coming to an end, Foo revealed one final inclusion: remove the FlexStrike’s rubber bottom, and you get access to additional customization options. </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="Js6gLNWsGgZhoE3C9wM7eT" name="FlexStrike Wireless Fight Stick.jpg" alt="PlayStation FlexStrike Wireless Fight Stick" src="https://cdn.mos.cms.futurecdn.net/Js6gLNWsGgZhoE3C9wM7eT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Underneath the controller, you can swap out the “restrictor gate,” choosing between a square, octagonal, or round gate. For those out of the loop (like I was), this sets the joystick movement. A square gate is more restrictive, making moving into corners easier, whereas an octagonal gate gives you more freedom, but requires greater precision. I’ve since learned that which gate is best is a hotly contested topic, so the FlexStrike giving you the option to pick your preferred gate seems very smart.</p><p>Even after a brief time with the FlexStrike, I came away suitably impressed and already sold on it as my preferred method of play for fighting games going forward. I’ll have to wait until later in the summer to put it through its paces fully. But on first use, I think it’s a PS5 accessory that players who take fighting games seriously are going to love, and even newcomers to the world of fight sticks (like me) will find themselves quite taken with it.</p><h3 class="article-body__section" id="section-pulse-elevate-wireless-speakers-hands-on-impressions"><span>Pulse Elevate wireless speakers hands-on impressions</span></h3><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/lgn9VHKFDd0" allowfullscreen></iframe></div></div><p>After being pried away from the FlexStrike, I was ushered into a new room to get my first look at the Pulse Elevate wireless speakers. These take on an unassuming look, with only the small PlayStation insignia in the corner denoting that these are speakers made specifically for gaming on a PS5. A design decision, I appreciate. For this demo, two Pulse Elevate speakers were placed on either side of a monitor, hooked up to a PS5 Pro console.</p><p>To test their functionality, I was shown a <a href="https://www.tomsguide.com/gaming/ghost-of-yotei-review">Ghost of Yotei</a> presentation, which highlighted the Tempest 3D AudioTech at its best. During one sequence, a gust of wind blew across the screen, with the audio simultaneously shifting from one speaker to the other, which was unbelievably cool. Next up, I got to play through the intro sequence of the excellent PS5 exclusive <a href="https://www.tomsguide.com/gaming/saros-review">Saros</a>, which was a fine choice considering its incredibly strong sound. </p><p>What stood out to me most as I attempted to display my Saros skills to my watching audience was how easy it was to decipher each element of the soundscape. Saros throws a lot of noise at players, but I could pick out individual cues and clearly make out the ghostly whispers that add to the game’s sci-fi atmosphere. Pulse Elevate certainly seems up to scratch when delivering an excellent audio experience. Which, of course, is critical.</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:2758px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="FWbyq3qT8vtezAn3fmKvwJ" name="Sony Speakers-1" alt="Pulse Elevate Speakers in a glass cabinet" src="https://cdn.mos.cms.futurecdn.net/FWbyq3qT8vtezAn3fmKvwJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2758" height="1551" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>But it was after my hands-on (ears-on?) that I got a sense of what makes the Pulse Elevate worthy of consideration beyond just delivering fantastic audio. For starters, the speakers are wireless. They sit on a charging dock, but with a single lifting motion, you can unhook them and place them wherever you’d like. This offers versatility to even users with limited desktop space. Secondly, the speaker’s curved stand allows you to point the speaker upwards.</p><p>Foo pointed out that many speakers currently on the market sit flat, so the sound is blasted at a user's chest when they're sitting at a desk. The Pulse Elevate aims to push audio directly to your ears. Plus, they’re not only designed for PS5 but also compatible with PC and mobile devices.</p><p>Switching between PS5 and PC takes mere seconds, so long as you have a USB adapter plugged into both devices. However, because the speakers come with only one in the box, near-instant switching requires purchasing a second USB dongle. And while the Pulse Elevate speakers are designed to utilize PlayStation Link, Bluetooth is also supported. The <a href="https://blog.playstation.com/2025/09/24/introducing-pulse-elevate-sony-interactive-entertainments-first-wireless-speakers-for-desktop-gaming/" target="_blank">PS Blog</a> notes that you can connect via PlayStation Link and Bluetooth simultaneously.</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:2674px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6ui332dM2fJra7sqzgt4wJ" name="Sony Speakers" alt="Pulse Elevate Speakers in a glass cabinet" src="https://cdn.mos.cms.futurecdn.net/6ui332dM2fJra7sqzgt4wJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2674" height="1504" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>Much like the DualSense controller, the Pulse Elevate sports an in-built microphone, located in the right speaker. I was skeptical of this functionality. Surely, the mic would also pick up the gaming audio? But Foo put this concern of mine to bed by playing loud music while also quietly talking into the speaker. On playback, I could hear Foo’s voice clearly, and the AI-enhanced noise-rejection technology (not reduction, <em>rejection</em>) had removed the music entirely. </p><p>As somebody who spent much of my 20s playing <a href="https://www.tomsguide.com/us/ps4-pro,review-4036.html">PS4</a> at a desk across college dorms and rented apartments, I can certainly see the use case for the Pulse Elevate speakers. As with the FlexStrike, one of my big takeaways was the clear extra mile PlayStation has gone to cram in additional functionality beyond just nailing the all-important audio experience.</p><h3 class="article-body__section" id="section-which-new-ps5-accessory-should-you-buy"><span>Which new PS5 accessory should you buy?</span></h3><p>I can’t definitively say whether the FlexStrike and Pulse Elevate are worth buying until I’ve added them to my own gaming setup and truly put them through their paces over several days (watch out for our full reviews around launch). However, as far as first reactions go, both impressed me.</p><p>The FlexStrike was definitely the one I gravitated towards most, and the one that, as I made the long trek home in the summer heat, I was wishing would be waiting there to greet me. Nevertheless, at this pre-launch stage, I’m confident that both the FlexStrike and Pulse Elevate will represent strong additions to PlayStation’s robust lineup of PS5 accessories. </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/playstation-days-of-play-2026-deals-are-finally-live-these-are-the-ones-worth-your-money">PS5 Days of Play 2026 is live — here's the best deals</a></li><li><a href="https://www.tomsguide.com/gaming/007-first-light-review">007 First Light is the best Bond game ever made</a></li><li><a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">The best PS5 games in 2026</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ PlayStation Days of Play 2026 is finally live — here's the deals worth your money ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Being a gamer in 2026 is a costly endeavor, no doubt. So it’s always a nice change of pace when one of the main console makers throws its user base a bone with some major sales.</p><p>In this case, PlayStation is letting its gaming collective breathe a sigh of relief now that the Days of Play sale is finally underway. And just like the year before, the official PlayStation Direct online storefront and participating online retailers (Amazon and Best Buy, for example) have a wide range of deals on physical games, digital games, DualSense controllers, headsets, PS5 console covers, the PS VR 2 headset, and PS Plus memberships. </p><p>Plus, if you prefer to access the digital store directly from your PS5 and hop on any of the deals listed there, you can totally take advantage of that option.</p><p>With such an overwhelming array of sweet deals to keep track of, I’m sure it can be a headache trying to decide what discounts are worth jumping on. Before the PS Days of Play sale ends on June 10, check out my personal recommendations for the best discounts I’ve spotted for critically acclaimed games and sick color alternatives for PS5 controllers.</p><h3 class="article-body__section" id="section-physical-game-deals"><span>Physical Game Deals</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fcj5HwEuDpuNyTjJYCHNgA" name="ghost-of-yotei-screenshot-review-press-03" alt="Ghost of Yotei press screenshot" src="https://cdn.mos.cms.futurecdn.net/fcj5HwEuDpuNyTjJYCHNgA-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sucker Punch / Sony)</span></figcaption></figure><p>The PS Direct online store has a respectable lineup of quality games on sale, with a few of them also having discounts on their Collector’s Editions. I’ve already put in a ridiculous amount of hours getting the trophies for most of the PS5 games being sold for less right now, which is why I’m keen on listing their Days of Play deals here:</p><ul><li><strong>HELLDIVERS 2:</strong> <a href="https://direct.playstation.com/en-us/buy-games/helldivers-2-ps5" target="_blank" rel="nofollow">was $39.99 now $29</a></li><li><strong>Marvel's Spider-Man 2:</strong> <a href="https://direct.playstation.com/en-us/buy-games/marvels-spider-man-2-ps5" target="_blank" rel="nofollow">was $69 now $29</a></li><li><strong>Ratchet & Clank: Rift Apart:</strong> <a href="https://direct.playstation.com/en-us/buy-games/ratchet-clank-rift-apart-ps5" target="_blank" rel="nofollow">was $69 now $29</a></li><li><strong>The Last of Us Part I:</strong> <a href="https://direct.playstation.com/en-us/buy-games/the-last-of-us-part-i-ps5" target="_blank" rel="nofollow">was $69 now $29</a></li><li><strong>The Last of Us Part II Remastered:</strong> <a href="https://direct.playstation.com/en-us/buy-games/the-last-of-us-part-ii-remastered-ps5" target="_blank" rel="nofollow">was $49 now $29</a></li><li><strong>Demon's Souls:</strong> <a href="https://direct.playstation.com/en-us/buy-games/demons-souls-ps5" target="_blank" rel="nofollow">was $69 now $29</a></li><li><strong>Horizon Forbidden West Launch Edition:</strong> <a href="https://direct.playstation.com/en-us/buy-games/horizon-forbidden-west-launch-edition-ps5" target="_blank" rel="nofollow">was $49 now $29</a></li><li><strong>Marvel's Spider-Man: Miles Morales Ultimate Edition:</strong> <a href="https://direct.playstation.com/en-us/buy-games/marvels-spider-man-miles-morales-ultimate-edition-ps5" target="_blank" rel="nofollow">was $69 now $39</a></li><li><strong>Ghost of Yotei:</strong>  <a href="https://direct.playstation.com/en-us/buy-games/ghost-of-yotei-ps5" target="_blank" rel="nofollow">was $69 now $49</a></li><li><strong>DEATH STRANDING 2: ON THE BEACH Collector’s Edition: </strong><a href="https://direct.playstation.com/en-us/buy-games/death-stranding-2-on-the-beach-collectors-edition-ps5" target="_blank" rel="nofollow">was $229 now $129</a></li><li><strong>Ghost of Yotei Collector’s Edition:</strong> <a href="https://direct.playstation.com/en-us/buy-games/ghost-of-yotei-collectors-edition-ps5" target="_blank" rel="nofollow">was $249 now $149</a></li></ul><h3 class="article-body__section" id="section-digital-game-deals"><span>Digital Game Deals</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XzsqES8RUybGXYt5sQnxMK" name="Resident Evil Requiem LIST" alt="Resident Evil Requiem" src="https://cdn.mos.cms.futurecdn.net/XzsqES8RUybGXYt5sQnxMK-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>On the digital gaming front, the Days of Play sale has a crazy long list of discounted games. Alongside the expected array of older titles, there’s also a nice mixture of recently released titles sprinkled in there that I think is worth mentioning here. </p><p>I’m going to go ahead and showcase 15 of those digital sales here (feel free to go directly to this <a href="https://store.playstation.com/en-us/pages/DaysofPlay" target="_blank">page</a> to see the full gamut of digital game sales or peruse through the PSN store on your PS5 or PS4 to see what else is worth picking up):</p><ul><li><strong>STRIDER:</strong> <a href="https://store.playstation.com/en-us/product/UP0102-CUSA00057_00-STRUSHG4TRIAL001" target="_blank" rel="nofollow">was $14 now $5</a></li><li><strong>Fist of the North Star: Lost Paradise:</strong> <a href="https://store.playstation.com/en-us/product/UP0177-CUSA12776_00-HOKUTOGOTOUS0000" target="_blank" rel="nofollow">was $19 now $4</a></li><li><strong>Bayonetta & Vanquish 10th Anniversary Bundle:</strong> <a href="https://store.playstation.com/en-us/product/UP0177-CUSA16113_00-BAYOVANQUISH10RE" target="_blank" rel="nofollow">was $39 now $9</a></li><li><strong>Sonic Origins Plus:</strong> <a href="https://store.playstation.com/en-us/product/UP0177-PPSA05324_00-SONICORIGINSPLUS" target="_blank" rel="nofollow">was $39 now $11</a></li><li><strong>Ghostrunner: Complete Edition:</strong> <a href="https://store.playstation.com/en-us/product/UP4040-PPSA03682_00-GHOSTRUNNERCMPLT" target="_blank" rel="nofollow">was $39 now $19 ($15 for PS Plus subscribers)</a></li><li><strong>Dispatch:</strong> <a href="https://store.playstation.com/en-us/product/HP7386-PPSA27158_00-0022337374597692" target="_blank" rel="nofollow">was $29 now $23</a></li><li><strong>Ace Attorney Anthology:</strong> <a href="https://store.playstation.com/en-us/product/UP0102-CUSA37738_00-PWAAT123AJAAT456" target="_blank" rel="nofollow">was $59 now $26</a></li><li><strong>HELLDIVERS 2:</strong> <a href="https://store.playstation.com/en-us/product/UP9000-PPSA01413_00-HELLDIVERS200000" target="_blank" rel="nofollow">was $39 now $29</a></li><li><strong>Resident Evil Remake Trilogy:</strong> <a href="https://store.playstation.com/en-us/product/UP0102-PPSA07411_00-BHB0000000000003" target="_blank" rel="nofollow">was $89 now $29</a></li><li><strong>Split Fiction:</strong> <a href="https://store.playstation.com/en-us/product/UP0006-PPSA08560_00-SPLITSTANDARDED0" target="_blank" rel="nofollow">was $49 now $34</a></li><li><strong>Clair Obscur: Expedition 33:</strong> <a href="https://store.playstation.com/en-us/product/EP7579-PPSA17599_00-EXP33000000PS5EU" target="_blank" rel="nofollow">was $49 now $37</a></li><li><strong>ASTRO BOT:</strong> <a href="https://store.playstation.com/en-us/product/UP9000-PPSA21564_00-0000000000000000" target="_blank" rel="nofollow">was $59 now $39</a></li><li><strong>Marvel’s Spider-Man 2 Digital Deluxe Edition:</strong> <a href="https://store.playstation.com/en-us/product/UP9000-PPSA03016_00-MSM2DDE000000000" target="_blank" rel="nofollow">was $79 now $39</a></li><li><strong>Ghost of Yotei:</strong> <a href="https://store.playstation.com/en-us/product/UP9000-PPSA26344_00-GHOST2SHIP000000" target="_blank" rel="nofollow">was $69 now $49</a></li><li><strong>Resident Evil Requiem:</strong> <a href="https://store.playstation.com/en-us/product/UP0102-PPSA30803_00-REREQUIEM0000000" target="_blank" rel="nofollow">was $69 now $55</a></li></ul><h3 class="article-body__section" id="section-accessory-deals"><span>Accessory Deals</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1874px;"><p class="vanilla-image-block" style="padding-top:73.85%;"><img id="Cc5W9qiAjzbtVVSHyy9H6S" name="Dualsense controller" alt="Playstation Dualsense controller" src="https://cdn.mos.cms.futurecdn.net/Cc5W9qiAjzbtVVSHyy9H6S-1920-80.png" mos="" align="middle" fullscreen="" width="1874" height="1384" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I usually shudder at the thought of buying another DualSense controller since purchasing a controller for $70+ is an insane concept to me. </p><p>But after being saddled with two Dual Sense controllers stricken by the dreaded "stick drift" plague, I was forced to look at what PlayStation was presenting as far as deals for their controllers go. Plus, I’m in the market for a new headset and have been keeping a close eye on PlayStation’s first-party options (which are also usually pricey).</p><p>Thankfully, the Days of Play deals I spotted make getting a new DualSense controller or PULSE headset less of a painful purchase. These are the controller color variations and PULSE headsets that caught my eye the most and don’t break the bank as much as they do when they’re at their standard price:</p><ul><li><strong>Access Controller:</strong> <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-access-controller-white/JXHQ3CC3YG/sku/6553450" target="_blank" rel="nofollow">was $89 now $59</a></li><li><strong>Chroma Pearl:</strong> <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-for-ps5-pc-mac-mobile-chroma-pearl/JXHQ37T9SJ/sku/6601464" target="_blank" rel="nofollow">was $79 now $59</a></li><li><strong>Sterling Silver: </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-for-ps5-pc-mac-mobile-sterling-silver/JXHQ3CCHLJ/sku/6562645" target="_blank" rel="nofollow">was $79 now $59</a></li><li><strong>Marathon Limited Edition: </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-marathon-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37TQ96/sku/6670038" target="_blank" rel="nofollow">was $84 now $64</a></li><li><strong>Remix Green:</strong> <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-for-ps5-pc-mac-mobile-remix-green/JXHQ37TYQX" target="_blank" rel="nofollow">was $84 now $64</a></li><li><strong>Rhythm Blue:</strong> <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-for-ps5-pc-mac-mobile-rhythm-blue/JXHQ37TYQS" target="_blank" rel="nofollow">was $84 now $64</a></li><li><strong>Techno Red:</strong> <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-for-ps5-pc-mac-mobile-techno-red/JXHQ37TYR9" target="_blank" rel="nofollow">was $84 now $64</a></li><li><strong>PULSE Elite Wireless Headset:</strong> <a href="https://www.bestbuy.com/product/sony-pulse-elite-wireless-gaming-headset-for-ps5-white/JXHQ3CXGYT" target="_blank" rel="nofollow">was $149 now $109</a></li><li><strong>PULSE Explore Wireless Earbuds:</strong> <a href="https://www.bestbuy.com/product/sony-pulse-explore-wireless-earbuds-midnight-black/JXHQ3C2QW5" target="_blank" rel="nofollow">was $199 now $149</a></li></ul><h2 id="shout-out-to-playstation-for-giving-gamers-a-bit-of-a-financial-reprieve">Shout out to PlayStation for giving gamers a bit of a financial reprieve</h2><p>With all the console and handheld price increases, it can become pretty daunting for any hardcore gamer and someone curious enough to get into the hobby to open their wallet nowadays. </p><p>Trust me, I get it—I still don’t have a Switch 2 and it’s looking like I’ll have to get one before the price for that one increases on September 1. With PlayStation’s Days of Play deals in full effect until June 10, I appreciate the gaming giant throwing gamers a bone with a wide selection of deals for their products. </p><p>It’s definitely worth tapping into any of these before all these awesome deals disappear.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/best-picks/the-best-ps5-games" target="_blank">The best PS5 games in 2026</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/sony-playstation-pulse-elite-headset-review" target="_blank">Sony PlayStation Pulse Elite review: Big sound, not-so-big price</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/sony-playstation-pulse-explore-review" target="_blank">PlayStation Pulse Explore review: Feel like the main character</a></li></ul><div data-widget-type="comparison" data-model-name="Sony PlayStation 5"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation-days-of-play-2026-deals-are-finally-live-these-are-the-ones-worth-your-money</link>
                                                                            <description>
                            <![CDATA[ With this year’s PlayStation Days of Play sale in full swing, here are the best games and hardware deals I’d recommend you buy before it ends. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">AfEJ2AzBu6htXGkEKmrkpK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aBPvhkLcdZteLNfpN6cacC-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 30 May 2026 06:00:00 +0000</pubDate>                                                                                                                                <updated>Mon, 01 Jun 2026 15:56:00 +0000</updated>
                                                                                                                                            <category><![CDATA[Gaming]]></category>
                                                    <category><![CDATA[Playstation]]></category>
                                                                                                                    <dc:creator><![CDATA[ Elton Jones ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/NVtYYXr3tEPUE67jf3HtXM-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/aBPvhkLcdZteLNfpN6cacC-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A promotiomal image for Days of Play 2024]]></media:description>                                                            <media:text><![CDATA[A promotiomal image for Days of Play 2024]]></media:text>
                                <media:title type="plain"><![CDATA[A promotiomal image for Days of Play 2024]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aBPvhkLcdZteLNfpN6cacC-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Being a gamer in 2026 is a costly endeavor, no doubt. So it’s always a nice change of pace when one of the main console makers throws its user base a bone with some major sales.</p><p>In this case, PlayStation is letting its gaming collective breathe a sigh of relief now that the Days of Play sale is finally underway. And just like the year before, the official PlayStation Direct online storefront and participating online retailers (Amazon and Best Buy, for example) have a wide range of deals on physical games, digital games, DualSense controllers, headsets, PS5 console covers, the PS VR 2 headset, and PS Plus memberships. </p><p>Plus, if you prefer to access the digital store directly from your PS5 and hop on any of the deals listed there, you can totally take advantage of that option.</p><p>With such an overwhelming array of sweet deals to keep track of, I’m sure it can be a headache trying to decide what discounts are worth jumping on. Before the PS Days of Play sale ends on June 10, check out my personal recommendations for the best discounts I’ve spotted for critically acclaimed games and sick color alternatives for PS5 controllers.</p><h3 class="article-body__section" id="section-physical-game-deals"><span>Physical Game Deals</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fcj5HwEuDpuNyTjJYCHNgA" name="ghost-of-yotei-screenshot-review-press-03" alt="Ghost of Yotei press screenshot" src="https://cdn.mos.cms.futurecdn.net/fcj5HwEuDpuNyTjJYCHNgA-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sucker Punch / Sony)</span></figcaption></figure><p>The PS Direct online store has a respectable lineup of quality games on sale, with a few of them also having discounts on their Collector’s Editions. I’ve already put in a ridiculous amount of hours getting the trophies for most of the PS5 games being sold for less right now, which is why I’m keen on listing their Days of Play deals here:</p><ul><li><strong>HELLDIVERS 2:</strong> <a href="https://direct.playstation.com/en-us/buy-games/helldivers-2-ps5" target="_blank" rel="nofollow">was $39.99 now $29</a></li><li><strong>Marvel's Spider-Man 2:</strong> <a href="https://direct.playstation.com/en-us/buy-games/marvels-spider-man-2-ps5" target="_blank" rel="nofollow">was $69 now $29</a></li><li><strong>Ratchet & Clank: Rift Apart:</strong> <a href="https://direct.playstation.com/en-us/buy-games/ratchet-clank-rift-apart-ps5" target="_blank" rel="nofollow">was $69 now $29</a></li><li><strong>The Last of Us Part I:</strong> <a href="https://direct.playstation.com/en-us/buy-games/the-last-of-us-part-i-ps5" target="_blank" rel="nofollow">was $69 now $29</a></li><li><strong>The Last of Us Part II Remastered:</strong> <a href="https://direct.playstation.com/en-us/buy-games/the-last-of-us-part-ii-remastered-ps5" target="_blank" rel="nofollow">was $49 now $29</a></li><li><strong>Demon's Souls:</strong> <a href="https://direct.playstation.com/en-us/buy-games/demons-souls-ps5" target="_blank" rel="nofollow">was $69 now $29</a></li><li><strong>Horizon Forbidden West Launch Edition:</strong> <a href="https://direct.playstation.com/en-us/buy-games/horizon-forbidden-west-launch-edition-ps5" target="_blank" rel="nofollow">was $49 now $29</a></li><li><strong>Marvel's Spider-Man: Miles Morales Ultimate Edition:</strong> <a href="https://direct.playstation.com/en-us/buy-games/marvels-spider-man-miles-morales-ultimate-edition-ps5" target="_blank" rel="nofollow">was $69 now $39</a></li><li><strong>Ghost of Yotei:</strong>  <a href="https://direct.playstation.com/en-us/buy-games/ghost-of-yotei-ps5" target="_blank" rel="nofollow">was $69 now $49</a></li><li><strong>DEATH STRANDING 2: ON THE BEACH Collector’s Edition: </strong><a href="https://direct.playstation.com/en-us/buy-games/death-stranding-2-on-the-beach-collectors-edition-ps5" target="_blank" rel="nofollow">was $229 now $129</a></li><li><strong>Ghost of Yotei Collector’s Edition:</strong> <a href="https://direct.playstation.com/en-us/buy-games/ghost-of-yotei-collectors-edition-ps5" target="_blank" rel="nofollow">was $249 now $149</a></li></ul><h3 class="article-body__section" id="section-digital-game-deals"><span>Digital Game Deals</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XzsqES8RUybGXYt5sQnxMK" name="Resident Evil Requiem LIST" alt="Resident Evil Requiem" src="https://cdn.mos.cms.futurecdn.net/XzsqES8RUybGXYt5sQnxMK-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>On the digital gaming front, the Days of Play sale has a crazy long list of discounted games. Alongside the expected array of older titles, there’s also a nice mixture of recently released titles sprinkled in there that I think is worth mentioning here. </p><p>I’m going to go ahead and showcase 15 of those digital sales here (feel free to go directly to this <a href="https://store.playstation.com/en-us/pages/DaysofPlay" target="_blank">page</a> to see the full gamut of digital game sales or peruse through the PSN store on your PS5 or PS4 to see what else is worth picking up):</p><ul><li><strong>STRIDER:</strong> <a href="https://store.playstation.com/en-us/product/UP0102-CUSA00057_00-STRUSHG4TRIAL001" target="_blank" rel="nofollow">was $14 now $5</a></li><li><strong>Fist of the North Star: Lost Paradise:</strong> <a href="https://store.playstation.com/en-us/product/UP0177-CUSA12776_00-HOKUTOGOTOUS0000" target="_blank" rel="nofollow">was $19 now $4</a></li><li><strong>Bayonetta & Vanquish 10th Anniversary Bundle:</strong> <a href="https://store.playstation.com/en-us/product/UP0177-CUSA16113_00-BAYOVANQUISH10RE" target="_blank" rel="nofollow">was $39 now $9</a></li><li><strong>Sonic Origins Plus:</strong> <a href="https://store.playstation.com/en-us/product/UP0177-PPSA05324_00-SONICORIGINSPLUS" target="_blank" rel="nofollow">was $39 now $11</a></li><li><strong>Ghostrunner: Complete Edition:</strong> <a href="https://store.playstation.com/en-us/product/UP4040-PPSA03682_00-GHOSTRUNNERCMPLT" target="_blank" rel="nofollow">was $39 now $19 ($15 for PS Plus subscribers)</a></li><li><strong>Dispatch:</strong> <a href="https://store.playstation.com/en-us/product/HP7386-PPSA27158_00-0022337374597692" target="_blank" rel="nofollow">was $29 now $23</a></li><li><strong>Ace Attorney Anthology:</strong> <a href="https://store.playstation.com/en-us/product/UP0102-CUSA37738_00-PWAAT123AJAAT456" target="_blank" rel="nofollow">was $59 now $26</a></li><li><strong>HELLDIVERS 2:</strong> <a href="https://store.playstation.com/en-us/product/UP9000-PPSA01413_00-HELLDIVERS200000" target="_blank" rel="nofollow">was $39 now $29</a></li><li><strong>Resident Evil Remake Trilogy:</strong> <a href="https://store.playstation.com/en-us/product/UP0102-PPSA07411_00-BHB0000000000003" target="_blank" rel="nofollow">was $89 now $29</a></li><li><strong>Split Fiction:</strong> <a href="https://store.playstation.com/en-us/product/UP0006-PPSA08560_00-SPLITSTANDARDED0" target="_blank" rel="nofollow">was $49 now $34</a></li><li><strong>Clair Obscur: Expedition 33:</strong> <a href="https://store.playstation.com/en-us/product/EP7579-PPSA17599_00-EXP33000000PS5EU" target="_blank" rel="nofollow">was $49 now $37</a></li><li><strong>ASTRO BOT:</strong> <a href="https://store.playstation.com/en-us/product/UP9000-PPSA21564_00-0000000000000000" target="_blank" rel="nofollow">was $59 now $39</a></li><li><strong>Marvel’s Spider-Man 2 Digital Deluxe Edition:</strong> <a href="https://store.playstation.com/en-us/product/UP9000-PPSA03016_00-MSM2DDE000000000" target="_blank" rel="nofollow">was $79 now $39</a></li><li><strong>Ghost of Yotei:</strong> <a href="https://store.playstation.com/en-us/product/UP9000-PPSA26344_00-GHOST2SHIP000000" target="_blank" rel="nofollow">was $69 now $49</a></li><li><strong>Resident Evil Requiem:</strong> <a href="https://store.playstation.com/en-us/product/UP0102-PPSA30803_00-REREQUIEM0000000" target="_blank" rel="nofollow">was $69 now $55</a></li></ul><h3 class="article-body__section" id="section-accessory-deals"><span>Accessory Deals</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1874px;"><p class="vanilla-image-block" style="padding-top:73.85%;"><img id="Cc5W9qiAjzbtVVSHyy9H6S" name="Dualsense controller" alt="Playstation Dualsense controller" src="https://cdn.mos.cms.futurecdn.net/Cc5W9qiAjzbtVVSHyy9H6S-1920-80.png" mos="" align="middle" fullscreen="" width="1874" height="1384" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I usually shudder at the thought of buying another DualSense controller since purchasing a controller for $70+ is an insane concept to me. </p><p>But after being saddled with two Dual Sense controllers stricken by the dreaded "stick drift" plague, I was forced to look at what PlayStation was presenting as far as deals for their controllers go. Plus, I’m in the market for a new headset and have been keeping a close eye on PlayStation’s first-party options (which are also usually pricey).</p><p>Thankfully, the Days of Play deals I spotted make getting a new DualSense controller or PULSE headset less of a painful purchase. These are the controller color variations and PULSE headsets that caught my eye the most and don’t break the bank as much as they do when they’re at their standard price:</p><ul><li><strong>Access Controller:</strong> <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-access-controller-white/JXHQ3CC3YG/sku/6553450" target="_blank" rel="nofollow">was $89 now $59</a></li><li><strong>Chroma Pearl:</strong> <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-for-ps5-pc-mac-mobile-chroma-pearl/JXHQ37T9SJ/sku/6601464" target="_blank" rel="nofollow">was $79 now $59</a></li><li><strong>Sterling Silver: </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-for-ps5-pc-mac-mobile-sterling-silver/JXHQ3CCHLJ/sku/6562645" target="_blank" rel="nofollow">was $79 now $59</a></li><li><strong>Marathon Limited Edition: </strong><a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-marathon-limited-edition-for-ps5-pc-mac-mobile-white/JXHQ37TQ96/sku/6670038" target="_blank" rel="nofollow">was $84 now $64</a></li><li><strong>Remix Green:</strong> <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-for-ps5-pc-mac-mobile-remix-green/JXHQ37TYQX" target="_blank" rel="nofollow">was $84 now $64</a></li><li><strong>Rhythm Blue:</strong> <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-for-ps5-pc-mac-mobile-rhythm-blue/JXHQ37TYQS" target="_blank" rel="nofollow">was $84 now $64</a></li><li><strong>Techno Red:</strong> <a href="https://www.bestbuy.com/product/sony-interactive-entertainment-dualsense-wireless-controller-for-ps5-pc-mac-mobile-techno-red/JXHQ37TYR9" target="_blank" rel="nofollow">was $84 now $64</a></li><li><strong>PULSE Elite Wireless Headset:</strong> <a href="https://www.bestbuy.com/product/sony-pulse-elite-wireless-gaming-headset-for-ps5-white/JXHQ3CXGYT" target="_blank" rel="nofollow">was $149 now $109</a></li><li><strong>PULSE Explore Wireless Earbuds:</strong> <a href="https://www.bestbuy.com/product/sony-pulse-explore-wireless-earbuds-midnight-black/JXHQ3C2QW5" target="_blank" rel="nofollow">was $199 now $149</a></li></ul><h2 id="shout-out-to-playstation-for-giving-gamers-a-bit-of-a-financial-reprieve">Shout out to PlayStation for giving gamers a bit of a financial reprieve</h2><p>With all the console and handheld price increases, it can become pretty daunting for any hardcore gamer and someone curious enough to get into the hobby to open their wallet nowadays. </p><p>Trust me, I get it—I still don’t have a Switch 2 and it’s looking like I’ll have to get one before the price for that one increases on September 1. With PlayStation’s Days of Play deals in full effect until June 10, I appreciate the gaming giant throwing gamers a bone with a wide selection of deals for their products. </p><p>It’s definitely worth tapping into any of these before all these awesome deals disappear.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom’s Guide</span></h3><ul><li><a href="https://www.tomsguide.com/best-picks/the-best-ps5-games" target="_blank">The best PS5 games in 2026</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/sony-playstation-pulse-elite-headset-review" target="_blank">Sony PlayStation Pulse Elite review: Big sound, not-so-big price</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/sony-playstation-pulse-explore-review" target="_blank">PlayStation Pulse Explore review: Feel like the main character</a></li></ul><div data-widget-type="comparison" data-model-name="Sony PlayStation 5"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ As a certified 'cozy gamer', these are the 12 most stress-free games for the ultimate bliss ]]></title>
                                                                                                <dc:content><![CDATA[ <p>For the past 20-odd years, I have loved easy, open-world gaming. Ever since getting my first Game Boy Color, to my beloved (and heavily used) Nintendo DS Lite, and to my current handheld console, a limited edition Animal Crossing-themed Nintendo Switch, I have always opted for fun, simple games with open-ended goals and low-stakes progression. </p><p>Enter the 2020s term 'cozy gaming' — which is essentially just that — low commitment games that ooze aesthetic visual appeal, satisfying mechanics (like fishing, foraging and in some cases, flying), and hours upon hours of stress-free entertainment. </p><p>Some of my favourite cozy games are ones I've continued to play in short bursts for years at this point — namely, <a href="https://www.amazon.com.au/Animal-Crossing-Horizons-Nintendo-Switch/dp/B0FYKP1YPH" target="_blank">Animal Crossing</a> and <a href="https://www.amazon.com.au/Disney-Dreamlight-Valley-Cozy-CIB/dp/B0CGSSGFW2/" target="_blank">Disney Dreamlight Valley</a> — but I've also dabbled in newer entries over the past few months, including my current obsession, <a href="https://www.amazon.com.au/Silver-Lining-Interactive-6644-Bookshop/dp/B0G66TP1K9" target="_blank">Tiny Bookshop</a>. The name pretty much gives away the synopsis — you own a cutesy bookshop caravan in a seaside town, and you can customise almost everything about it. </p><p>If you're anything like me, you might be after a cozy game to try out. Whether it's to reinvigorate your love for gaming or you want a stress-free hobby to plug into every night, these 12 Amazon finds will provide that and more. Better yet, most of these games are available for Nintendo Switch, Nintendo Switch 2 or PlayStation consoles. So if you're after a new cozy game, scroll on to find my top-rated picks below. </p>        <div class="featured_product_block featured_block_hero" data-id="ff0bb0cc-6cfe-4aeb-94e8-57c3475d9e98">            <a href="https://www.amazon.com.au/Animal-Crossing-Horizons-Nintendo-Switch/dp/B0FYKP1YPH" data-model-name="Animal Crossing: New Horizons - Nintendo Switch 2" 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/cNzEhdmioBJQigobcUtF5e.jpg" alt="Animal Crossing: New Horizons - Nintendo Switch 2 Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Nintendo</div>                                        <div class="featured__title">Animal Crossing: New Horizons - Nintendo Switch 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b5304ab3-e40a-48b7-b565-d07665338f45">            <a href="https://www.amazon.com.au/Silver-Lining-Interactive-6644-Bookshop/dp/B0G66TP1K9" data-model-name="Tiny Bookshop - Nintendo Switch" 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/3whYm5PD2zQPFupCnRJPwd.jpg" alt="Tiny Bookshop - Nintendo Switch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Silver Lining Interactive</div>                                        <div class="featured__title">Tiny Bookshop - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f243781f-ae5a-4bb8-b0b1-01cf4d386926">            <a href="https://www.amazon.com.au/Disney-Dreamlight-Valley-Cozy-CIB/dp/B0CGSSGFW2/" data-model-name="Disney Dreamlight Valley Cozy Edition - Nintendo Switch" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:132.98%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/6H9HLc7vTDGYFm2SHw9Hzd.jpg" alt="Disney Dreamlight Valley Cozy Edition Cib"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Nighthawk Interactive</div>                                        <div class="featured__title">Disney Dreamlight Valley Cozy Edition - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b4345ccc-f6d2-4941-a18f-dadabbdfce8a">            <a href="https://www.amazon.com.au/Hello-Kitty-Island-Adventure-Switch/dp/B0FHQM1NV4" data-model-name="Hello Kitty Island Adventure - Nintendo Switch" 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/m8hh9xSZy4QLsMXekqcErd.jpg" alt="Hello Kitty Island Adventure - Switch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sunblink</div>                                        <div class="featured__title">Hello Kitty Island Adventure - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="eeaafd8a-451e-460b-b40f-72bbdcffc9fd">            <a href="https://www.jbhifi.com.au/products/nintendo-switch-tomodachi-life-living-the-dream" data-model-name="Tomodachi Life: Living the Dream - Nintendo Switch" 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/rSBrF27g8MQdUmKuFqYAke.jpg" alt="Tomodachi Life: Living the Dream"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Nintendo</div>                                        <div class="featured__title">Tomodachi Life: Living the Dream - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8bdc07af-181f-42c0-9738-40c2cf8ec8c6">            <a href="https://www.amazon.com.au/MySims-Cozy-Bundle-Nintendo-Switch/dp/B0FXZ7R6KM" data-model-name="MySims: Cozy Bundle - PlayStation 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.69%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/DF9RawZfP6UTmgqqm4TRAe.jpg" alt="Mysims: Cozy Bundle - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Electronic Arts</div>                                        <div class="featured__title">MySims: Cozy Bundle - PlayStation 5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="925a000e-58b6-43bb-8a7d-0b4ae2d3b139">            <a href="https://www.amazon.com.au/Fangamer-5060760880859-Stardew-Valley-Nintendo/dp/B08F8KRRGL" data-model-name="Stardew Valley - Nintendo Switch" 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/9rTDM2QeTEnmTsZSMDqrVe.jpg" alt="Stardew Valley (nintendo Switch)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Fangamer</div>                                        <div class="featured__title">Stardew Valley - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9097a3e1-04a4-478f-a5e6-a31de85280b6">            <a href="https://www.amazon.com.au/Tales-Shire-Rings-Nintendo-Switch/dp/B0F832DJRS/" data-model-name="Tales of the Shire: a Lord of the Rings Game - Playstation 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/TtQrg4g5dXDZScVp9XfmQe.jpg" alt="Tales of the Shire: a Lord of the Rings Game - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>U&I</div>                                        <div class="featured__title">Tales of the Shire: a Lord of the Rings Game - Playstation 5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="22b09626-e945-4362-92bc-99955dfa1c4a">            <a href="https://www.amazon.com.au/BANDAI-NAMCO-Entertainment-Switch-NoManSky-Switch/dp/B0B51F8D3K" data-model-name="No Man's Sky - Nintendo Switch" 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/AJu72msBVvwDExKz2cXeCe.jpg" alt="Hello Game No Man's Sky Nintendo Switch Game"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Bandai Namco</div>                                        <div class="featured__title">No Man's Sky - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="0c7a347f-6b6b-4ece-8930-fd24f425d257">            <a href="https://www.amazon.com.au/Nintendo-1231638-Fae-Farm-Switch/dp/B0C824L6WV" data-model-name="Fae Farm - Nintendo Switch" 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/qcaxqnhoCKu4QHjr5MGURe.jpg" alt="Fae Farm /nintendo Switch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Nintendo</div>                                        <div class="featured__title">Fae Farm - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ba63958d-3740-4ffa-8467-f2a20a2ef4bc">            <a href="https://www.amazon.com.au/Untitled-Goose-Game-Nintendo-Switch/dp/B08DB49XRR" data-model-name="Untitled Goose Game - Nintendo Switch" 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/RxtuGJSDDR4ubYnn8xnGLe.jpg" alt="Untitled Goose Game (nintendo Switch)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Skybound Games</div>                                        <div class="featured__title">Untitled Goose Game - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="15e3c4ea-f367-4765-bd0e-34d20a85182f">            <a href="https://www.amazon.com.au/Skybound-Stray-Nintendo-Switch/dp/B0DJCT4Y7Q" data-model-name="Stray - Nintendo Switch" 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/cauMxFUdpAQAXumcUmbDJe.jpg" alt="Stray - Nintendo Switch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Skybound</div>                                        <div class="featured__title">Stray - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/as-a-certified-cozy-gamer-these-are-the-12-most-stress-free-games-for-the-ultimate-cozy-bliss</link>
                                                                            <description>
                            <![CDATA[ Keen on a new 'cozy' game? These 12 Amazon finds are my top-rated picks as a cozy gamer. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">HC4DkgZvNc7XW8WV57Wp3L</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/5j8QpvxKZujWMLQp4EAnUT-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 25 May 2026 23:56:21 +0000</pubDate>                                                                                                                                <updated>Wed, 27 May 2026 00:03:11 +0000</updated>
                                                                                                                                            <category><![CDATA[Gaming]]></category>
                                                    <category><![CDATA[Nintendo]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Lucy Scotting is a staff writer for Tom’s Guide Australia, primarily covering lifestyle, streaming and internet-related news. Lucy started her career writing for HR and staffing industry publications, 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/5j8QpvxKZujWMLQp4EAnUT-1920-80.jpg">
                                                            <media:credit><![CDATA[Future / Skystone Games]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tiny Bookshop key art with Tom&#039;s Guide deal badge]]></media:description>                                                            <media:text><![CDATA[Tiny Bookshop key art with Tom&#039;s Guide deal badge]]></media:text>
                                <media:title type="plain"><![CDATA[Tiny Bookshop key art with Tom&#039;s Guide deal badge]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/5j8QpvxKZujWMLQp4EAnUT-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>For the past 20-odd years, I have loved easy, open-world gaming. Ever since getting my first Game Boy Color, to my beloved (and heavily used) Nintendo DS Lite, and to my current handheld console, a limited edition Animal Crossing-themed Nintendo Switch, I have always opted for fun, simple games with open-ended goals and low-stakes progression. </p><p>Enter the 2020s term 'cozy gaming' — which is essentially just that — low commitment games that ooze aesthetic visual appeal, satisfying mechanics (like fishing, foraging and in some cases, flying), and hours upon hours of stress-free entertainment. </p><p>Some of my favourite cozy games are ones I've continued to play in short bursts for years at this point — namely, <a href="https://www.amazon.com.au/Animal-Crossing-Horizons-Nintendo-Switch/dp/B0FYKP1YPH" target="_blank">Animal Crossing</a> and <a href="https://www.amazon.com.au/Disney-Dreamlight-Valley-Cozy-CIB/dp/B0CGSSGFW2/" target="_blank">Disney Dreamlight Valley</a> — but I've also dabbled in newer entries over the past few months, including my current obsession, <a href="https://www.amazon.com.au/Silver-Lining-Interactive-6644-Bookshop/dp/B0G66TP1K9" target="_blank">Tiny Bookshop</a>. The name pretty much gives away the synopsis — you own a cutesy bookshop caravan in a seaside town, and you can customise almost everything about it. </p><p>If you're anything like me, you might be after a cozy game to try out. Whether it's to reinvigorate your love for gaming or you want a stress-free hobby to plug into every night, these 12 Amazon finds will provide that and more. Better yet, most of these games are available for Nintendo Switch, Nintendo Switch 2 or PlayStation consoles. So if you're after a new cozy game, scroll on to find my top-rated picks below. </p>        <div class="featured_product_block featured_block_hero" data-id="ff0bb0cc-6cfe-4aeb-94e8-57c3475d9e98">            <a href="https://www.amazon.com.au/Animal-Crossing-Horizons-Nintendo-Switch/dp/B0FYKP1YPH" data-model-name="Animal Crossing: New Horizons - Nintendo Switch 2" 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/cNzEhdmioBJQigobcUtF5e.jpg" alt="Animal Crossing: New Horizons - Nintendo Switch 2 Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Nintendo</div>                                        <div class="featured__title">Animal Crossing: New Horizons - Nintendo Switch 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b5304ab3-e40a-48b7-b565-d07665338f45">            <a href="https://www.amazon.com.au/Silver-Lining-Interactive-6644-Bookshop/dp/B0G66TP1K9" data-model-name="Tiny Bookshop - Nintendo Switch" 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/3whYm5PD2zQPFupCnRJPwd.jpg" alt="Tiny Bookshop - Nintendo Switch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Silver Lining Interactive</div>                                        <div class="featured__title">Tiny Bookshop - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f243781f-ae5a-4bb8-b0b1-01cf4d386926">            <a href="https://www.amazon.com.au/Disney-Dreamlight-Valley-Cozy-CIB/dp/B0CGSSGFW2/" data-model-name="Disney Dreamlight Valley Cozy Edition - Nintendo Switch" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:132.98%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/6H9HLc7vTDGYFm2SHw9Hzd.jpg" alt="Disney Dreamlight Valley Cozy Edition Cib"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Nighthawk Interactive</div>                                        <div class="featured__title">Disney Dreamlight Valley Cozy Edition - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b4345ccc-f6d2-4941-a18f-dadabbdfce8a">            <a href="https://www.amazon.com.au/Hello-Kitty-Island-Adventure-Switch/dp/B0FHQM1NV4" data-model-name="Hello Kitty Island Adventure - Nintendo Switch" 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/m8hh9xSZy4QLsMXekqcErd.jpg" alt="Hello Kitty Island Adventure - Switch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sunblink</div>                                        <div class="featured__title">Hello Kitty Island Adventure - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="eeaafd8a-451e-460b-b40f-72bbdcffc9fd">            <a href="https://www.jbhifi.com.au/products/nintendo-switch-tomodachi-life-living-the-dream" data-model-name="Tomodachi Life: Living the Dream - Nintendo Switch" 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/rSBrF27g8MQdUmKuFqYAke.jpg" alt="Tomodachi Life: Living the Dream"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Nintendo</div>                                        <div class="featured__title">Tomodachi Life: Living the Dream - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8bdc07af-181f-42c0-9738-40c2cf8ec8c6">            <a href="https://www.amazon.com.au/MySims-Cozy-Bundle-Nintendo-Switch/dp/B0FXZ7R6KM" data-model-name="MySims: Cozy Bundle - PlayStation 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.69%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/DF9RawZfP6UTmgqqm4TRAe.jpg" alt="Mysims: Cozy Bundle - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Electronic Arts</div>                                        <div class="featured__title">MySims: Cozy Bundle - PlayStation 5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="925a000e-58b6-43bb-8a7d-0b4ae2d3b139">            <a href="https://www.amazon.com.au/Fangamer-5060760880859-Stardew-Valley-Nintendo/dp/B08F8KRRGL" data-model-name="Stardew Valley - Nintendo Switch" 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/9rTDM2QeTEnmTsZSMDqrVe.jpg" alt="Stardew Valley (nintendo Switch)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Fangamer</div>                                        <div class="featured__title">Stardew Valley - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9097a3e1-04a4-478f-a5e6-a31de85280b6">            <a href="https://www.amazon.com.au/Tales-Shire-Rings-Nintendo-Switch/dp/B0F832DJRS/" data-model-name="Tales of the Shire: a Lord of the Rings Game - Playstation 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.47%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/TtQrg4g5dXDZScVp9XfmQe.jpg" alt="Tales of the Shire: a Lord of the Rings Game - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>U&I</div>                                        <div class="featured__title">Tales of the Shire: a Lord of the Rings Game - Playstation 5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="22b09626-e945-4362-92bc-99955dfa1c4a">            <a href="https://www.amazon.com.au/BANDAI-NAMCO-Entertainment-Switch-NoManSky-Switch/dp/B0B51F8D3K" data-model-name="No Man's Sky - Nintendo Switch" 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/AJu72msBVvwDExKz2cXeCe.jpg" alt="Hello Game No Man's Sky Nintendo Switch Game"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Bandai Namco</div>                                        <div class="featured__title">No Man's Sky - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="0c7a347f-6b6b-4ece-8930-fd24f425d257">            <a href="https://www.amazon.com.au/Nintendo-1231638-Fae-Farm-Switch/dp/B0C824L6WV" data-model-name="Fae Farm - Nintendo Switch" 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/qcaxqnhoCKu4QHjr5MGURe.jpg" alt="Fae Farm /nintendo Switch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Nintendo</div>                                        <div class="featured__title">Fae Farm - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ba63958d-3740-4ffa-8467-f2a20a2ef4bc">            <a href="https://www.amazon.com.au/Untitled-Goose-Game-Nintendo-Switch/dp/B08DB49XRR" data-model-name="Untitled Goose Game - Nintendo Switch" 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/RxtuGJSDDR4ubYnn8xnGLe.jpg" alt="Untitled Goose Game (nintendo Switch)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Skybound Games</div>                                        <div class="featured__title">Untitled Goose Game - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="15e3c4ea-f367-4765-bd0e-34d20a85182f">            <a href="https://www.amazon.com.au/Skybound-Stray-Nintendo-Switch/dp/B0DJCT4Y7Q" data-model-name="Stray - Nintendo Switch" 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/cauMxFUdpAQAXumcUmbDJe.jpg" alt="Stray - Nintendo Switch"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Skybound</div>                                        <div class="featured__title">Stray - Nintendo Switch</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I fixed my biggest gripe with the PS5 Pro with these unofficial cover plates — and now it looks and feels more like a PC ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Unlike with one of the <a href="https://www.tomsguide.com/us/best-gaming-pc,review-2219.html">best gaming PCs</a>, you’re usually stuck with a console’s stock design. If you want something different, your only real option is to wait for Sony, Nintendo, or Microsoft to release a special-edition version or a hardware redesign.</p><p>Unfortunately, with this console generation, special edition designs have been few and far between. For instance, Sony has only released two true custom variants (the Spider-Man 2 edition and its retro-gray 30th Anniversary models), while Microsoft did something similar with its Halo Infinite and Galaxy Black Xbox Series X consoles. Meanwhile, Nintendo has yet to put out a special edition Switch 2.</p><p>Given that I wasn’t particularly fond of the original PS5's design, I decided to wait for the <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a> to be released. However, after all that waiting, I figured I might as well hold out a bit longer for the <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a>. I ended up getting a PS5 Pro, and while I really like the extra power and features it brings to the table, its futuristic, two-tone design just wasn’t for me. I had hoped Sony would release alternative <a href="https://www.tomsguide.com/opinion/this-console-cover-made-me-love-my-big-ugly-ps5">console covers</a> for its pro system, as it did with the standard PS5, but after months of waiting, we only got a single set of special-edition covers as part of the <a href="https://www.tomsguide.com/gaming/ghost-of-yotei-review">Ghost of Yōtei</a> launch.</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/KwoUPhm6MAc" allowfullscreen></iframe></div></div><p>While I could have just picked up a pair of standard, third-party console covers for my PS5 Pro and called it a day, something even better came along. YouTuber Devyn Johnston wanted to change up the look and design of his PS5 too, so he reverse-engineered Sony’s console covers and made his own — called BoxPlates — with a few notable improvements.</p><p>Here’s what it was like installing them on my own PS5 Pro, and how they completely transformed my console into something closer to a Small Form Factor (SFF) PC that looks right at home in my <a href="https://www.tomsguide.com/computing/i-built-a-black-and-white-gaming-desk-setup-that-feels-clean-calm-and-completely-me-and-it-has-a-secret-weapon-that-makes-it-all-work">desk setup</a> with my other gear.</p><div class="product"><a data-dimension112="58b5eac9-efe1-41d6-8abc-e5787cfd8bbf" data-action="Deal Block" data-label="BoxPlates" data-dimension48="BoxPlates" data-dimension25="$89.99" href="https://store.devynpc.com/products/boxplates" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1800px;"><p class="vanilla-image-block" style="padding-top:56.28%;"><img id="2kYE9dxvWBKViq6Jtv4uSe" name="BoxPlates" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2kYE9dxvWBKViq6Jtv4uSe-1920-80.png" mos="" align="middle" fullscreen="" width="1800" height="1013" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The custom-engineered BoxPlates completely transform your console’s look into a sleek, symmetrical rectangle featuring expanded side-vent airflow and perfect native stability. We are officially at the tail end of Johnston's 2026 production run, meaning remaining inventory is limited and moving quickly. Only the original PS5 Disc and PS5 Pro Disc plates remain in stock, with all of the Slim and Digital versions currently sold out. Grab yours now while you still can.<a class="view-deal button" href="https://store.devynpc.com/products/boxplates" target="_blank" rel="nofollow" data-dimension112="58b5eac9-efe1-41d6-8abc-e5787cfd8bbf" data-action="Deal Block" data-label="BoxPlates" data-dimension48="BoxPlates" data-dimension25="$89.99">View Deal</a></p></div><h2 id="snap-off-snap-on">Snap off, snap on</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GtKEV3frjhjheL4ZrJkriA" name="BoxPlates-1-LEDE" alt="A PS5 Pro next to a set of BoxPlates console covers on a desk" src="https://cdn.mos.cms.futurecdn.net/GtKEV3frjhjheL4ZrJkriA-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>It wasn’t long after I got my PS5 Pro that I came across YouTuber Devyn Johnston’s reveal video showing off his new BoxPlates. After weeks of iterating on their design, he finally came up with something that not only looks good but installs the exact same way as Sony’s official console covers. Since you aren’t technically tampering with your console — like you would be if you opened it up and fully re-shelled it — you can always swap back to Sony’s stock covers if need be.</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/dNhaeyO8Zh0" allowfullscreen></iframe></div></div><p>While Johnston initially made black, gray, and two-tone black-and-gray BoxPlates, when I reached out about getting a pair to try out, only the black ones were left in stock. This was fine by me; an all-black console blends in with most desk setups much better than an all-white one.</p><p>As their name implies, once installed, the BoxPlates give both the standard PS5 and the PS5 Pro a more rectangular look. As a result, you don’t have to use the tiny plastic feet Sony includes in the box if you want to use your console horizontally, nor do you need a separate <a href="https://www.tomsguide.com/opinion/forget-new-ps5-slim-5-reasons-to-buy-the-current-ps5-instead">vertical stand</a> if you’d rather have it upright.</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="TphSDspuT3BJkwUipEBpwD" name="BoxPlates-2" alt="A set of BoxPlates console covers on a desk" src="https://cdn.mos.cms.futurecdn.net/TphSDspuT3BJkwUipEBpwD-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>With the BoxPlates laid out on my desk, it was clear how much thought and attention went into their design. In addition to the raised tabs that let you attach both plates to your console, there are larger circular vents on either side than on Sony’s original design. Even with them installed, they don’t block the console’s power indicator lights or any of its ports.</p><p>After carefully removing the stock console covers from my PS5 Pro, it was time to install my new BoxPlates. Fortunately, since they were reverse-engineered, they slide on and snap off the console just like Sony’s.</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="fyEt5c6jGEbFspE6Sn2XPJ" name="BoxPlates-3" alt="A person installing a set of BoxPlates console covers on a PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/fyEt5c6jGEbFspE6Sn2XPJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There was a bit of back-and-forth getting them aligned, as it’s easy to miss a tab here or there. However, after putting them on and taking them off a few times, I eventually got them installed perfectly on my PS5 Pro.</p><p>As this was my first time ever removing my PS5 Pro’s console covers, the whole process did take me a bit longer than I initially thought it would. However, if you’ve ever taken yours off to clean your PS5 or PS5 Pro, you should have a much easier time installing your BoxPlates.</p><h2 id="dressed-for-a-desk-setup">Dressed for a desk setup</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5idxLDX8vMHZ2AFKEJdXwM" name="BoxPlates-4" alt="A PS5 Pro with BoxPlates console covers installed next to an Xbox Series S on a desk" src="https://cdn.mos.cms.futurecdn.net/5idxLDX8vMHZ2AFKEJdXwM-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As you can see here, my PS5 Pro with Johnston’s BoxPlates installed looks quite similar to the <a href="https://www.tomsguide.com/opinion/3-things-i-love-about-the-new-xbox-series-s-and-one-upgrade-its-still-missing">black Xbox Series S</a> next to it. This makes sense; in the video linked above, he explains that the first version of his custom PS5 console cover was loosely inspired by the Xbox One S. Johnston later switched to his own original design, and that change definitely paid off.</p><p>Immediately after installing Johnston’s BoxPlates on my PS5 Pro, my now-customized console reminded me of a PC case I built years ago. Instead of selling my desktop gaming PC when I left Korea, I decided to swap my larger Micro-ATX case for a smaller ITX one. Looking at my PS5 Pro with Johnston’s BoxPlates installed instantly made me think of my old <a href="https://www.tomsguide.com/opinion/the-lg-dualup-is-the-perfect-vertical-monitor-heres-why">Fractal Design Node 202 case</a>, which remains one of my favorite SFF PC cases of all time.</p><p>With the console cover swap complete, it was time to bring my PS5 Pro back over to my desk and see how it looked — and performed — compared to Sony’s original design. While I do like the way Johnston’s BoxPlates look with the PS5 Pro in a horizontal orientation, I went with a vertical one instead to give me as much space on my desk as possible without worrying about poor ventilation.</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="RRWno8k9jftM45SbQCQvPS" name="BoxPlates-6" alt="A person playing AstroBot on a PS5 Pro outfitted with BoxPlates console covers" src="https://cdn.mos.cms.futurecdn.net/RRWno8k9jftM45SbQCQvPS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As I was shooting the final pics for my <a href="https://www.tomsguide.com/home/home-office/corsair-platform-4-elevate-review">Corsair Platform 4: Elevate Desk review</a>, I decided to set up my PS5 Pro on that desk. With its redesigned look, the console blended in perfectly with the rest of my desk setup instead of standing out like a sore thumb. It might just be me, but it also seemed to run quieter under heavy load, even though the PS5 and PS5 Pro are already a massive improvement over the PS4/PS4 Pro in terms of noise levels.</p><p>Since I’ve mainly been playing PC games on the <a href="https://www.tomsguide.com/computing/mini-pcs/forget-consoles-i-spent-a-week-with-this-mini-pc-in-my-living-room-and-i-cant-believe-how-well-it-performs">Framework Desktop</a> on the right side of my desk and with Khadas’ <a href="https://www.tomsguide.com/computing/mini-pcs/i-gave-my-favorite-pocketable-mini-pc-an-instant-upgrade-with-this-docking-station-and-now-its-a-full-fledged-gaming-rig">Mind Graphics 2</a> external GPU in the other room, I have plenty of PS5 and PS4 games, as well as a couple of PS3 games — I’m looking at you, Heavy Rain — in my backlog that I still need to finish. With my PS5 Pro now sporting Johnston’s BoxPlates, doing so will be much easier, since I can incorporate Sony’s console into my various desk setups as easily as I do with the Nintendo Switch 2 paired with the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/i-gave-my-switch-2-a-major-upgrade-for-usd55-less-than-buying-another-official-dock-and-it-fits-in-my-pocket">Genki Covert Dock 3</a>.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OarGjX"></div>                            </div>                            <script src="https://kwizly.com/embed/OarGjX.js" async></script><h2 id="from-futuristic-to-practical">From futuristic to practical</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NuiTPyS7XYDd8cdUgoRvBZ" name="PS5 Pro-BoxPlates" alt="A side by side shot showing a stock PS5 Pro on the left and a PS5 Pro outfitted with BoxPlates console covers on the right" src="https://cdn.mos.cms.futurecdn.net/NuiTPyS7XYDd8cdUgoRvBZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Now, don’t get me wrong, Sony’s decision to go with a more futuristic design for the PS5 and then the PS5 Pro isn’t necessarily a bad thing. On its own, I really do like how the original and now this pro model of Sony’s latest console looks. In fact, with its curves, removable console covers, and how you can install a standard, internal <a href="https://www.tomsguide.com/gaming/playstation/i-added-a-new-ssd-to-ps5-pro-to-get-faster-loading-times-heres-what-happened">M.2 SSD for extra storage</a>, the PS5 is about as futuristic as it gets — well, almost. It still doesn’t hold a candle to that fake design for the PS9 with a transparent glass orb floating in a cylinder that Sony released all the way back in 1999, ahead of the PlayStation 2’s launch.</p><p>At $89.99, Johnston’s BoxPlates are slightly on the expensive side for a cosmetic upgrade for your PS5 or PS5 Pro. However, when you factor in the cost of a set of Sony’s official console covers at $54 to $74 depending on which color you pick, and the fact that the official vertical stand — which isn’t included with the PS5 Slim or PS5 Pro — will set you back another $30, almost $100 with shipping doesn’t sound all that bad.</p><p>Now, Johnston’s BoxPlates won’t be for everyone, and that’s okay. If you just want to change your PS5’s exterior color, you can always buy a set of official or even unofficial console covers for it. However, if you take the route I did, you can change the entire look and design of your PS5 or PS5 Pro while improving its ventilation. Likewise, a mod like this one makes for a great conversation starter at your next game night, too.</p><p>Personally, I couldn’t be happier with the change, and unlike when I modded my original Xbox all those years ago, this isn’t permanent. I can just as easily revert my PS5 Pro back to its stock look — probably faster than it took me to install the BoxPlates.</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/gaming-peripherals/forget-the-playstation-portal-this-dollar7-app-fixed-my-biggest-problem-with-remote-play">This $7 app fixed my biggest problem with remote play on both PS5 and Xbox</a></li><li><a href="https://www.tomsguide.com/gaming/ps5-vs-ps5-pro-which-console-should-you-buy-in-2026">PS5 vs. PS5 Pro: Which console should you buy in 2026?</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/i-tried-the-new-backbone-pro-controller-and-the-feature-ive-always-wanted-wasnt-the-most-surprising">I tried the Backbone Pro and it's an excellent mobile controller — but it's even better on PC</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/i-fixed-my-biggest-gripe-with-the-ps5-pro-with-these-unofficial-cover-plates-and-now-it-looks-and-feels-more-like-a-pc</link>
                                                                            <description>
                            <![CDATA[ Sony’s official console covers only change the color, but DevynPC’s BoxPlates completely overhaul the PS5 Pro's silhouette for a sleek, PC-inspired look. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">kX3awBCgXeYdXXCZow2fZ8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/xFP4HKzzMQo42wVVqc26q5-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 24 May 2026 10:15:00 +0000</pubDate>                                                                                                                                <updated>Sun, 24 May 2026 16:41:57 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/xFP4HKzzMQo42wVVqc26q5-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A PS5 Pro with BoxPlates console covers installed on a desk]]></media:description>                                                            <media:text><![CDATA[A PS5 Pro with BoxPlates console covers installed on a desk]]></media:text>
                                <media:title type="plain"><![CDATA[A PS5 Pro with BoxPlates console covers installed on a desk]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/xFP4HKzzMQo42wVVqc26q5-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Unlike with one of the <a href="https://www.tomsguide.com/us/best-gaming-pc,review-2219.html">best gaming PCs</a>, you’re usually stuck with a console’s stock design. If you want something different, your only real option is to wait for Sony, Nintendo, or Microsoft to release a special-edition version or a hardware redesign.</p><p>Unfortunately, with this console generation, special edition designs have been few and far between. For instance, Sony has only released two true custom variants (the Spider-Man 2 edition and its retro-gray 30th Anniversary models), while Microsoft did something similar with its Halo Infinite and Galaxy Black Xbox Series X consoles. Meanwhile, Nintendo has yet to put out a special edition Switch 2.</p><p>Given that I wasn’t particularly fond of the original PS5's design, I decided to wait for the <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a> to be released. However, after all that waiting, I figured I might as well hold out a bit longer for the <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a>. I ended up getting a PS5 Pro, and while I really like the extra power and features it brings to the table, its futuristic, two-tone design just wasn’t for me. I had hoped Sony would release alternative <a href="https://www.tomsguide.com/opinion/this-console-cover-made-me-love-my-big-ugly-ps5">console covers</a> for its pro system, as it did with the standard PS5, but after months of waiting, we only got a single set of special-edition covers as part of the <a href="https://www.tomsguide.com/gaming/ghost-of-yotei-review">Ghost of Yōtei</a> launch.</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/KwoUPhm6MAc" allowfullscreen></iframe></div></div><p>While I could have just picked up a pair of standard, third-party console covers for my PS5 Pro and called it a day, something even better came along. YouTuber Devyn Johnston wanted to change up the look and design of his PS5 too, so he reverse-engineered Sony’s console covers and made his own — called BoxPlates — with a few notable improvements.</p><p>Here’s what it was like installing them on my own PS5 Pro, and how they completely transformed my console into something closer to a Small Form Factor (SFF) PC that looks right at home in my <a href="https://www.tomsguide.com/computing/i-built-a-black-and-white-gaming-desk-setup-that-feels-clean-calm-and-completely-me-and-it-has-a-secret-weapon-that-makes-it-all-work">desk setup</a> with my other gear.</p><div class="product"><a data-dimension112="58b5eac9-efe1-41d6-8abc-e5787cfd8bbf" data-action="Deal Block" data-label="BoxPlates" data-dimension48="BoxPlates" data-dimension25="$89.99" href="https://store.devynpc.com/products/boxplates" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1800px;"><p class="vanilla-image-block" style="padding-top:56.28%;"><img id="2kYE9dxvWBKViq6Jtv4uSe" name="BoxPlates" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2kYE9dxvWBKViq6Jtv4uSe-1920-80.png" mos="" align="middle" fullscreen="" width="1800" height="1013" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The custom-engineered BoxPlates completely transform your console’s look into a sleek, symmetrical rectangle featuring expanded side-vent airflow and perfect native stability. We are officially at the tail end of Johnston's 2026 production run, meaning remaining inventory is limited and moving quickly. Only the original PS5 Disc and PS5 Pro Disc plates remain in stock, with all of the Slim and Digital versions currently sold out. Grab yours now while you still can.<a class="view-deal button" href="https://store.devynpc.com/products/boxplates" target="_blank" rel="nofollow" data-dimension112="58b5eac9-efe1-41d6-8abc-e5787cfd8bbf" data-action="Deal Block" data-label="BoxPlates" data-dimension48="BoxPlates" data-dimension25="$89.99">View Deal</a></p></div><h2 id="snap-off-snap-on">Snap off, snap on</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GtKEV3frjhjheL4ZrJkriA" name="BoxPlates-1-LEDE" alt="A PS5 Pro next to a set of BoxPlates console covers on a desk" src="https://cdn.mos.cms.futurecdn.net/GtKEV3frjhjheL4ZrJkriA-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>It wasn’t long after I got my PS5 Pro that I came across YouTuber Devyn Johnston’s reveal video showing off his new BoxPlates. After weeks of iterating on their design, he finally came up with something that not only looks good but installs the exact same way as Sony’s official console covers. Since you aren’t technically tampering with your console — like you would be if you opened it up and fully re-shelled it — you can always swap back to Sony’s stock covers if need be.</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/dNhaeyO8Zh0" allowfullscreen></iframe></div></div><p>While Johnston initially made black, gray, and two-tone black-and-gray BoxPlates, when I reached out about getting a pair to try out, only the black ones were left in stock. This was fine by me; an all-black console blends in with most desk setups much better than an all-white one.</p><p>As their name implies, once installed, the BoxPlates give both the standard PS5 and the PS5 Pro a more rectangular look. As a result, you don’t have to use the tiny plastic feet Sony includes in the box if you want to use your console horizontally, nor do you need a separate <a href="https://www.tomsguide.com/opinion/forget-new-ps5-slim-5-reasons-to-buy-the-current-ps5-instead">vertical stand</a> if you’d rather have it upright.</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="TphSDspuT3BJkwUipEBpwD" name="BoxPlates-2" alt="A set of BoxPlates console covers on a desk" src="https://cdn.mos.cms.futurecdn.net/TphSDspuT3BJkwUipEBpwD-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>With the BoxPlates laid out on my desk, it was clear how much thought and attention went into their design. In addition to the raised tabs that let you attach both plates to your console, there are larger circular vents on either side than on Sony’s original design. Even with them installed, they don’t block the console’s power indicator lights or any of its ports.</p><p>After carefully removing the stock console covers from my PS5 Pro, it was time to install my new BoxPlates. Fortunately, since they were reverse-engineered, they slide on and snap off the console just like Sony’s.</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="fyEt5c6jGEbFspE6Sn2XPJ" name="BoxPlates-3" alt="A person installing a set of BoxPlates console covers on a PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/fyEt5c6jGEbFspE6Sn2XPJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>There was a bit of back-and-forth getting them aligned, as it’s easy to miss a tab here or there. However, after putting them on and taking them off a few times, I eventually got them installed perfectly on my PS5 Pro.</p><p>As this was my first time ever removing my PS5 Pro’s console covers, the whole process did take me a bit longer than I initially thought it would. However, if you’ve ever taken yours off to clean your PS5 or PS5 Pro, you should have a much easier time installing your BoxPlates.</p><h2 id="dressed-for-a-desk-setup">Dressed for a desk setup</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5idxLDX8vMHZ2AFKEJdXwM" name="BoxPlates-4" alt="A PS5 Pro with BoxPlates console covers installed next to an Xbox Series S on a desk" src="https://cdn.mos.cms.futurecdn.net/5idxLDX8vMHZ2AFKEJdXwM-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As you can see here, my PS5 Pro with Johnston’s BoxPlates installed looks quite similar to the <a href="https://www.tomsguide.com/opinion/3-things-i-love-about-the-new-xbox-series-s-and-one-upgrade-its-still-missing">black Xbox Series S</a> next to it. This makes sense; in the video linked above, he explains that the first version of his custom PS5 console cover was loosely inspired by the Xbox One S. Johnston later switched to his own original design, and that change definitely paid off.</p><p>Immediately after installing Johnston’s BoxPlates on my PS5 Pro, my now-customized console reminded me of a PC case I built years ago. Instead of selling my desktop gaming PC when I left Korea, I decided to swap my larger Micro-ATX case for a smaller ITX one. Looking at my PS5 Pro with Johnston’s BoxPlates installed instantly made me think of my old <a href="https://www.tomsguide.com/opinion/the-lg-dualup-is-the-perfect-vertical-monitor-heres-why">Fractal Design Node 202 case</a>, which remains one of my favorite SFF PC cases of all time.</p><p>With the console cover swap complete, it was time to bring my PS5 Pro back over to my desk and see how it looked — and performed — compared to Sony’s original design. While I do like the way Johnston’s BoxPlates look with the PS5 Pro in a horizontal orientation, I went with a vertical one instead to give me as much space on my desk as possible without worrying about poor ventilation.</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="RRWno8k9jftM45SbQCQvPS" name="BoxPlates-6" alt="A person playing AstroBot on a PS5 Pro outfitted with BoxPlates console covers" src="https://cdn.mos.cms.futurecdn.net/RRWno8k9jftM45SbQCQvPS-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As I was shooting the final pics for my <a href="https://www.tomsguide.com/home/home-office/corsair-platform-4-elevate-review">Corsair Platform 4: Elevate Desk review</a>, I decided to set up my PS5 Pro on that desk. With its redesigned look, the console blended in perfectly with the rest of my desk setup instead of standing out like a sore thumb. It might just be me, but it also seemed to run quieter under heavy load, even though the PS5 and PS5 Pro are already a massive improvement over the PS4/PS4 Pro in terms of noise levels.</p><p>Since I’ve mainly been playing PC games on the <a href="https://www.tomsguide.com/computing/mini-pcs/forget-consoles-i-spent-a-week-with-this-mini-pc-in-my-living-room-and-i-cant-believe-how-well-it-performs">Framework Desktop</a> on the right side of my desk and with Khadas’ <a href="https://www.tomsguide.com/computing/mini-pcs/i-gave-my-favorite-pocketable-mini-pc-an-instant-upgrade-with-this-docking-station-and-now-its-a-full-fledged-gaming-rig">Mind Graphics 2</a> external GPU in the other room, I have plenty of PS5 and PS4 games, as well as a couple of PS3 games — I’m looking at you, Heavy Rain — in my backlog that I still need to finish. With my PS5 Pro now sporting Johnston’s BoxPlates, doing so will be much easier, since I can incorporate Sony’s console into my various desk setups as easily as I do with the Nintendo Switch 2 paired with the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/i-gave-my-switch-2-a-major-upgrade-for-usd55-less-than-buying-another-official-dock-and-it-fits-in-my-pocket">Genki Covert Dock 3</a>.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OarGjX"></div>                            </div>                            <script src="https://kwizly.com/embed/OarGjX.js" async></script><h2 id="from-futuristic-to-practical">From futuristic to practical</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NuiTPyS7XYDd8cdUgoRvBZ" name="PS5 Pro-BoxPlates" alt="A side by side shot showing a stock PS5 Pro on the left and a PS5 Pro outfitted with BoxPlates console covers on the right" src="https://cdn.mos.cms.futurecdn.net/NuiTPyS7XYDd8cdUgoRvBZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Now, don’t get me wrong, Sony’s decision to go with a more futuristic design for the PS5 and then the PS5 Pro isn’t necessarily a bad thing. On its own, I really do like how the original and now this pro model of Sony’s latest console looks. In fact, with its curves, removable console covers, and how you can install a standard, internal <a href="https://www.tomsguide.com/gaming/playstation/i-added-a-new-ssd-to-ps5-pro-to-get-faster-loading-times-heres-what-happened">M.2 SSD for extra storage</a>, the PS5 is about as futuristic as it gets — well, almost. It still doesn’t hold a candle to that fake design for the PS9 with a transparent glass orb floating in a cylinder that Sony released all the way back in 1999, ahead of the PlayStation 2’s launch.</p><p>At $89.99, Johnston’s BoxPlates are slightly on the expensive side for a cosmetic upgrade for your PS5 or PS5 Pro. However, when you factor in the cost of a set of Sony’s official console covers at $54 to $74 depending on which color you pick, and the fact that the official vertical stand — which isn’t included with the PS5 Slim or PS5 Pro — will set you back another $30, almost $100 with shipping doesn’t sound all that bad.</p><p>Now, Johnston’s BoxPlates won’t be for everyone, and that’s okay. If you just want to change your PS5’s exterior color, you can always buy a set of official or even unofficial console covers for it. However, if you take the route I did, you can change the entire look and design of your PS5 or PS5 Pro while improving its ventilation. Likewise, a mod like this one makes for a great conversation starter at your next game night, too.</p><p>Personally, I couldn’t be happier with the change, and unlike when I modded my original Xbox all those years ago, this isn’t permanent. I can just as easily revert my PS5 Pro back to its stock look — probably faster than it took me to install the BoxPlates.</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/gaming-peripherals/forget-the-playstation-portal-this-dollar7-app-fixed-my-biggest-problem-with-remote-play">This $7 app fixed my biggest problem with remote play on both PS5 and Xbox</a></li><li><a href="https://www.tomsguide.com/gaming/ps5-vs-ps5-pro-which-console-should-you-buy-in-2026">PS5 vs. PS5 Pro: Which console should you buy in 2026?</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/i-tried-the-new-backbone-pro-controller-and-the-feature-ive-always-wanted-wasnt-the-most-surprising">I tried the Backbone Pro and it's an excellent mobile controller — but it's even better on PC</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Directive 8020 is The Dark Pictures game of my dreams — and the best interactive horror since Until Dawn ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Much as I enjoyed the previous four games in The Dark Pictures series, they always felt a little haunted. And I’m not talking about being haunted by the various horrific creatures, specters, and monsters housed within the series. No, The Dark Pictures has always been haunted by persistent comparisons to developer Supermassive Games’ 2015 interactive horror, <a href="https://www.tomsguide.com/gaming/pc-gaming/until-dawn-remake-is-better-than-the-original-heres-why">Until Dawn</a>.  </p><p>I’m guilty of making this comparison as well. Even with my previous favorite Dark Pictures entry, 2021’s <a href="https://www.tomsguide.com/reviews/dark-pictures-anthology-house-of-ashes">House of Ashes</a>. I remember thinking, “That was pretty great, but not as good as Until Dawn.” But what makes the latest installment in the interactive horror anthology, Directive 8020, so impressive is that for the first time, I found myself <em>not </em>subconsciously comparing the experience to one released over a decade ago. </p><p>There’s no question in my mind that Directive 8020 is the best Dark Pictures yet. Not only does it offer the most intense and engaging narrative of the series, but Supermassive Games has made some very smart tweaks to the established formula, which make experiencing (and crucially, actually <em>playing</em>) this spooky sci-fi story even more enjoyable than its predecessors. </p><div class="product"><a data-dimension112="916b8c48-886a-432c-86e6-684427738d4b" data-action="Deal Block" data-label="(Deluxe Edition)" data-dimension48="(Deluxe Edition)" data-dimension25="$49" href="https://www.amazon.com/Directive-8020-Deluxe-PlayStation-5/dp/B0GMRVTRXT/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1279px;"><p class="vanilla-image-block" style="padding-top:117.28%;"><img id="xUDYdjzYHChqdZy65Qkbs4" name="directive-8020-ps5-case-na" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xUDYdjzYHChqdZy65Qkbs4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1279" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Directive-8020-Deluxe-PlayStation-5/dp/B0GMRVTRXT/" target="_blank" rel="nofollow" data-dimension112="916b8c48-886a-432c-86e6-684427738d4b" data-action="Deal Block" data-label="(Deluxe Edition)" data-dimension48="(Deluxe Edition)" data-dimension25="$49">(Deluxe Edition): $49</a></strong><br>Directive 8020 is the latest interactive horror installment in The Dark Picture Anthology. You play a crew on board a spaceship that encounters a terrifying, shape-shifting alien. To survive, you'll have to make the right choices; otherwise, the crew will meet a grisly end. This Deluxe Edition includes an extra outfit pack, additional in-game collectibles, a cinematic filters pack, and a digital artbook/soundtrack.<a class="view-deal button" href="https://www.amazon.com/Directive-8020-Deluxe-PlayStation-5/dp/B0GMRVTRXT/" target="_blank" rel="nofollow" data-dimension112="916b8c48-886a-432c-86e6-684427738d4b" data-action="Deal Block" data-label="(Deluxe Edition)" data-dimension48="(Deluxe Edition)" data-dimension25="$49">View Deal</a></p></div><h2 id="in-space-no-one-can-hear-you-scream">In space, no one can hear you scream</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/4a_VXgNSfME" allowfullscreen></iframe></div></div><p>I suppose it’s not really a surprise that I took to Directive 8020 so quickly. “Alien” is my favorite movie franchise of all time, and this newest entry in the series leaves Earth behind for a sci-fi horror story set 12 light-years from Earth. However, much as I’ve seen 1979’s “Alien” theorized as an inspiration (and I’m sure it is), I actually got a bigger “Prometheus” vibe overall.</p><p>You play as several crew members onboard a colony ship, the Cassiopeia. The crew’s mission to orbit the planet Tau Ceti f, to gain critical information ahead of a second ship, the Andromeda, arriving in six months, which will terraform the planet and make it suitable for humans. Naturally, this is a horror story, so as soon as the playable crew awakens from hypersleep, everything goes to hell. Turns out there’s a shapeshifting extraterrestrial onboard (“The Thing” is clearly another inspiration), and things get even worse from there, as this monster can mimic the appearance of the crew.</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="m8KFjCeNsqMgXm5LMN4na3" name="directive-8020-press-image-02" alt="Screenshot from The Dark Pictures: Directive 8020" src="https://cdn.mos.cms.futurecdn.net/m8KFjCeNsqMgXm5LMN4na3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Supermassive Games)</span></figcaption></figure><p>In Directive 8020, the six-to eight-hour story is split into eight episodes. This is a more significant change than it might sound on paper. Previously, Dark Pictures titles were technically split into multiple “chapters,” but the narrative felt largely seamless (bar interruptions from the Curator, whose role is reworked here). Those stories were presented like a movie.</p><p>Directive 8020 instead takes inspiration from a bingeable TV show. Each episode ends with a cliffhanger and “end of episode” text. It’s not a new idea; <a href="https://www.tomsguide.com/reviews/alan-wake-remastered">Alan Wake</a> used this format back in 2010, but the format works supremely well here. Far from ruining the narrative flow, the episode structure made me even more eager to consume each one as fast as possible.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XpmQ1e"></div>                            </div>                            <script src="https://kwizly.com/embed/XpmQ1e.js" async></script><h2 id="the-dark-pictures-you-know-but-a-little-different">The Dark Pictures, you know, but a little different</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fJaDh8BSqfr8yXaaBuMQY3" name="directive-8020-press-image-05" alt="Screenshot from The Dark Pictures: Directive 8020" src="https://cdn.mos.cms.futurecdn.net/fJaDh8BSqfr8yXaaBuMQY3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Supermassive Games)</span></figcaption></figure><p>The crux of “The Dark Pictures” is the same as the interactive horror formula that Supermassive Games has been utilizing since 2015. That means you’ll spend a lot of time picking dialogue choices, making critical decisions under time pressure, and the (in)famous inclusion of QTE sequences (but you can choose how much leeway you have with these). </p><p>However, I really appreciate that this time there’s more <em>game </em>within Directive 8020. It’s by no means a full-on survival-horror experience, a la <a href="https://www.tomsguide.com/reviews/dead-space-remake">Dead Space</a>, but third-person stealth sequences have been added. These see you sulking around the Cassiopeia, trying to avoid a foe. And unlike a traditional horror game, if you’re caught, you don’t get a “game over” screen and a retry. The story continues, with the effects of your failure rippling out.  </p><p>Directive 8020 also introduces other smaller gameplay additions, like the ability to send messages between the crew, which lightly flesh out each character. Plus, the sections where you are in direct control of a character are significantly less clunky than previous Dark Pictures. Your characters no longer move like an unwieldy tank, which is a much-needed improvement. </p><h2 id="reliving-the-nightmare-over-and-over-and-over">Reliving the nightmare over and over (and over)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JA72zUXXjGDFXAkPocjxX3" name="directive-8020-press-image-03" alt="Screenshot from The Dark Pictures: Directive 8020" src="https://cdn.mos.cms.futurecdn.net/JA72zUXXjGDFXAkPocjxX3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Supermassive Games)</span></figcaption></figure><p>The biggest new addition to Directive 8020 is the new Turning Points. This replaces the old Butterfly effect system that originated in Until Dawn, and was rebranded as Bearings in the previous Dark Pictures titles. Like those games, you will often make plot-critical choices, ones that can have unforeseen consequences, and even result in the death of a character. </p><p>However, this time, your choices and their outcomes are all charted in a sprawling spider-web within the pause menu. It’s neat to look at the flowchart of your progressing story, but Directive 8020 goes further and lets you rewind to any previous point in the story without penalty. This enables you to redo a decision instantly if you’re unhappy with the results. </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="KnUkYroQ9AuCKRLob3gMX3" name="directive-8020-press-image-04" alt="Screenshot from The Dark Pictures: Directive 8020" src="https://cdn.mos.cms.futurecdn.net/KnUkYroQ9AuCKRLob3gMX3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Supermassive Games)</span></figcaption></figure><p>Take, for example, a moment in episode two, where I made a rash call that got a character killed. I was pretty disappointed to lose somebody so early in the story. In a previous Dark Pictures game, my only option would have been to restart, but in Directive 8020, I was able to instantly rewind the clock and make the correct decision this time, saving the captain’s life. </p><p>It’s not just about correcting mistakes either. The Turning Points system makes it easier than ever to see different outcomes. You can leap about the narrative timeline as you wish, letting you explore different story paths with ease, and without multiple full playthroughs. In a later episode, after making a decision in a tense standoff that I was happy with, I had a lot of fun exploring what might have happened if I’d chosen a different path.</p><p>However, I can see some players disliking this system, as it does rob decisions of their weight when you can simply rewind and try again with a single button press. Fortunately, Supermassive Games thought of this potential downside and has included a specific mode that locks you out of Turning Points. Pick Survivor mode, and every decision is permanent.</p><h2 id="should-you-play-directive-8020">Should you play Directive 8020?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cG9jtscWp8xrH2q54e7SX3" name="directive-8020-press-image-06" alt="Screenshot from The Dark Pictures: Directive 8020" src="https://cdn.mos.cms.futurecdn.net/cG9jtscWp8xrH2q54e7SX3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Supermassive Games)</span></figcaption></figure><p>If you have any fondness for the previous Dark Pictures games, then you absolutely need to play Directive 8020. As somebody who’s played them all, it’s the best of the bunch. The sci-fi setting is everything I hoped it would be, the gameplay upgrades are great, some of the decisions you must make are darn difficult, and Turning Points is an awesome inclusion.</p><p>I even recommend Directive 8020 to players who haven’t clicked with The Dark Pictures. If you’re one of the many who have been patiently waiting for Supermassive Games to recapture that special sauce that made Until Dawn a fan-favorite, Directive 8020 is exactly that. It marks The Dark Picture finding its own footing and delivering a memorable interactive horror experience, unburdened by comparisons to what came before.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">The best PS5 games in 2025</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/jackpot-dante-and-vergil-clash-in-explosive-second-season-of-devil-may-cry-that-just-landed-on-netflix-and-its-campy-fun-you-cant-help-but-binge">Netflix's 'Devil May Cry' season 2 is campy fun you'll want to binge</a></li><li><a href="https://www.tomsguide.com/gaming/pc-gaming/until-dawn-remake-is-better-than-the-original-heres-why">Until Dawn remake is better than the original — here's why</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/directive-8020-is-the-dark-pictures-game-of-my-dreams-and-the-best-interactive-horror-since-until-dawn</link>
                                                                            <description>
                            <![CDATA[ Directive 8020 is the best The Dark Pictures game yet, thanks to a fantastic sci-fi setting, impactful decisions, and great new features. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aeLmHmrxDYFKurcbSLgLSA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/gYxEKM69gEQ3968dsDDiY3-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 17 May 2026 08:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/gYxEKM69gEQ3968dsDDiY3-1920-80.jpg">
                                                            <media:credit><![CDATA[Supermassive Games]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Screenshot from The Dark Pictures: Directive 8020]]></media:description>                                                            <media:text><![CDATA[Screenshot from The Dark Pictures: Directive 8020]]></media:text>
                                <media:title type="plain"><![CDATA[Screenshot from The Dark Pictures: Directive 8020]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/gYxEKM69gEQ3968dsDDiY3-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Much as I enjoyed the previous four games in The Dark Pictures series, they always felt a little haunted. And I’m not talking about being haunted by the various horrific creatures, specters, and monsters housed within the series. No, The Dark Pictures has always been haunted by persistent comparisons to developer Supermassive Games’ 2015 interactive horror, <a href="https://www.tomsguide.com/gaming/pc-gaming/until-dawn-remake-is-better-than-the-original-heres-why">Until Dawn</a>.  </p><p>I’m guilty of making this comparison as well. Even with my previous favorite Dark Pictures entry, 2021’s <a href="https://www.tomsguide.com/reviews/dark-pictures-anthology-house-of-ashes">House of Ashes</a>. I remember thinking, “That was pretty great, but not as good as Until Dawn.” But what makes the latest installment in the interactive horror anthology, Directive 8020, so impressive is that for the first time, I found myself <em>not </em>subconsciously comparing the experience to one released over a decade ago. </p><p>There’s no question in my mind that Directive 8020 is the best Dark Pictures yet. Not only does it offer the most intense and engaging narrative of the series, but Supermassive Games has made some very smart tweaks to the established formula, which make experiencing (and crucially, actually <em>playing</em>) this spooky sci-fi story even more enjoyable than its predecessors. </p><div class="product"><a data-dimension112="916b8c48-886a-432c-86e6-684427738d4b" data-action="Deal Block" data-label="(Deluxe Edition)" data-dimension48="(Deluxe Edition)" data-dimension25="$49" href="https://www.amazon.com/Directive-8020-Deluxe-PlayStation-5/dp/B0GMRVTRXT/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1279px;"><p class="vanilla-image-block" style="padding-top:117.28%;"><img id="xUDYdjzYHChqdZy65Qkbs4" name="directive-8020-ps5-case-na" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xUDYdjzYHChqdZy65Qkbs4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1279" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Directive-8020-Deluxe-PlayStation-5/dp/B0GMRVTRXT/" target="_blank" rel="nofollow" data-dimension112="916b8c48-886a-432c-86e6-684427738d4b" data-action="Deal Block" data-label="(Deluxe Edition)" data-dimension48="(Deluxe Edition)" data-dimension25="$49">(Deluxe Edition): $49</a></strong><br>Directive 8020 is the latest interactive horror installment in The Dark Picture Anthology. You play a crew on board a spaceship that encounters a terrifying, shape-shifting alien. To survive, you'll have to make the right choices; otherwise, the crew will meet a grisly end. This Deluxe Edition includes an extra outfit pack, additional in-game collectibles, a cinematic filters pack, and a digital artbook/soundtrack.<a class="view-deal button" href="https://www.amazon.com/Directive-8020-Deluxe-PlayStation-5/dp/B0GMRVTRXT/" target="_blank" rel="nofollow" data-dimension112="916b8c48-886a-432c-86e6-684427738d4b" data-action="Deal Block" data-label="(Deluxe Edition)" data-dimension48="(Deluxe Edition)" data-dimension25="$49">View Deal</a></p></div><h2 id="in-space-no-one-can-hear-you-scream">In space, no one can hear you scream</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/4a_VXgNSfME" allowfullscreen></iframe></div></div><p>I suppose it’s not really a surprise that I took to Directive 8020 so quickly. “Alien” is my favorite movie franchise of all time, and this newest entry in the series leaves Earth behind for a sci-fi horror story set 12 light-years from Earth. However, much as I’ve seen 1979’s “Alien” theorized as an inspiration (and I’m sure it is), I actually got a bigger “Prometheus” vibe overall.</p><p>You play as several crew members onboard a colony ship, the Cassiopeia. The crew’s mission to orbit the planet Tau Ceti f, to gain critical information ahead of a second ship, the Andromeda, arriving in six months, which will terraform the planet and make it suitable for humans. Naturally, this is a horror story, so as soon as the playable crew awakens from hypersleep, everything goes to hell. Turns out there’s a shapeshifting extraterrestrial onboard (“The Thing” is clearly another inspiration), and things get even worse from there, as this monster can mimic the appearance of the crew.</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="m8KFjCeNsqMgXm5LMN4na3" name="directive-8020-press-image-02" alt="Screenshot from The Dark Pictures: Directive 8020" src="https://cdn.mos.cms.futurecdn.net/m8KFjCeNsqMgXm5LMN4na3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Supermassive Games)</span></figcaption></figure><p>In Directive 8020, the six-to eight-hour story is split into eight episodes. This is a more significant change than it might sound on paper. Previously, Dark Pictures titles were technically split into multiple “chapters,” but the narrative felt largely seamless (bar interruptions from the Curator, whose role is reworked here). Those stories were presented like a movie.</p><p>Directive 8020 instead takes inspiration from a bingeable TV show. Each episode ends with a cliffhanger and “end of episode” text. It’s not a new idea; <a href="https://www.tomsguide.com/reviews/alan-wake-remastered">Alan Wake</a> used this format back in 2010, but the format works supremely well here. Far from ruining the narrative flow, the episode structure made me even more eager to consume each one as fast as possible.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XpmQ1e"></div>                            </div>                            <script src="https://kwizly.com/embed/XpmQ1e.js" async></script><h2 id="the-dark-pictures-you-know-but-a-little-different">The Dark Pictures, you know, but a little different</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fJaDh8BSqfr8yXaaBuMQY3" name="directive-8020-press-image-05" alt="Screenshot from The Dark Pictures: Directive 8020" src="https://cdn.mos.cms.futurecdn.net/fJaDh8BSqfr8yXaaBuMQY3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Supermassive Games)</span></figcaption></figure><p>The crux of “The Dark Pictures” is the same as the interactive horror formula that Supermassive Games has been utilizing since 2015. That means you’ll spend a lot of time picking dialogue choices, making critical decisions under time pressure, and the (in)famous inclusion of QTE sequences (but you can choose how much leeway you have with these). </p><p>However, I really appreciate that this time there’s more <em>game </em>within Directive 8020. It’s by no means a full-on survival-horror experience, a la <a href="https://www.tomsguide.com/reviews/dead-space-remake">Dead Space</a>, but third-person stealth sequences have been added. These see you sulking around the Cassiopeia, trying to avoid a foe. And unlike a traditional horror game, if you’re caught, you don’t get a “game over” screen and a retry. The story continues, with the effects of your failure rippling out.  </p><p>Directive 8020 also introduces other smaller gameplay additions, like the ability to send messages between the crew, which lightly flesh out each character. Plus, the sections where you are in direct control of a character are significantly less clunky than previous Dark Pictures. Your characters no longer move like an unwieldy tank, which is a much-needed improvement. </p><h2 id="reliving-the-nightmare-over-and-over-and-over">Reliving the nightmare over and over (and over)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JA72zUXXjGDFXAkPocjxX3" name="directive-8020-press-image-03" alt="Screenshot from The Dark Pictures: Directive 8020" src="https://cdn.mos.cms.futurecdn.net/JA72zUXXjGDFXAkPocjxX3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Supermassive Games)</span></figcaption></figure><p>The biggest new addition to Directive 8020 is the new Turning Points. This replaces the old Butterfly effect system that originated in Until Dawn, and was rebranded as Bearings in the previous Dark Pictures titles. Like those games, you will often make plot-critical choices, ones that can have unforeseen consequences, and even result in the death of a character. </p><p>However, this time, your choices and their outcomes are all charted in a sprawling spider-web within the pause menu. It’s neat to look at the flowchart of your progressing story, but Directive 8020 goes further and lets you rewind to any previous point in the story without penalty. This enables you to redo a decision instantly if you’re unhappy with the results. </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="KnUkYroQ9AuCKRLob3gMX3" name="directive-8020-press-image-04" alt="Screenshot from The Dark Pictures: Directive 8020" src="https://cdn.mos.cms.futurecdn.net/KnUkYroQ9AuCKRLob3gMX3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Supermassive Games)</span></figcaption></figure><p>Take, for example, a moment in episode two, where I made a rash call that got a character killed. I was pretty disappointed to lose somebody so early in the story. In a previous Dark Pictures game, my only option would have been to restart, but in Directive 8020, I was able to instantly rewind the clock and make the correct decision this time, saving the captain’s life. </p><p>It’s not just about correcting mistakes either. The Turning Points system makes it easier than ever to see different outcomes. You can leap about the narrative timeline as you wish, letting you explore different story paths with ease, and without multiple full playthroughs. In a later episode, after making a decision in a tense standoff that I was happy with, I had a lot of fun exploring what might have happened if I’d chosen a different path.</p><p>However, I can see some players disliking this system, as it does rob decisions of their weight when you can simply rewind and try again with a single button press. Fortunately, Supermassive Games thought of this potential downside and has included a specific mode that locks you out of Turning Points. Pick Survivor mode, and every decision is permanent.</p><h2 id="should-you-play-directive-8020">Should you play Directive 8020?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cG9jtscWp8xrH2q54e7SX3" name="directive-8020-press-image-06" alt="Screenshot from The Dark Pictures: Directive 8020" src="https://cdn.mos.cms.futurecdn.net/cG9jtscWp8xrH2q54e7SX3-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Supermassive Games)</span></figcaption></figure><p>If you have any fondness for the previous Dark Pictures games, then you absolutely need to play Directive 8020. As somebody who’s played them all, it’s the best of the bunch. The sci-fi setting is everything I hoped it would be, the gameplay upgrades are great, some of the decisions you must make are darn difficult, and Turning Points is an awesome inclusion.</p><p>I even recommend Directive 8020 to players who haven’t clicked with The Dark Pictures. If you’re one of the many who have been patiently waiting for Supermassive Games to recapture that special sauce that made Until Dawn a fan-favorite, Directive 8020 is exactly that. It marks The Dark Picture finding its own footing and delivering a memorable interactive horror experience, unburdened by comparisons to what came before.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">The best PS5 games in 2025</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/jackpot-dante-and-vergil-clash-in-explosive-second-season-of-devil-may-cry-that-just-landed-on-netflix-and-its-campy-fun-you-cant-help-but-binge">Netflix's 'Devil May Cry' season 2 is campy fun you'll want to binge</a></li><li><a href="https://www.tomsguide.com/gaming/pc-gaming/until-dawn-remake-is-better-than-the-original-heres-why">Until Dawn remake is better than the original — here's why</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ You can build a library of essential PS5 games for the cost of a single new release — 21 can't-miss deals from $5 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Picking up a brand new PS5 release at launch has never been more expensive. The default $70 price tag for new games is far from an impulse buy, and that’s before you consider the even <em>more</em> expensive deluxe editions, which can push the price of a purchase into the triple digits.</p><p>However, you don’t <em>need</em> to spend a full $70 on a single game, one that you might not even truly enjoy, or that might only last you a single weekend. For that same price, you can instead pick up a solid handful of PS5 games at retailers like Amazon and Best Buy. There are loads of the <a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">best PS5 games</a> available from just $14, thanks to retailer discounts.</p><p>PlayStation Store has also just launched its "Next Level Savings" sale, with PS5 and PS4 game deals starting at just $2. So, whether you want a physical disc or the convenience of a digital download, why not put your $70 towards building a library of excellent games for the price of just one new release? Here are all the best PS5 game deals I've spotted this week.</p><ul><li><a href="https://www.amazon.com/s?k=ps5+games" target="_blank" rel="nofollow"><strong>Shop all PS5 game deals at Amazon</strong></a></li></ul>        <div class="featured_product_block featured_block_hero" data-id="baf01e42-c313-48ac-9274-7254c1cf98cc">            <a href="https://www.bestbuy.com/product/prince-of-persia-the-lost-crown-standard-edition-playstation-5/J3ZY37HY79" data-model-name="Prince of Persia the Lost Crown" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:118.20%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/kpSWmbXxzA7f5YAMwChxTV.jpg" alt="Prince of Persia the Lost Crown"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ubisoft</div>                                        <div class="featured__title">Prince of Persia the Lost Crown</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="0f566cbe-7dba-43e6-9941-aa44afa7949d">            <a href="https://www.amazon.com/Sonic-X-Shadow-Generations-PlayStation-5/dp/B0D6JYR4M7" data-model-name="Sonic X Shadow Generations (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.10%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xfKBdRYGCqDAfcCBeTnbr3.jpg" alt="Sonic X Shadow Generations PS5 box art"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SEGA</div>                                        <div class="featured__title">Sonic X Shadow Generations (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bb7c2a62-4b72-474e-91e8-1656b4a4a01a">            <a href="https://www.amazon.com/Resident-Evil-4-PS5-PlayStation-5/dp/B0BJTKYLCB/" data-model-name="Resident Evil 4 (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:117.65%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Jh7z27FhTczR9oPsvYKsai.jpg" alt="Resident Evil 4 PS5 box"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil 4 (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bdc54cac-4f87-4739-9961-243b6db451bc">            <a href="https://www.bestbuy.com/product/star-wars-jedi-survivor-standard-edition-playstation-5/J7CYF9YHH8" data-model-name="Star Wars Jedi: Survivor (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:126.42%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/79oxLfZdSNJb8CFcg8u265.jpg" alt="Star Wars Jedi Survivor"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Electronic Arts</div>                                        <div class="featured__title">Star Wars Jedi: Survivor (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="54a065b1-111a-4f35-98e6-d122d4fa3258">            <a href="https://www.amazon.com/Mortal-Kombat-1-PlayStation5-PlayStation-5/dp/B0C5S14X7Q" data-model-name="Mortal Kombat 1 (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.64%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/R9m2XopufuLC39q4ucdyQF.jpg" alt="Mortal Kombat 1 PS5 box"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>WARNER BROS</div>                                        <div class="featured__title">Mortal Kombat 1 (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1292b9ae-aeda-4395-8894-edee4c0e6350">            <a href="https://www.amazon.com/Street-Fighter-6-PS5-PlayStation-5/dp/B0BPJRGNSD/" data-model-name="Street Fighter 6 (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.52%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/FtYX8XuLbzbu84SzZHbw5J.jpg" alt="Street Fighter 6"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Street Fighter 6 (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="52008e71-a23c-4a89-8685-5937361c485d">            <a href="https://www.amazon.com/Hogwarts-Legacy-PlayStation-5/dp/B09VXBDJ9N/" data-model-name="Hogwarts Legacy (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:120.51%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7F6FhBN4xLE767FQDXa47k.png" alt="Hogwarts Legacy"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>WARNER BROS</div>                                        <div class="featured__title">Hogwarts Legacy (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d7314586-1795-499c-81e5-155cf0579482">            <a href="https://www.amazon.com/UNCHARTED-Legacy-Thieves-Collection-PlayStation-5/dp/B09NB7XNVB/" data-model-name="Uncharted: Legacy of Thieves Collection (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:127.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/WtsgWrqwsY8P7yRyRRtsYD.jpg" alt="Uncharted Legacy of Thieves"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Uncharted: Legacy of Thieves Collection (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e754a205-8dbf-4d37-90cb-8a972bc19847">            <a href="https://www.amazon.com/Monster-Hunter-Wilds-Standard-PlayStation-5/dp/B0DHX2V7TX/" data-model-name="Monster Hunter Wilds (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.52%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/oE7Hy89aW8iyLTrYyXaMTF.jpg" alt="Monster Hunter Wilds"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Monster Hunter Wilds (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5fc5397e-5582-49e0-b5d1-f0c2056931d8">            <a href="https://www.amazon.com/Lies-P-PlayStation-5/dp/B0BXB9N5CR/" data-model-name="Lies of P (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:118.76%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cHpgdrBxVqKT7SFFmLDG9h.jpg" alt="Lies of P"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>NEOWIZ</div>                                        <div class="featured__title">Lies of P (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6b0079dc-9fba-4cc3-9cc4-bb4a4395da49">            <a href="https://www.amazon.com/Avatar-Frontiers-Pandora-Ashes-PlayStation-5/dp/B0FS963QY8/" data-model-name="Avatar: Frontiers of Pandora - From the Ashes Edition (PS5)" 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/VCzKLsJLEA8H94933uKR4.jpg" alt="Ubisoft, Avatar: Frontiers of Pandora From the Ashes Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ubisoft</div>                                        <div class="featured__title">Avatar: Frontiers of Pandora - From the Ashes Edition (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="3e51bc3f-06a1-461f-810b-33f211b19570">            <a href="https://www.amazon.com/Silent-Hill-2-PS5-PlayStation-5/dp/B0CMC3C3Z9/" data-model-name="Silent Hill 2 (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:131.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7qqzgFNziQmswnQyqqRBEm.jpg" alt="Silent Hill 2 box art"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Konami</div>                                        <div class="featured__title">Silent Hill 2 (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="there-are-loads-of-digital-discounts-as-well">There are loads of digital discounts as well</h2><p>After a very rare week where there was no sale running on the PlayStation Store, the deals dry period has ended, with the "Next Level Savings" sale now live, and set to run through May 27. I've found some highlights below:</p><ul><li><strong>PS5/PS4 games: </strong><a href="https://store.playstation.com/en-us/category/54f9aae2-6159-4453-9cce-0b1cf16c086f/1" target="_blank" rel="nofollow"><strong>deals from $2 @ PlayStation Store</strong></a><strong></strong></li><li><strong>Kingdom Come Deliverance: </strong><a href="https://store.playstation.com/en-us/product/EP4062-PPSA28731_00-0405812491993057" target="_blank" rel="nofollow"><strong>was $29 now $5</strong></a><strong></strong></li><li><strong>Metro Exodus (Gold Edition): </strong><a href="https://store.playstation.com/en-us/product/UP2047-PPSA02395_00-821MEEGOLDEDGEN9" target="_blank" rel="nofollow"><strong>was $39 now $5</strong></a><strong></strong></li><li><strong>Sea of Thieves: </strong><a href="https://store.playstation.com/en-us/product/UP6312-PPSA17669_00-MINERVA000000000" target="_blank" rel="nofollow"><strong>was $39 now $13</strong></a><strong></strong></li><li><strong>Planet Coaster: </strong><a href="https://store.playstation.com/en-us/product/EP2377-PPSA19633_00-PLANETCOASTER200" target="_blank" rel="nofollow"><strong>was $49 now $19</strong></a><strong></strong></li><li><strong>Grand Theft Auto V: </strong><a href="https://store.playstation.com/en-us/category/54f9aae2-6159-4453-9cce-0b1cf16c086f/1" target="_blank" rel="nofollow"><strong>was $59 now $19</strong></a><strong></strong></li><li><strong>Star Wars Outlaws: </strong><a href="https://store.playstation.com/en-us/product/UP0001-PPSA08261_00-GAME000000000000" target="_blank" rel="nofollow"><strong>was $69 now $20</strong></a><strong></strong></li><li><strong>Horizon Forbidden West: </strong><a href="https://store.playstation.com/en-us/product/UP9000-PPSA04072_00-FORBIDDENWESTPS5" target="_blank" rel="nofollow"><strong>was $49 now $29</strong></a><strong></strong></li><li><strong>Demon's Souls: </strong><a href="https://store.playstation.com/en-us/product/UP9000-PPSA01342_00-DEMONSSOULS00000" target="_blank" rel="nofollow"><strong>was $69 now $29</strong></a><strong></strong></li><li><strong>Forza Horizon 5: </strong><a href="https://store.playstation.com/en-us/product/UP6312-PPSA22327_00-0629872585919347" target="_blank" rel="nofollow"><strong>was $59 now $35</strong></a></li></ul><p>These are just a <em>tiny </em>selection of the more than 4,700 discounts available in this digital sale. Alongside games, there are major savings on PS4 titles, DLC expansions, and in-game currency. There are <em>a lot </em>of deals to shop!</p><p>Between discounts at retailers like Amazon and Best Buy, and the PlayStation Store sale, there are plenty of worthwhile deals. So, as much as some of the upcoming PS5 releases like LEGO Batman: Legacy of the Dark Knight and <a href="https://www.tomsguide.com/gaming/007-first-light-hands-on-review">007: First Light</a> look great, if you want to stretch your $69 as far as possible, you're spoilt for choice when it comes to cheaper PS5 games.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/sales-events/you-can-build-a-library-of-essential-ps5-games-for-the-cost-of-a-single-new-release-21-cant-miss-deals-from-usd5</link>
                                                                            <description>
                            <![CDATA[ If you don't want to spend your money buying a single brand-new game, here are some top PS5 deals to build your library for less. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">t3NkwtZavBrpbrqo5dmjiE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/WBBp7xgtv6wSk4QSLLbpLU-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 14 May 2026 04:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Sales Events]]></category>
                                                    <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/WBBp7xgtv6wSk4QSLLbpLU-1920-80.jpg">
                                                            <media:credit><![CDATA[Amazon edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PS5 with three PS5 games surrounding the console]]></media:description>                                                            <media:text><![CDATA[PS5 with three PS5 games surrounding the console]]></media:text>
                                <media:title type="plain"><![CDATA[PS5 with three PS5 games surrounding the console]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/WBBp7xgtv6wSk4QSLLbpLU-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Picking up a brand new PS5 release at launch has never been more expensive. The default $70 price tag for new games is far from an impulse buy, and that’s before you consider the even <em>more</em> expensive deluxe editions, which can push the price of a purchase into the triple digits.</p><p>However, you don’t <em>need</em> to spend a full $70 on a single game, one that you might not even truly enjoy, or that might only last you a single weekend. For that same price, you can instead pick up a solid handful of PS5 games at retailers like Amazon and Best Buy. There are loads of the <a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">best PS5 games</a> available from just $14, thanks to retailer discounts.</p><p>PlayStation Store has also just launched its "Next Level Savings" sale, with PS5 and PS4 game deals starting at just $2. So, whether you want a physical disc or the convenience of a digital download, why not put your $70 towards building a library of excellent games for the price of just one new release? Here are all the best PS5 game deals I've spotted this week.</p><ul><li><a href="https://www.amazon.com/s?k=ps5+games" target="_blank" rel="nofollow"><strong>Shop all PS5 game deals at Amazon</strong></a></li></ul>        <div class="featured_product_block featured_block_hero" data-id="baf01e42-c313-48ac-9274-7254c1cf98cc">            <a href="https://www.bestbuy.com/product/prince-of-persia-the-lost-crown-standard-edition-playstation-5/J3ZY37HY79" data-model-name="Prince of Persia the Lost Crown" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:118.20%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/kpSWmbXxzA7f5YAMwChxTV.jpg" alt="Prince of Persia the Lost Crown"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ubisoft</div>                                        <div class="featured__title">Prince of Persia the Lost Crown</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="0f566cbe-7dba-43e6-9941-aa44afa7949d">            <a href="https://www.amazon.com/Sonic-X-Shadow-Generations-PlayStation-5/dp/B0D6JYR4M7" data-model-name="Sonic X Shadow Generations (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.10%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xfKBdRYGCqDAfcCBeTnbr3.jpg" alt="Sonic X Shadow Generations PS5 box art"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SEGA</div>                                        <div class="featured__title">Sonic X Shadow Generations (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bb7c2a62-4b72-474e-91e8-1656b4a4a01a">            <a href="https://www.amazon.com/Resident-Evil-4-PS5-PlayStation-5/dp/B0BJTKYLCB/" data-model-name="Resident Evil 4 (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:117.65%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Jh7z27FhTczR9oPsvYKsai.jpg" alt="Resident Evil 4 PS5 box"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil 4 (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bdc54cac-4f87-4739-9961-243b6db451bc">            <a href="https://www.bestbuy.com/product/star-wars-jedi-survivor-standard-edition-playstation-5/J7CYF9YHH8" data-model-name="Star Wars Jedi: Survivor (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:126.42%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/79oxLfZdSNJb8CFcg8u265.jpg" alt="Star Wars Jedi Survivor"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Electronic Arts</div>                                        <div class="featured__title">Star Wars Jedi: Survivor (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="54a065b1-111a-4f35-98e6-d122d4fa3258">            <a href="https://www.amazon.com/Mortal-Kombat-1-PlayStation5-PlayStation-5/dp/B0C5S14X7Q" data-model-name="Mortal Kombat 1 (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:115.64%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/R9m2XopufuLC39q4ucdyQF.jpg" alt="Mortal Kombat 1 PS5 box"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>WARNER BROS</div>                                        <div class="featured__title">Mortal Kombat 1 (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1292b9ae-aeda-4395-8894-edee4c0e6350">            <a href="https://www.amazon.com/Street-Fighter-6-PS5-PlayStation-5/dp/B0BPJRGNSD/" data-model-name="Street Fighter 6 (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:125.52%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/FtYX8XuLbzbu84SzZHbw5J.jpg" alt="Street Fighter 6"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Street Fighter 6 (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="52008e71-a23c-4a89-8685-5937361c485d">            <a href="https://www.amazon.com/Hogwarts-Legacy-PlayStation-5/dp/B09VXBDJ9N/" data-model-name="Hogwarts Legacy (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:120.51%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7F6FhBN4xLE767FQDXa47k.png" alt="Hogwarts Legacy"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>WARNER BROS</div>                                        <div class="featured__title">Hogwarts Legacy (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d7314586-1795-499c-81e5-155cf0579482">            <a href="https://www.amazon.com/UNCHARTED-Legacy-Thieves-Collection-PlayStation-5/dp/B09NB7XNVB/" data-model-name="Uncharted: Legacy of Thieves Collection (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:127.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/WtsgWrqwsY8P7yRyRRtsYD.jpg" alt="Uncharted Legacy of Thieves"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Uncharted: Legacy of Thieves Collection (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e754a205-8dbf-4d37-90cb-8a972bc19847">            <a href="https://www.amazon.com/Monster-Hunter-Wilds-Standard-PlayStation-5/dp/B0DHX2V7TX/" data-model-name="Monster Hunter Wilds (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:124.52%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/oE7Hy89aW8iyLTrYyXaMTF.jpg" alt="Monster Hunter Wilds"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Monster Hunter Wilds (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5fc5397e-5582-49e0-b5d1-f0c2056931d8">            <a href="https://www.amazon.com/Lies-P-PlayStation-5/dp/B0BXB9N5CR/" data-model-name="Lies of P (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:118.76%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cHpgdrBxVqKT7SFFmLDG9h.jpg" alt="Lies of P"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>NEOWIZ</div>                                        <div class="featured__title">Lies of P (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6b0079dc-9fba-4cc3-9cc4-bb4a4395da49">            <a href="https://www.amazon.com/Avatar-Frontiers-Pandora-Ashes-PlayStation-5/dp/B0FS963QY8/" data-model-name="Avatar: Frontiers of Pandora - From the Ashes Edition (PS5)" 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/VCzKLsJLEA8H94933uKR4.jpg" alt="Ubisoft, Avatar: Frontiers of Pandora From the Ashes Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ubisoft</div>                                        <div class="featured__title">Avatar: Frontiers of Pandora - From the Ashes Edition (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="3e51bc3f-06a1-461f-810b-33f211b19570">            <a href="https://www.amazon.com/Silent-Hill-2-PS5-PlayStation-5/dp/B0CMC3C3Z9/" data-model-name="Silent Hill 2 (PS5)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:131.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7qqzgFNziQmswnQyqqRBEm.jpg" alt="Silent Hill 2 box art"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Konami</div>                                        <div class="featured__title">Silent Hill 2 (PS5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="there-are-loads-of-digital-discounts-as-well">There are loads of digital discounts as well</h2><p>After a very rare week where there was no sale running on the PlayStation Store, the deals dry period has ended, with the "Next Level Savings" sale now live, and set to run through May 27. I've found some highlights below:</p><ul><li><strong>PS5/PS4 games: </strong><a href="https://store.playstation.com/en-us/category/54f9aae2-6159-4453-9cce-0b1cf16c086f/1" target="_blank" rel="nofollow"><strong>deals from $2 @ PlayStation Store</strong></a><strong></strong></li><li><strong>Kingdom Come Deliverance: </strong><a href="https://store.playstation.com/en-us/product/EP4062-PPSA28731_00-0405812491993057" target="_blank" rel="nofollow"><strong>was $29 now $5</strong></a><strong></strong></li><li><strong>Metro Exodus (Gold Edition): </strong><a href="https://store.playstation.com/en-us/product/UP2047-PPSA02395_00-821MEEGOLDEDGEN9" target="_blank" rel="nofollow"><strong>was $39 now $5</strong></a><strong></strong></li><li><strong>Sea of Thieves: </strong><a href="https://store.playstation.com/en-us/product/UP6312-PPSA17669_00-MINERVA000000000" target="_blank" rel="nofollow"><strong>was $39 now $13</strong></a><strong></strong></li><li><strong>Planet Coaster: </strong><a href="https://store.playstation.com/en-us/product/EP2377-PPSA19633_00-PLANETCOASTER200" target="_blank" rel="nofollow"><strong>was $49 now $19</strong></a><strong></strong></li><li><strong>Grand Theft Auto V: </strong><a href="https://store.playstation.com/en-us/category/54f9aae2-6159-4453-9cce-0b1cf16c086f/1" target="_blank" rel="nofollow"><strong>was $59 now $19</strong></a><strong></strong></li><li><strong>Star Wars Outlaws: </strong><a href="https://store.playstation.com/en-us/product/UP0001-PPSA08261_00-GAME000000000000" target="_blank" rel="nofollow"><strong>was $69 now $20</strong></a><strong></strong></li><li><strong>Horizon Forbidden West: </strong><a href="https://store.playstation.com/en-us/product/UP9000-PPSA04072_00-FORBIDDENWESTPS5" target="_blank" rel="nofollow"><strong>was $49 now $29</strong></a><strong></strong></li><li><strong>Demon's Souls: </strong><a href="https://store.playstation.com/en-us/product/UP9000-PPSA01342_00-DEMONSSOULS00000" target="_blank" rel="nofollow"><strong>was $69 now $29</strong></a><strong></strong></li><li><strong>Forza Horizon 5: </strong><a href="https://store.playstation.com/en-us/product/UP6312-PPSA22327_00-0629872585919347" target="_blank" rel="nofollow"><strong>was $59 now $35</strong></a></li></ul><p>These are just a <em>tiny </em>selection of the more than 4,700 discounts available in this digital sale. Alongside games, there are major savings on PS4 titles, DLC expansions, and in-game currency. There are <em>a lot </em>of deals to shop!</p><p>Between discounts at retailers like Amazon and Best Buy, and the PlayStation Store sale, there are plenty of worthwhile deals. So, as much as some of the upcoming PS5 releases like LEGO Batman: Legacy of the Dark Knight and <a href="https://www.tomsguide.com/gaming/007-first-light-hands-on-review">007: First Light</a> look great, if you want to stretch your $69 as far as possible, you're spoilt for choice when it comes to cheaper PS5 games.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 'We see AI as a powerful tool to help us in this mission' — PlayStation CEO lays out plan to use AI for future game development ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Gamers have made it abundantly clear that they have no love for AI being used to generate art in their favorite and upcoming titles. They’re also not huge fans of learning that studios are implementing AI into their development process as a whole.</p><p>On the other end of the argument, several major game publishers/developers fully support the use of AI to assist their teams in their creative efforts. Major AAA gaming companies, such as Ubisoft, Electronic Arts, Square Enix and more, have already applied AI to numerous facets of their game creation endeavors (creating non-playable character dialogue, character movement animations, and physically based rendering materials are among those AI applications).</p><p>In the case of <a href="https://www.tomsguide.com/gaming/playstation/ive-been-a-playstation-fan-for-over-20-years-heres-why-im-skipping-the-ps5-pro">PlayStation</a>, recent comments from its CEO point to the major console manufacturer and first-party game publisher/developer going all-in on AI to improve its game-making ventures.</p><h2 id="playstation-s-future-game-development-will-incorporate-the-use-of-ai">PlayStation’s future game development will incorporate the use of AI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2048px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NPBExEtUSpawN8ZNGGdWUi" name="ps_studios.jpg" alt="playstation studios" src="https://cdn.mos.cms.futurecdn.net/NPBExEtUSpawN8ZNGGdWUi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2048" height="1152" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>During Sony’s latest corporate strategy and earnings presentation (as detailed by <a href="https://variety.com/2026/biz/news/sony-playstation-ai-strategy-tariffs-memory-1236741351/" target="_blank">Variety</a>), Sony Interactive Entertainment president and CEO Hideaki Nishino said AI will play a major role in PlayStation’s future. He described AI as “a powerful tool” to help create more immersive gaming experiences for players while also improving efficiency for developers and publishers.</p><p>Nishino explained that PlayStation Studios is already using AI to automate repetitive tasks, improve software engineering productivity and speed up areas like quality assurance, 3D modeling and animation. One example is an internal tool called “Mockingbird,” which rapidly animates 3D facial models using performance-capture data. According to Nishino, tasks that once took hours can now be completed in seconds.</p><p>Studios including Naughty Dog, San Diego Studio and the team behind <em>Horizon Zero Dawn Remastered</em> are already incorporating AI into their workflows.</p><p>Nishino also addressed concerns about generative AI replacing creatives, emphasizing that the vision, design and emotional impact of PlayStation games will continue to come from human developers and performers. He said AI is intended to “augment their capabilities, not replace them.”</p><h2 id="the-takeaway">The takeaway</h2><p>PlayStation’s newly released full-year financial results paint the picture of a gaming company that’s doing well, for the most part. As detailed by <a href="https://www.gamesindustry.biz/playstation-records-765m-impairment-loss-from-bungie-as-operating-income-falls-416-in-q4" target="_blank">GamesIndustry.biz</a>, the company has raked in $79.7 billion in net sales for the full year (that includes the 12 months that led up to March 31, 2026).</p><p>What’s less impressive is the company recording a $765 million impairment due to their acquisition of the Bungie studio (makers of <em>Destiny 2</em> and <em>Marathon</em>) not meeting Sony’s expectations.</p><p>Nishino’s comments about AI being used to assist its development studios in streamlining their work are fine. Hopefully, this will lead to those same studios getting more time to create PlayStation’s next blockbuster sequels, prequels and brand new IPs. I hope the likes of Naughty Dog, Insomniac Games and Bungie continue creating great games that don’t have an ounce of generative AI art.</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/people-spend-too-much-time-talking-about-the-woe-is-me-risk-related-to-ai-gta-6-publisher-ceo-says-ai-fears-are-overstated" target="_blank">'People spend too much time talking about the 'Woe is me' risk related to AI' — GTA 6 publisher CEO says AI fears are overstated</a></li><li><a href="https://www.tomsguide.com/ai/xbox-ceo-just-scrapped-copilot-ai-for-consoles-and-i-couldnt-be-happier" target="_blank">Xbox CEO just scrapped Copilot AI for consoles — and I couldn't be happier</a></li><li><a href="https://www.tomsguide.com/ai/roblox-adds-agentic-ai-to-roblox-studio-now-creators-can-use-it-to-make-games-with-a-single-prompt" target="_blank">Roblox adds Agentic AI to Roblox Studio — now creators can use it to make games with a single prompt</a></li></ul><div data-widget-type="comparison" data-model-name="Sony PlayStation 5"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/we-see-ai-as-a-powerful-tool-to-help-us-in-this-mission-playstation-ceo-lays-out-plan-to-use-ai-for-future-game-development</link>
                                                                            <description>
                            <![CDATA[ SIE president and CEO Hideaki Nishino expressed his excitement about AI being implemented into the company’s continued game development. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">bwpu2CbAJ86WQQmMFZNqgR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/jRqk33iCKMsbHArqdEkkC6-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 08 May 2026 15:41:41 +0000</pubDate>                                                                                                                                <updated>Fri, 08 May 2026 15:58:58 +0000</updated>
                                                                                                                                            <category><![CDATA[AI]]></category>
                                                                                                                    <dc:creator><![CDATA[ Elton Jones ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/qoRE8e6t2nzaNKAhJGDv7g-320-70.png ]]></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/jRqk33iCKMsbHArqdEkkC6-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Playstation 5]]></media:description>                                                            <media:text><![CDATA[Playstation 5]]></media:text>
                                <media:title type="plain"><![CDATA[Playstation 5]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/jRqk33iCKMsbHArqdEkkC6-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Gamers have made it abundantly clear that they have no love for AI being used to generate art in their favorite and upcoming titles. They’re also not huge fans of learning that studios are implementing AI into their development process as a whole.</p><p>On the other end of the argument, several major game publishers/developers fully support the use of AI to assist their teams in their creative efforts. Major AAA gaming companies, such as Ubisoft, Electronic Arts, Square Enix and more, have already applied AI to numerous facets of their game creation endeavors (creating non-playable character dialogue, character movement animations, and physically based rendering materials are among those AI applications).</p><p>In the case of <a href="https://www.tomsguide.com/gaming/playstation/ive-been-a-playstation-fan-for-over-20-years-heres-why-im-skipping-the-ps5-pro">PlayStation</a>, recent comments from its CEO point to the major console manufacturer and first-party game publisher/developer going all-in on AI to improve its game-making ventures.</p><h2 id="playstation-s-future-game-development-will-incorporate-the-use-of-ai">PlayStation’s future game development will incorporate the use of AI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2048px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NPBExEtUSpawN8ZNGGdWUi" name="ps_studios.jpg" alt="playstation studios" src="https://cdn.mos.cms.futurecdn.net/NPBExEtUSpawN8ZNGGdWUi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2048" height="1152" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>During Sony’s latest corporate strategy and earnings presentation (as detailed by <a href="https://variety.com/2026/biz/news/sony-playstation-ai-strategy-tariffs-memory-1236741351/" target="_blank">Variety</a>), Sony Interactive Entertainment president and CEO Hideaki Nishino said AI will play a major role in PlayStation’s future. He described AI as “a powerful tool” to help create more immersive gaming experiences for players while also improving efficiency for developers and publishers.</p><p>Nishino explained that PlayStation Studios is already using AI to automate repetitive tasks, improve software engineering productivity and speed up areas like quality assurance, 3D modeling and animation. One example is an internal tool called “Mockingbird,” which rapidly animates 3D facial models using performance-capture data. According to Nishino, tasks that once took hours can now be completed in seconds.</p><p>Studios including Naughty Dog, San Diego Studio and the team behind <em>Horizon Zero Dawn Remastered</em> are already incorporating AI into their workflows.</p><p>Nishino also addressed concerns about generative AI replacing creatives, emphasizing that the vision, design and emotional impact of PlayStation games will continue to come from human developers and performers. He said AI is intended to “augment their capabilities, not replace them.”</p><h2 id="the-takeaway">The takeaway</h2><p>PlayStation’s newly released full-year financial results paint the picture of a gaming company that’s doing well, for the most part. As detailed by <a href="https://www.gamesindustry.biz/playstation-records-765m-impairment-loss-from-bungie-as-operating-income-falls-416-in-q4" target="_blank">GamesIndustry.biz</a>, the company has raked in $79.7 billion in net sales for the full year (that includes the 12 months that led up to March 31, 2026).</p><p>What’s less impressive is the company recording a $765 million impairment due to their acquisition of the Bungie studio (makers of <em>Destiny 2</em> and <em>Marathon</em>) not meeting Sony’s expectations.</p><p>Nishino’s comments about AI being used to assist its development studios in streamlining their work are fine. Hopefully, this will lead to those same studios getting more time to create PlayStation’s next blockbuster sequels, prequels and brand new IPs. I hope the likes of Naughty Dog, Insomniac Games and Bungie continue creating great games that don’t have an ounce of generative AI art.</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/people-spend-too-much-time-talking-about-the-woe-is-me-risk-related-to-ai-gta-6-publisher-ceo-says-ai-fears-are-overstated" target="_blank">'People spend too much time talking about the 'Woe is me' risk related to AI' — GTA 6 publisher CEO says AI fears are overstated</a></li><li><a href="https://www.tomsguide.com/ai/xbox-ceo-just-scrapped-copilot-ai-for-consoles-and-i-couldnt-be-happier" target="_blank">Xbox CEO just scrapped Copilot AI for consoles — and I couldn't be happier</a></li><li><a href="https://www.tomsguide.com/ai/roblox-adds-agentic-ai-to-roblox-studio-now-creators-can-use-it-to-make-games-with-a-single-prompt" target="_blank">Roblox adds Agentic AI to Roblox Studio — now creators can use it to make games with a single prompt</a></li></ul><div data-widget-type="comparison" data-model-name="Sony PlayStation 5"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Still playing a PS4? This simple upgrade changes everything ]]></title>
                                                                                                <dc:content><![CDATA[ <p>A PS5 is a serious investment. Meanwhile, your PS4 is starting to show its age.</p><p>Here's the thing: your PS4's real bottleneck is a spinning hard drive — the same technology you'd find in a budget laptop from a decade ago. Swap it for an SSD and load times drop dramatically. The drive costs less than a single new game and a screwdriver is the only tool you need.</p><p>The catch is you can't just yank one drive and slot in another. You'll need to back up your saves, reinstall the OS fresh on the new drive, then pull everything back. Two USB drives, about an hour, mild inconvenience. Here's exactly how.</p><section class="howto-block">                    <h3>1. Back up your game saves and data</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/6DkbqJRAkCLqHXGdsFQEHg.jpg"                                        alt="ps4"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/6DkbqJRAkCLqHXGdsFQEHg.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Shutterstock)</div></figure>                    <p><p>The new SSD will be blank, so you need to save everything from your current hard drive first. You'll need a USB drive with enough space for your game saves and any apps you want to avoid re-downloading.</p><p><strong>Insert the USB drive into your PS4 and head to Settings, System, Back Up and Restore, then select "Back Up PS4."</strong> Choose what to back up — at minimum, select your saved data. You can include applications too, though games themselves are too large and will need reinstalling regardless.</p><p>If you have PlayStation Plus, you can skip the USB drive and back up to cloud storage instead. For trophies, sync them through the Trophies section before you do anything else.</p><p>Once the backup is done, <strong>shut the PS4 down completely and unplug it</strong> before opening the console.</p></p>                </section><section class="howto-block">                    <h3>2. Replace the hard drive with an SSD</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/VK3o26dZDd92LTgsDMVRcU.jpg"                                        alt="2.5 SSD"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/VK3o26dZDd92LTgsDMVRcU.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Shutterstock)</div></figure>                    <p><p><strong>You need a 2.5-inch SATA SSD</strong> — not the slimmer type used in modern PCs and the PS5. Any 2.5-inch model will do, you don't need anything high-end.</p><p>The process varies slightly depending on which PS4 you have, but the principle is the same across all models: <strong>remove a panel, unscrew the drive cage, swap the drive, and reassemble</strong>. </p><p>Once that's done, don't turn it on yet, you need to get the operating system ready first.</p></p>                </section><section class="howto-block">                    <h3>3. Reinstall the PS4 operating system</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/oAVe3cFCt2JWQw2GVpH6ab.jpg"                                        alt=""                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/oAVe3cFCt2JWQw2GVpH6ab.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Joeri Mostmans/Shutterstock)</div></figure>                    <p><p>Your new SSD is blank, so you'll need to install the PS4 operating system from scratch using a second USB drive and a computer.</p><p><strong>Format the USB drive, create a specific folder structure on it, then download the </strong><a href="https://www.playstation.com/en-us/support/hardware/ps4/system-software/#reinstall" target="_blank"><strong>full reinstallation file from Sony's support page</strong></a><strong> and drop it in</strong>. The file name needs to stay exactly as downloaded.</p><p>From there, <strong>boot your PS4 into Safe Mode by holding the power button</strong> until you hear a second beep, <strong>select "Initialize PS4 </strong>(Reinstall System Software)", i<strong>nsert the USB drive,</strong> and let it do its thing. When it's done, the PS4 reboots like it's brand new.</p></p>                </section><section class="howto-block">                    <h3>4. Restore your data and reinstall games</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/4qwE9oxc69wopgE4jcWE8a.jpg"                                        alt="PS4"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/4qwE9oxc69wopgE4jcWE8a.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Getty)</div></figure>                    <p><p><strong>Log in and set up as normal, then restore the backup you made earlier </strong>— either from your USB drive or cloud storage, depending on which route you took.</p><p>Your saves and settings will come back, but <strong>you'll need to reinstall your games</strong>. Once everything is back in place, the difference in loading times should be immediately obvious.</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xp48GX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xp48GX.js" async></script><figure class="van-image-figure pull-right inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:676px;"><p class="vanilla-image-block" style="padding-top:31.51%;"><img id="ZCwuUFRE3YeboHR4zyEWmb" name="r3t8zZ5ve4GewFTeoCM3R6" alt="Google" src="https://cdn.mos.cms.futurecdn.net/ZCwuUFRE3YeboHR4zyEWmb-1920-80.jpg" mos="" align="right" fullscreen="" width="676" height="213" attribution="" endorsement="" class="pull-rightinline"></p></div></div><figcaption itemprop="caption description" class="pull-right inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></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="http://tomsguide.com/gaming/playstation/just-got-a-ps5-heres-7-settings-to-change-first">Just got a PS5? Here's 7 settings to change first</a></li><li><a href="https://www.tomsguide.com/tvs/heres-how-to-stop-your-tv-from-turning-on-your-xbox-or-ps5">Here's how to stop your TV from turning on your Xbox or PS5</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/how-to-turn-on-enhance-image-quality-for-ps4-games-on-ps5-pro">Your PS5 Pro can boost image quality on PS4 games — here's how </a></li></ul><div data-model-name="Sony PlayStation 5 Slim,Microsoft Xbox Series X,Xbox Series S,Nintendo Switch OLED" data-widget-type="comparison"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/your-ps4-is-secretly-holding-itself-back-heres-the-fix</link>
                                                                            <description>
                            <![CDATA[ Learn how a simple hardware swap can make your ageing PS4 feel like a different machine. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">37Nrz6Rt6t5eYGoPyghdA7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6XpZp6H95BBHfAWQcopDCG-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 04 May 2026 06:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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/sUwQW8yCGXFHeksAFjqSxZ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/6XpZp6H95BBHfAWQcopDCG-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PS4]]></media:description>                                                            <media:text><![CDATA[PS4]]></media:text>
                                <media:title type="plain"><![CDATA[PS4]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6XpZp6H95BBHfAWQcopDCG-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A PS5 is a serious investment. Meanwhile, your PS4 is starting to show its age.</p><p>Here's the thing: your PS4's real bottleneck is a spinning hard drive — the same technology you'd find in a budget laptop from a decade ago. Swap it for an SSD and load times drop dramatically. The drive costs less than a single new game and a screwdriver is the only tool you need.</p><p>The catch is you can't just yank one drive and slot in another. You'll need to back up your saves, reinstall the OS fresh on the new drive, then pull everything back. Two USB drives, about an hour, mild inconvenience. Here's exactly how.</p><section class="howto-block">                    <h3>1. Back up your game saves and data</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/6DkbqJRAkCLqHXGdsFQEHg.jpg"                                        alt="ps4"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/6DkbqJRAkCLqHXGdsFQEHg.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Shutterstock)</div></figure>                    <p><p>The new SSD will be blank, so you need to save everything from your current hard drive first. You'll need a USB drive with enough space for your game saves and any apps you want to avoid re-downloading.</p><p><strong>Insert the USB drive into your PS4 and head to Settings, System, Back Up and Restore, then select "Back Up PS4."</strong> Choose what to back up — at minimum, select your saved data. You can include applications too, though games themselves are too large and will need reinstalling regardless.</p><p>If you have PlayStation Plus, you can skip the USB drive and back up to cloud storage instead. For trophies, sync them through the Trophies section before you do anything else.</p><p>Once the backup is done, <strong>shut the PS4 down completely and unplug it</strong> before opening the console.</p></p>                </section><section class="howto-block">                    <h3>2. Replace the hard drive with an SSD</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/VK3o26dZDd92LTgsDMVRcU.jpg"                                        alt="2.5 SSD"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/VK3o26dZDd92LTgsDMVRcU.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Shutterstock)</div></figure>                    <p><p><strong>You need a 2.5-inch SATA SSD</strong> — not the slimmer type used in modern PCs and the PS5. Any 2.5-inch model will do, you don't need anything high-end.</p><p>The process varies slightly depending on which PS4 you have, but the principle is the same across all models: <strong>remove a panel, unscrew the drive cage, swap the drive, and reassemble</strong>. </p><p>Once that's done, don't turn it on yet, you need to get the operating system ready first.</p></p>                </section><section class="howto-block">                    <h3>3. Reinstall the PS4 operating system</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/oAVe3cFCt2JWQw2GVpH6ab.jpg"                                        alt=""                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/oAVe3cFCt2JWQw2GVpH6ab.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Joeri Mostmans/Shutterstock)</div></figure>                    <p><p>Your new SSD is blank, so you'll need to install the PS4 operating system from scratch using a second USB drive and a computer.</p><p><strong>Format the USB drive, create a specific folder structure on it, then download the </strong><a href="https://www.playstation.com/en-us/support/hardware/ps4/system-software/#reinstall" target="_blank"><strong>full reinstallation file from Sony's support page</strong></a><strong> and drop it in</strong>. The file name needs to stay exactly as downloaded.</p><p>From there, <strong>boot your PS4 into Safe Mode by holding the power button</strong> until you hear a second beep, <strong>select "Initialize PS4 </strong>(Reinstall System Software)", i<strong>nsert the USB drive,</strong> and let it do its thing. When it's done, the PS4 reboots like it's brand new.</p></p>                </section><section class="howto-block">                    <h3>4. Restore your data and reinstall games</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/4qwE9oxc69wopgE4jcWE8a.jpg"                                        alt="PS4"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/4qwE9oxc69wopgE4jcWE8a.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Getty)</div></figure>                    <p><p><strong>Log in and set up as normal, then restore the backup you made earlier </strong>— either from your USB drive or cloud storage, depending on which route you took.</p><p>Your saves and settings will come back, but <strong>you'll need to reinstall your games</strong>. Once everything is back in place, the difference in loading times should be immediately obvious.</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xp48GX"></div>                            </div>                            <script src="https://kwizly.com/embed/Xp48GX.js" async></script><figure class="van-image-figure pull-right inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:676px;"><p class="vanilla-image-block" style="padding-top:31.51%;"><img id="ZCwuUFRE3YeboHR4zyEWmb" name="r3t8zZ5ve4GewFTeoCM3R6" alt="Google" src="https://cdn.mos.cms.futurecdn.net/ZCwuUFRE3YeboHR4zyEWmb-1920-80.jpg" mos="" align="right" fullscreen="" width="676" height="213" attribution="" endorsement="" class="pull-rightinline"></p></div></div><figcaption itemprop="caption description" class="pull-right inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></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="http://tomsguide.com/gaming/playstation/just-got-a-ps5-heres-7-settings-to-change-first">Just got a PS5? Here's 7 settings to change first</a></li><li><a href="https://www.tomsguide.com/tvs/heres-how-to-stop-your-tv-from-turning-on-your-xbox-or-ps5">Here's how to stop your TV from turning on your Xbox or PS5</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/how-to-turn-on-enhance-image-quality-for-ps4-games-on-ps5-pro">Your PS5 Pro can boost image quality on PS4 games — here's how </a></li></ul><div data-model-name="Sony PlayStation 5 Slim,Microsoft Xbox Series X,Xbox Series S,Nintendo Switch OLED" data-widget-type="comparison"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I love my PS5 more than any other gadget I own, and these 6 controllers take my gaming to the next level ]]></title>
                                                                                                <dc:content><![CDATA[ <p>One of my favorite things to do when I'm not working is to kick back and relax with my <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PlayStation 5 Slim</a>. I was a little late to the PS5 party and only got my Slim back in December 2023 — my PS4 had run its course, sadly, and I desperately wanted to play <a href="https://www.tomsguide.com/reviews/cyberpunk-2077-phantom-liberty">Cyberpunk 2077: Phantom Liberty</a> and Baldur's Gate 3. There's no better console for me, really.</p><p>I also love the Dualsense. I think the haptics and adaptive triggers are absolutely fantastic, and the controller doesn't give me much to complain about (except for <em>that </em>5-hour battery life). As a reviews writer and lover of video games, I'm also very lucky that I get to test the <a href="https://www.tomsguide.com/best-picks/best-pc-game-controllers">best controllers</a> — and when they're designed for the PS5, oh it's a glorious day.</p><p>Having tested and used my fair share of gamepads, I'd like to share my top six picks with you. Whether you're looking for a second controller for the player two in your life, or you want a Hall Effect one for competitive gaming, I've got you covered.</p>        <div class="featured_product_block featured_block_hero" data-id="4476d976-3ba4-4db3-996e-c35aa27d31b1">            <a href="https://www.amazon.com/PlayStation-DualSenseTM-Wireless-Controller-Gaming-Console/dp/B0FY6Y9WZT/" data-model-name="PlayStation Dualsense" 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/naVHASn2xMM4eiq2pBQjQF.jpg" alt="DualSense"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sony</div>                                        <div class="featured__title">PlayStation Dualsense</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f8905587-bbd4-4d35-93d6-1816de8b0cc3">            <a href="https://www.amazon.com/PlayStation-DualSense-Wireless-Controller-Gaming-Console/dp/B0DSQQ1P8D/" data-model-name="PlayStation Dualsense Edge" 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/NMc9nttrmhoic3gR8UP7RF.jpg" alt="DualSense Edge"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sony</div>                                        <div class="featured__title">PlayStation Dualsense Edge</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9dbce22e-f1b5-45d4-97ec-2b15e4df89dc">            <a href="https://www.amazon.com/Razer-Raiju-Pro-Wireless-Controller-5/dp/B0FNDGHM92/" data-model-name="Razer Raiju V3 Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/V4NLcp2FSEPpx4PczJbeQF.jpg" alt="Razer Raiju V3 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Razer</div>                                        <div class="featured__title">Razer Raiju V3 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ec070572-216c-4c34-bd72-55fd39121254">            <a href="https://www.amazon.com/Gaming-Controller-PlayStation-Hall-Effect-Customizable-Console/dp/B0DYVVZ4F6/" data-model-name="Turtle Beach Victrix Pro BFG Reloaded" 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/dep92LTZrFXe6urFwUdFRF.jpg" alt="Turtle Beach Victrix pro BFG Reloaded"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Turtle Beach</div>                                        <div class="featured__title">Turtle Beach Victrix Pro BFG Reloaded</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8e786fa4-ac01-4165-b526-8b9243172cb2">            <a href="https://www.amazon.com/Revolution-Officially-Licensed-PlayStation-Controller-5/dp/B0CLBD543P/" data-model-name="Nacon Revolution 5 Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RUcJ9UNMa7LBufhvorCxRF.jpg" alt="Nacon Revolution 5 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Nacon</div>                                        <div class="featured__title">Nacon Revolution 5 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c8809e02-524e-4a19-bf1f-474c41f8c477">            <a href="https://www.amazon.com/BACKBONE-Mobile-Gaming-Controller-Lightning-iOS/dp/B0CT17GPNT/" data-model-name="Backbone One Mobile Gaming Controller" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/JBibFeomsNtrfin5TiefQF.jpg" alt="Backbone One PlayStation"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Backbone</div>                                        <div class="featured__title">Backbone One Mobile Gaming Controller</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="how-do-i-choose-the-best-ps5-controller-for-myself">How do I choose the best PS5 controller for myself?</h2><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="g2DjLXHetr5WPASjVvK6dg" name="Turtle_Beach_Victrix_controller_ 8.JPG" alt="A white Turtle Beach Victrix Pro BFG Reloaded controller for the PS5" src="https://cdn.mos.cms.futurecdn.net/g2DjLXHetr5WPASjVvK6dg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>It's no secret that you're spoiled for choice when it comes to picking the best PS5 controller. But which type of controller is really right for <em>you</em>? </p><p>The first thing you need to consider is your budget. PS5 controllers aren't always cheap but if you're on a tight budget, you do have a few options. You could pick up a second Dualsense, or grab the <a href="https://www.tomsguide.com/news/backbone-one-playstation-edition">Backbone One PlayStation Edition</a>. The latter is primarily designed for mobile gaming using PS Remote Play, and it works seamlessly.</p><p>Next, think about the use case for the controller you're going to buy. Do you want a no-frills gamepad? The <a href="https://www.tomsguide.com/reviews/sony-dualsense-edge">Dualsense Edge</a> is a fantastic choice, and its metallic back buttons feel like a game-changer.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yQMsdgh2ogMLVSLED27ebj" name="Razer_RaijuV3Pro_.JPG" alt="A black Razer Raiju V3 Pro controller for the PS5" src="https://cdn.mos.cms.futurecdn.net/yQMsdgh2ogMLVSLED27ebj-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Are you a competitive player who wants peerless performance? There are two options here: the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-raiju-v3-pro-review">Razer Raiju V3 Pro</a> and the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/turtle-beach-victrix-pro-bfg-reloaded-review">Turtle Beach Victrix Pro BFG Reloaded</a>. Both pro-level controllers feature Hall Effect triggers, and each gamepad's triggers are adjustable, so you can opt for either clicky or long presses. The Raiju V3 Pro has an ace up its sleeve, and that's the TMR tech fitted into its thumbsticks for enhanced precision.</p><p>I use the Victrix Pro BFG Reloaded as my second controller and it's excellent in every way, shape and form. Both the Raiju V3 Pro and the Victrix Pro BFG Reloaded earned 4.5-stars, so I can personally vouch for them.</p><p>As you can see, there's no dearth of options. All of the six aforementioned controllers are outstanding in their own right. Regardless of the one you end up choosing, rest assured that you'll be getting bang for your buck.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W3pEJO"></div>                            </div>                            <script src="https://kwizly.com/embed/W3pEJO.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/gaming/gaming-peripherals/ive-finally-found-a-ps5-controller-thats-better-than-the-dualsense-and-no-its-not-the-dualsense-edge">I’ve finally found a PS5 controller that’s better than the DualSense — and no, it's not the DualSense Edge</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/steam-controller-review-roundup">Steam Controller reviews are in: 'I can’t imagine playing my PC games with anything else'</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-just-made-my-dream-ps5-controller-and-it-blows-the-dualsense-edge-out-of-the-water-but-theres-a-catch">Razer just made my dream PS5 controller and it blows the DualSense Edge out of the water — but there's a catch</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/i-love-my-ps5-more-than-any-other-gadget-i-own-and-these-6-controllers-take-my-gaming-to-the-next-level</link>
                                                                            <description>
                            <![CDATA[ There are some great PS5 controllers out there, and I've used and reviewed many of them. Here are my top picks for next-level console gaming. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">UGyZkXadWKGfY5XZRwcLoQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/2ccgmxfhWqzxJd7qjEWh6D-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 02 May 2026 11:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ nikita.achanta@futurenet.com (Nikita Achanta) ]]></author>                    <dc:creator><![CDATA[ Nikita Achanta ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oXuvixDz99SbZp9z8Uoor3-320-70.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Nikita is a Senior Writer on the Reviews team at Tom&#039;s Guide. She is a lifelong gaming and photography enthusiast, especially interested in wildlife photography. Having worked as a Sub Editor and Writer for Canon EMEA, she’s a bit of a grammar nerd (and a supporter of the Oxford comma), and has also interviewed photographers from all over the world and working in different genres. A holder of two master’s degrees, the most recent one being in Magazine Journalism from Cardiff University, Nikita’s work has appeared in several publications such as Motor Sport Magazine, NME, Marriott Bonvoy, The Independent, and Metro. Her favorite tech includes the PS5, the DJI Air 3S, and the Fujifilm X-T50. She&#039;s also a licensed drone pilot and cameras expert so you&#039;ll find her testing those nearly every week.&lt;/p&gt;&lt;p&gt;In her downtime, Nikita can usually be found sinking hours into RPGs on her PS5, flying a drone, out on a walk with a camera in hand, at a concert, watching F1, or planning her next tattoo. You can follow her photography account on Instagram&lt;a href=&quot;https://www.instagram.com/photos.bynikita/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt; here&lt;/a&gt;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/2ccgmxfhWqzxJd7qjEWh6D-1920-80.jpg">
                                                            <media:credit><![CDATA[Razer / Sony / Turtle Beach / Nacon / Edited with Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A collection of PS5 controllers]]></media:description>                                                            <media:text><![CDATA[A collection of PS5 controllers]]></media:text>
                                <media:title type="plain"><![CDATA[A collection of PS5 controllers]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/2ccgmxfhWqzxJd7qjEWh6D-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>One of my favorite things to do when I'm not working is to kick back and relax with my <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PlayStation 5 Slim</a>. I was a little late to the PS5 party and only got my Slim back in December 2023 — my PS4 had run its course, sadly, and I desperately wanted to play <a href="https://www.tomsguide.com/reviews/cyberpunk-2077-phantom-liberty">Cyberpunk 2077: Phantom Liberty</a> and Baldur's Gate 3. There's no better console for me, really.</p><p>I also love the Dualsense. I think the haptics and adaptive triggers are absolutely fantastic, and the controller doesn't give me much to complain about (except for <em>that </em>5-hour battery life). As a reviews writer and lover of video games, I'm also very lucky that I get to test the <a href="https://www.tomsguide.com/best-picks/best-pc-game-controllers">best controllers</a> — and when they're designed for the PS5, oh it's a glorious day.</p><p>Having tested and used my fair share of gamepads, I'd like to share my top six picks with you. Whether you're looking for a second controller for the player two in your life, or you want a Hall Effect one for competitive gaming, I've got you covered.</p>        <div class="featured_product_block featured_block_hero" data-id="4476d976-3ba4-4db3-996e-c35aa27d31b1">            <a href="https://www.amazon.com/PlayStation-DualSenseTM-Wireless-Controller-Gaming-Console/dp/B0FY6Y9WZT/" data-model-name="PlayStation Dualsense" 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/naVHASn2xMM4eiq2pBQjQF.jpg" alt="DualSense"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sony</div>                                        <div class="featured__title">PlayStation Dualsense</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f8905587-bbd4-4d35-93d6-1816de8b0cc3">            <a href="https://www.amazon.com/PlayStation-DualSense-Wireless-Controller-Gaming-Console/dp/B0DSQQ1P8D/" data-model-name="PlayStation Dualsense Edge" 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/NMc9nttrmhoic3gR8UP7RF.jpg" alt="DualSense Edge"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sony</div>                                        <div class="featured__title">PlayStation Dualsense Edge</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9dbce22e-f1b5-45d4-97ec-2b15e4df89dc">            <a href="https://www.amazon.com/Razer-Raiju-Pro-Wireless-Controller-5/dp/B0FNDGHM92/" data-model-name="Razer Raiju V3 Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/V4NLcp2FSEPpx4PczJbeQF.jpg" alt="Razer Raiju V3 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Razer</div>                                        <div class="featured__title">Razer Raiju V3 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ec070572-216c-4c34-bd72-55fd39121254">            <a href="https://www.amazon.com/Gaming-Controller-PlayStation-Hall-Effect-Customizable-Console/dp/B0DYVVZ4F6/" data-model-name="Turtle Beach Victrix Pro BFG Reloaded" 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/dep92LTZrFXe6urFwUdFRF.jpg" alt="Turtle Beach Victrix pro BFG Reloaded"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Turtle Beach</div>                                        <div class="featured__title">Turtle Beach Victrix Pro BFG Reloaded</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8e786fa4-ac01-4165-b526-8b9243172cb2">            <a href="https://www.amazon.com/Revolution-Officially-Licensed-PlayStation-Controller-5/dp/B0CLBD543P/" data-model-name="Nacon Revolution 5 Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RUcJ9UNMa7LBufhvorCxRF.jpg" alt="Nacon Revolution 5 Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Nacon</div>                                        <div class="featured__title">Nacon Revolution 5 Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c8809e02-524e-4a19-bf1f-474c41f8c477">            <a href="https://www.amazon.com/BACKBONE-Mobile-Gaming-Controller-Lightning-iOS/dp/B0CT17GPNT/" data-model-name="Backbone One Mobile Gaming Controller" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/JBibFeomsNtrfin5TiefQF.jpg" alt="Backbone One PlayStation"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Backbone</div>                                        <div class="featured__title">Backbone One Mobile Gaming Controller</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h2 id="how-do-i-choose-the-best-ps5-controller-for-myself">How do I choose the best PS5 controller for myself?</h2><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="g2DjLXHetr5WPASjVvK6dg" name="Turtle_Beach_Victrix_controller_ 8.JPG" alt="A white Turtle Beach Victrix Pro BFG Reloaded controller for the PS5" src="https://cdn.mos.cms.futurecdn.net/g2DjLXHetr5WPASjVvK6dg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>It's no secret that you're spoiled for choice when it comes to picking the best PS5 controller. But which type of controller is really right for <em>you</em>? </p><p>The first thing you need to consider is your budget. PS5 controllers aren't always cheap but if you're on a tight budget, you do have a few options. You could pick up a second Dualsense, or grab the <a href="https://www.tomsguide.com/news/backbone-one-playstation-edition">Backbone One PlayStation Edition</a>. The latter is primarily designed for mobile gaming using PS Remote Play, and it works seamlessly.</p><p>Next, think about the use case for the controller you're going to buy. Do you want a no-frills gamepad? The <a href="https://www.tomsguide.com/reviews/sony-dualsense-edge">Dualsense Edge</a> is a fantastic choice, and its metallic back buttons feel like a game-changer.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="yQMsdgh2ogMLVSLED27ebj" name="Razer_RaijuV3Pro_.JPG" alt="A black Razer Raiju V3 Pro controller for the PS5" src="https://cdn.mos.cms.futurecdn.net/yQMsdgh2ogMLVSLED27ebj-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Are you a competitive player who wants peerless performance? There are two options here: the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-raiju-v3-pro-review">Razer Raiju V3 Pro</a> and the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/turtle-beach-victrix-pro-bfg-reloaded-review">Turtle Beach Victrix Pro BFG Reloaded</a>. Both pro-level controllers feature Hall Effect triggers, and each gamepad's triggers are adjustable, so you can opt for either clicky or long presses. The Raiju V3 Pro has an ace up its sleeve, and that's the TMR tech fitted into its thumbsticks for enhanced precision.</p><p>I use the Victrix Pro BFG Reloaded as my second controller and it's excellent in every way, shape and form. Both the Raiju V3 Pro and the Victrix Pro BFG Reloaded earned 4.5-stars, so I can personally vouch for them.</p><p>As you can see, there's no dearth of options. All of the six aforementioned controllers are outstanding in their own right. Regardless of the one you end up choosing, rest assured that you'll be getting bang for your buck.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W3pEJO"></div>                            </div>                            <script src="https://kwizly.com/embed/W3pEJO.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/gaming/gaming-peripherals/ive-finally-found-a-ps5-controller-thats-better-than-the-dualsense-and-no-its-not-the-dualsense-edge">I’ve finally found a PS5 controller that’s better than the DualSense — and no, it's not the DualSense Edge</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/steam-controller-review-roundup">Steam Controller reviews are in: 'I can’t imagine playing my PC games with anything else'</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-just-made-my-dream-ps5-controller-and-it-blows-the-dualsense-edge-out-of-the-water-but-theres-a-catch">Razer just made my dream PS5 controller and it blows the DualSense Edge out of the water — but there's a catch</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Update: PlayStation won't lock your digital games after 30 days after all ]]></title>
                                                                                                <dc:content><![CDATA[ <p><em><strong>Update (04/30): </strong></em><em>Sony has officially denied claims that it is implementing a 30-day timer for newly purchased digital games. It was previously claimed that keeping your console offline for more than 30 days would lock digital titles, preventing them from being played until you logged back into the PlayStation Network.</em></p><p><em>However, a Sony representative told </em><a href="https://www.gamefile.news/p/sony-30-day-playstation-check-in-explained" target="_blank"><em>Game File</em></a><em> that this is not the case. Stating that, "a one-time online check is required after purchase to confirm the game’s license, after which no further check-ins are needed.”</em></p><p><em>So you don't need to worry that Sony is pulling an Xbox One-type verification system on gamers. Your digital games will remain playable regardless of how long your console goes without an internet connection.</em></p><p><em><strong>Original story follows:</strong></em></p><p>Remember back in 2013, when Microsoft announced that the <a href="https://www.tomsguide.com/us/xbox-one-2018,review-6054.html">Xbox One</a> would need to connect to the internet<a href="https://www.cnet.com/tech/tech-industry/microsoft-pulls-a-180-reverses-xbox-one-always-on-drm-and-used-games-policy/" target="_blank"> every 24 hours</a>, otherwise it would completely shut down? I sure as heck remember the outrage at the time, especially the controversial comments from then-Xbox CEO Don Mattrick that gamers who want an offline experience should just <a href="https://www.youtube.com/watch?v=jzmVcasl3ZU" target="_blank">play the Xbox 360</a> — an already eight-year-old console at the time.</p><p>I bring this up because almost 13 years after Microsoft backtracked on those policies, furor has erupted online over the possibility that Sony may do something similar with the <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> and <a href="https://www.tomsguide.com/us/ps4-pro,review-4036.html">PS4</a>.</p><p>As reported by YouTube Channel <a href="https://www.youtube.com/watch?v=YIPuXAd6KCA" target="_blank">Modded Warfare</a>, the version 13:20 firmware update for the PS5 may have added some form of DRM to the console. While we haven't been able to verify this for ourselves, the video shows recent digital purchases with a 30-day timer attached — listed as a "Valid Period" in its information page.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2161px;"><p class="vanilla-image-block" style="padding-top:55.71%;"><img id="EQLw5aSe27REXSCPJop89i" name="Screenshot 2026-04-29 113243" alt="ps4 game with validity period timer" src="https://cdn.mos.cms.futurecdn.net/EQLw5aSe27REXSCPJop89i-1920-80.png" mos="" align="middle" fullscreen="" width="2161" height="1204" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Modded Warfare/YouTube)</span></figcaption></figure><p>This timer is likened to PS Plus games or rentals that were only intended to be playable for a set amount of time. It's been reported that if this timer expires, games will no longer be accessible offline until you reconnect to the PlayStation Network for validation. Apparently, it also doesn't matter if you have set a particular system as your primary console; the timer remains.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-egnVrX"></div>                            </div>                            <script src="https://kwizly.com/embed/egnVrX.js" async></script><h2 id="wait-is-this-actually-happening">Wait, is this actually happening?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2629px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="jdwLjBSgdJsHB9pqpKrXWR" name="ps5 dualsense Geoff Keighley.jpg" alt="PS5 dualsense controller" src="https://cdn.mos.cms.futurecdn.net/jdwLjBSgdJsHB9pqpKrXWR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2629" height="1479" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide )</span></figcaption></figure><p>YouTuber Spawn Wave tested the DRM claims on their console and resorted to removing the console's CMOS battery to pull all power to the internal clock. Since the PS5 couldn't verify the time, it wasn't able to verify whether licenses for two newly-purchased digital games (Vampire Crawlers and Saint Slayer) were valid — locking the YouTuber out of both games. </p><p>Sony hasn't made any official announcement about this yet, which is only adding to the confusion. Various messages that are allegedly from PlayStation Support have shown up <a href="https://x.com/NikTek/status/2048903720247959902" target="_blank">on social media</a>, seemingly confirming that the new 30-day check is a new policy. </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:448px;"><p class="vanilla-image-block" style="padding-top:114.51%;"><img id="3dTqrVBJEiMuBAUeJ9GG8n" name="Screenshot 2026-04-29 105108" alt="playstation assistant screenshot" src="https://cdn.mos.cms.futurecdn.net/3dTqrVBJEiMuBAUeJ9GG8n-1920-80.png" mos="" align="middle" fullscreen="" width="448" height="513" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>However, we have no way to verify these messages, and various online users seem to be getting <a href="https://x.com/TRIPSTER0/status/2048999281642590633" target="_blank">conflicting information</a> from the PlayStation Online Assistant — which is an AI chatbot. When I asked about this new license policy, it claimed that "digital games on PlayStation do not require a connection to PSN every 30 days to play." </p><p>So I'm still none the wiser about what's actually going on, and it further confirms my suspicion that AI chatbots are not the best source of information.</p><h2 id="this-is-a-horrible-idea-but-totally-unsurprising">This is a horrible idea, but totally unsurprising</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FY4VGTzod8PrjU4mryi8hn" name="shutterstock_2023742252.jpg" alt="How to watch Super Bowl with your PS5" src="https://cdn.mos.cms.futurecdn.net/FY4VGTzod8PrjU4mryi8hn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rokas Tenys | Shutterstock)</span></figcaption></figure><p>I will say this: It's ironic that Sony would introduce a policy like this, considering how much it mocked Microsoft for attempting something similar back in 2013. A 30-day timer, which operates on a game-by-game basis, isn't quite as extreme as what Microsoft proposed, but it's still a ridiculous thing to try and implement. </p><p>While we don't have any official explanation as to why, Modded Warfare thinks it's a way to clamp down on jailbroken consoles since they're usually kept offline to avoid bans. However, there's also the possibility that this is a bug, and only Sony will be able to clarify what's actually going on. </p><p>We've reached out to Sony and PlayStation for clarity and will update when we hear back.</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/56-amazon-gaming-week-ps5-switch-xbox-video-game-deals-actually-worth-buying">56 Amazon Gaming Week PS5, Switch, Xbox video game deals actually worth buying</a></li><li><a href="https://www.tomsguide.com/gaming/handheld-gaming/valve-is-hard-at-work-on-steam-deck-2-but-steam-machine-and-steam-frame-are-held-hostage-by-ai-gold-rush">Valve is 'hard at work' on Steam Deck 2, but Steam Machine and Steam Frame are held hostage by AI gold rush</a></li><li><a href="https://www.tomsguide.com/gaming/saros-review">Saros is everything I wanted from a Returnal sequel — and it fixes its predecessor's biggest problems</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/playstation-may-have-gone-full-xbox-one-and-added-30-day-check-ins-to-all-new-digital-games-who-thought-that-was-a-good-idea</link>
                                                                            <description>
                            <![CDATA[ Sony has denied that it will be locking down digital games if you don't go online at least once every 30 days. But hasn't explained what people are experiencing. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LZ2dhj2zAjLE95cQbLv5Yd</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/gXSEaKYb5GTQcmF5VG443W-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 29 Apr 2026 10:56:56 +0000</pubDate>                                                                                                                                <updated>Thu, 30 Apr 2026 10:57:40 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/gXSEaKYb5GTQcmF5VG443W-1920-80.jpg">
                                                            <media:credit><![CDATA[Future / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PS5 Slim console positioned horizontally on table]]></media:description>                                                            <media:text><![CDATA[PS5 Slim console positioned horizontally on table]]></media:text>
                                <media:title type="plain"><![CDATA[PS5 Slim console positioned horizontally on table]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/gXSEaKYb5GTQcmF5VG443W-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><em><strong>Update (04/30): </strong></em><em>Sony has officially denied claims that it is implementing a 30-day timer for newly purchased digital games. It was previously claimed that keeping your console offline for more than 30 days would lock digital titles, preventing them from being played until you logged back into the PlayStation Network.</em></p><p><em>However, a Sony representative told </em><a href="https://www.gamefile.news/p/sony-30-day-playstation-check-in-explained" target="_blank"><em>Game File</em></a><em> that this is not the case. Stating that, "a one-time online check is required after purchase to confirm the game’s license, after which no further check-ins are needed.”</em></p><p><em>So you don't need to worry that Sony is pulling an Xbox One-type verification system on gamers. Your digital games will remain playable regardless of how long your console goes without an internet connection.</em></p><p><em><strong>Original story follows:</strong></em></p><p>Remember back in 2013, when Microsoft announced that the <a href="https://www.tomsguide.com/us/xbox-one-2018,review-6054.html">Xbox One</a> would need to connect to the internet<a href="https://www.cnet.com/tech/tech-industry/microsoft-pulls-a-180-reverses-xbox-one-always-on-drm-and-used-games-policy/" target="_blank"> every 24 hours</a>, otherwise it would completely shut down? I sure as heck remember the outrage at the time, especially the controversial comments from then-Xbox CEO Don Mattrick that gamers who want an offline experience should just <a href="https://www.youtube.com/watch?v=jzmVcasl3ZU" target="_blank">play the Xbox 360</a> — an already eight-year-old console at the time.</p><p>I bring this up because almost 13 years after Microsoft backtracked on those policies, furor has erupted online over the possibility that Sony may do something similar with the <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> and <a href="https://www.tomsguide.com/us/ps4-pro,review-4036.html">PS4</a>.</p><p>As reported by YouTube Channel <a href="https://www.youtube.com/watch?v=YIPuXAd6KCA" target="_blank">Modded Warfare</a>, the version 13:20 firmware update for the PS5 may have added some form of DRM to the console. While we haven't been able to verify this for ourselves, the video shows recent digital purchases with a 30-day timer attached — listed as a "Valid Period" in its information page.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2161px;"><p class="vanilla-image-block" style="padding-top:55.71%;"><img id="EQLw5aSe27REXSCPJop89i" name="Screenshot 2026-04-29 113243" alt="ps4 game with validity period timer" src="https://cdn.mos.cms.futurecdn.net/EQLw5aSe27REXSCPJop89i-1920-80.png" mos="" align="middle" fullscreen="" width="2161" height="1204" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Modded Warfare/YouTube)</span></figcaption></figure><p>This timer is likened to PS Plus games or rentals that were only intended to be playable for a set amount of time. It's been reported that if this timer expires, games will no longer be accessible offline until you reconnect to the PlayStation Network for validation. Apparently, it also doesn't matter if you have set a particular system as your primary console; the timer remains.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-egnVrX"></div>                            </div>                            <script src="https://kwizly.com/embed/egnVrX.js" async></script><h2 id="wait-is-this-actually-happening">Wait, is this actually happening?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2629px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="jdwLjBSgdJsHB9pqpKrXWR" name="ps5 dualsense Geoff Keighley.jpg" alt="PS5 dualsense controller" src="https://cdn.mos.cms.futurecdn.net/jdwLjBSgdJsHB9pqpKrXWR-1920-80.jpg" mos="" align="middle" fullscreen="" width="2629" height="1479" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide )</span></figcaption></figure><p>YouTuber Spawn Wave tested the DRM claims on their console and resorted to removing the console's CMOS battery to pull all power to the internal clock. Since the PS5 couldn't verify the time, it wasn't able to verify whether licenses for two newly-purchased digital games (Vampire Crawlers and Saint Slayer) were valid — locking the YouTuber out of both games. </p><p>Sony hasn't made any official announcement about this yet, which is only adding to the confusion. Various messages that are allegedly from PlayStation Support have shown up <a href="https://x.com/NikTek/status/2048903720247959902" target="_blank">on social media</a>, seemingly confirming that the new 30-day check is a new policy. </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:448px;"><p class="vanilla-image-block" style="padding-top:114.51%;"><img id="3dTqrVBJEiMuBAUeJ9GG8n" name="Screenshot 2026-04-29 105108" alt="playstation assistant screenshot" src="https://cdn.mos.cms.futurecdn.net/3dTqrVBJEiMuBAUeJ9GG8n-1920-80.png" mos="" align="middle" fullscreen="" width="448" height="513" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>However, we have no way to verify these messages, and various online users seem to be getting <a href="https://x.com/TRIPSTER0/status/2048999281642590633" target="_blank">conflicting information</a> from the PlayStation Online Assistant — which is an AI chatbot. When I asked about this new license policy, it claimed that "digital games on PlayStation do not require a connection to PSN every 30 days to play." </p><p>So I'm still none the wiser about what's actually going on, and it further confirms my suspicion that AI chatbots are not the best source of information.</p><h2 id="this-is-a-horrible-idea-but-totally-unsurprising">This is a horrible idea, but totally unsurprising</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FY4VGTzod8PrjU4mryi8hn" name="shutterstock_2023742252.jpg" alt="How to watch Super Bowl with your PS5" src="https://cdn.mos.cms.futurecdn.net/FY4VGTzod8PrjU4mryi8hn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rokas Tenys | Shutterstock)</span></figcaption></figure><p>I will say this: It's ironic that Sony would introduce a policy like this, considering how much it mocked Microsoft for attempting something similar back in 2013. A 30-day timer, which operates on a game-by-game basis, isn't quite as extreme as what Microsoft proposed, but it's still a ridiculous thing to try and implement. </p><p>While we don't have any official explanation as to why, Modded Warfare thinks it's a way to clamp down on jailbroken consoles since they're usually kept offline to avoid bans. However, there's also the possibility that this is a bug, and only Sony will be able to clarify what's actually going on. </p><p>We've reached out to Sony and PlayStation for clarity and will update when we hear back.</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/56-amazon-gaming-week-ps5-switch-xbox-video-game-deals-actually-worth-buying">56 Amazon Gaming Week PS5, Switch, Xbox video game deals actually worth buying</a></li><li><a href="https://www.tomsguide.com/gaming/handheld-gaming/valve-is-hard-at-work-on-steam-deck-2-but-steam-machine-and-steam-frame-are-held-hostage-by-ai-gold-rush">Valve is 'hard at work' on Steam Deck 2, but Steam Machine and Steam Frame are held hostage by AI gold rush</a></li><li><a href="https://www.tomsguide.com/gaming/saros-review">Saros is everything I wanted from a Returnal sequel — and it fixes its predecessor's biggest problems</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I used ChatGPT Tasks to track video game deals and these 2 discounts were too good to pass up ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/ai/i-just-ditched-to-do-lists-for-chatgpt-tasks-heres-5-ways-its-changed-everything">ChatGPT Tasks</a> has quickly become one of my favorite features from OpenAI. From a productivity standpoint, it has worked as a reliable daily reminder system for work tasks, pushed me to find more creative ways to use AI tools and even helped me build practical nightly routines to protect my mental health after each workday. After seeing how effective Tasks could be in my professional life, I started wondering what other parts of my routine could benefit from the same kind of automated help.</p><p>That led me to gaming. My video game fandom knows no bounds. I bounce between genres and love both AAA blockbusters and indie gems. As the owner of a PS5 Pro, Xbox Series X|S and a Switch, with plans to grab a <a href="https://www.tomsguide.com/gaming/nintendo/ive-spent-24-hours-with-the-nintendo-switch-2-for-review-heres-5-things-i-love-and-2-things-i-dont">Switch 2</a> once Splatoon Raiders launches in July , I’m always hunting for the best prices on games I want to add to my growing collection (or backlog).</p><p>So I decided to use ChatGPT Tasks to do the searching for me. By setting up daily reminders focused on game discounts, I ended up finding three deals that were actually worth jumping on.</p><h2 id="finding-the-right-prompts-to-find-the-right-deals">Finding the right prompts to find the right deals</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vKzaU7vSu6G5Gbqa83b4XT" name="TG_Vizio-D-Series_13.jpg" alt="Child playing video games on Vizio D-Series" src="https://cdn.mos.cms.futurecdn.net/vKzaU7vSu6G5Gbqa83b4XT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Vizio)</span></figcaption></figure><p>To get the process underway, I initially asked ChatGPT for help on coming up with the right prompts that I could then turn into daily Tasks. These are the seven best ones that it generated for me to use, based on its memory of my past video game-themed questions and requests:</p><ul><li><strong>The 'Only Tell Me When It’s Cheap' tracker: </strong><em>Check daily at [time] for discounts on [names of games]. Only notify me if any drop below $30. Include platform, current price, and percentage discount.</em></li><li><strong>The 'Best Deals' digest: </strong><em>Every [day] at [time], send me a roundup of the 10 best video game deals across the PlayStation Store, Microsoft Store, and Nintendo eShop. Prioritize discounts of 50% or more and include links and prices.</em></li><li><strong>The wishlist watcher: </strong><em>Every [part of the day or evening] at [time], check for discounts on the following games: [insert your wishlist]. Notify me only if any are discounted by at least 40%. Include original price, sale price, and store.</em></li><li><strong>The 'Historical Low' finder: </strong><em>Check every [day] at [time] if any major video games (AAA titles from the last [number of years]) have reached or matched their historical lowest price. Notify me with the game name, platform, current price, and previous low.</em></li><li><strong>The platform-specific deal sniper: </strong><em>Every [day] at [time], check for PlayStation Store, Microsoft Store, and Nintendo eShop discounts on top-rated games with a Metacritic score of 85+. Only notify me if they are discounted by at least 50%.</em></li><li><strong>The flash sale catcher: </strong><em>Check every 6 hours for limited-time or flash sales on the PlayStation Store, Microsoft Store, and Nintendo eShop. Notify me immediately if any popular or trending games are discounted by 60% or more.</em></li><li><strong>The genre-based deal finder:</strong><em><strong> </strong></em><em>Every [day] at [time], find the best deals on [genres] games across all platforms. Only include games rated 80+ and discounted by at least 40%. Provide a short description for each.</em></li></ul><p>After taking note of these seven usable prompts, I told Tasks to work with the Weekly “Best Deals” Digest, Platform-Specific Deal Sniper and Genre-Based Deal Finder. For the three prompts I chose, I set them for Fridays at their respective times of 5 pm, 5:15 pm and 5:25 pm.</p><h2 id="the-three-biggest-discounts-that-caught-my-eye">The three biggest discounts that caught my eye</h2><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:60.00%;"><img id="b4rPEsbF2oj3HVho2pMjXb" name="dragon-ball-fighterz.jpg" alt="Dragon Ball Fighterz" src="https://cdn.mos.cms.futurecdn.net/b4rPEsbF2oj3HVho2pMjXb-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="900" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bandai Namco Entertainment)</span></figcaption></figure><p>This past Friday, ChatGPT alerted me to three deals I likely never would have spotted on my own. Better yet, each discount was tied to a game I had already planned to buy once the price was right.</p><p>One prompt flagged Dark Souls Remastered on the PlayStation Store for $19.99 (down from $39.99) and INSIDE on the Microsoft Store for $3.74 (down from $24.99). Another let me know the Metro Saga Bundle, which includes all three Metro games plus the DLC for Metro Exodus, had dropped from $59.99 to just $5.99. My third prompt highlighted the FighterZ Edition of Dragon Ball FighterZ for PS5 on the PlayStation Store, discounted from $89.99 to $14.39.</p><p>What I appreciated most was that each Task included the exact details I had asked for, including the discount percentage, Metacritic scores and a quick explanation of why each deal was worth considering.</p><h2 id="final-thoughts">Final thoughts</h2><p>With me being in the mood to finally check out an old-school “Soulslike” experience, get immersed in the unnerving vibes of a highly-rated puzzle-platformer, finally experience the Metro series before its latest entry (<em>Metro 2039</em>) launches and pick up the PS5 version of one my favorite fighters to try out its latest DLC character, Tasks worked like a charm in finding me the best deals for those assorted gaming experiences.</p><p>Tasks isn’t just great at generating reminders for birthdays and work-related events—it’s also amazing at bringing you up to speed on can’t-miss deals on your favorite things. In my case, it helped me find the best discounts on games that had been in my crosshairs for years now.</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/10-chatgpt-prompts-to-decode-someones-personality-in-seconds" target="_blank">10 ChatGPT prompts to decode someone's personality in seconds</a></li><li><a href="https://www.tomsguide.com/ai/i-turned-off-gemini-personal-intelligence-for-a-week-and-im-not-going-back" target="_blank">I turned off Gemini Personal Intelligence for a week — and I’m not going back</a></li><li><a href="https://www.tomsguide.com/ai/i-applied-tim-cooks-simplicity-rule-to-my-chatgpt-prompts-and-it-became-a-masterclass-in-creativity" target="_blank">I applied Tim Cook’s ‘Simplicity Rule’ to my ChatGPT prompts — and it became a masterclass in creativity</a></li></ul><div data-widget-type="comparison" data-model-name="Microsoft Xbox Series X"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/ai/i-used-chatgpt-tasks-to-track-video-game-deals-and-these-2-discounts-were-too-good-to-pass-up</link>
                                                                            <description>
                            <![CDATA[ With ChatGPT Tasks, I set up automated gaming discount alerts that the chatbot carried out—this led me to discovering two awesome video game deals that I just couldn’t pass up. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oxU4YTdDbAQJaHPHkBBcEW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/fY3aydSQWYDpsF7LE3GyeZ-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 27 Apr 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[AI]]></category>
                                                                                                                    <dc:creator><![CDATA[ Elton Jones ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/qoRE8e6t2nzaNKAhJGDv7g-320-70.png ]]></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/fY3aydSQWYDpsF7LE3GyeZ-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Xbox Elite Wireless Controller Series 2]]></media:description>                                                            <media:text><![CDATA[Xbox Elite Wireless Controller Series 2]]></media:text>
                                <media:title type="plain"><![CDATA[Xbox Elite Wireless Controller Series 2]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/fY3aydSQWYDpsF7LE3GyeZ-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/ai/i-just-ditched-to-do-lists-for-chatgpt-tasks-heres-5-ways-its-changed-everything">ChatGPT Tasks</a> has quickly become one of my favorite features from OpenAI. From a productivity standpoint, it has worked as a reliable daily reminder system for work tasks, pushed me to find more creative ways to use AI tools and even helped me build practical nightly routines to protect my mental health after each workday. After seeing how effective Tasks could be in my professional life, I started wondering what other parts of my routine could benefit from the same kind of automated help.</p><p>That led me to gaming. My video game fandom knows no bounds. I bounce between genres and love both AAA blockbusters and indie gems. As the owner of a PS5 Pro, Xbox Series X|S and a Switch, with plans to grab a <a href="https://www.tomsguide.com/gaming/nintendo/ive-spent-24-hours-with-the-nintendo-switch-2-for-review-heres-5-things-i-love-and-2-things-i-dont">Switch 2</a> once Splatoon Raiders launches in July , I’m always hunting for the best prices on games I want to add to my growing collection (or backlog).</p><p>So I decided to use ChatGPT Tasks to do the searching for me. By setting up daily reminders focused on game discounts, I ended up finding three deals that were actually worth jumping on.</p><h2 id="finding-the-right-prompts-to-find-the-right-deals">Finding the right prompts to find the right deals</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vKzaU7vSu6G5Gbqa83b4XT" name="TG_Vizio-D-Series_13.jpg" alt="Child playing video games on Vizio D-Series" src="https://cdn.mos.cms.futurecdn.net/vKzaU7vSu6G5Gbqa83b4XT-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Vizio)</span></figcaption></figure><p>To get the process underway, I initially asked ChatGPT for help on coming up with the right prompts that I could then turn into daily Tasks. These are the seven best ones that it generated for me to use, based on its memory of my past video game-themed questions and requests:</p><ul><li><strong>The 'Only Tell Me When It’s Cheap' tracker: </strong><em>Check daily at [time] for discounts on [names of games]. Only notify me if any drop below $30. Include platform, current price, and percentage discount.</em></li><li><strong>The 'Best Deals' digest: </strong><em>Every [day] at [time], send me a roundup of the 10 best video game deals across the PlayStation Store, Microsoft Store, and Nintendo eShop. Prioritize discounts of 50% or more and include links and prices.</em></li><li><strong>The wishlist watcher: </strong><em>Every [part of the day or evening] at [time], check for discounts on the following games: [insert your wishlist]. Notify me only if any are discounted by at least 40%. Include original price, sale price, and store.</em></li><li><strong>The 'Historical Low' finder: </strong><em>Check every [day] at [time] if any major video games (AAA titles from the last [number of years]) have reached or matched their historical lowest price. Notify me with the game name, platform, current price, and previous low.</em></li><li><strong>The platform-specific deal sniper: </strong><em>Every [day] at [time], check for PlayStation Store, Microsoft Store, and Nintendo eShop discounts on top-rated games with a Metacritic score of 85+. Only notify me if they are discounted by at least 50%.</em></li><li><strong>The flash sale catcher: </strong><em>Check every 6 hours for limited-time or flash sales on the PlayStation Store, Microsoft Store, and Nintendo eShop. Notify me immediately if any popular or trending games are discounted by 60% or more.</em></li><li><strong>The genre-based deal finder:</strong><em><strong> </strong></em><em>Every [day] at [time], find the best deals on [genres] games across all platforms. Only include games rated 80+ and discounted by at least 40%. Provide a short description for each.</em></li></ul><p>After taking note of these seven usable prompts, I told Tasks to work with the Weekly “Best Deals” Digest, Platform-Specific Deal Sniper and Genre-Based Deal Finder. For the three prompts I chose, I set them for Fridays at their respective times of 5 pm, 5:15 pm and 5:25 pm.</p><h2 id="the-three-biggest-discounts-that-caught-my-eye">The three biggest discounts that caught my eye</h2><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:60.00%;"><img id="b4rPEsbF2oj3HVho2pMjXb" name="dragon-ball-fighterz.jpg" alt="Dragon Ball Fighterz" src="https://cdn.mos.cms.futurecdn.net/b4rPEsbF2oj3HVho2pMjXb-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="900" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bandai Namco Entertainment)</span></figcaption></figure><p>This past Friday, ChatGPT alerted me to three deals I likely never would have spotted on my own. Better yet, each discount was tied to a game I had already planned to buy once the price was right.</p><p>One prompt flagged Dark Souls Remastered on the PlayStation Store for $19.99 (down from $39.99) and INSIDE on the Microsoft Store for $3.74 (down from $24.99). Another let me know the Metro Saga Bundle, which includes all three Metro games plus the DLC for Metro Exodus, had dropped from $59.99 to just $5.99. My third prompt highlighted the FighterZ Edition of Dragon Ball FighterZ for PS5 on the PlayStation Store, discounted from $89.99 to $14.39.</p><p>What I appreciated most was that each Task included the exact details I had asked for, including the discount percentage, Metacritic scores and a quick explanation of why each deal was worth considering.</p><h2 id="final-thoughts">Final thoughts</h2><p>With me being in the mood to finally check out an old-school “Soulslike” experience, get immersed in the unnerving vibes of a highly-rated puzzle-platformer, finally experience the Metro series before its latest entry (<em>Metro 2039</em>) launches and pick up the PS5 version of one my favorite fighters to try out its latest DLC character, Tasks worked like a charm in finding me the best deals for those assorted gaming experiences.</p><p>Tasks isn’t just great at generating reminders for birthdays and work-related events—it’s also amazing at bringing you up to speed on can’t-miss deals on your favorite things. In my case, it helped me find the best discounts on games that had been in my crosshairs for years now.</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/10-chatgpt-prompts-to-decode-someones-personality-in-seconds" target="_blank">10 ChatGPT prompts to decode someone's personality in seconds</a></li><li><a href="https://www.tomsguide.com/ai/i-turned-off-gemini-personal-intelligence-for-a-week-and-im-not-going-back" target="_blank">I turned off Gemini Personal Intelligence for a week — and I’m not going back</a></li><li><a href="https://www.tomsguide.com/ai/i-applied-tim-cooks-simplicity-rule-to-my-chatgpt-prompts-and-it-became-a-masterclass-in-creativity" target="_blank">I applied Tim Cook’s ‘Simplicity Rule’ to my ChatGPT prompts — and it became a masterclass in creativity</a></li></ul><div data-widget-type="comparison" data-model-name="Microsoft Xbox Series X"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Saros is everything I wanted from a Returnal sequel — and it fixes its predecessor's biggest problems ]]></title>
                                                                                                <dc:content><![CDATA[ <div  class="fancy-box"><div class="fancy_box-title">Saros review: Specs</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Platforms: </strong>PS5,<strong> </strong>PS5 Pro (reviewed)<br><strong>Price: </strong>$69 / £69 / AU$124<br><strong>Release Date: </strong>April 30, 2026<br><strong>Genre:</strong> Action-shooter</p></div></div><p>Five years ago, I labeled <a href="https://www.tomsguide.com/reviews/returnal-review">Returnal</a> “the best reason to own a <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> right now.” While subsequent console exclusives like <a href="https://www.tomsguide.com/reviews/spider-man-2">Marvel’s Spider-Man 2</a> and <a href="https://www.tomsguide.com/gaming/astro-bot-review">Astro Bot</a> have bolstered the PS5 library further, Housemarque's heart-pounding rogue-lite remains one of the console’s finest games. If it’s spiritual sequel, Saros, had merely offered more of the same, it would have been an instant recommendation, but this follow-up goes further. </p><p>It retains all of Returnal’s best bits — the frenetic bullet-hell shooter gameplay, mysterious sci-fi world, intriguing, but cryptic, story and intimidating boss battles — but also makes a real effort to sand down rough edges. It’s not that Saros is any less demanding than Returnal, but this time, Housemarque wants to empower players to overcome its biggest challenges. </p><p>Saros offers a permanent upgrade system so even when you fall, you come back stronger. No obstacle feels insurmountable. Plus, it adds a more cinematic quality to its core narrative, while still giving lore-fantatics plenty of morsels to chew on. Oh, and it’s also a stunning <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> showcase, with the best use of the DualSense controller since… well, since Returnal.</p><p>Here’s why Saros is a PS5 exclusive that every console owner needs to play. </p><h2 id="saros-the-basics">Saros: The Basics</h2><ul><li><strong>What is it?</strong> Saros is a third-person action rogue-lite, where you play a company soldier exploring a constantly-shifting alien world. Each run is different, with remixed levels and randomized weapons, upgrades and collectible items.</li><li><strong>Who is it for? </strong>Rogue-lite fans will definitely enjoy Saros, but it’s a must-play for anybody who loves fast-paced, demanding combat or has a passion for dark science fiction settings.</li><li><strong>What's the price? </strong><a href="https://www.amazon.com/SAROS-PS5-PlayStation-5/dp/B0G5RRPGFF" target="_blank" rel="nofollow">Saros costs $69 at Amazon</a>. There’s also a <a href="https://store.playstation.com/en-us/product/UP9000-PPSA07632_00-SAROSDELUXE00000" target="_blank" rel="nofollow">Deluxe Edition for $79 on the PS Store</a> with extra cosmetics.</li><li><strong>What other games has the developer made?</strong> Saros comes from developer Housemarque, who made its spiritual predecessor Returnal. The Finnish team also created numerous arcade-style twin-stick shooters like Dead Nation, Resogun and Nex Machina.</li><li><strong>What games is this similar to? </strong>Naturally, Saros most closely resembles Returnal. But it also takes several elements from popular action rogue-lite games such as Hades 2 and Dead Cells.</li></ul><h2 id="carcosa-calling">Carcosa calling</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eq4RnT96T4kv6vcdV9Xjfn" name="saros-ps5-pro-screenshot-01.JPG" alt="Screenshot from Saros taken on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/eq4RnT96T4kv6vcdV9Xjfn-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>I definitely got a strong sense of déjà vu in my first few minutes playing Saros. Like Returnal, you’re thrown straight into the action with little context. Within moments, you’re staring down a boss who turns you to dust in a matter of seconds. Don’t worry, you’re supposed to lose. </p><p>After a quick revive, the stakes are set. You play as Arjun Devraj (voiced/modeled by “The Haunting of Hill House’s” Rahul Kohli), an enforcer for the Solatri corporation, dispatched to the mysterious planet of Carcosa to discover what happened to a group of colonists sent to the alien world, who disappeared shortly after landing and haven’t been heard from since. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DnnDW6Si7JNK9cZvg3PVen" name="saros-ps5-pro-screenshot-04.JPG" alt="Screenshot from Saros taken on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/DnnDW6Si7JNK9cZvg3PVen-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>The narrative unfolds primarily through ominous audio logs and text files, but you’re not alone in your quest this time. In between runs, you can catch up with your crew, which fleshes out Saros’ world and gives you insight into the psychological effects of the planet. It’s a smart way of dishing out story beats without taking the focus off Saro’s fast-paced combat. </p><p>I wish Saros’ audio logs weren’t randomized across its procedurally generated levels. After “beating” one biome in two runs, I found myself having to continually revisit it in the hopes of finding the remaining logs just so that I didn’t miss a scrap of story, which was unsatisfying.</p><h2 id="fighting-for-your-life">Fighting for your life</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PDL3uxcDM99ZccSx9BhGTD" name="saros-screenshot-pub-01" alt="Saros screenshot provided by PlayStation" src="https://cdn.mos.cms.futurecdn.net/PDL3uxcDM99ZccSx9BhGTD-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Saros plays like a classic bullet-hell shooter, but with the production values cranked up several notches. To survive against its legions of multi-colored-projectile-spewing enemies, you’ll need to sprint, jump and dash constantly. Stay stationary for long, and you’re toast.</p><p>Added to the mix is a new bubble shield ability, which is an extremely powerful addition to your arsenal. It not only blocks incoming attacks, but can absorb projectiles, converting them into fuel for your formidable Power Weapon. Deciding the best time to pop your shield and when to use your dash to phase through projectiles is all part of Saros’ epic combat rhythm.</p><p>Rhythm is an apt word, as success in Saros often comes down to achieving a flow state. When you lock in, you’ll start anticipating enemy attacks before they land, and gracefully maneuver around the battlefield. One frustration is that the shield is tied to the same button as your melee attack. This results in a split-second delay when deploying it, which can lead to taking cheap, unavoidable hits as Arjun first throws a punch before activating his shield. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ha5p9uw32cCxRPN9L36oWD" name="saros-screenshot-pub-02" alt="Saros screenshot provided by PlayStation" src="https://cdn.mos.cms.futurecdn.net/ha5p9uw32cCxRPN9L36oWD-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Like its predecessor, Saros is a rogue-lite. You set off from your home base into a series of randomised levels that mix-and-match static combat arenas and platforming sections. You might start to recognise certain sections after a run or two, but even a room you’ve visited numerous times can become a new challenge with the addition of fresh traps or enemies.</p><p>On each run, you’ll find different weapons, upgrade items and collectables. Ensuring that each trip into the depths of Carcosa feels unique. You can’t rely on a favorite weapon or an overpowered ability. Instead, you’ll need to make do with the hand you’re dealt. This necessitates strategizing on the fly. In one run, I had to face a tough boss with a shotgun. I was forced to get in my foe's face, rather than hang back, taking pot shots from the shadows, which is my default method.</p><h2 id="come-back-stronger">Come back stronger</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EzGi4zdDhxqPzKhwjDzuAD" name="saros-screenshot-pub-03" alt="Saros screenshot provided by PlayStation" src="https://cdn.mos.cms.futurecdn.net/EzGi4zdDhxqPzKhwjDzuAD-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Where Saros differs most from Returnal is that death isn’t failure; it’s an opportunity to get stronger. Heck, death doesn’t even necessarily mean death. Early on, you can unlock an upgrade that gives you one instant revive per run, offering a second chance every time.</p><p>But if you do succumb to Carcosa’s many hostile threats, all hope isn’t lost. Back at your Passage base, you can spend currency collected on your last run to unlock permanent upgrades that range from basics like improving your armor to starting runs with key items. </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="aZcdxGmkgPBSpgUXDZeFnd" name="saros-screenshot-pub-05" alt="Saros screenshot provided by PlayStation" src="https://cdn.mos.cms.futurecdn.net/aZcdxGmkgPBSpgUXDZeFnd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Returnal’s comparative stinginess — players were stripped of basically all items/upgrades upon death, and forced to start a fresh run from near scratch — was a major pain point for some players. So, I suspect Saros taking cues from more accessible rogue-lites like Hades and Dead Cells will be some comfort. In Saros, even in defeat, there’s an element of victory, as the next time you head out in Carcosa, the odds are tipped a little more in your favor.</p><p>This isn’t to say Saros is an easy game, quite the opposite. If anything, Housemarque has ramped up the early game difficulty. The developers expect players to die frequently and be given plenty of opportunities to invest in upgrades to augment Arjun. </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="SPD55LKae3664VSP2jFWsd" name="saros-screenshot-ps5-pro-05" alt="Saros screenshot taken on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/SPD55LKae3664VSP2jFWsd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>However, players craving Returnal’s more punishing nature aren’t neglected either. At the midpoint, you unlock the ability to make runs even harder by enabling a series of quite brutal modifiers (decreased damage, disabling your one-time revive, etc.). Or you can go the other way and switch on modifiers that make things easier, letting you customize your difficulty.</p><p>Another smart tweak is that the average run completion time has been dramatically reduced. In Returnal, a deep run could take north of 90 minutes. In Saros, runs will naturally conclude in around 20-30 minutes (Either through death or teleporting back to your base). This allows Saros to be enjoyed in more bite-sized chunks, and convinced me to keep playing just a little longer for “one more run” several times. Which would then quickly turn into three or four…</p><h2 id="pushing-the-ps5-pro">Pushing the PS5 Pro</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="a8tjU7gyJw6rAgAw3etEfn" name="saros-ps5-pro-screenshot-03.JPG" alt="Screenshot from Saros taken on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/a8tjU7gyJw6rAgAw3etEfn-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Saros is one gorgeous-looking game. Of course, you don’t often get the chance to stop and drink in the impressive visuals, as there’s so much happening around you, but the mixture of neon projectiles, imposing enemy designs, and dark sci-fi locales is immediately striking. </p><p>More impressively, even when the screen explodes into a shower of sparks, multi-colored bullets and luminescent orbs, the 60 fps never drops. Even in the most intense battles, found in optional challenge areas crammed with a silly amount of enemies, I never noticed a hiccup. It’s a good thing, too. Saros is a game where a stable framerate is vital</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3cW7r2GdWrBYwofCTmj7en" name="saros-ps5-pro-screenshot-02.JPG" alt="Screenshot from Saros taken on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/3cW7r2GdWrBYwofCTmj7en-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Aside from just looking phenomenal, Saros also <em>feels</em> fantastic thanks to its novel use of the PS5 DualSense controller. The pad’s haptic feedback is used to great effect, but it’s the remarkably clever implementation of the adaptive triggers that once again steals the show. </p><p>Every weapon, from pistols to assault rifles, offers an alternative fire mode, and rather than being activated with a button press, you switch fire modes by pressing the left trigger down halfway. Press it down fully, and you’ll activate your Power Weapon. It was a great system in Returnal, and it’s no less exceptional here. You always feel in complete control of your weapons, without even needing to lift your finger off the trigger. I wish more games used it. </p><h2 id="saros-review-verdict">Saros review: Verdict</h2><p>Saros is everything I wanted out of a follow-up to Returnal. It strikes the perfect balance between offering veteran players more of the frenetic bullet-hell gameplay that has become Housemarque’s signature style, while also being more approachable for new players.</p><p>The game is at its very best when you’re dashing across an enemy-filled arena, popping your shield at the perfect moment so you can power up your ultimate weapon and fire back an explosive rocket. And even in the (many) times I wasn’t quite quick enough to outrun the hellstorm of projectiles launched in my direction, my first instinct was always to dive back into the fray as quickly as possible, with a few new upgrades unlocked, to turn the tables.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/saros-review</link>
                                                                            <description>
                            <![CDATA[ Saros is a confident game that builds on the excellent foundation of its spiritual predecessor, Returnal. It retains the same fast-paced bullet-hell gameplay and compelling rogue-lite structure, while addressing pain points to craft an even better experience. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Rn3jX2qHdksQ7fngp6wFYJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/spLn3RgdaX5y9WTXh2Bdb3-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 24 Apr 2026 07:00:00 +0000</pubDate>                                                                                                                                <updated>Wed, 10 Jun 2026 14:33:28 +0000</updated>
                                                                                                                                            <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/spLn3RgdaX5y9WTXh2Bdb3-1920-80.jpg">
                                                            <media:credit><![CDATA[Housemarque / Sony Interactive Entertainment]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Saros screenshot showing Arjun Devraj using the bubble shield ability]]></media:description>                                                            <media:text><![CDATA[Saros screenshot showing Arjun Devraj using the bubble shield ability]]></media:text>
                                <media:title type="plain"><![CDATA[Saros screenshot showing Arjun Devraj using the bubble shield ability]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/spLn3RgdaX5y9WTXh2Bdb3-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div  class="fancy-box"><div class="fancy_box-title">Saros review: Specs</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Platforms: </strong>PS5,<strong> </strong>PS5 Pro (reviewed)<br><strong>Price: </strong>$69 / £69 / AU$124<br><strong>Release Date: </strong>April 30, 2026<br><strong>Genre:</strong> Action-shooter</p></div></div><p>Five years ago, I labeled <a href="https://www.tomsguide.com/reviews/returnal-review">Returnal</a> “the best reason to own a <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> right now.” While subsequent console exclusives like <a href="https://www.tomsguide.com/reviews/spider-man-2">Marvel’s Spider-Man 2</a> and <a href="https://www.tomsguide.com/gaming/astro-bot-review">Astro Bot</a> have bolstered the PS5 library further, Housemarque's heart-pounding rogue-lite remains one of the console’s finest games. If it’s spiritual sequel, Saros, had merely offered more of the same, it would have been an instant recommendation, but this follow-up goes further. </p><p>It retains all of Returnal’s best bits — the frenetic bullet-hell shooter gameplay, mysterious sci-fi world, intriguing, but cryptic, story and intimidating boss battles — but also makes a real effort to sand down rough edges. It’s not that Saros is any less demanding than Returnal, but this time, Housemarque wants to empower players to overcome its biggest challenges. </p><p>Saros offers a permanent upgrade system so even when you fall, you come back stronger. No obstacle feels insurmountable. Plus, it adds a more cinematic quality to its core narrative, while still giving lore-fantatics plenty of morsels to chew on. Oh, and it’s also a stunning <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a> showcase, with the best use of the DualSense controller since… well, since Returnal.</p><p>Here’s why Saros is a PS5 exclusive that every console owner needs to play. </p><h2 id="saros-the-basics">Saros: The Basics</h2><ul><li><strong>What is it?</strong> Saros is a third-person action rogue-lite, where you play a company soldier exploring a constantly-shifting alien world. Each run is different, with remixed levels and randomized weapons, upgrades and collectible items.</li><li><strong>Who is it for? </strong>Rogue-lite fans will definitely enjoy Saros, but it’s a must-play for anybody who loves fast-paced, demanding combat or has a passion for dark science fiction settings.</li><li><strong>What's the price? </strong><a href="https://www.amazon.com/SAROS-PS5-PlayStation-5/dp/B0G5RRPGFF" target="_blank" rel="nofollow">Saros costs $69 at Amazon</a>. There’s also a <a href="https://store.playstation.com/en-us/product/UP9000-PPSA07632_00-SAROSDELUXE00000" target="_blank" rel="nofollow">Deluxe Edition for $79 on the PS Store</a> with extra cosmetics.</li><li><strong>What other games has the developer made?</strong> Saros comes from developer Housemarque, who made its spiritual predecessor Returnal. The Finnish team also created numerous arcade-style twin-stick shooters like Dead Nation, Resogun and Nex Machina.</li><li><strong>What games is this similar to? </strong>Naturally, Saros most closely resembles Returnal. But it also takes several elements from popular action rogue-lite games such as Hades 2 and Dead Cells.</li></ul><h2 id="carcosa-calling">Carcosa calling</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eq4RnT96T4kv6vcdV9Xjfn" name="saros-ps5-pro-screenshot-01.JPG" alt="Screenshot from Saros taken on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/eq4RnT96T4kv6vcdV9Xjfn-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>I definitely got a strong sense of déjà vu in my first few minutes playing Saros. Like Returnal, you’re thrown straight into the action with little context. Within moments, you’re staring down a boss who turns you to dust in a matter of seconds. Don’t worry, you’re supposed to lose. </p><p>After a quick revive, the stakes are set. You play as Arjun Devraj (voiced/modeled by “The Haunting of Hill House’s” Rahul Kohli), an enforcer for the Solatri corporation, dispatched to the mysterious planet of Carcosa to discover what happened to a group of colonists sent to the alien world, who disappeared shortly after landing and haven’t been heard from since. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DnnDW6Si7JNK9cZvg3PVen" name="saros-ps5-pro-screenshot-04.JPG" alt="Screenshot from Saros taken on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/DnnDW6Si7JNK9cZvg3PVen-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>The narrative unfolds primarily through ominous audio logs and text files, but you’re not alone in your quest this time. In between runs, you can catch up with your crew, which fleshes out Saros’ world and gives you insight into the psychological effects of the planet. It’s a smart way of dishing out story beats without taking the focus off Saro’s fast-paced combat. </p><p>I wish Saros’ audio logs weren’t randomized across its procedurally generated levels. After “beating” one biome in two runs, I found myself having to continually revisit it in the hopes of finding the remaining logs just so that I didn’t miss a scrap of story, which was unsatisfying.</p><h2 id="fighting-for-your-life">Fighting for your life</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PDL3uxcDM99ZccSx9BhGTD" name="saros-screenshot-pub-01" alt="Saros screenshot provided by PlayStation" src="https://cdn.mos.cms.futurecdn.net/PDL3uxcDM99ZccSx9BhGTD-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Saros plays like a classic bullet-hell shooter, but with the production values cranked up several notches. To survive against its legions of multi-colored-projectile-spewing enemies, you’ll need to sprint, jump and dash constantly. Stay stationary for long, and you’re toast.</p><p>Added to the mix is a new bubble shield ability, which is an extremely powerful addition to your arsenal. It not only blocks incoming attacks, but can absorb projectiles, converting them into fuel for your formidable Power Weapon. Deciding the best time to pop your shield and when to use your dash to phase through projectiles is all part of Saros’ epic combat rhythm.</p><p>Rhythm is an apt word, as success in Saros often comes down to achieving a flow state. When you lock in, you’ll start anticipating enemy attacks before they land, and gracefully maneuver around the battlefield. One frustration is that the shield is tied to the same button as your melee attack. This results in a split-second delay when deploying it, which can lead to taking cheap, unavoidable hits as Arjun first throws a punch before activating his shield. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ha5p9uw32cCxRPN9L36oWD" name="saros-screenshot-pub-02" alt="Saros screenshot provided by PlayStation" src="https://cdn.mos.cms.futurecdn.net/ha5p9uw32cCxRPN9L36oWD-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Like its predecessor, Saros is a rogue-lite. You set off from your home base into a series of randomised levels that mix-and-match static combat arenas and platforming sections. You might start to recognise certain sections after a run or two, but even a room you’ve visited numerous times can become a new challenge with the addition of fresh traps or enemies.</p><p>On each run, you’ll find different weapons, upgrade items and collectables. Ensuring that each trip into the depths of Carcosa feels unique. You can’t rely on a favorite weapon or an overpowered ability. Instead, you’ll need to make do with the hand you’re dealt. This necessitates strategizing on the fly. In one run, I had to face a tough boss with a shotgun. I was forced to get in my foe's face, rather than hang back, taking pot shots from the shadows, which is my default method.</p><h2 id="come-back-stronger">Come back stronger</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EzGi4zdDhxqPzKhwjDzuAD" name="saros-screenshot-pub-03" alt="Saros screenshot provided by PlayStation" src="https://cdn.mos.cms.futurecdn.net/EzGi4zdDhxqPzKhwjDzuAD-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Where Saros differs most from Returnal is that death isn’t failure; it’s an opportunity to get stronger. Heck, death doesn’t even necessarily mean death. Early on, you can unlock an upgrade that gives you one instant revive per run, offering a second chance every time.</p><p>But if you do succumb to Carcosa’s many hostile threats, all hope isn’t lost. Back at your Passage base, you can spend currency collected on your last run to unlock permanent upgrades that range from basics like improving your armor to starting runs with key items. </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="aZcdxGmkgPBSpgUXDZeFnd" name="saros-screenshot-pub-05" alt="Saros screenshot provided by PlayStation" src="https://cdn.mos.cms.futurecdn.net/aZcdxGmkgPBSpgUXDZeFnd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Returnal’s comparative stinginess — players were stripped of basically all items/upgrades upon death, and forced to start a fresh run from near scratch — was a major pain point for some players. So, I suspect Saros taking cues from more accessible rogue-lites like Hades and Dead Cells will be some comfort. In Saros, even in defeat, there’s an element of victory, as the next time you head out in Carcosa, the odds are tipped a little more in your favor.</p><p>This isn’t to say Saros is an easy game, quite the opposite. If anything, Housemarque has ramped up the early game difficulty. The developers expect players to die frequently and be given plenty of opportunities to invest in upgrades to augment Arjun. </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="SPD55LKae3664VSP2jFWsd" name="saros-screenshot-ps5-pro-05" alt="Saros screenshot taken on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/SPD55LKae3664VSP2jFWsd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>However, players craving Returnal’s more punishing nature aren’t neglected either. At the midpoint, you unlock the ability to make runs even harder by enabling a series of quite brutal modifiers (decreased damage, disabling your one-time revive, etc.). Or you can go the other way and switch on modifiers that make things easier, letting you customize your difficulty.</p><p>Another smart tweak is that the average run completion time has been dramatically reduced. In Returnal, a deep run could take north of 90 minutes. In Saros, runs will naturally conclude in around 20-30 minutes (Either through death or teleporting back to your base). This allows Saros to be enjoyed in more bite-sized chunks, and convinced me to keep playing just a little longer for “one more run” several times. Which would then quickly turn into three or four…</p><h2 id="pushing-the-ps5-pro">Pushing the PS5 Pro</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="a8tjU7gyJw6rAgAw3etEfn" name="saros-ps5-pro-screenshot-03.JPG" alt="Screenshot from Saros taken on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/a8tjU7gyJw6rAgAw3etEfn-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Saros is one gorgeous-looking game. Of course, you don’t often get the chance to stop and drink in the impressive visuals, as there’s so much happening around you, but the mixture of neon projectiles, imposing enemy designs, and dark sci-fi locales is immediately striking. </p><p>More impressively, even when the screen explodes into a shower of sparks, multi-colored bullets and luminescent orbs, the 60 fps never drops. Even in the most intense battles, found in optional challenge areas crammed with a silly amount of enemies, I never noticed a hiccup. It’s a good thing, too. Saros is a game where a stable framerate is vital</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3cW7r2GdWrBYwofCTmj7en" name="saros-ps5-pro-screenshot-02.JPG" alt="Screenshot from Saros taken on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/3cW7r2GdWrBYwofCTmj7en-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Housemarque / Sony Interactive Entertainment)</span></figcaption></figure><p>Aside from just looking phenomenal, Saros also <em>feels</em> fantastic thanks to its novel use of the PS5 DualSense controller. The pad’s haptic feedback is used to great effect, but it’s the remarkably clever implementation of the adaptive triggers that once again steals the show. </p><p>Every weapon, from pistols to assault rifles, offers an alternative fire mode, and rather than being activated with a button press, you switch fire modes by pressing the left trigger down halfway. Press it down fully, and you’ll activate your Power Weapon. It was a great system in Returnal, and it’s no less exceptional here. You always feel in complete control of your weapons, without even needing to lift your finger off the trigger. I wish more games used it. </p><h2 id="saros-review-verdict">Saros review: Verdict</h2><p>Saros is everything I wanted out of a follow-up to Returnal. It strikes the perfect balance between offering veteran players more of the frenetic bullet-hell gameplay that has become Housemarque’s signature style, while also being more approachable for new players.</p><p>The game is at its very best when you’re dashing across an enemy-filled arena, popping your shield at the perfect moment so you can power up your ultimate weapon and fire back an explosive rocket. And even in the (many) times I wasn’t quite quick enough to outrun the hellstorm of projectiles launched in my direction, my first instinct was always to dive back into the fray as quickly as possible, with a few new upgrades unlocked, to turn the tables.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I just played Starfield on PS5 Pro — and the internet is wrong about this sci-fi RPG ]]></title>
                                                                                                <dc:content><![CDATA[ <p>More than two and a half years after its September 2023 debut on Xbox and PC, the sprawling galaxy of <a href="https://www.tomsguide.com/reviews/starfield">Starfield</a> is <em>finally </em>explorable on <a href="https://www.tomsguide.com/reviews/ps5">PS5</a>, and I could not be happier. I greatly enjoyed this game when I played on my <a href="https://www.tomsguide.com/reviews/xbox-series-x">Xbox Series X</a> back at launch, and I’m having a blast returning to its world on <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a>. </p><p>It’s fair to say that Starfield, the latest RPG experience from Elder Scrolls and Fallout developer Bethesda, is a <em>divisive</em> title. Even at launch, my (former) colleague David Meikleham wrote that he’d <a href="https://www.tomsguide.com/opinion/ive-never-bounced-harder-off-a-bethesda-game-than-starfield-and-the-steam-data-shows-im-not-alone">“never bounced harder off a Bethesda game,”</a> and you don’t need to search gaming forums far to find gamers expressing their intense disappointment. There’s also no escaping the fact that Starfield has not enjoyed the stickiness of Skyrim or Fallout 4. </p><p>Now that it’s landing on PS5, alongside a new DLC and its largest update yet (Director Todd Howard warns not to call it Starfield 2.0), a wave of new players can traverse the settled systems, bringing Starfield back into the conversation. </p><p>Perhaps, this is a hot take, but I think this is a sci-fi RPG experience not to be missed. The intergalactic setting is absorbing, the “NASA-punk” aesthetic is very pleasing, and the quest writing is strong. There are unavoidable bumps in the road, sure. But I can overlook the flaws in favor of everything Starfield does well. Here’s why I think Starfield has earned a second chance on PS5. </p><div class="product"><a data-dimension112="3bbc1e9d-e9fa-49e2-8ba5-663bc05ae849" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$49" href="https://www.amazon.com/Starfield-Standard-PlayStation-5/dp/B0GQW2BYK9/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1298px;"><p class="vanilla-image-block" style="padding-top:115.56%;"><img id="Zocx2nSKP8ATKNseL5BpeR" name="starfield-ps5-box-na" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Zocx2nSKP8ATKNseL5BpeR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1298" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Starfield-Standard-PlayStation-5/dp/B0GQW2BYK9/" target="_blank" rel="nofollow" data-dimension112="3bbc1e9d-e9fa-49e2-8ba5-663bc05ae849" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$49">(PS5): $49</a></strong><br>Starfield, the latest RPG from the Fallout and Skyrim developer, is now on PS5. You can explore a sprawling universe of more than 1,000 planets as you take on missions, collect valuable loot and resources, and solve humanity's greatest mystery. Starfield on PS5 also comes with the new "Free Lanes" update, further expanding your options. If you want the complete Starfield experience, the <a href="https://www.amazon.com/Starfield-Premium-PlayStation-5/dp/B0GQWC6D28/" target="_blank" rel="nofollow"><strong>Premium Edition on PS5 is $69</strong></a> and includes two DLC packs and some additional digital extras.<a class="view-deal button" href="https://www.amazon.com/Starfield-Standard-PlayStation-5/dp/B0GQW2BYK9/" target="_blank" rel="nofollow" data-dimension112="3bbc1e9d-e9fa-49e2-8ba5-663bc05ae849" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$49">View Deal</a></p></div><h2 id="the-secret-to-enjoying-starfield-on-ps5">The secret to enjoying Starfield on PS5</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/xUS6igFziPc" allowfullscreen></iframe></div></div><p>I think the biggest barrier to entry to enjoying Starfield is the need to cast off the traditional mindset players have when experiencing a new Bethesda game. Take Skyrim, the common advice is often to complete the mandatory introductory quest, and then ignore the main story in favor of exploring the game’s impressively large map and just seeing what you stumble upon. </p><p>To get the most out of Starfield, I strongly advise you to do the exact opposite. Forget exploration. It’s not the game’s strong suit with a star map cluttered with barren planets stuffed with cut-and-paste points of interest and bland filler objectives. Focus almost entirely on questing. When I’m playing Starfield, I <em>always </em>have an active quest that I’m following. It’s here that Starfield shines brightest, and it’s here that you’ll find the lion’s share of worthwhile content.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zkMuSj28EsqWaMW9dtKenW" name="starfield-ps5-screenshot-04.JPG" alt="Screenshot taken from Starfield running on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/zkMuSj28EsqWaMW9dtKenW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bethesda Game Studios)</span></figcaption></figure><p>For clarification, I’m not just talking about beelining the main quest, either. Like most Bethesda RPGs, Starfield offers a suite of faction questlines that contain the game’s most thrilling missions. You can join six factions (seven if you purchase the Shattered Space DLC), which range from the galaxy-defending UC Vanguard to the space-pirate group the Crimson Fleet. You can even work for Ryujin Industries and engage in a little corporate espionage.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eBxBAO"></div>                            </div>                            <script src="https://kwizly.com/embed/eBxBAO.js" async></script><p>These faction quests are some of the best Bethesda has ever made, and they can be further supplemented with the many interesting standalone side missions that have you doing everything from discovering a Batman-type vigilante to resolving a dispute between planetary neighbors. With your map marker always pointing you in the direction of a mission, it’s hard to get too hung up on Starfield’s repetitive exploration, because you can just ignore it.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="23TLHpG3Uaf72xAUnp9YxW" name="starfield-ps5-screenshot-02.JPG" alt="Screenshot taken from Starfield running on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/23TLHpG3Uaf72xAUnp9YxW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bethesda Game Studios)</span></figcaption></figure><p>Players seeking content, content, and more content will also find an abundance of it here. If you don’t mind completing similar tasks dozens of times and collecting endless resources for crafting, there’s a whole outpost system to wrap your head around. This lets you colonize numerous planets. And you could lose hours in the game’s deep spaceship-building system. </p><p>Quantity over quality is not necessarily a strength, but considering the current darling of the gaming world is <a href="https://www.tomsguide.com/gaming/crimson-desert-review">Crimson Desert</a> (a game so vast that you can spend 50+ hours in the starting zone alone), it’s clear that many RPG players aren’t satisfied unless a game can become such a time sink that it borders on a second job. Starfield totally meets that brief. You could play this for months.</p><h2 id="starfield-on-ps5-isn-t-the-perfect-port">Starfield on PS5 isn’t the perfect port</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="U4MQCQhkm6ZiHDwhfd8R3X" name="starfield-ps5-screenshot-05.JPG" alt="Screenshot taken from Starfield running on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/U4MQCQhkm6ZiHDwhfd8R3X-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bethesda Game Studios)</span></figcaption></figure><p>While I’m delighted to have an excuse to return to the world of Starfield and re-experience my favorite faction quests for a second time, I have been a little let down by the quality of Starfield’s PS5 port from a technical perspective.</p><p>I’m a framerate-above-all type of player, so I have opted to play in the dedicated “Performance” mode, which the game recommends if you desire a 60 fps target. Even with the trade-off in image resolution, Starfield on PS5 Pro does not maintain a locked 60. The dips aren’t so bad as to spoil the experience, but I’ve definitely endured more than I’d like. Things get particularly bad in larger cities or when quickly moving between zones.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ydqFwawTCDCC7KFnKmCAxW" name="starfield-ps5-screenshot-03.JPG" alt="Screenshot taken from Starfield running on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/ydqFwawTCDCC7KFnKmCAxW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bethesda Game Studios)</span></figcaption></figure><p>Furthermore, hard crashes appear to be a problem plaguing many a PS5 playthrough. As noted, Starfield’s PS5 release coincides with the new “Free Lanes” update, which expands your options while flying your ship between planets. Rather inauspiciously, the first time I attempted to use the new “cruise” feature, my game locked up. And it did the same the second time I tried it. This <a href="https://www.reddit.com/r/PS5/comments/1seyhqk/starfield_official_discussion_thread/" target="_blank">Reddit thread</a> suggests that crashes aren’t entirely uncommon.</p><p>Considering the PS5 port comes nearly three years post-launch, with a wealth of patches baked in, it’s certainly frustrating to be grappling with technical hiccups in what should be the definitive console version of the game. Hopefully, there is a PS5 patch or two in the pipeline. But, putting these blemishes aside, I maintain that Starfield is a game worth experiencing by anybody with a fondness for Bethesda’s unique brand of RPG goodness. </p><p>In my eyes, it certainly doesn’t deserve the intense, often vitriolic, backlash that has followed it since launch. There’s a lot of good stuff here, and if you’re craving a game that lets you feel like a hero traveling the stars to complete odd jobs and universe-saving missions alike, there’s little else like Starfield.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/reviews/starfield">Read our original Starfield review from 2023</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/new-ps5-dashboard-leaks-and-it-looks-like-the-ps4-in-the-best-possible-way">New PS5 dashboard leaks, and it looks like the PS4</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/i-just-played-crimson-desert-on-ps5-pro-heres-how-this-massive-rpg-looks-and-runs-on-console">I just played Crimson Desert on PS5 Pro — here’s how it runs</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/i-just-played-starfield-on-ps5-pro-and-the-internet-is-wrong-about-this-sci-fi-rpg</link>
                                                                            <description>
                            <![CDATA[ After years of waiting, Starfield has arrived on PS5, and I'm having a blast playing this sci-fi RPG. Here's why it deserves a second chance. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">UnBzqFhHUeKazuNzo3EyoW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/q5ZN58NJat9sBjQt4KKzvW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 11 Apr 2026 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/q5ZN58NJat9sBjQt4KKzvW-1920-80.jpg">
                                                            <media:credit><![CDATA[Bethesda Game Studios]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Screenshot taken from Starfield running on PS5 Pro]]></media:description>                                                            <media:text><![CDATA[Screenshot taken from Starfield running on PS5 Pro]]></media:text>
                                <media:title type="plain"><![CDATA[Screenshot taken from Starfield running on PS5 Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/q5ZN58NJat9sBjQt4KKzvW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>More than two and a half years after its September 2023 debut on Xbox and PC, the sprawling galaxy of <a href="https://www.tomsguide.com/reviews/starfield">Starfield</a> is <em>finally </em>explorable on <a href="https://www.tomsguide.com/reviews/ps5">PS5</a>, and I could not be happier. I greatly enjoyed this game when I played on my <a href="https://www.tomsguide.com/reviews/xbox-series-x">Xbox Series X</a> back at launch, and I’m having a blast returning to its world on <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a>. </p><p>It’s fair to say that Starfield, the latest RPG experience from Elder Scrolls and Fallout developer Bethesda, is a <em>divisive</em> title. Even at launch, my (former) colleague David Meikleham wrote that he’d <a href="https://www.tomsguide.com/opinion/ive-never-bounced-harder-off-a-bethesda-game-than-starfield-and-the-steam-data-shows-im-not-alone">“never bounced harder off a Bethesda game,”</a> and you don’t need to search gaming forums far to find gamers expressing their intense disappointment. There’s also no escaping the fact that Starfield has not enjoyed the stickiness of Skyrim or Fallout 4. </p><p>Now that it’s landing on PS5, alongside a new DLC and its largest update yet (Director Todd Howard warns not to call it Starfield 2.0), a wave of new players can traverse the settled systems, bringing Starfield back into the conversation. </p><p>Perhaps, this is a hot take, but I think this is a sci-fi RPG experience not to be missed. The intergalactic setting is absorbing, the “NASA-punk” aesthetic is very pleasing, and the quest writing is strong. There are unavoidable bumps in the road, sure. But I can overlook the flaws in favor of everything Starfield does well. Here’s why I think Starfield has earned a second chance on PS5. </p><div class="product"><a data-dimension112="3bbc1e9d-e9fa-49e2-8ba5-663bc05ae849" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$49" href="https://www.amazon.com/Starfield-Standard-PlayStation-5/dp/B0GQW2BYK9/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1298px;"><p class="vanilla-image-block" style="padding-top:115.56%;"><img id="Zocx2nSKP8ATKNseL5BpeR" name="starfield-ps5-box-na" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Zocx2nSKP8ATKNseL5BpeR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1298" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Starfield-Standard-PlayStation-5/dp/B0GQW2BYK9/" target="_blank" rel="nofollow" data-dimension112="3bbc1e9d-e9fa-49e2-8ba5-663bc05ae849" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$49">(PS5): $49</a></strong><br>Starfield, the latest RPG from the Fallout and Skyrim developer, is now on PS5. You can explore a sprawling universe of more than 1,000 planets as you take on missions, collect valuable loot and resources, and solve humanity's greatest mystery. Starfield on PS5 also comes with the new "Free Lanes" update, further expanding your options. If you want the complete Starfield experience, the <a href="https://www.amazon.com/Starfield-Premium-PlayStation-5/dp/B0GQWC6D28/" target="_blank" rel="nofollow"><strong>Premium Edition on PS5 is $69</strong></a> and includes two DLC packs and some additional digital extras.<a class="view-deal button" href="https://www.amazon.com/Starfield-Standard-PlayStation-5/dp/B0GQW2BYK9/" target="_blank" rel="nofollow" data-dimension112="3bbc1e9d-e9fa-49e2-8ba5-663bc05ae849" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$49">View Deal</a></p></div><h2 id="the-secret-to-enjoying-starfield-on-ps5">The secret to enjoying Starfield on PS5</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/xUS6igFziPc" allowfullscreen></iframe></div></div><p>I think the biggest barrier to entry to enjoying Starfield is the need to cast off the traditional mindset players have when experiencing a new Bethesda game. Take Skyrim, the common advice is often to complete the mandatory introductory quest, and then ignore the main story in favor of exploring the game’s impressively large map and just seeing what you stumble upon. </p><p>To get the most out of Starfield, I strongly advise you to do the exact opposite. Forget exploration. It’s not the game’s strong suit with a star map cluttered with barren planets stuffed with cut-and-paste points of interest and bland filler objectives. Focus almost entirely on questing. When I’m playing Starfield, I <em>always </em>have an active quest that I’m following. It’s here that Starfield shines brightest, and it’s here that you’ll find the lion’s share of worthwhile content.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zkMuSj28EsqWaMW9dtKenW" name="starfield-ps5-screenshot-04.JPG" alt="Screenshot taken from Starfield running on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/zkMuSj28EsqWaMW9dtKenW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bethesda Game Studios)</span></figcaption></figure><p>For clarification, I’m not just talking about beelining the main quest, either. Like most Bethesda RPGs, Starfield offers a suite of faction questlines that contain the game’s most thrilling missions. You can join six factions (seven if you purchase the Shattered Space DLC), which range from the galaxy-defending UC Vanguard to the space-pirate group the Crimson Fleet. You can even work for Ryujin Industries and engage in a little corporate espionage.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eBxBAO"></div>                            </div>                            <script src="https://kwizly.com/embed/eBxBAO.js" async></script><p>These faction quests are some of the best Bethesda has ever made, and they can be further supplemented with the many interesting standalone side missions that have you doing everything from discovering a Batman-type vigilante to resolving a dispute between planetary neighbors. With your map marker always pointing you in the direction of a mission, it’s hard to get too hung up on Starfield’s repetitive exploration, because you can just ignore it.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="23TLHpG3Uaf72xAUnp9YxW" name="starfield-ps5-screenshot-02.JPG" alt="Screenshot taken from Starfield running on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/23TLHpG3Uaf72xAUnp9YxW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bethesda Game Studios)</span></figcaption></figure><p>Players seeking content, content, and more content will also find an abundance of it here. If you don’t mind completing similar tasks dozens of times and collecting endless resources for crafting, there’s a whole outpost system to wrap your head around. This lets you colonize numerous planets. And you could lose hours in the game’s deep spaceship-building system. </p><p>Quantity over quality is not necessarily a strength, but considering the current darling of the gaming world is <a href="https://www.tomsguide.com/gaming/crimson-desert-review">Crimson Desert</a> (a game so vast that you can spend 50+ hours in the starting zone alone), it’s clear that many RPG players aren’t satisfied unless a game can become such a time sink that it borders on a second job. Starfield totally meets that brief. You could play this for months.</p><h2 id="starfield-on-ps5-isn-t-the-perfect-port">Starfield on PS5 isn’t the perfect port</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="U4MQCQhkm6ZiHDwhfd8R3X" name="starfield-ps5-screenshot-05.JPG" alt="Screenshot taken from Starfield running on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/U4MQCQhkm6ZiHDwhfd8R3X-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bethesda Game Studios)</span></figcaption></figure><p>While I’m delighted to have an excuse to return to the world of Starfield and re-experience my favorite faction quests for a second time, I have been a little let down by the quality of Starfield’s PS5 port from a technical perspective.</p><p>I’m a framerate-above-all type of player, so I have opted to play in the dedicated “Performance” mode, which the game recommends if you desire a 60 fps target. Even with the trade-off in image resolution, Starfield on PS5 Pro does not maintain a locked 60. The dips aren’t so bad as to spoil the experience, but I’ve definitely endured more than I’d like. Things get particularly bad in larger cities or when quickly moving between zones.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ydqFwawTCDCC7KFnKmCAxW" name="starfield-ps5-screenshot-03.JPG" alt="Screenshot taken from Starfield running on PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/ydqFwawTCDCC7KFnKmCAxW-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bethesda Game Studios)</span></figcaption></figure><p>Furthermore, hard crashes appear to be a problem plaguing many a PS5 playthrough. As noted, Starfield’s PS5 release coincides with the new “Free Lanes” update, which expands your options while flying your ship between planets. Rather inauspiciously, the first time I attempted to use the new “cruise” feature, my game locked up. And it did the same the second time I tried it. This <a href="https://www.reddit.com/r/PS5/comments/1seyhqk/starfield_official_discussion_thread/" target="_blank">Reddit thread</a> suggests that crashes aren’t entirely uncommon.</p><p>Considering the PS5 port comes nearly three years post-launch, with a wealth of patches baked in, it’s certainly frustrating to be grappling with technical hiccups in what should be the definitive console version of the game. Hopefully, there is a PS5 patch or two in the pipeline. But, putting these blemishes aside, I maintain that Starfield is a game worth experiencing by anybody with a fondness for Bethesda’s unique brand of RPG goodness. </p><p>In my eyes, it certainly doesn’t deserve the intense, often vitriolic, backlash that has followed it since launch. There’s a lot of good stuff here, and if you’re craving a game that lets you feel like a hero traveling the stars to complete odd jobs and universe-saving missions alike, there’s little else like Starfield.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/reviews/starfield">Read our original Starfield review from 2023</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/new-ps5-dashboard-leaks-and-it-looks-like-the-ps4-in-the-best-possible-way">New PS5 dashboard leaks, and it looks like the PS4</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/i-just-played-crimson-desert-on-ps5-pro-heres-how-this-massive-rpg-looks-and-runs-on-console">I just played Crimson Desert on PS5 Pro — here’s how it runs</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Sony will allegedly launch three PS6 systems, including two consoles and a handheld, claims leaker ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Sony's next-generation PlayStation consoles could come in a unique lineup featuring three models: a PS6 S (or Lite), a PS6 handheld, and a full <a href="https://www.tomsguide.com/gaming/playstation/ps6-leaks-and-rumors">PlayStation 6</a>. The S and handheld models would feature the AMD-built<a href="https://www.tomsguide.com/gaming/ps6-and-new-playstation-handheld-specs-reportedly-leak-and-suggest-a-huge-upgrade-over-ps5"> Canis chipset,</a> while the full model would have the more powerful Orion CPU.</p><p>The latest leak comes from the YouTube channel <a href="https://www.youtube.com/watch?v=pTy8lNZIRH0" target="_blank">Moore's Law is Dead</a> in a video where the host attempted to lay out pricing for Sony's future consoles. </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/pTy8lNZIRH0" allowfullscreen></iframe></div></div><p>The relevant portion starts about 15 minutes in, but here's the cogent bit for our purposes.</p><p>The price range for Sony's new lineup is $350 to $1,000. Again, this is an estimation on MLID's part based on component costs and potential tariffs. The price ranges below are based on estimates that factor in a 30% tariff protection and those that do not. MLID also notes that it's based on current RAM prices, which could change by the time Sony actually starts purchasing RAM.</p><ul><li>'PS6 S' - $349 - $549</li><li>PS6 handheld - $499 - $699</li><li>PS6 full console - $699 - $999</li></ul><p>He goes on to say that the Orion-based console could have two versions, similar to the PS5 at launch, with a disc-based variant and a digital-only one. Though I lean toward Sony finally ditching the discs in favor of a disc-drive add-on similar to what it offers now. </p><p>It'll be interesting to see how Sony prices the next generation since the current global situation has forced companies to raise prices. The b<a href="https://www.tomsguide.com/gaming/playstation/major-sony-ps5-price-hike-just-hit-all-models-heres-what-youll-pay-now">ase PS5 starts at $599 </a>for the digital edition, while the Pro model is $899. Every single PS5 now costs hundreds more than it did at launch, something that rarely happens as a console ages.</p><h2 id="what-s-coming">What's coming?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="D7fkKdWiz2eA8rZcCEWyJR" name="PS5 Slim.jpg" alt="PS5 Slim" src="https://cdn.mos.cms.futurecdn.net/D7fkKdWiz2eA8rZcCEWyJR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Based on previous leaks regarding the Canis and Orion chips, the Canis chip should be more powerful than the Xbox Series S and the Nintendo Switch 2 but slightly less capable than the base PS5. </p><p>To date, Sony has been pretty mum on its plans for the next generation. Last fall, Sony's <a href="https://www.tomsguide.com/gaming/playstation/ps6-is-coming-in-a-few-years-sony-and-amd-just-teased-3-breakthrough-graphics-features-for-the-future-of-gaming">Mark Cerny confirmed</a> that the PS6 was a few years away in a discussion with AMD's Jack Huynh. </p><p>They did say that the two companies are refining ray and path tracing to reduce the stress on the GPU. It could also have lower power consumption. The PS5 is a behemoth, and it would be nice if the next-gen could shrink back down a bit.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O6PpVe"></div>                            </div>                            <script src="https://kwizly.com/embed/O6PpVe.js" async></script><p>Cerny did seem to indicate that the PS6 chips could open things up for a handheld.</p><p>"There's a multitude of benefits for this, including lower power consumption, higher fidelity assets, and perhaps most importantly, the synergies that Universal Compression has with Neural Arrays and Radiance Cores as we work together to deliver the best possible experiences to gamers."</p><p>Current rumors suggest that the PlayStation 6 will debut in 2027, possibly 2028. Some of this may depend on <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a>, but 2027 has been the most consistent release window that we've seen.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/audio/headphones/airpods-max-2-vs-sony-wh-1000xm6#section-airpods-max-2-vs-sony-wh-1000xm6-price">I tested the AirPods Max 2 vs Sony WH-1000XM6 — here's the winner</a></li><li><a href="https://www.tomsguide.com/tvs/i-saw-sonys-true-rgb-up-close-and-the-downfall-of-oled-tvs-might-come-sooner-than-expected">I saw Sony's True RGB up close — and the downfall of OLED TVs might come sooner than expected</a></li><li><a href="https://www.tomsguide.com/tvs/tcl-and-sony-are-joining-forces-to-sell-more-tvs-but-is-that-bad-news-for-shoppers">TCL and Sony are joining forces to sell more TVs — but is that bad news for shoppers?</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/sony-will-allegedly-launch-three-ps6-systems-including-two-consoles-and-a-handheld-claims-leaker</link>
                                                                            <description>
                            <![CDATA[ A new leak claims Sony plans to release three PS6 systems: two consoles and a handheld device. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">apYvkQKkyKcBkvZne65tJ6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/A92fAFp8GUDRCcdSBJbUKd-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 10 Apr 2026 19:49:19 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/A92fAFp8GUDRCcdSBJbUKd-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony Interactive Entertainment]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PS5 Pro]]></media:description>                                                            <media:text><![CDATA[PS5 Pro]]></media:text>
                                <media:title type="plain"><![CDATA[PS5 Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/A92fAFp8GUDRCcdSBJbUKd-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Sony's next-generation PlayStation consoles could come in a unique lineup featuring three models: a PS6 S (or Lite), a PS6 handheld, and a full <a href="https://www.tomsguide.com/gaming/playstation/ps6-leaks-and-rumors">PlayStation 6</a>. The S and handheld models would feature the AMD-built<a href="https://www.tomsguide.com/gaming/ps6-and-new-playstation-handheld-specs-reportedly-leak-and-suggest-a-huge-upgrade-over-ps5"> Canis chipset,</a> while the full model would have the more powerful Orion CPU.</p><p>The latest leak comes from the YouTube channel <a href="https://www.youtube.com/watch?v=pTy8lNZIRH0" target="_blank">Moore's Law is Dead</a> in a video where the host attempted to lay out pricing for Sony's future consoles. </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/pTy8lNZIRH0" allowfullscreen></iframe></div></div><p>The relevant portion starts about 15 minutes in, but here's the cogent bit for our purposes.</p><p>The price range for Sony's new lineup is $350 to $1,000. Again, this is an estimation on MLID's part based on component costs and potential tariffs. The price ranges below are based on estimates that factor in a 30% tariff protection and those that do not. MLID also notes that it's based on current RAM prices, which could change by the time Sony actually starts purchasing RAM.</p><ul><li>'PS6 S' - $349 - $549</li><li>PS6 handheld - $499 - $699</li><li>PS6 full console - $699 - $999</li></ul><p>He goes on to say that the Orion-based console could have two versions, similar to the PS5 at launch, with a disc-based variant and a digital-only one. Though I lean toward Sony finally ditching the discs in favor of a disc-drive add-on similar to what it offers now. </p><p>It'll be interesting to see how Sony prices the next generation since the current global situation has forced companies to raise prices. The b<a href="https://www.tomsguide.com/gaming/playstation/major-sony-ps5-price-hike-just-hit-all-models-heres-what-youll-pay-now">ase PS5 starts at $599 </a>for the digital edition, while the Pro model is $899. Every single PS5 now costs hundreds more than it did at launch, something that rarely happens as a console ages.</p><h2 id="what-s-coming">What's coming?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="D7fkKdWiz2eA8rZcCEWyJR" name="PS5 Slim.jpg" alt="PS5 Slim" src="https://cdn.mos.cms.futurecdn.net/D7fkKdWiz2eA8rZcCEWyJR-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Based on previous leaks regarding the Canis and Orion chips, the Canis chip should be more powerful than the Xbox Series S and the Nintendo Switch 2 but slightly less capable than the base PS5. </p><p>To date, Sony has been pretty mum on its plans for the next generation. Last fall, Sony's <a href="https://www.tomsguide.com/gaming/playstation/ps6-is-coming-in-a-few-years-sony-and-amd-just-teased-3-breakthrough-graphics-features-for-the-future-of-gaming">Mark Cerny confirmed</a> that the PS6 was a few years away in a discussion with AMD's Jack Huynh. </p><p>They did say that the two companies are refining ray and path tracing to reduce the stress on the GPU. It could also have lower power consumption. The PS5 is a behemoth, and it would be nice if the next-gen could shrink back down a bit.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O6PpVe"></div>                            </div>                            <script src="https://kwizly.com/embed/O6PpVe.js" async></script><p>Cerny did seem to indicate that the PS6 chips could open things up for a handheld.</p><p>"There's a multitude of benefits for this, including lower power consumption, higher fidelity assets, and perhaps most importantly, the synergies that Universal Compression has with Neural Arrays and Radiance Cores as we work together to deliver the best possible experiences to gamers."</p><p>Current rumors suggest that the PlayStation 6 will debut in 2027, possibly 2028. Some of this may depend on <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a>, but 2027 has been the most consistent release window that we've seen.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/audio/headphones/airpods-max-2-vs-sony-wh-1000xm6#section-airpods-max-2-vs-sony-wh-1000xm6-price">I tested the AirPods Max 2 vs Sony WH-1000XM6 — here's the winner</a></li><li><a href="https://www.tomsguide.com/tvs/i-saw-sonys-true-rgb-up-close-and-the-downfall-of-oled-tvs-might-come-sooner-than-expected">I saw Sony's True RGB up close — and the downfall of OLED TVs might come sooner than expected</a></li><li><a href="https://www.tomsguide.com/tvs/tcl-and-sony-are-joining-forces-to-sell-more-tvs-but-is-that-bad-news-for-shoppers">TCL and Sony are joining forces to sell more TVs — but is that bad news for shoppers?</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ New PS5 dashboard leaks and it looks like the PS4 in the best possible way ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Your <a href="https://www.tomsguide.com/reviews/ps5">PlayStation 5</a> could be getting a new home menu layout according to a beta tester. Being honest, it looks pretty good with the system apps and icons shifting from the bottom of the screen to the top in a move that is more reminiscent of the PS4 and PS3 menus.</p><p>An image of the new UI was<a href="https://www.reddit.com/r/playstation/comments/1se03qt/new_playstation_home_screen_ui/?utm_source=embedv2&utm_medium=post_embed&utm_content=post_title&embed_host_url=https%3A%2F%2Fwww.playstationlifestyle.net%2F2026%2F04%2F06%2Fps5-update-april-2026-ui-redesign%2F" target="_blank"> shared on Reddit</a> (spotted by <a href="https://x.com/videotech/status/2041493767924895879" target="_blank">Ben VideoTech on X</a>) where the poster, who said they're enrolled in the PlayStation 5 beta program, discovered a new dashboard. The updated dashboard appears to move the Media, Games, PS Plus, and PSN Store icons to the top of the screen with the submenus</p><p>Nicely, it appears you can swap through the menus by pressing the L1 and R1 buttons on your DualSense.</p><figure><blockquote class="reddit-card"  ><a href="https://www.reddit.com/r/playstation/comments/1se03qt/new_playstation_home_screen_ui">New Playstation Home Screen UI</a><figcaption><cite> from <a href="https://www.reddit.com/r/playstation">r/playstation</a></cite></figcaption></blockquote></figure><script async src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script><p>Under Ben VideoTech's post an X user accused them of faking the image. However, another person shared a different photo of the new UI that looks much like the Reddit post. So, it appears this a real test.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2041450878670938328"><p lang="en" dir="ltr">yes, it's real pic.twitter.com/h41zWYxDIq<a href="https://twitter.com/cantworkitout/status/2041450878670938328">April 7, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Sony hasn't confrimed that this new home layout is in the works. However, based on these images the test looks fairly finished and I'm knocking on wood that it actually releases to the public soon.</p><p>Tom's Guide reached out to PlayStation for comment and will update if the company responds. </p><p>At this point in the PS5's lifecycle I've gotten used to the PS5 menu but if I had my druthers, I would prefer something similar to the PS4 dashboard. I loved the custom themes and wallpapers that you could install to personalize your console.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OdvlQe"></div>                            </div>                            <script src="https://kwizly.com/embed/OdvlQe.js" async></script><p>The PS5 has some themes like the <a href="https://www.tomsguide.com/gaming/playstation/how-to-get-the-classic-playstation-boot-screens-on-ps5-and-ps5-pro">30th anniversary boot screen</a> and the seasonal PlayStation shapes logos theme. Unfortunately, both of those get covered up by the splash screens for games and other menus and as such, the only way to really see them is in the the Welcome submenu.</p><p>If this update comes to fruition it will quickly become one that we'll all wonder why Sony didn't implement years earlier. </p><p>If you're a PS5 Beta member and you've got the new UI let us know and tell us what you think!</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/gaming-peripherals/i-tried-genkis-covert-dock-3-with-the-nintendo-switch-2-and-it-beats-the-official-dock-for-one-key-reason">I tried Genki’s new Covert Dock 3 and it beats the Switch 2's official dock for one big reason</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/i-upgraded-my-7-year-old-office-chair-to-a-tx3-solo-360-gaming-chair-and-i-should-have-done-this-sooner">I upgraded my 7-year-old office chair to a TX3 Solo 360 gaming chair — and I should have done this sooner</a></li><li><a href="https://www.tomsguide.com/gaming/nintendo/i-never-understood-the-cozy-game-hype-until-i-played-pokemon-pokopia-and-after-200-hours-i-still-cant-put-it-down">I never understood the cozy game hype until I played Pokémon Pokopia — and after 200 hours, I still can't put it down</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/new-ps5-dashboard-leaks-and-it-looks-like-the-ps4-in-the-best-possible-way</link>
                                                                            <description>
                            <![CDATA[ A new leak reveals a potentially massive change to the PS5 dashboard that could be a welcome update. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Dq6Xn3X27R29Qs6fsGZdhh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DrYFm9CG6ffJrMdLCxTjQS-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 07 Apr 2026 22:37:49 +0000</pubDate>                                                                                                                                <updated>Tue, 07 Apr 2026 22:42:03 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/DrYFm9CG6ffJrMdLCxTjQS-1920-80.jpg">
                                                            <media:credit><![CDATA[Getty Images / Girts Ragelis]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Ps5 controller]]></media:description>                                                            <media:text><![CDATA[Ps5 controller]]></media:text>
                                <media:title type="plain"><![CDATA[Ps5 controller]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DrYFm9CG6ffJrMdLCxTjQS-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Your <a href="https://www.tomsguide.com/reviews/ps5">PlayStation 5</a> could be getting a new home menu layout according to a beta tester. Being honest, it looks pretty good with the system apps and icons shifting from the bottom of the screen to the top in a move that is more reminiscent of the PS4 and PS3 menus.</p><p>An image of the new UI was<a href="https://www.reddit.com/r/playstation/comments/1se03qt/new_playstation_home_screen_ui/?utm_source=embedv2&utm_medium=post_embed&utm_content=post_title&embed_host_url=https%3A%2F%2Fwww.playstationlifestyle.net%2F2026%2F04%2F06%2Fps5-update-april-2026-ui-redesign%2F" target="_blank"> shared on Reddit</a> (spotted by <a href="https://x.com/videotech/status/2041493767924895879" target="_blank">Ben VideoTech on X</a>) where the poster, who said they're enrolled in the PlayStation 5 beta program, discovered a new dashboard. The updated dashboard appears to move the Media, Games, PS Plus, and PSN Store icons to the top of the screen with the submenus</p><p>Nicely, it appears you can swap through the menus by pressing the L1 and R1 buttons on your DualSense.</p><figure><blockquote class="reddit-card"  ><a href="https://www.reddit.com/r/playstation/comments/1se03qt/new_playstation_home_screen_ui">New Playstation Home Screen UI</a><figcaption><cite> from <a href="https://www.reddit.com/r/playstation">r/playstation</a></cite></figcaption></blockquote></figure><script async src="//embed.redditmedia.com/widgets/platform.js" charset="UTF-8"></script><p>Under Ben VideoTech's post an X user accused them of faking the image. However, another person shared a different photo of the new UI that looks much like the Reddit post. So, it appears this a real test.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2041450878670938328"><p lang="en" dir="ltr">yes, it's real pic.twitter.com/h41zWYxDIq<a href="https://twitter.com/cantworkitout/status/2041450878670938328">April 7, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Sony hasn't confrimed that this new home layout is in the works. However, based on these images the test looks fairly finished and I'm knocking on wood that it actually releases to the public soon.</p><p>Tom's Guide reached out to PlayStation for comment and will update if the company responds. </p><p>At this point in the PS5's lifecycle I've gotten used to the PS5 menu but if I had my druthers, I would prefer something similar to the PS4 dashboard. I loved the custom themes and wallpapers that you could install to personalize your console.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OdvlQe"></div>                            </div>                            <script src="https://kwizly.com/embed/OdvlQe.js" async></script><p>The PS5 has some themes like the <a href="https://www.tomsguide.com/gaming/playstation/how-to-get-the-classic-playstation-boot-screens-on-ps5-and-ps5-pro">30th anniversary boot screen</a> and the seasonal PlayStation shapes logos theme. Unfortunately, both of those get covered up by the splash screens for games and other menus and as such, the only way to really see them is in the the Welcome submenu.</p><p>If this update comes to fruition it will quickly become one that we'll all wonder why Sony didn't implement years earlier. </p><p>If you're a PS5 Beta member and you've got the new UI let us know and tell us what you think!</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/gaming-peripherals/i-tried-genkis-covert-dock-3-with-the-nintendo-switch-2-and-it-beats-the-official-dock-for-one-key-reason">I tried Genki’s new Covert Dock 3 and it beats the Switch 2's official dock for one big reason</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/i-upgraded-my-7-year-old-office-chair-to-a-tx3-solo-360-gaming-chair-and-i-should-have-done-this-sooner">I upgraded my 7-year-old office chair to a TX3 Solo 360 gaming chair — and I should have done this sooner</a></li><li><a href="https://www.tomsguide.com/gaming/nintendo/i-never-understood-the-cozy-game-hype-until-i-played-pokemon-pokopia-and-after-200-hours-i-still-cant-put-it-down">I never understood the cozy game hype until I played Pokémon Pokopia — and after 200 hours, I still can't put it down</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 'I've seen people lose their most precious photos' — 9 products you should buy this World Backup Day, chosen by an ex-Apple Genius ]]></title>
                                                                                                <dc:content><![CDATA[ <p>During my four years working at the Apple Genius Bar, I witnessed more heartbreak than you'd expect in a tech store. Parents crying over lost baby photos, students who'd lost their entire thesis, small business owners facing financial ruin because their only copy of critical files had vanished.</p><p>World Backup Day exists for good reason — and if you think "it won't happen to me," you're setting yourself up for disaster. I learned the hard way that hard drives fail, phones get stolen, and ransomware doesn't discriminate. But all hope is not lost; protecting your digital life doesn't have to be complicated or expensive.</p><p>I've selected 9 excellent products on Amazon you should consider on World Backup Day. And remember, not all tech purchases have to be glamorous; Sometimes you need to build the fundamentals so that your more exciting products are set up for success, rather than failure. I've seen people lose their most precious photos; you never want to be that guy.</p>        <div class="featured_product_block featured_block_hero" data-id="4fab8b88-51c2-4439-b5c4-feeddfc3d61d">            <a href="https://www.amazon.com/PHIXERO-P201-External-Sliding-Portable/dp/B0FF4LLMKW/" data-model-name="Phixero USB Drive 256GB External SSD" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RSHfZEcy3nKvXhW5Wnfg2N.jpg" alt="PHIXERO, Phixero USB Drive 256GB External SSD"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PHIXERO</div>                                        <div class="featured__title">Phixero USB Drive 256GB External SSD</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8abcc6ba-5048-47b4-b66f-fe63d85b961a">            <a href="https://www.amazon.com/LaCie-Rugged-External-Portable-LAC9000298/dp/B00IRV005E/" data-model-name="Lacie 2TB Rugged External Hard Drive" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qeUR9p57XEBbwKHbxMTtyN.jpg" alt="Seagate, Lacie 2TB Rugged External Hard Drive"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Seagate</div>                                        <div class="featured__title">Lacie 2TB Rugged External Hard Drive</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="560f3306-fe95-4a5d-b1c8-664aaf992d04">            <a href="https://www.amazon.com/DIGIERA-Magnetic-Portable-External-Compatible/dp/B0FJWT5LF2/" data-model-name="Digigera 1TB Magnetic Portable SSD" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/mhAG7Jp395JSjUkBrn8ctW.jpg" alt="DIGIERA, Digiera 1TB Magnetic Portable SSD"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DIGIGERA</div>                                        <div class="featured__title">Digigera 1TB Magnetic Portable SSD</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="679dfd67-00b9-42c5-8a63-32b8f5e47254">            <a href="https://www.amazon.com/SanDisk-1TB-Extreme-Portable-SDSSDE61-1T00-G25/dp/B08GTYFC37" data-model-name="Sandisk 1TB Extreme Portable SSD" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aQ43dD2BJfQCRpMqGBdFxY.jpg" alt="Sandisk, Sandisk 1TB Extreme Portable SSD"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sandisk</div>                                        <div class="featured__title">Sandisk 1TB Extreme Portable SSD</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f472ba42-8cf2-4e0f-a886-4657cf470462">            <a href="https://www.amazon.com/gp/aw/d/B0DYDHLN81" data-model-name="Lexar Es3 1tb External Ssd, Usb 3.2 Gen2 Portable Ssd, Pssd Up to 1050mb/s Read, 1000mb/s Write, External Solid State Drive Compatible With Iphone 16/15 Series/mac/ps5/xbox/laptop/pc, Silver" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/JpBgbT4GSouWZ6ZZpqHfFa.jpg" alt="Lexar, Lexar Es3 1tb External Ssd, Usb 3.2 Gen2 Portable Ssd, Pssd Up to 1050mb/s Read, 1000mb/s Write, External Solid State Drive Compatible With Iphone 16/15 Series/mac/ps5/xbox/laptop/pc, Silver"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Lexar</div>                                        <div class="featured__title">Lexar Es3 1tb External Ssd, Usb 3.2 Gen2 Portable Ssd, Pssd Up to 1050mb/s Read, 1000mb/s Write, External Solid State Drive Compatible With Iphone 16/15 Series/mac/ps5/xbox/laptop/pc, Silver</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="224c71e1-04df-44e1-882e-ecd380446e36">            <a href="https://www.amazon.com/SAMSUNG-Portable-SSD-1TB-MU-PC1T0T/dp/B0874XN4D8/" data-model-name="Samsung T7 1TB Portable SSD" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wWr5JeduJ6d3CMETC9fdPb.jpg" alt="Samsung, Samsung T7 1TB Portable SSD"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Samsung</div>                                        <div class="featured__title">Samsung T7 1TB Portable SSD</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="86422941-f87f-400c-a84b-c9aed7edfcd1">            <a href="https://www.amazon.com/Seagate-IronWolf-Internal-Hard-Drive/dp/B084ZV4DXB?th=1" data-model-name="Seagate Ironwolf 8TB NAS Internal Hard Drive" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/D2ePcPvZWhEAMjH84zS3N.jpg" alt="Seagate, Seagate Ironwolf 8TB NAS Internal Hard Drive"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Seagate</div>                                        <div class="featured__title">Seagate Ironwolf 8TB NAS Internal Hard Drive</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="94b8f0c7-a574-4e6d-8f9c-8383f459ba29">            <a href="https://www.amazon.com/gp/aw/d/B07D5V2ZXD/" data-model-name="Western Digital 8TB Elements Desktop External Hard Drive" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/4ifWEbek2Xs3UReU3csAD3.jpg" alt="WD, Western Digital 8TB Elements Desktop External Hard Drive"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>WD</div>                                        <div class="featured__title">Western Digital 8TB Elements Desktop External Hard Drive</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1dd1b092-b54b-4c9d-b196-b74e78e96e0c">            <a href="https://www.amazon.com/UGREEN-DXP4800-Plus-Attached-Diskless/dp/B0D22JRHZB?th=1" data-model-name="UGreen Dxp4800 Plus 4-Bay Desktop NAS" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/fdmwYVVHkfTgkMBGKTkBv3.jpg" alt="UGREEN, UGreen Dxp4800 Plus 4-Bay Desktop NAS"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>UGREEN</div>                                        <div class="featured__title">UGreen Dxp4800 Plus 4-Bay Desktop NAS</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><p>World Backup Day only comes once a year, but data loss can happen any day. If there's one thing I learned behind the Genius Bar, it's that the people who back up never think about it — and the people who don't back up think about it every day after they lose everything. Pick at least one product from this list, make that boring, but functional purchase, and give yourself the peace of mind you deserve.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/ive-seen-people-lose-their-most-precious-photos-9-products-you-should-buy-this-world-backup-day-chosen-by-an-ex-apple-genius</link>
                                                                            <description>
                            <![CDATA[ It's World Backup Day 2026, which is the best excuse you need to buy a new hard drive, SSD, or even treat yourself to a NAS. Trust me, you don't want to lose your data. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">hZ6Xv2uDSwG6hFPxWkDGnW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/jRQu6ezuqRSBcDRtdK8QXV-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 31 Mar 2026 10:23:29 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ john-anthony.disotto@futurenet.com (John-Anthony Disotto) ]]></author>                    <dc:creator><![CDATA[ John-Anthony Disotto ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/apUjevMoC6MzjfVN7GBCoi-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;John-Anthony Disotto is the Collections Editor at Tom&#039;s Guide, curating advice on the best products to spend your hard-earned cash on. An award-winning journalist and longtime Apple expert, he previously covered AI at TechRadar and served as How To Editor at iMore.&lt;/p&gt;&lt;p&gt;He used to work for Apple as a technician focused on iOS and iPhone repairs at the Genius Bar and has used the Apple ecosystem for over a decade. In his spare time, John-Anthony can be found watching any sport under the sun, from football to darts, taking the term &#039;Lego house&#039; far too literally as he runs out of space to display any more plastic bricks, or chilling on the couch with his French bulldog, Kermit. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/jRQu6ezuqRSBcDRtdK8QXV-1920-80.jpg">
                                                            <media:credit><![CDATA[Lacie / Sandisk / Ugreen / Lexar / Western Digital / Digigera / Phixero / Intel / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Hard drives and solid state drives world backup day]]></media:description>                                                            <media:text><![CDATA[Hard drives and solid state drives world backup day]]></media:text>
                                <media:title type="plain"><![CDATA[Hard drives and solid state drives world backup day]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/jRQu6ezuqRSBcDRtdK8QXV-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>During my four years working at the Apple Genius Bar, I witnessed more heartbreak than you'd expect in a tech store. Parents crying over lost baby photos, students who'd lost their entire thesis, small business owners facing financial ruin because their only copy of critical files had vanished.</p><p>World Backup Day exists for good reason — and if you think "it won't happen to me," you're setting yourself up for disaster. I learned the hard way that hard drives fail, phones get stolen, and ransomware doesn't discriminate. But all hope is not lost; protecting your digital life doesn't have to be complicated or expensive.</p><p>I've selected 9 excellent products on Amazon you should consider on World Backup Day. And remember, not all tech purchases have to be glamorous; Sometimes you need to build the fundamentals so that your more exciting products are set up for success, rather than failure. I've seen people lose their most precious photos; you never want to be that guy.</p>        <div class="featured_product_block featured_block_hero" data-id="4fab8b88-51c2-4439-b5c4-feeddfc3d61d">            <a href="https://www.amazon.com/PHIXERO-P201-External-Sliding-Portable/dp/B0FF4LLMKW/" data-model-name="Phixero USB Drive 256GB External SSD" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RSHfZEcy3nKvXhW5Wnfg2N.jpg" alt="PHIXERO, Phixero USB Drive 256GB External SSD"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PHIXERO</div>                                        <div class="featured__title">Phixero USB Drive 256GB External SSD</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8abcc6ba-5048-47b4-b66f-fe63d85b961a">            <a href="https://www.amazon.com/LaCie-Rugged-External-Portable-LAC9000298/dp/B00IRV005E/" data-model-name="Lacie 2TB Rugged External Hard Drive" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qeUR9p57XEBbwKHbxMTtyN.jpg" alt="Seagate, Lacie 2TB Rugged External Hard Drive"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Seagate</div>                                        <div class="featured__title">Lacie 2TB Rugged External Hard Drive</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="560f3306-fe95-4a5d-b1c8-664aaf992d04">            <a href="https://www.amazon.com/DIGIERA-Magnetic-Portable-External-Compatible/dp/B0FJWT5LF2/" data-model-name="Digigera 1TB Magnetic Portable SSD" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/mhAG7Jp395JSjUkBrn8ctW.jpg" alt="DIGIERA, Digiera 1TB Magnetic Portable SSD"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>DIGIGERA</div>                                        <div class="featured__title">Digigera 1TB Magnetic Portable SSD</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="679dfd67-00b9-42c5-8a63-32b8f5e47254">            <a href="https://www.amazon.com/SanDisk-1TB-Extreme-Portable-SDSSDE61-1T00-G25/dp/B08GTYFC37" data-model-name="Sandisk 1TB Extreme Portable SSD" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aQ43dD2BJfQCRpMqGBdFxY.jpg" alt="Sandisk, Sandisk 1TB Extreme Portable SSD"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sandisk</div>                                        <div class="featured__title">Sandisk 1TB Extreme Portable SSD</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f472ba42-8cf2-4e0f-a886-4657cf470462">            <a href="https://www.amazon.com/gp/aw/d/B0DYDHLN81" data-model-name="Lexar Es3 1tb External Ssd, Usb 3.2 Gen2 Portable Ssd, Pssd Up to 1050mb/s Read, 1000mb/s Write, External Solid State Drive Compatible With Iphone 16/15 Series/mac/ps5/xbox/laptop/pc, Silver" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/JpBgbT4GSouWZ6ZZpqHfFa.jpg" alt="Lexar, Lexar Es3 1tb External Ssd, Usb 3.2 Gen2 Portable Ssd, Pssd Up to 1050mb/s Read, 1000mb/s Write, External Solid State Drive Compatible With Iphone 16/15 Series/mac/ps5/xbox/laptop/pc, Silver"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Lexar</div>                                        <div class="featured__title">Lexar Es3 1tb External Ssd, Usb 3.2 Gen2 Portable Ssd, Pssd Up to 1050mb/s Read, 1000mb/s Write, External Solid State Drive Compatible With Iphone 16/15 Series/mac/ps5/xbox/laptop/pc, Silver</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="224c71e1-04df-44e1-882e-ecd380446e36">            <a href="https://www.amazon.com/SAMSUNG-Portable-SSD-1TB-MU-PC1T0T/dp/B0874XN4D8/" data-model-name="Samsung T7 1TB Portable SSD" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wWr5JeduJ6d3CMETC9fdPb.jpg" alt="Samsung, Samsung T7 1TB Portable SSD"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Samsung</div>                                        <div class="featured__title">Samsung T7 1TB Portable SSD</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="86422941-f87f-400c-a84b-c9aed7edfcd1">            <a href="https://www.amazon.com/Seagate-IronWolf-Internal-Hard-Drive/dp/B084ZV4DXB?th=1" data-model-name="Seagate Ironwolf 8TB NAS Internal Hard Drive" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/D2ePcPvZWhEAMjH84zS3N.jpg" alt="Seagate, Seagate Ironwolf 8TB NAS Internal Hard Drive"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Seagate</div>                                        <div class="featured__title">Seagate Ironwolf 8TB NAS Internal Hard Drive</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="94b8f0c7-a574-4e6d-8f9c-8383f459ba29">            <a href="https://www.amazon.com/gp/aw/d/B07D5V2ZXD/" data-model-name="Western Digital 8TB Elements Desktop External Hard Drive" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/4ifWEbek2Xs3UReU3csAD3.jpg" alt="WD, Western Digital 8TB Elements Desktop External Hard Drive"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>WD</div>                                        <div class="featured__title">Western Digital 8TB Elements Desktop External Hard Drive</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1dd1b092-b54b-4c9d-b196-b74e78e96e0c">            <a href="https://www.amazon.com/UGREEN-DXP4800-Plus-Attached-Diskless/dp/B0D22JRHZB?th=1" data-model-name="UGreen Dxp4800 Plus 4-Bay Desktop NAS" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/fdmwYVVHkfTgkMBGKTkBv3.jpg" alt="UGREEN, UGreen Dxp4800 Plus 4-Bay Desktop NAS"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>UGREEN</div>                                        <div class="featured__title">UGreen Dxp4800 Plus 4-Bay Desktop NAS</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><p>World Backup Day only comes once a year, but data loss can happen any day. If there's one thing I learned behind the Genius Bar, it's that the people who back up never think about it — and the people who don't back up think about it every day after they lose everything. Pick at least one product from this list, make that boring, but functional purchase, and give yourself the peace of mind you deserve.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ PS5 prices increase tomorrow — buy one from Sony for under $400 today! ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Sony gave gamers around the world some bad news last week by announcing major price increases to PlayStation 5 consoles starting from April 2nd.</p><p>Luckily, if you've been pondering buying a PS5 to play some of the best games on the market, or in anticipation of the biggest video game release of all time: GTA 6, you've still got time to pick one up before more than $100 is added to the console's listing price.</p><p>I've curated my favorite PS5 accessories, games, and some TV and gaming monitor options. And I've also listed the PS5 consoles you can buy right now on Amazon with up to 20% off, based on the price hikes that are about to be introduced.</p><p>Even better, there's an incredible deal at Sony right now, which gets you a <a href="https://direct.playstation.com/en-us/buy-consoles/certified-refurbished-playstation5-console">PS5 with a disk drive for $399</a>. It's refurbished, but it comes with a 12-month warranty from the Japanese gaming giant.</p><p>I love my PS5 Pro and upgraded to the more powerful console as soon as it was released. That said, I don't think I could justify buying one for $899, so I highly advise anyone with a remote interest in playing the best video game console on the market to pick one up at $749 before it's too late.</p><h3 class="article-body__section" id="section-ps5-consoles"><span>PS5 Consoles</span></h3>        <div class="featured_product_block featured_block_hero" data-id="cb1cae1e-41d1-4d4a-9d21-30074a8960de">            <a href="https://direct.playstation.com/en-us/buy-consoles/certified-refurbished-playstation5-console" data-model-name="PS5 Console - 1TB" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/6by5NZnYCEbHZNPLcg6vyj.jpg" alt="PlayStation, PS5 Console - 1TB"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">PS5 Console - 1TB</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a7e1faaa-83c0-43b6-8033-fcce6bda877f">            <a href="https://www.amazon.com/PlayStation-5-Pro-Console-2TB/dp/B0FTMY4YZ2/" data-model-name="PS5 Pro Console - 2TB" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QnmdZn3EyvKmgMFEUGAPLi.jpg" alt="SONY, PS5 Pro Console - 2TB"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SONY</div>                                        <div class="featured__title">PS5 Pro Console - 2TB</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bad72eb0-04be-4110-8dbd-c7155f2bfc6e">            <a href="https://www.amazon.com/PS5-Playstation-Digital-Wireless-Controller/dp/B0966NLTZS/" data-model-name="PS5 Digital Edition Console - 825GB" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/mstkCC24qyxUFpJGFZ43Fj.jpg" alt="Sony, PS5 Digital Edition Console - 825GB"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sony</div>                                        <div class="featured__title">PS5 Digital Edition Console - 825GB</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-ps5-accessories"><span>PS5 Accessories</span></h3><p>There are so many PS5 accessories to choose from, but I've selected a variety of products from Amazon's Big Spring Sale, just to make the most of the excellent discounts. Whether you're looking for a headset, a stand, or an extra controller, you'll find one below.</p>        <div class="featured_product_block featured_block_hero" data-id="6f08d990-02e7-4b46-a86b-88fc81e70a04">            <a href="https://www.amazon.com/UGREEN-Bluetooth-aptX-Adaptive-Transmitter-Headphones/dp/B0D7CKV1J8/" data-model-name="UGreen USB-C Bluetooth Adapter for PS5, Bluetooth 5.3" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/VBCYr9NtMTBiVuLVP97o45.jpg" alt="UGREEN, UGreen USB-C Bluetooth Adapter for PS5, Bluetooth 5.3"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>UGREEN</div>                                        <div class="featured__title">UGreen USB-C Bluetooth Adapter for PS5, Bluetooth 5.3</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b234fcf5-7594-495b-b8c5-bbea53e69a74">            <a href="https://www.amazon.com/OIVO-Controller-Compatible-Playstation-Indicators/dp/B08LZGPPBH/" data-model-name="Oivo Ps5 Controller Charger With Fast Charging" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/VpdQvPauDJJxrYBEemYS56.jpg" alt="OIVO, Oivo Ps5 Controller Charger With Fast Charging"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>OIVO</div>                                        <div class="featured__title">Oivo Ps5 Controller Charger With Fast Charging</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="41b6c551-85a6-49d7-b866-077f986df012">            <a href="https://www.amazon.com/Razer-BlackShark-HyperSpeed-Wireless-Gaming-Headset/dp/B0FDPM6DWH/" data-model-name="Razer Blackshark V3 X Hyperspeed Wireless Gaming Headset" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/MymE97ZUN8qmY7LtJACCo6.jpg" alt="Razer, Razer Blackshark V3 X Hyperspeed Wireless Gaming Headset"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Razer</div>                                        <div class="featured__title">Razer Blackshark V3 X Hyperspeed Wireless Gaming Headset</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="50976bca-ff6c-4a00-a1d9-7527009e04eb">            <a href="https://www.amazon.com/Logitech-G435-Wireless-Gaming-Headset/dp/B08R8DT7X6/" data-model-name="Logitech G435 Lightspeed Wireless Gaming Headset" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/BUpwGVbpTuJekzhJCwKPY7.jpg" alt="Logitech G, Logitech G435 Lightspeed Wireless Gaming Headset"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Logitech G</div>                                        <div class="featured__title">Logitech G435 Lightspeed Wireless Gaming Headset</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="7950e5dd-e1d5-40da-8e8b-73fa11a5f084">            <a href="https://www.amazon.com/Sony-DualSense-Wireless-Controller-PlayStation-5/dp/B097YYGXY5" data-model-name="PlayStation Dualsense Wireless Controller (Renewed)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CzdGXujfMCzCNKgN7w92P8.jpg" alt="PlayStation, PlayStation Dualsense Wireless Controller (Renewed)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">PlayStation Dualsense Wireless Controller (Renewed)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8e620b97-7824-4041-88ec-84a65197e226">            <a href="https://www.amazon.com/Cooling-Controller-Charging-Playstation-Accessories/dp/B09QGK2LW3/" data-model-name="PS5/PS5 Slim/PS5 Pro Stand and Cooling Station With Dual Controller Charging" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/hvgpdMc2zRuT4gYGmFYy99.jpg" alt="CYKOARMOR, PS5/PS5 Slim/PS5 Pro Stand and Cooling Station With Dual Controller Charging"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CYKOARMOR</div>                                        <div class="featured__title">PS5/PS5 Slim/PS5 Pro Stand and Cooling Station With Dual Controller Charging</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-ps5-games"><span>PS5 Games</span></h3><p>The PS5 games library is excellent, and as someone who's played all of the major releases since the console's launch in 2020, I've chosen some of my favorites to share with you. Whether you're looking for superhero action in Spider-Man 2 or one of the best JRPGs ever made in Clair Obscur Expedition 33, there's a game on offer below for everyone.</p>        <div class="featured_product_block featured_block_hero" data-id="a969890b-19de-44b2-9796-975e22ebd76a">            <a href="https://www.amazon.com/Ghost-Y%C5%8Dtei-PS5-PlayStation-5/dp/B0F6F41T4H/" data-model-name="Ghost of Yōtei" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2emyiZq6pfuuvYThmdqbt9.jpg" alt="PlayStation, Ghost of Yōtei"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Ghost of Yōtei</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="32baa33a-e3be-4477-bc76-d2b530ba624a">            <a href="https://www.amazon.com/God-War-Ragnar%C3%B6k-PC/dp/B0B6CMDSMW/" data-model-name="God of War Ragnarök" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/gp3kXFejEMck2otjKzCqiA.jpg" alt="PlayStation, God of War Ragnarök"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">God of War Ragnarök</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8a69c5d7-16be-49a9-aec8-fc5137fb62c3">            <a href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB/" data-model-name="Marvel’s Spider-Man 2" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/yNTj7KfGsTMTLqxaBRCuUB.jpg" alt="PlayStation, Marvel’s Spider-Man 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Marvel’s Spider-Man 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b0b97c2b-f217-4587-a1a6-23ba46785970">            <a href="https://www.amazon.com/Returnal-PlayStation-5/dp/B08QFPS48J/" data-model-name="Returnal" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/BS2spZv8DFDYDsxhWAgDXC.jpg" alt="PlayStation, Returnal"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Returnal</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1128b6d2-5b44-4288-94d3-357332814c19">            <a href="https://www.amazon.com/Last-Us-Part-PlayStation-5/dp/B0B3QWRQL8/" data-model-name="The Last of Us Part I" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ivhuHihZA3tXDKeaC4SECD.jpg" alt="PlayStation, The Last of Us Part I"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">The Last of Us Part I</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="77271fbb-20df-449e-a4ab-479436314606">            <a href="https://www.amazon.com/Clair-Obscur-Expedition-PS5-PlayStation-5/dp/B0DK6225DY/" data-model-name="Clair Obscur Expedition 33" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qitVjpTRLMoBcghHfQ8byD.jpg" alt="Maximum Entertainment, Clair Obscur Expedition 33"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Maximum Entertainment</div>                                        <div class="featured__title">Clair Obscur Expedition 33</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-tv-and-gaming-monitors"><span>TV and Gaming Monitors</span></h3><p>If you're buying a new PS5, you might want to pick up a new TV or gaming monitor too. I've chosen six of the best deals in Amazon's Big Spring Sale, and there's a wide-variety of price ranges depending on your budget.</p>        <div class="featured_product_block featured_block_hero" data-id="69564a09-64ca-4ddb-b4e5-f87a9a087baa">            <a href="https://www.amazon.com/Hisense-Cinema-Hi-QLED-Smart-55E6QF/dp/B0FHLGWJNS/" data-model-name="Hisense 55" E6 Cinema Series Hi-QLED 4K" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xyuZaDDh2QgsLNX2mNJUkE.jpg" alt="Hisense, Hisense 55" E6 Cinema Series Hi-QLED 4K"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Hisense</div>                                        <div class="featured__title">Hisense 55" E6 Cinema Series Hi-QLED 4K</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6ee7f131-feab-4d8d-95d7-c627e5894662">            <a href="https://www.amazon.com/Hisense-Class-Mini-LED-Smart-75QD7QF/dp/B0DYVR8NVD/" data-model-name="Hisense 75" MINI-LED 4k Smart Fire TV" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/8uYXuVN9viy4VgsTwKEQWF.jpg" alt="Hisense, Hisense 75" MINI-LED 4k Smart Fire TV"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Hisense</div>                                        <div class="featured__title">Hisense 75" MINI-LED 4k Smart Fire TV</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="87dbe7ab-d9e7-47f1-98d0-4e2322b33868">            <a href="https://www.amazon.com/SAMSUNG-55-Inch-Tracking-Processor-Contour/dp/B0DXN3SDLL/" data-model-name="Samsung 55-Inch Class OLED 4K S85F" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/6zyNSgU62ZKpAApYp98XCG.jpg" alt="Samsung, Samsung 55-Inch Class OLED 4K S85F"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Samsung</div>                                        <div class="featured__title">Samsung 55-Inch Class OLED 4K S85F</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d7cc105c-6baa-4d96-81ce-268df777c2d4">            <a href="https://www.amazon.com/Samsung-32-Inch-Odyssey-FreeSync-LS32CG550ENXZA/dp/B0CRGJC5ZD/" data-model-name="Samsung 32" Odyssey G55C Series QHD Gaming Monitor" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RubgtHLpjytp7EQhZeUK3H.jpg" alt="Samsung, Samsung 32" Odyssey G55C Series QHD Gaming Monitor"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Samsung</div>                                        <div class="featured__title">Samsung 32" Odyssey G55C Series QHD Gaming Monitor</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9c169ca0-1456-48f8-9ff3-7649b0faa989">            <a href="https://www.amazon.com/ASUS-Inch-Curved-Gaming-Monitor/dp/B088MKF848/" data-model-name="Asus TUF 32 Inch Curved Gaming Monitor" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/t28PHVS3ytuABmLNHbs3jH.jpg" alt="ASUS, Asus TUF 32 Inch Curved Gaming Monitor"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ASUS</div>                                        <div class="featured__title">Asus TUF 32 Inch Curved Gaming Monitor</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="37137b1a-02a8-4865-b0b4-8fcca7263858">            <a href="https://www.amazon.com/LG-%E2%80%8E27GS93QE-Ultragear-DisplayHDR-DisplayPort/dp/B0DF786923" data-model-name="Lg ‎27GS93QE 27-Inch Ultragear OLED Gaming Monitor" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/tB8K9BgofnGn9UecEW3uRJ.jpg" alt="LG, Lg ‎27GS93QE 27-Inch Ultragear OLED Gaming Monitor"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>LG</div>                                        <div class="featured__title">Lg ‎27GS93QE 27-Inch Ultragear OLED Gaming Monitor</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/last-few-days-to-avoid-ps5-price-hikes-grab-a-pro-games-and-accessories-for-less-than-just-the-console</link>
                                                                            <description>
                            <![CDATA[ The PS5 console range is about to get a huge price increase, but this secret discount can net you one directly from Sony for $399. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">UKrTqkdLjUJmYwZWUvH6uM</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/gXSEaKYb5GTQcmF5VG443W-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 30 Mar 2026 11:00:54 +0000</pubDate>                                                                                                                                <updated>Wed, 01 Apr 2026 14:50:51 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ john-anthony.disotto@futurenet.com (John-Anthony Disotto) ]]></author>                    <dc:creator><![CDATA[ John-Anthony Disotto ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/apUjevMoC6MzjfVN7GBCoi-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;John-Anthony Disotto is the Collections Editor at Tom&#039;s Guide, curating advice on the best products to spend your hard-earned cash on. An award-winning journalist and longtime Apple expert, he previously covered AI at TechRadar and served as How To Editor at iMore.&lt;/p&gt;&lt;p&gt;He used to work for Apple as a technician focused on iOS and iPhone repairs at the Genius Bar and has used the Apple ecosystem for over a decade. In his spare time, John-Anthony can be found watching any sport under the sun, from football to darts, taking the term &#039;Lego house&#039; far too literally as he runs out of space to display any more plastic bricks, or chilling on the couch with his French bulldog, Kermit. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/gXSEaKYb5GTQcmF5VG443W-1920-80.jpg">
                                                            <media:credit><![CDATA[Future / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PS5 Slim console positioned horizontally on table]]></media:description>                                                            <media:text><![CDATA[PS5 Slim console positioned horizontally on table]]></media:text>
                                <media:title type="plain"><![CDATA[PS5 Slim console positioned horizontally on table]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/gXSEaKYb5GTQcmF5VG443W-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Sony gave gamers around the world some bad news last week by announcing major price increases to PlayStation 5 consoles starting from April 2nd.</p><p>Luckily, if you've been pondering buying a PS5 to play some of the best games on the market, or in anticipation of the biggest video game release of all time: GTA 6, you've still got time to pick one up before more than $100 is added to the console's listing price.</p><p>I've curated my favorite PS5 accessories, games, and some TV and gaming monitor options. And I've also listed the PS5 consoles you can buy right now on Amazon with up to 20% off, based on the price hikes that are about to be introduced.</p><p>Even better, there's an incredible deal at Sony right now, which gets you a <a href="https://direct.playstation.com/en-us/buy-consoles/certified-refurbished-playstation5-console">PS5 with a disk drive for $399</a>. It's refurbished, but it comes with a 12-month warranty from the Japanese gaming giant.</p><p>I love my PS5 Pro and upgraded to the more powerful console as soon as it was released. That said, I don't think I could justify buying one for $899, so I highly advise anyone with a remote interest in playing the best video game console on the market to pick one up at $749 before it's too late.</p><h3 class="article-body__section" id="section-ps5-consoles"><span>PS5 Consoles</span></h3>        <div class="featured_product_block featured_block_hero" data-id="cb1cae1e-41d1-4d4a-9d21-30074a8960de">            <a href="https://direct.playstation.com/en-us/buy-consoles/certified-refurbished-playstation5-console" data-model-name="PS5 Console - 1TB" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/6by5NZnYCEbHZNPLcg6vyj.jpg" alt="PlayStation, PS5 Console - 1TB"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">PS5 Console - 1TB</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a7e1faaa-83c0-43b6-8033-fcce6bda877f">            <a href="https://www.amazon.com/PlayStation-5-Pro-Console-2TB/dp/B0FTMY4YZ2/" data-model-name="PS5 Pro Console - 2TB" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QnmdZn3EyvKmgMFEUGAPLi.jpg" alt="SONY, PS5 Pro Console - 2TB"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SONY</div>                                        <div class="featured__title">PS5 Pro Console - 2TB</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bad72eb0-04be-4110-8dbd-c7155f2bfc6e">            <a href="https://www.amazon.com/PS5-Playstation-Digital-Wireless-Controller/dp/B0966NLTZS/" data-model-name="PS5 Digital Edition Console - 825GB" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/mstkCC24qyxUFpJGFZ43Fj.jpg" alt="Sony, PS5 Digital Edition Console - 825GB"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Sony</div>                                        <div class="featured__title">PS5 Digital Edition Console - 825GB</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-ps5-accessories"><span>PS5 Accessories</span></h3><p>There are so many PS5 accessories to choose from, but I've selected a variety of products from Amazon's Big Spring Sale, just to make the most of the excellent discounts. Whether you're looking for a headset, a stand, or an extra controller, you'll find one below.</p>        <div class="featured_product_block featured_block_hero" data-id="6f08d990-02e7-4b46-a86b-88fc81e70a04">            <a href="https://www.amazon.com/UGREEN-Bluetooth-aptX-Adaptive-Transmitter-Headphones/dp/B0D7CKV1J8/" data-model-name="UGreen USB-C Bluetooth Adapter for PS5, Bluetooth 5.3" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/VBCYr9NtMTBiVuLVP97o45.jpg" alt="UGREEN, UGreen USB-C Bluetooth Adapter for PS5, Bluetooth 5.3"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>UGREEN</div>                                        <div class="featured__title">UGreen USB-C Bluetooth Adapter for PS5, Bluetooth 5.3</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b234fcf5-7594-495b-b8c5-bbea53e69a74">            <a href="https://www.amazon.com/OIVO-Controller-Compatible-Playstation-Indicators/dp/B08LZGPPBH/" data-model-name="Oivo Ps5 Controller Charger With Fast Charging" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/VpdQvPauDJJxrYBEemYS56.jpg" alt="OIVO, Oivo Ps5 Controller Charger With Fast Charging"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>OIVO</div>                                        <div class="featured__title">Oivo Ps5 Controller Charger With Fast Charging</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="41b6c551-85a6-49d7-b866-077f986df012">            <a href="https://www.amazon.com/Razer-BlackShark-HyperSpeed-Wireless-Gaming-Headset/dp/B0FDPM6DWH/" data-model-name="Razer Blackshark V3 X Hyperspeed Wireless Gaming Headset" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/MymE97ZUN8qmY7LtJACCo6.jpg" alt="Razer, Razer Blackshark V3 X Hyperspeed Wireless Gaming Headset"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Razer</div>                                        <div class="featured__title">Razer Blackshark V3 X Hyperspeed Wireless Gaming Headset</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="50976bca-ff6c-4a00-a1d9-7527009e04eb">            <a href="https://www.amazon.com/Logitech-G435-Wireless-Gaming-Headset/dp/B08R8DT7X6/" data-model-name="Logitech G435 Lightspeed Wireless Gaming Headset" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/BUpwGVbpTuJekzhJCwKPY7.jpg" alt="Logitech G, Logitech G435 Lightspeed Wireless Gaming Headset"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Logitech G</div>                                        <div class="featured__title">Logitech G435 Lightspeed Wireless Gaming Headset</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="7950e5dd-e1d5-40da-8e8b-73fa11a5f084">            <a href="https://www.amazon.com/Sony-DualSense-Wireless-Controller-PlayStation-5/dp/B097YYGXY5" data-model-name="PlayStation Dualsense Wireless Controller (Renewed)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CzdGXujfMCzCNKgN7w92P8.jpg" alt="PlayStation, PlayStation Dualsense Wireless Controller (Renewed)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">PlayStation Dualsense Wireless Controller (Renewed)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8e620b97-7824-4041-88ec-84a65197e226">            <a href="https://www.amazon.com/Cooling-Controller-Charging-Playstation-Accessories/dp/B09QGK2LW3/" data-model-name="PS5/PS5 Slim/PS5 Pro Stand and Cooling Station With Dual Controller Charging" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/hvgpdMc2zRuT4gYGmFYy99.jpg" alt="CYKOARMOR, PS5/PS5 Slim/PS5 Pro Stand and Cooling Station With Dual Controller Charging"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CYKOARMOR</div>                                        <div class="featured__title">PS5/PS5 Slim/PS5 Pro Stand and Cooling Station With Dual Controller Charging</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-ps5-games"><span>PS5 Games</span></h3><p>The PS5 games library is excellent, and as someone who's played all of the major releases since the console's launch in 2020, I've chosen some of my favorites to share with you. Whether you're looking for superhero action in Spider-Man 2 or one of the best JRPGs ever made in Clair Obscur Expedition 33, there's a game on offer below for everyone.</p>        <div class="featured_product_block featured_block_hero" data-id="a969890b-19de-44b2-9796-975e22ebd76a">            <a href="https://www.amazon.com/Ghost-Y%C5%8Dtei-PS5-PlayStation-5/dp/B0F6F41T4H/" data-model-name="Ghost of Yōtei" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2emyiZq6pfuuvYThmdqbt9.jpg" alt="PlayStation, Ghost of Yōtei"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Ghost of Yōtei</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="32baa33a-e3be-4477-bc76-d2b530ba624a">            <a href="https://www.amazon.com/God-War-Ragnar%C3%B6k-PC/dp/B0B6CMDSMW/" data-model-name="God of War Ragnarök" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/gp3kXFejEMck2otjKzCqiA.jpg" alt="PlayStation, God of War Ragnarök"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">God of War Ragnarök</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8a69c5d7-16be-49a9-aec8-fc5137fb62c3">            <a href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB/" data-model-name="Marvel’s Spider-Man 2" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/yNTj7KfGsTMTLqxaBRCuUB.jpg" alt="PlayStation, Marvel’s Spider-Man 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Marvel’s Spider-Man 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b0b97c2b-f217-4587-a1a6-23ba46785970">            <a href="https://www.amazon.com/Returnal-PlayStation-5/dp/B08QFPS48J/" data-model-name="Returnal" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/BS2spZv8DFDYDsxhWAgDXC.jpg" alt="PlayStation, Returnal"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Returnal</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1128b6d2-5b44-4288-94d3-357332814c19">            <a href="https://www.amazon.com/Last-Us-Part-PlayStation-5/dp/B0B3QWRQL8/" data-model-name="The Last of Us Part I" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ivhuHihZA3tXDKeaC4SECD.jpg" alt="PlayStation, The Last of Us Part I"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">The Last of Us Part I</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="77271fbb-20df-449e-a4ab-479436314606">            <a href="https://www.amazon.com/Clair-Obscur-Expedition-PS5-PlayStation-5/dp/B0DK6225DY/" data-model-name="Clair Obscur Expedition 33" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qitVjpTRLMoBcghHfQ8byD.jpg" alt="Maximum Entertainment, Clair Obscur Expedition 33"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Maximum Entertainment</div>                                        <div class="featured__title">Clair Obscur Expedition 33</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-tv-and-gaming-monitors"><span>TV and Gaming Monitors</span></h3><p>If you're buying a new PS5, you might want to pick up a new TV or gaming monitor too. I've chosen six of the best deals in Amazon's Big Spring Sale, and there's a wide-variety of price ranges depending on your budget.</p>        <div class="featured_product_block featured_block_hero" data-id="69564a09-64ca-4ddb-b4e5-f87a9a087baa">            <a href="https://www.amazon.com/Hisense-Cinema-Hi-QLED-Smart-55E6QF/dp/B0FHLGWJNS/" data-model-name="Hisense 55" E6 Cinema Series Hi-QLED 4K" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xyuZaDDh2QgsLNX2mNJUkE.jpg" alt="Hisense, Hisense 55" E6 Cinema Series Hi-QLED 4K"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Hisense</div>                                        <div class="featured__title">Hisense 55" E6 Cinema Series Hi-QLED 4K</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6ee7f131-feab-4d8d-95d7-c627e5894662">            <a href="https://www.amazon.com/Hisense-Class-Mini-LED-Smart-75QD7QF/dp/B0DYVR8NVD/" data-model-name="Hisense 75" MINI-LED 4k Smart Fire TV" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/8uYXuVN9viy4VgsTwKEQWF.jpg" alt="Hisense, Hisense 75" MINI-LED 4k Smart Fire TV"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Hisense</div>                                        <div class="featured__title">Hisense 75" MINI-LED 4k Smart Fire TV</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="87dbe7ab-d9e7-47f1-98d0-4e2322b33868">            <a href="https://www.amazon.com/SAMSUNG-55-Inch-Tracking-Processor-Contour/dp/B0DXN3SDLL/" data-model-name="Samsung 55-Inch Class OLED 4K S85F" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/6zyNSgU62ZKpAApYp98XCG.jpg" alt="Samsung, Samsung 55-Inch Class OLED 4K S85F"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Samsung</div>                                        <div class="featured__title">Samsung 55-Inch Class OLED 4K S85F</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d7cc105c-6baa-4d96-81ce-268df777c2d4">            <a href="https://www.amazon.com/Samsung-32-Inch-Odyssey-FreeSync-LS32CG550ENXZA/dp/B0CRGJC5ZD/" data-model-name="Samsung 32" Odyssey G55C Series QHD Gaming Monitor" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/RubgtHLpjytp7EQhZeUK3H.jpg" alt="Samsung, Samsung 32" Odyssey G55C Series QHD Gaming Monitor"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Samsung</div>                                        <div class="featured__title">Samsung 32" Odyssey G55C Series QHD Gaming Monitor</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9c169ca0-1456-48f8-9ff3-7649b0faa989">            <a href="https://www.amazon.com/ASUS-Inch-Curved-Gaming-Monitor/dp/B088MKF848/" data-model-name="Asus TUF 32 Inch Curved Gaming Monitor" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/t28PHVS3ytuABmLNHbs3jH.jpg" alt="ASUS, Asus TUF 32 Inch Curved Gaming Monitor"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>ASUS</div>                                        <div class="featured__title">Asus TUF 32 Inch Curved Gaming Monitor</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="37137b1a-02a8-4865-b0b4-8fcca7263858">            <a href="https://www.amazon.com/LG-%E2%80%8E27GS93QE-Ultragear-DisplayHDR-DisplayPort/dp/B0DF786923" data-model-name="Lg ‎27GS93QE 27-Inch Ultragear OLED Gaming Monitor" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/tB8K9BgofnGn9UecEW3uRJ.jpg" alt="LG, Lg ‎27GS93QE 27-Inch Ultragear OLED Gaming Monitor"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>LG</div>                                        <div class="featured__title">Lg ‎27GS93QE 27-Inch Ultragear OLED Gaming Monitor</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Major Sony PS5 price hike just hit all models — here's what you'll pay now ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Gaming on PlayStation just got more expensive. Again.</p><p>As detailed on the <a href="https://blog.playstation.com/2026/03/27/new-price-changes-for-ps5-ps5-pro-and-playstation-portal-remote-player/">PlayStation Blog</a>, effective April 2, 2026, all PS5 consoles will cost more in the United States. Sony Interactive Entertainment has “made the decision to increase the prices of PS5, PS5 Pro, and PlayStation Portal remote player globally.” Sony says this was due to “continued pressures in the global economic landscape.”</p><p>Here’s how much each PlayStation console will now cost:</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>PlayStation 5 (Disc Drive)</strong></p></td><td  ><p><strong>PS5 Digital Edition</strong></p></td><td  ><p><strong>PlayStation 5 Pro</strong></p></td></tr><tr><td class="firstcol " ><p><strong>United States</strong></p></td><td  ><p>$649.99 (+$100)</p></td><td  ><p>$599.99 (+$100)</p></td><td  ><p>$899.99 (+$150)</p></td></tr><tr><td class="firstcol " ><p><strong>United Kingdom</strong></p></td><td  ><p>£569.99 (+£90)</p></td><td  ><p>£519.99 (+£90)</p></td><td  ><p>£789.99 (+£90)</p></td></tr><tr><td class="firstcol " ><p><strong>Europe</strong></p></td><td  ><p>€649.99 (+€100)</p></td><td  ><p>€599.99 (+€100)</p></td><td  ><p>€899.99 (+€100)</p></td></tr><tr><td class="firstcol " ><p><strong>Japan</strong></p></td><td  ><p>¥97,980 (+¥18,000)</p></td><td  ><p>¥89,980 (+¥17,000)</p></td><td  ><p>¥137,980 (+¥18,000)</p></td></tr></tbody></table></div><p>For those keeping track, <a href="https://www.tomsguide.com/gaming/playstation/every-ps5-model-is-getting-a-price-hike-in-the-u-s-and-todays-the-last-day-to-get-one-cheaper">I wrote a similar story back in August 2025 when Sony first raised PS5 prices in the US</a>. That one stung, but seeing five-year-old consoles now cost more than they did at launch is wild. As you can see above, the PS5 Pro, which was already expensive when it debuted at $699, now costs a staggering $899!</p><p>The US isn't the only region affected, as the United Kingdom, Europe, and Japan are facing similar price hikes.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WwzDAe"></div>                            </div>                            <script src="https://kwizly.com/embed/WwzDAe.js" async></script><h2 id="how-does-this-affect-next-gen-consoles">How does this affect "next-gen" consoles?</h2><p>The "global economic landscape" Sony is referring to is the ongoing tariff situation, <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a>, and global conflicts. While that's understandable, it doesn't make the price hikes sting less. Old consoles have historically gone down in price over the years, but now we're seeing the opposite trend, and what's happening around the world is to blame.</p><p>With current consoles now costing so much, it raises the question of how much next-generation systems will retail for. Perhaps this is something we won't have to worry about anytime soon — especially if rumors about next-gen delays are true. If this were a typical console cycle, we would see new systems in 2027. But we're in anything but a typical situation.</p><h2 id="outlook-2">Outlook</h2><p>Given how these price hikes take affect starting on April 2, it would be wise to purchase a PS5 now if you don't already own one. Heck, you can even buy an extra system, since it would effectively be an appreciating asset starting next week.</p><p>We’ll keep an eye on this story as it develops, so stay tuned for more!</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/gaming/nintendo/best-thing-i-bought-this-year-was-the-nintendo-switch-2-and-its-not-even-close">Here are 5 Amazon Big Spring Sale gaming laptop deals I’d buy with my own money</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/i-played-5-games-on-the-macbook-neo-heres-my-report-card">I played 5 games on the MacBook Neo — here's my report card</a></li><li><a href="https://www.tomsguide.com/gaming/crimson-desert-review">Crimson Desert is an overwhelming RPG experience — but it’s undeniably ambitious</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/major-sony-ps5-price-hike-just-hit-all-models-heres-what-youll-pay-now</link>
                                                                            <description>
                            <![CDATA[ Sony is raising the price of PS5 consoles again. Here's how much each model will now cost globally. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">T4LxB5SvsdPfkBCpKGdTxV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 27 Mar 2026 14:21:17 +0000</pubDate>                                                                                                                                <updated>Fri, 27 Mar 2026 14:23:05 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ tony.polanco@futurenet.com (Tony Polanco) ]]></author>                    <dc:creator><![CDATA[ Tony Polanco ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/atzRNqFt5wYgEUPBDahWsD-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The PlayStation logo on a PS5 Pro]]></media:description>                                                            <media:text><![CDATA[The PlayStation logo on a PS5 Pro]]></media:text>
                                <media:title type="plain"><![CDATA[The PlayStation logo on a PS5 Pro]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Gaming on PlayStation just got more expensive. Again.</p><p>As detailed on the <a href="https://blog.playstation.com/2026/03/27/new-price-changes-for-ps5-ps5-pro-and-playstation-portal-remote-player/">PlayStation Blog</a>, effective April 2, 2026, all PS5 consoles will cost more in the United States. Sony Interactive Entertainment has “made the decision to increase the prices of PS5, PS5 Pro, and PlayStation Portal remote player globally.” Sony says this was due to “continued pressures in the global economic landscape.”</p><p>Here’s how much each PlayStation console will now cost:</p><div ><table><tbody><tr><td class="firstcol empty" ></td><td  ><p><strong>PlayStation 5 (Disc Drive)</strong></p></td><td  ><p><strong>PS5 Digital Edition</strong></p></td><td  ><p><strong>PlayStation 5 Pro</strong></p></td></tr><tr><td class="firstcol " ><p><strong>United States</strong></p></td><td  ><p>$649.99 (+$100)</p></td><td  ><p>$599.99 (+$100)</p></td><td  ><p>$899.99 (+$150)</p></td></tr><tr><td class="firstcol " ><p><strong>United Kingdom</strong></p></td><td  ><p>£569.99 (+£90)</p></td><td  ><p>£519.99 (+£90)</p></td><td  ><p>£789.99 (+£90)</p></td></tr><tr><td class="firstcol " ><p><strong>Europe</strong></p></td><td  ><p>€649.99 (+€100)</p></td><td  ><p>€599.99 (+€100)</p></td><td  ><p>€899.99 (+€100)</p></td></tr><tr><td class="firstcol " ><p><strong>Japan</strong></p></td><td  ><p>¥97,980 (+¥18,000)</p></td><td  ><p>¥89,980 (+¥17,000)</p></td><td  ><p>¥137,980 (+¥18,000)</p></td></tr></tbody></table></div><p>For those keeping track, <a href="https://www.tomsguide.com/gaming/playstation/every-ps5-model-is-getting-a-price-hike-in-the-u-s-and-todays-the-last-day-to-get-one-cheaper">I wrote a similar story back in August 2025 when Sony first raised PS5 prices in the US</a>. That one stung, but seeing five-year-old consoles now cost more than they did at launch is wild. As you can see above, the PS5 Pro, which was already expensive when it debuted at $699, now costs a staggering $899!</p><p>The US isn't the only region affected, as the United Kingdom, Europe, and Japan are facing similar price hikes.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-WwzDAe"></div>                            </div>                            <script src="https://kwizly.com/embed/WwzDAe.js" async></script><h2 id="how-does-this-affect-next-gen-consoles">How does this affect "next-gen" consoles?</h2><p>The "global economic landscape" Sony is referring to is the ongoing tariff situation, <a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a>, and global conflicts. While that's understandable, it doesn't make the price hikes sting less. Old consoles have historically gone down in price over the years, but now we're seeing the opposite trend, and what's happening around the world is to blame.</p><p>With current consoles now costing so much, it raises the question of how much next-generation systems will retail for. Perhaps this is something we won't have to worry about anytime soon — especially if rumors about next-gen delays are true. If this were a typical console cycle, we would see new systems in 2027. But we're in anything but a typical situation.</p><h2 id="outlook-2">Outlook</h2><p>Given how these price hikes take affect starting on April 2, it would be wise to purchase a PS5 now if you don't already own one. Heck, you can even buy an extra system, since it would effectively be an appreciating asset starting next week.</p><p>We’ll keep an eye on this story as it develops, so stay tuned for more!</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/gaming/nintendo/best-thing-i-bought-this-year-was-the-nintendo-switch-2-and-its-not-even-close">Here are 5 Amazon Big Spring Sale gaming laptop deals I’d buy with my own money</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/i-played-5-games-on-the-macbook-neo-heres-my-report-card">I played 5 games on the MacBook Neo — here's my report card</a></li><li><a href="https://www.tomsguide.com/gaming/crimson-desert-review">Crimson Desert is an overwhelming RPG experience — but it’s undeniably ambitious</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget Amazon’s Spring Sale — the best PS5 game deals start from just $4 at PlayStation Store ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Now is a great time to be shopping for some of the <a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">best PS5 games</a>. Not only is the ongoing <a href="https://www.tomsguide.com/live/news/amazon-big-spring-sale-up-to-40-percent-off-spring-apparel-walking-running-shoes-home-decor-tvs-and-appliances">Amazon Big Spring Sale</a> slashing prices across all things PlayStation, but the PlayStation Store is running its own <a href="https://store.playstation.com/en-us/category/8c195ff8-3a7d-4ea5-82c3-1debf1b6a800/1" target="_blank" rel="nofollow">Mega March sale</a>.</p><p>I've combed through both sales and found a slew of great deals that every PS5 owner should consider. These include the first-ever discounts on new 2026 games like <a href="https://www.tomsguide.com/gaming/nioh-3-review">Nioh 3</a>, and some seriously deep savings on must-play titles. </p><p>Plus, I've also found some great accessory deals with controllers, headsets and hard drives discounted courtesy of Amazon's first seasonal event of the year. These are the top PS5 deals I've spotted, and are worth adding to your cart. For more, see this <a href="https://www.tomsguide.com/gaming/nintendo/dont-wait-this-samsung-nintendo-switch-2-accessory-doubles-your-consoles-storage-and-its-just-usd44-right-now">Nintendo Switch 2 microSD Express storage deal to expand your console's storage</a>.</p><h3 class="article-body__section" id="section-best-playstation-store-deals"><span>Best PlayStation Store deals</span></h3><ul><li><strong>PS5 and PS4 games: </strong><a href="https://store.playstation.com/en-us/category/8c195ff8-3a7d-4ea5-82c3-1debf1b6a800/1" target="_blank" rel="nofollow"><strong>deals from $4 @ PlayStation Store</strong></a></li><li><strong>Iron Lung: </strong><a href="https://store.playstation.com/en-us/product/UB0622-PPSA21755_00-0490391273409007" target="_blank" rel="nofollow"><strong>was $7 now $5</strong></a><strong></strong></li><li><strong>Dead Island 2: </strong><a href="https://store.playstation.com/en-us/product/UP2047-PPSA03098_00-DI2MAINSIEAPS500" target="_blank" rel="nofollow"><strong>was $49 now $12</strong></a><strong></strong></li><li><strong>Fallout 4 - GOTY Edition: </strong><a href="https://store.playstation.com/en-us/product/UP1003-PPSA09016_00-FALLOUT4BUNDLENA" target="_blank" rel="nofollow"><strong>was $39 now $15</strong></a><strong></strong></li><li><strong>Persona 5 Royal: </strong><a href="https://store.playstation.com/en-us/product/UP0177-PPSA05109_00-P5RGAME000000000" target="_blank" rel="nofollow"><strong>was $59 now $17</strong></a><strong></strong></li><li><strong>Uncharted - Legacy of Thieves: </strong><a href="https://store.playstation.com/en-us/product/UP9000-PPSA05389_00-UNCHARTED4R00000" target="_blank" rel="nofollow"><strong>was $49 now $19</strong></a><strong></strong></li><li><strong>Sonic X Shadow Generations: </strong><a href="https://store.playstation.com/en-us/product/UP0177-PPSA17597_00-SONICXSHADOWGENE" target="_blank" rel="nofollow"><strong>was $49 now $19</strong></a><strong></strong></li><li><strong>Doom - The Dark Ages: </strong><a href="https://store.playstation.com/en-us/product/UP1003-PPSA20560_00-DTITAN0000000000" target="_blank" rel="nofollow"><strong>was $69 now $23</strong></a><strong></strong></li><li><strong>God of War Ragnarök: </strong><a href="https://store.playstation.com/en-us/product/UP9000-PPSA08329_00-GOWRAGNAROK00000" target="_blank" rel="nofollow"><strong>was $69 now $29</strong></a><strong></strong></li><li><strong>Kingdom Come Deliverance 2: </strong><a href="https://store.playstation.com/en-us/product/UP2047-PPSA21705_00-KCD2MAINGAMEDSUS" target="_blank" rel="nofollow"><strong>was $69 now $34</strong></a><strong></strong></li><li><strong>Metal Gear Solid Delta - Snake Eater: </strong><a href="https://store.playstation.com/en-us/product/JP0101-PPSA15304_00-MGSDELTAMAINGAME" target="_blank" rel="nofollow"><strong>was $69 now $34</strong></a><strong></strong></li><li><strong>Resident Evil Remake Trilogy: </strong><a href="https://store.playstation.com/en-us/product/UP0102-PPSA07411_00-BHB0000000000003" target="_blank" rel="nofollow"><strong>was $89 now $35</strong></a><strong></strong></li><li><strong>Silent Hill f (Deluxe Edition): </strong><a href="https://store.playstation.com/en-us/product/JP0101-PPSA21159_00-DIGITALDELUXE000" target="_blank" rel="nofollow"><strong>was $79 now $39</strong></a><strong></strong></li><li><strong>Death Stranding 2 - On the Beach: </strong><a href="https://store.playstation.com/en-us/product/JP9000-PPSA02015_00-DS2OTB0000000001" target="_blank" rel="nofollow"><strong>was $69 now $49</strong></a><strong></strong></li><li><strong>Baldur's Gate 3 (Deluxe Edition): </strong><a href="https://store.playstation.com/en-us/product/UP3526-PPSA14001_00-0681576713225017" target="_blank" rel="nofollow"><strong>was $79 now $59</strong></a><strong></strong></li><li><strong>Nioh 3: </strong><a href="https://store.playstation.com/en-us/product/EP4108-PPSA32785_00-NIOH300000000000" target="_blank" rel="nofollow"><strong>was $69 now $62</strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-best-amazon-spring-sale-deals"><span>Best Amazon Spring Sale deals</span></h3><div class="product"><a data-dimension112="71705323-2e60-4208-a323-9b01c4351246" data-action="Deal Block" data-label="PS5 games: deals from $7 @ Amazon" data-dimension48="PS5 games: deals from $7 @ Amazon" href="https://www.amazon.com/s?k=ps5+games&i=videogames&ref=nb_sb_noss" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1173px;"><p class="vanilla-image-block" style="padding-top:127.88%;"><img id="jQccVoCyWUGPX9CftXTJAQ" name="Marvel's Spider-Man 2 deal.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jQccVoCyWUGPX9CftXTJAQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1173" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>PS5 games: </strong><a href="https://www.amazon.com/s?k=ps5+games&i=videogames&ref=nb_sb_noss" target="_blank" rel="nofollow" data-dimension112="71705323-2e60-4208-a323-9b01c4351246" data-action="Deal Block" data-label="PS5 games: deals from $7 @ Amazon" data-dimension48="PS5 games: deals from $7 @ Amazon" data-dimension25=""><strong>deals from $7 @ Amazon</strong></a><br>The deepest discounts on PS5 games can be found on the PlayStation Store, but if you'd prefer a physical disc over a digital download, Amazon's Spring Sale also offers savings across a range of PlayStation software. This includes major titles like <a href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB/" target="_blank" rel="nofollow">Marvel's Spider-Man 2</a>, <a href="https://www.amazon.com/Final-Fantasy-VII-Rebirth-PlayStation-5/dp/B0CGXZQ4CD/" target="_blank" rel="nofollow">Final Fantasy VII Rebirth</a>, <a href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" target="_blank" rel="nofollow">Elden Ring</a> and plenty more. <a class="view-deal button" href="https://www.amazon.com/s?k=ps5+games&i=videogames&ref=nb_sb_noss" target="_blank" rel="nofollow" data-dimension112="71705323-2e60-4208-a323-9b01c4351246" data-action="Deal Block" data-label="PS5 games: deals from $7 @ Amazon" data-dimension48="PS5 games: deals from $7 @ Amazon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41496873-edae-4256-829e-8a1f3be2daba" data-action="Deal Block" data-label="BlackShark V3 Pro" data-dimension48="BlackShark V3 Pro" data-dimension25="$119" href="https://www.amazon.com/Razer-BlackShark-Wireless-Gaming-Headset-PC/dp/B0FC1R9KRL/" 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="iFdB8fgzyU6X4P2WfMj9QN" name="Razer-BlackShark-V3-Pro-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iFdB8fgzyU6X4P2WfMj9QN-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-blackshark-v3-pro-review" data-dimension112="41496873-edae-4256-829e-8a1f3be2daba" data-action="Deal Block" data-label="BlackShark V3 Pro" data-dimension48="BlackShark V3 Pro" data-dimension25="$119">Razer BlackShark V3 Pro</a> is designed for professional gamers. It boasts fantastic sound with spatial audio support that gives you a competitive edge. It’s extremely comfortable, features highly effective ANC, and comes with a detachable mic that makes you sound loud and clear. No compromises have been made, and you’re getting your money’s worth with $50 off.<a class="view-deal button" href="https://www.amazon.com/Razer-BlackShark-Wireless-Gaming-Headset-PC/dp/B0FC1R9KRL/" target="_blank" rel="nofollow" data-dimension112="41496873-edae-4256-829e-8a1f3be2daba" data-action="Deal Block" data-label="BlackShark V3 Pro" data-dimension48="BlackShark V3 Pro" data-dimension25="$119">View Deal</a></p></div><div class="product"><a data-dimension112="e1512d10-72ab-448c-ab47-b79fc88103c6" data-action="Deal Block" data-label="Revolution 5 Pro" data-dimension48="Revolution 5 Pro" data-dimension25="$140" href="https://www.amazon.com/Revolution-Officially-Licensed-PlayStation-Controller-5/dp/B0CLBD543P" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:522px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="HjvFL2XjzMMmPVHPVCJJsh" name="51PaJ0tF09L._SX522_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HjvFL2XjzMMmPVHPVCJJsh-1920-80.jpg" mos="" align="middle" fullscreen="" width="522" height="522" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This officially licensed Sony controller is a must-have accessory for PlayStation fans. The Nacon Revolution 5 Pro is infinitely customizable, featuring remappable shortcuts, a swappable D-Pad, interchangeable controller weights, customizable thumbstick sizes and heads, and more. Not to mention, with the controller's Hall effect magnetic sensors, you can say so long to stick drift.  <a class="view-deal button" href="https://www.amazon.com/Revolution-Officially-Licensed-PlayStation-Controller-5/dp/B0CLBD543P" target="_blank" rel="nofollow" data-dimension112="e1512d10-72ab-448c-ab47-b79fc88103c6" data-action="Deal Block" data-label="Revolution 5 Pro" data-dimension48="Revolution 5 Pro" data-dimension25="$140">View Deal</a></p></div><div class="product"><a data-dimension112="5366e560-963a-4cf5-8b3d-b1f302fe683a" data-action="Deal Block" data-label="ROG Delta II" data-dimension48="ROG Delta II" data-dimension25="$164" href="https://www.amazon.com/ASUS-ROG-II-Wireless-Detachable/dp/B0DGZY13L6/" 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:99.27%;"><img id="z8Q9kcRwWZKbkuEnB99Vd4" name="Asus ROG Delta II" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/z8Q9kcRwWZKbkuEnB99Vd4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1489" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With its 50mm titanium-plated diaphragm drivers, the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/asus-rog-delta-ii-gaming-headset-review" data-dimension112="5366e560-963a-4cf5-8b3d-b1f302fe683a" data-action="Deal Block" data-label="ROG Delta II" data-dimension48="ROG Delta II" data-dimension25="$164">Asus ROG Delta II</a> creates immersive soundscapes in nearly every game. The headset is mighty comfortable, and its detachable 10mm boom mic is loud and clear. It also boasts long battery life. It's been on sale for $160 before, but this discount is its lowest price in the last 30 days. <a class="view-deal button" href="https://www.amazon.com/ASUS-ROG-II-Wireless-Detachable/dp/B0DGZY13L6/" target="_blank" rel="nofollow" data-dimension112="5366e560-963a-4cf5-8b3d-b1f302fe683a" data-action="Deal Block" data-label="ROG Delta II" data-dimension48="ROG Delta II" data-dimension25="$164">View Deal</a></p></div><div class="product"><a data-dimension112="16f16ab5-9994-48af-8d87-7824174f784a" data-action="Deal Block" data-label="Raiju V3 Pro" data-dimension48="Raiju V3 Pro" data-dimension25="$179" href="https://www.amazon.com/Razer-Raiju-Pro-Wireless-Controller-5/dp/B0FNDGHM92" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="4Thj5V3jFdpaqt6CbqoZQf" name="Razer Raiju V3 Pro" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4Thj5V3jFdpaqt6CbqoZQf-1920-80.jpg" mos="" align="middle" fullscreen="" width="900" height="900" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-raiju-v3-pro-review" data-dimension112="16f16ab5-9994-48af-8d87-7824174f784a" data-action="Deal Block" data-label="Raiju V3 Pro" data-dimension48="Raiju V3 Pro" data-dimension25="$179">Razer Raiju V3 Pro</a> is a mighty controller for PS5 and PC. The TMR sticks provide precise control over movement while eliminating the risk of stick drift. It's highly customizable and very comfortable for long gaming sessions. Although it’s missing some proprietary PS5 features, it’s the gamepad to beat for esports.<a class="view-deal button" href="https://www.amazon.com/Razer-Raiju-Pro-Wireless-Controller-5/dp/B0FNDGHM92" target="_blank" rel="nofollow" data-dimension112="16f16ab5-9994-48af-8d87-7824174f784a" data-action="Deal Block" data-label="Raiju V3 Pro" data-dimension48="Raiju V3 Pro" data-dimension25="$179">View Deal</a></p></div><div class="product"><a data-dimension112="6e2631ed-c4ec-44b7-986a-f6ec043f1a5f" data-action="Deal Block" data-label="990 Pro (2TB)" data-dimension48="990 Pro (2TB)" data-dimension25="$212" href="https://www.amazon.com/SAMSUNG-Internal-Expansion-MZ-V9P2T0B-AM/dp/B0BHJJ9Y77" 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:87.50%;"><img id="5fBHZckCTSEf7KiNq7m2Go" name="Samsung 2TB 990 PRO.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5fBHZckCTSEf7KiNq7m2Go-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/SAMSUNG-Internal-Expansion-MZ-V9P2T0B-AM/dp/B0BHJJ9Y77" target="_blank" rel="nofollow" data-dimension112="6e2631ed-c4ec-44b7-986a-f6ec043f1a5f" data-action="Deal Block" data-label="990 Pro (2TB)" data-dimension48="990 Pro (2TB)" data-dimension25="$212">990 Pro (2TB): was $229 now $212</a></strong><br>Looking for the right balance between speeding up your system with fast storage, but also getting plenty of room, too? The Samsung 990 Pro is a great pick, but there's a caveat here. While it's currently on sale in Amazon's Spring Sale, it's dropped significantly lower in the past. This is the best PS5 SSD right now, but if you don't need extra storage this minute, you should wait to see if summer sales or even Black Friday bring better.<a class="view-deal button" href="https://www.amazon.com/SAMSUNG-Internal-Expansion-MZ-V9P2T0B-AM/dp/B0BHJJ9Y77" target="_blank" rel="nofollow" data-dimension112="6e2631ed-c4ec-44b7-986a-f6ec043f1a5f" data-action="Deal Block" data-label="990 Pro (2TB)" data-dimension48="990 Pro (2TB)" data-dimension25="$212">View Deal</a></p></div><div data-model-name="Sony PS5 Pro" data-widget-type="review"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/forget-amazons-spring-sale-the-best-ps5-game-deals-start-from-just-usd4-at-playstation-store</link>
                                                                            <description>
                            <![CDATA[ PlayStation Store's Mega March sale is taking on Amazon's Big Spring Sale, and you can pick up essential PS5 games starting from just $4. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nQqtZjoXcQXRqHRBh9Ffz8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/hNdKb4eswpkxQDceeNkz2V-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 24 Mar 2026 12:25:49 +0000</pubDate>                                                                                                                                <updated>Wed, 25 Mar 2026 17:46:39 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/hNdKb4eswpkxQDceeNkz2V-1920-80.jpg">
                                                            <media:credit><![CDATA[Koei Tecmo]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Nioh 3 screenshot with a Tom&#039;s Guide Amazon Spring Sale Deals badge]]></media:description>                                                            <media:text><![CDATA[Nioh 3 screenshot with a Tom&#039;s Guide Amazon Spring Sale Deals badge]]></media:text>
                                <media:title type="plain"><![CDATA[Nioh 3 screenshot with a Tom&#039;s Guide Amazon Spring Sale Deals badge]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/hNdKb4eswpkxQDceeNkz2V-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Now is a great time to be shopping for some of the <a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">best PS5 games</a>. Not only is the ongoing <a href="https://www.tomsguide.com/live/news/amazon-big-spring-sale-up-to-40-percent-off-spring-apparel-walking-running-shoes-home-decor-tvs-and-appliances">Amazon Big Spring Sale</a> slashing prices across all things PlayStation, but the PlayStation Store is running its own <a href="https://store.playstation.com/en-us/category/8c195ff8-3a7d-4ea5-82c3-1debf1b6a800/1" target="_blank" rel="nofollow">Mega March sale</a>.</p><p>I've combed through both sales and found a slew of great deals that every PS5 owner should consider. These include the first-ever discounts on new 2026 games like <a href="https://www.tomsguide.com/gaming/nioh-3-review">Nioh 3</a>, and some seriously deep savings on must-play titles. </p><p>Plus, I've also found some great accessory deals with controllers, headsets and hard drives discounted courtesy of Amazon's first seasonal event of the year. These are the top PS5 deals I've spotted, and are worth adding to your cart. For more, see this <a href="https://www.tomsguide.com/gaming/nintendo/dont-wait-this-samsung-nintendo-switch-2-accessory-doubles-your-consoles-storage-and-its-just-usd44-right-now">Nintendo Switch 2 microSD Express storage deal to expand your console's storage</a>.</p><h3 class="article-body__section" id="section-best-playstation-store-deals"><span>Best PlayStation Store deals</span></h3><ul><li><strong>PS5 and PS4 games: </strong><a href="https://store.playstation.com/en-us/category/8c195ff8-3a7d-4ea5-82c3-1debf1b6a800/1" target="_blank" rel="nofollow"><strong>deals from $4 @ PlayStation Store</strong></a></li><li><strong>Iron Lung: </strong><a href="https://store.playstation.com/en-us/product/UB0622-PPSA21755_00-0490391273409007" target="_blank" rel="nofollow"><strong>was $7 now $5</strong></a><strong></strong></li><li><strong>Dead Island 2: </strong><a href="https://store.playstation.com/en-us/product/UP2047-PPSA03098_00-DI2MAINSIEAPS500" target="_blank" rel="nofollow"><strong>was $49 now $12</strong></a><strong></strong></li><li><strong>Fallout 4 - GOTY Edition: </strong><a href="https://store.playstation.com/en-us/product/UP1003-PPSA09016_00-FALLOUT4BUNDLENA" target="_blank" rel="nofollow"><strong>was $39 now $15</strong></a><strong></strong></li><li><strong>Persona 5 Royal: </strong><a href="https://store.playstation.com/en-us/product/UP0177-PPSA05109_00-P5RGAME000000000" target="_blank" rel="nofollow"><strong>was $59 now $17</strong></a><strong></strong></li><li><strong>Uncharted - Legacy of Thieves: </strong><a href="https://store.playstation.com/en-us/product/UP9000-PPSA05389_00-UNCHARTED4R00000" target="_blank" rel="nofollow"><strong>was $49 now $19</strong></a><strong></strong></li><li><strong>Sonic X Shadow Generations: </strong><a href="https://store.playstation.com/en-us/product/UP0177-PPSA17597_00-SONICXSHADOWGENE" target="_blank" rel="nofollow"><strong>was $49 now $19</strong></a><strong></strong></li><li><strong>Doom - The Dark Ages: </strong><a href="https://store.playstation.com/en-us/product/UP1003-PPSA20560_00-DTITAN0000000000" target="_blank" rel="nofollow"><strong>was $69 now $23</strong></a><strong></strong></li><li><strong>God of War Ragnarök: </strong><a href="https://store.playstation.com/en-us/product/UP9000-PPSA08329_00-GOWRAGNAROK00000" target="_blank" rel="nofollow"><strong>was $69 now $29</strong></a><strong></strong></li><li><strong>Kingdom Come Deliverance 2: </strong><a href="https://store.playstation.com/en-us/product/UP2047-PPSA21705_00-KCD2MAINGAMEDSUS" target="_blank" rel="nofollow"><strong>was $69 now $34</strong></a><strong></strong></li><li><strong>Metal Gear Solid Delta - Snake Eater: </strong><a href="https://store.playstation.com/en-us/product/JP0101-PPSA15304_00-MGSDELTAMAINGAME" target="_blank" rel="nofollow"><strong>was $69 now $34</strong></a><strong></strong></li><li><strong>Resident Evil Remake Trilogy: </strong><a href="https://store.playstation.com/en-us/product/UP0102-PPSA07411_00-BHB0000000000003" target="_blank" rel="nofollow"><strong>was $89 now $35</strong></a><strong></strong></li><li><strong>Silent Hill f (Deluxe Edition): </strong><a href="https://store.playstation.com/en-us/product/JP0101-PPSA21159_00-DIGITALDELUXE000" target="_blank" rel="nofollow"><strong>was $79 now $39</strong></a><strong></strong></li><li><strong>Death Stranding 2 - On the Beach: </strong><a href="https://store.playstation.com/en-us/product/JP9000-PPSA02015_00-DS2OTB0000000001" target="_blank" rel="nofollow"><strong>was $69 now $49</strong></a><strong></strong></li><li><strong>Baldur's Gate 3 (Deluxe Edition): </strong><a href="https://store.playstation.com/en-us/product/UP3526-PPSA14001_00-0681576713225017" target="_blank" rel="nofollow"><strong>was $79 now $59</strong></a><strong></strong></li><li><strong>Nioh 3: </strong><a href="https://store.playstation.com/en-us/product/EP4108-PPSA32785_00-NIOH300000000000" target="_blank" rel="nofollow"><strong>was $69 now $62</strong></a><strong></strong></li></ul><h3 class="article-body__section" id="section-best-amazon-spring-sale-deals"><span>Best Amazon Spring Sale deals</span></h3><div class="product"><a data-dimension112="71705323-2e60-4208-a323-9b01c4351246" data-action="Deal Block" data-label="PS5 games: deals from $7 @ Amazon" data-dimension48="PS5 games: deals from $7 @ Amazon" href="https://www.amazon.com/s?k=ps5+games&i=videogames&ref=nb_sb_noss" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1173px;"><p class="vanilla-image-block" style="padding-top:127.88%;"><img id="jQccVoCyWUGPX9CftXTJAQ" name="Marvel's Spider-Man 2 deal.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jQccVoCyWUGPX9CftXTJAQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1173" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>PS5 games: </strong><a href="https://www.amazon.com/s?k=ps5+games&i=videogames&ref=nb_sb_noss" target="_blank" rel="nofollow" data-dimension112="71705323-2e60-4208-a323-9b01c4351246" data-action="Deal Block" data-label="PS5 games: deals from $7 @ Amazon" data-dimension48="PS5 games: deals from $7 @ Amazon" data-dimension25=""><strong>deals from $7 @ Amazon</strong></a><br>The deepest discounts on PS5 games can be found on the PlayStation Store, but if you'd prefer a physical disc over a digital download, Amazon's Spring Sale also offers savings across a range of PlayStation software. This includes major titles like <a href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB/" target="_blank" rel="nofollow">Marvel's Spider-Man 2</a>, <a href="https://www.amazon.com/Final-Fantasy-VII-Rebirth-PlayStation-5/dp/B0CGXZQ4CD/" target="_blank" rel="nofollow">Final Fantasy VII Rebirth</a>, <a href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" target="_blank" rel="nofollow">Elden Ring</a> and plenty more. <a class="view-deal button" href="https://www.amazon.com/s?k=ps5+games&i=videogames&ref=nb_sb_noss" target="_blank" rel="nofollow" data-dimension112="71705323-2e60-4208-a323-9b01c4351246" data-action="Deal Block" data-label="PS5 games: deals from $7 @ Amazon" data-dimension48="PS5 games: deals from $7 @ Amazon" data-dimension25="">View Deal</a></p></div><div class="product"><a data-dimension112="41496873-edae-4256-829e-8a1f3be2daba" data-action="Deal Block" data-label="BlackShark V3 Pro" data-dimension48="BlackShark V3 Pro" data-dimension25="$119" href="https://www.amazon.com/Razer-BlackShark-Wireless-Gaming-Headset-PC/dp/B0FC1R9KRL/" 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="iFdB8fgzyU6X4P2WfMj9QN" name="Razer-BlackShark-V3-Pro-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iFdB8fgzyU6X4P2WfMj9QN-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-blackshark-v3-pro-review" data-dimension112="41496873-edae-4256-829e-8a1f3be2daba" data-action="Deal Block" data-label="BlackShark V3 Pro" data-dimension48="BlackShark V3 Pro" data-dimension25="$119">Razer BlackShark V3 Pro</a> is designed for professional gamers. It boasts fantastic sound with spatial audio support that gives you a competitive edge. It’s extremely comfortable, features highly effective ANC, and comes with a detachable mic that makes you sound loud and clear. No compromises have been made, and you’re getting your money’s worth with $50 off.<a class="view-deal button" href="https://www.amazon.com/Razer-BlackShark-Wireless-Gaming-Headset-PC/dp/B0FC1R9KRL/" target="_blank" rel="nofollow" data-dimension112="41496873-edae-4256-829e-8a1f3be2daba" data-action="Deal Block" data-label="BlackShark V3 Pro" data-dimension48="BlackShark V3 Pro" data-dimension25="$119">View Deal</a></p></div><div class="product"><a data-dimension112="e1512d10-72ab-448c-ab47-b79fc88103c6" data-action="Deal Block" data-label="Revolution 5 Pro" data-dimension48="Revolution 5 Pro" data-dimension25="$140" href="https://www.amazon.com/Revolution-Officially-Licensed-PlayStation-Controller-5/dp/B0CLBD543P" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:522px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="HjvFL2XjzMMmPVHPVCJJsh" name="51PaJ0tF09L._SX522_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HjvFL2XjzMMmPVHPVCJJsh-1920-80.jpg" mos="" align="middle" fullscreen="" width="522" height="522" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This officially licensed Sony controller is a must-have accessory for PlayStation fans. The Nacon Revolution 5 Pro is infinitely customizable, featuring remappable shortcuts, a swappable D-Pad, interchangeable controller weights, customizable thumbstick sizes and heads, and more. Not to mention, with the controller's Hall effect magnetic sensors, you can say so long to stick drift.  <a class="view-deal button" href="https://www.amazon.com/Revolution-Officially-Licensed-PlayStation-Controller-5/dp/B0CLBD543P" target="_blank" rel="nofollow" data-dimension112="e1512d10-72ab-448c-ab47-b79fc88103c6" data-action="Deal Block" data-label="Revolution 5 Pro" data-dimension48="Revolution 5 Pro" data-dimension25="$140">View Deal</a></p></div><div class="product"><a data-dimension112="5366e560-963a-4cf5-8b3d-b1f302fe683a" data-action="Deal Block" data-label="ROG Delta II" data-dimension48="ROG Delta II" data-dimension25="$164" href="https://www.amazon.com/ASUS-ROG-II-Wireless-Detachable/dp/B0DGZY13L6/" 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:99.27%;"><img id="z8Q9kcRwWZKbkuEnB99Vd4" name="Asus ROG Delta II" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/z8Q9kcRwWZKbkuEnB99Vd4-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="1489" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With its 50mm titanium-plated diaphragm drivers, the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/asus-rog-delta-ii-gaming-headset-review" data-dimension112="5366e560-963a-4cf5-8b3d-b1f302fe683a" data-action="Deal Block" data-label="ROG Delta II" data-dimension48="ROG Delta II" data-dimension25="$164">Asus ROG Delta II</a> creates immersive soundscapes in nearly every game. The headset is mighty comfortable, and its detachable 10mm boom mic is loud and clear. It also boasts long battery life. It's been on sale for $160 before, but this discount is its lowest price in the last 30 days. <a class="view-deal button" href="https://www.amazon.com/ASUS-ROG-II-Wireless-Detachable/dp/B0DGZY13L6/" target="_blank" rel="nofollow" data-dimension112="5366e560-963a-4cf5-8b3d-b1f302fe683a" data-action="Deal Block" data-label="ROG Delta II" data-dimension48="ROG Delta II" data-dimension25="$164">View Deal</a></p></div><div class="product"><a data-dimension112="16f16ab5-9994-48af-8d87-7824174f784a" data-action="Deal Block" data-label="Raiju V3 Pro" data-dimension48="Raiju V3 Pro" data-dimension25="$179" href="https://www.amazon.com/Razer-Raiju-Pro-Wireless-Controller-5/dp/B0FNDGHM92" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="4Thj5V3jFdpaqt6CbqoZQf" name="Razer Raiju V3 Pro" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4Thj5V3jFdpaqt6CbqoZQf-1920-80.jpg" mos="" align="middle" fullscreen="" width="900" height="900" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-raiju-v3-pro-review" data-dimension112="16f16ab5-9994-48af-8d87-7824174f784a" data-action="Deal Block" data-label="Raiju V3 Pro" data-dimension48="Raiju V3 Pro" data-dimension25="$179">Razer Raiju V3 Pro</a> is a mighty controller for PS5 and PC. The TMR sticks provide precise control over movement while eliminating the risk of stick drift. It's highly customizable and very comfortable for long gaming sessions. Although it’s missing some proprietary PS5 features, it’s the gamepad to beat for esports.<a class="view-deal button" href="https://www.amazon.com/Razer-Raiju-Pro-Wireless-Controller-5/dp/B0FNDGHM92" target="_blank" rel="nofollow" data-dimension112="16f16ab5-9994-48af-8d87-7824174f784a" data-action="Deal Block" data-label="Raiju V3 Pro" data-dimension48="Raiju V3 Pro" data-dimension25="$179">View Deal</a></p></div><div class="product"><a data-dimension112="6e2631ed-c4ec-44b7-986a-f6ec043f1a5f" data-action="Deal Block" data-label="990 Pro (2TB)" data-dimension48="990 Pro (2TB)" data-dimension25="$212" href="https://www.amazon.com/SAMSUNG-Internal-Expansion-MZ-V9P2T0B-AM/dp/B0BHJJ9Y77" 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:87.50%;"><img id="5fBHZckCTSEf7KiNq7m2Go" name="Samsung 2TB 990 PRO.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5fBHZckCTSEf7KiNq7m2Go-1920-80.jpg" mos="" align="middle" fullscreen="" width="1600" height="1400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/SAMSUNG-Internal-Expansion-MZ-V9P2T0B-AM/dp/B0BHJJ9Y77" target="_blank" rel="nofollow" data-dimension112="6e2631ed-c4ec-44b7-986a-f6ec043f1a5f" data-action="Deal Block" data-label="990 Pro (2TB)" data-dimension48="990 Pro (2TB)" data-dimension25="$212">990 Pro (2TB): was $229 now $212</a></strong><br>Looking for the right balance between speeding up your system with fast storage, but also getting plenty of room, too? The Samsung 990 Pro is a great pick, but there's a caveat here. While it's currently on sale in Amazon's Spring Sale, it's dropped significantly lower in the past. This is the best PS5 SSD right now, but if you don't need extra storage this minute, you should wait to see if summer sales or even Black Friday bring better.<a class="view-deal button" href="https://www.amazon.com/SAMSUNG-Internal-Expansion-MZ-V9P2T0B-AM/dp/B0BHJJ9Y77" target="_blank" rel="nofollow" data-dimension112="6e2631ed-c4ec-44b7-986a-f6ec043f1a5f" data-action="Deal Block" data-label="990 Pro (2TB)" data-dimension48="990 Pro (2TB)" data-dimension25="$212">View Deal</a></p></div><div data-model-name="Sony PS5 Pro" data-widget-type="review"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I just played Crimson Desert on PS5 Pro — here’s how this massive RPG looks and runs on console ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/gaming/crimson-desert-review">Crimson Desert</a> is <em>finally</em> in our hands. After weeks of online hype and many gamers wondering if the massive RPG was “too good to be true,” Pearl Abyss’ single-player open-world epic, set in the world of MMO Black Desert Online, has arrived. Millions of players are now taking their first steps into the fantasy land of Pywel, including yours truly.</p><p>Pre-release reviews (including <a href="https://www.tomsguide.com/gaming/crimson-desert-review">Tom’s Guide’s verdict</a> from my colleague Tony Polanco) gave us an idea of the scale of Crimson Desert, but one of the biggest questions ahead of its March 19 launch was how the RPG would perform on consoles. Before release, critics only had access to the game on PC, with footage of the game running on <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5</a> and <a href="https://www.tomsguide.com/reviews/xbox-series-x">Xbox Series X</a> limited.</p><p>Now that Crimson Desert is released to the world, we can finally get our first in-the-wild look at how this gigantic adventure runs on console compared to one of the <a href="https://www.tomsguide.com/us/best-gaming-pc,review-2219.html">best gaming PCs</a>.</p><p>I’ve dived into the grand quest myself, playing via <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a>, and while I’m barely more than 90 minutes into what I’m sure will be a 100+ hour playthrough, here are my very early impressions.</p><div class="product"><a data-dimension112="08057bdb-ac5a-42fc-94d6-680ef1264981" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$69" href="https://www.bestbuy.com/product/crimson-desert-playstation-5/J3GWC562R2" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:118.78%;"><img id="uKDrRLjrqK3bGNeFZbzygj" name="crimson-desert-ps5-na-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uKDrRLjrqK3bGNeFZbzygj-1920-80.jpg" mos="" align="middle" fullscreen="" width="900" height="1069" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/crimson-desert-playstation-5/J3GWC562R2" target="_blank" rel="nofollow" data-dimension112="08057bdb-ac5a-42fc-94d6-680ef1264981" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$69">(PS5): $69</a></strong><br>Crimson Desert is a vast, open-world action-RPG from the makers of Black Desert Online. You play Kliff as he adventures across the land of the fantasy continent Pywel. Your mission is to reunite the Greymane faction and reclaim your homeland. Crammed full of content, Crimson Desert is a huge game where you can fully immerse yourself in an epic 100+ hour quest.<a class="view-deal button" href="https://www.bestbuy.com/product/crimson-desert-playstation-5/J3GWC562R2" target="_blank" rel="nofollow" data-dimension112="08057bdb-ac5a-42fc-94d6-680ef1264981" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$69">View Deal</a></p></div><h2 id="crimson-desert-is-mostly-a-looker-on-ps5-pro">Crimson Desert is (mostly) a looker on PS5 Pro</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kVCk8DW5mUVR6wv5dNPAQQ" name="crimson-desert-ps5-pro-screenshot-02.JPG" alt="Crimson Desert on PS5 Pro screenshot" src="https://cdn.mos.cms.futurecdn.net/kVCk8DW5mUVR6wv5dNPAQQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Pearl Abyss)</span></figcaption></figure><p>Booting up Crimson Desert on PS5 Pro, it’s hard not to be pretty darn impressed with its graphical quality. Early on, after a brief (and somewhat confusingly plotted) prologue, protagonist Kliff is traveling into town on horseback with an NPC. Crossing a large wooden bridge, your companion advises, “take it slow and enjoy the view,” and enjoy the view I certainly did.</p><p>Even in this early stage of the game, the vistas are stunning, with white-rock cliffs, rushing rivers, and lush forests stretching beyond the horizon. The first main town is equally impressive, with townsfolk crammed into the streets and towering giants manning guard posts. Texture pop-in is a recurring sight, and green foliage doesn’t look all that great when viewed from up close. But on PS5 Pro, I was quickly marvelling at the visual quality.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kkk4xWTXuhCMZJVfKEEaaQ" name="crimson-desert-ps5-pro-screenshot-01.JPG" alt="Crimson Desert on PS5 Pro screenshot" src="https://cdn.mos.cms.futurecdn.net/kkk4xWTXuhCMZJVfKEEaaQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Pearl Abyss)</span></figcaption></figure><p>Crimson Desert also offers plenty of player choice with “Quality,” “Balanced,” and “Performance” modes. I’m a framerate player above all else, so I sacrificed a little bit of image resolution in favor of a smoother 60 fps, and so far have seen barely a hitch. Granted, I’m still very early, so I haven’t encountered many large-scale skirmishes or intense boss battles, maybe these will cause more noticeable drops, but so far, the framerate isn’t dipping much.</p><p>It should be noted that I’m playing on the PS5 Pro. This is a pricey $749 suped-up version of the base PS5 console. I imagine the majority of PlayStation gamers will experience Crimson Desert on a regular PS5. I can’t speak to visuals/performance on base PS5, but according to <a href="https://www.pushsquare.com/news/2026/03/crimson-desert-looks-rough-on-base-ps5-heres-25-minutes-of-direct-capture-footage" target="_blank">PushSquare’s reporting</a>, the experience is quite significantly compromised on the regular console.</p><p>Still, I’m really looking forward to diving further into the world of Crimson Desert, as there’s clearly a lot to see and do, and at least so far, I’ve been plenty impressed with how everything looks, and most importantly, how everything runs. If you’re fortunate enough to have access to a PS5 Pro, then you can cast aside any pre-release skepticism, as Crimson Desert is really quite a looker. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exzJKO"></div>                            </div>                            <script src="https://kwizly.com/embed/exzJKO.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/gaming/crimson-desert-review">Crimson Desert review: overwhelming but ambitious</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/crimson-desert-might-be-the-talk-of-the-town-but-these-11-ps5-open-world-masterpieces-are-available-at-a-fraction-of-the-price">11 open-world PS5 games cheaper than Crimson Desert</a></li><li><a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">The best PS5 games you can play right now</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/i-just-played-crimson-desert-on-ps5-pro-heres-how-this-massive-rpg-looks-and-runs-on-console</link>
                                                                            <description>
                            <![CDATA[ Crimson Desert is now available on consoles, and I dived into this huge RPG experience to test out its visuals and performance on PS5 Pro. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">aGqAoqhzMTi7mZnNnkYS6M</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/LYGghjpVqnvyR2wuRhLRaQ-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 21 Mar 2026 07:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/LYGghjpVqnvyR2wuRhLRaQ-1920-80.jpg">
                                                            <media:credit><![CDATA[Pearl Abyss]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Crimson Desert on PS5 Pro screenshot]]></media:description>                                                            <media:text><![CDATA[Crimson Desert on PS5 Pro screenshot]]></media:text>
                                <media:title type="plain"><![CDATA[Crimson Desert on PS5 Pro screenshot]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/LYGghjpVqnvyR2wuRhLRaQ-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/gaming/crimson-desert-review">Crimson Desert</a> is <em>finally</em> in our hands. After weeks of online hype and many gamers wondering if the massive RPG was “too good to be true,” Pearl Abyss’ single-player open-world epic, set in the world of MMO Black Desert Online, has arrived. Millions of players are now taking their first steps into the fantasy land of Pywel, including yours truly.</p><p>Pre-release reviews (including <a href="https://www.tomsguide.com/gaming/crimson-desert-review">Tom’s Guide’s verdict</a> from my colleague Tony Polanco) gave us an idea of the scale of Crimson Desert, but one of the biggest questions ahead of its March 19 launch was how the RPG would perform on consoles. Before release, critics only had access to the game on PC, with footage of the game running on <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5</a> and <a href="https://www.tomsguide.com/reviews/xbox-series-x">Xbox Series X</a> limited.</p><p>Now that Crimson Desert is released to the world, we can finally get our first in-the-wild look at how this gigantic adventure runs on console compared to one of the <a href="https://www.tomsguide.com/us/best-gaming-pc,review-2219.html">best gaming PCs</a>.</p><p>I’ve dived into the grand quest myself, playing via <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a>, and while I’m barely more than 90 minutes into what I’m sure will be a 100+ hour playthrough, here are my very early impressions.</p><div class="product"><a data-dimension112="08057bdb-ac5a-42fc-94d6-680ef1264981" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$69" href="https://www.bestbuy.com/product/crimson-desert-playstation-5/J3GWC562R2" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:118.78%;"><img id="uKDrRLjrqK3bGNeFZbzygj" name="crimson-desert-ps5-na-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uKDrRLjrqK3bGNeFZbzygj-1920-80.jpg" mos="" align="middle" fullscreen="" width="900" height="1069" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/crimson-desert-playstation-5/J3GWC562R2" target="_blank" rel="nofollow" data-dimension112="08057bdb-ac5a-42fc-94d6-680ef1264981" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$69">(PS5): $69</a></strong><br>Crimson Desert is a vast, open-world action-RPG from the makers of Black Desert Online. You play Kliff as he adventures across the land of the fantasy continent Pywel. Your mission is to reunite the Greymane faction and reclaim your homeland. Crammed full of content, Crimson Desert is a huge game where you can fully immerse yourself in an epic 100+ hour quest.<a class="view-deal button" href="https://www.bestbuy.com/product/crimson-desert-playstation-5/J3GWC562R2" target="_blank" rel="nofollow" data-dimension112="08057bdb-ac5a-42fc-94d6-680ef1264981" data-action="Deal Block" data-label="(PS5)" data-dimension48="(PS5)" data-dimension25="$69">View Deal</a></p></div><h2 id="crimson-desert-is-mostly-a-looker-on-ps5-pro">Crimson Desert is (mostly) a looker on PS5 Pro</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kVCk8DW5mUVR6wv5dNPAQQ" name="crimson-desert-ps5-pro-screenshot-02.JPG" alt="Crimson Desert on PS5 Pro screenshot" src="https://cdn.mos.cms.futurecdn.net/kVCk8DW5mUVR6wv5dNPAQQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Pearl Abyss)</span></figcaption></figure><p>Booting up Crimson Desert on PS5 Pro, it’s hard not to be pretty darn impressed with its graphical quality. Early on, after a brief (and somewhat confusingly plotted) prologue, protagonist Kliff is traveling into town on horseback with an NPC. Crossing a large wooden bridge, your companion advises, “take it slow and enjoy the view,” and enjoy the view I certainly did.</p><p>Even in this early stage of the game, the vistas are stunning, with white-rock cliffs, rushing rivers, and lush forests stretching beyond the horizon. The first main town is equally impressive, with townsfolk crammed into the streets and towering giants manning guard posts. Texture pop-in is a recurring sight, and green foliage doesn’t look all that great when viewed from up close. But on PS5 Pro, I was quickly marvelling at the visual quality.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kkk4xWTXuhCMZJVfKEEaaQ" name="crimson-desert-ps5-pro-screenshot-01.JPG" alt="Crimson Desert on PS5 Pro screenshot" src="https://cdn.mos.cms.futurecdn.net/kkk4xWTXuhCMZJVfKEEaaQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Pearl Abyss)</span></figcaption></figure><p>Crimson Desert also offers plenty of player choice with “Quality,” “Balanced,” and “Performance” modes. I’m a framerate player above all else, so I sacrificed a little bit of image resolution in favor of a smoother 60 fps, and so far have seen barely a hitch. Granted, I’m still very early, so I haven’t encountered many large-scale skirmishes or intense boss battles, maybe these will cause more noticeable drops, but so far, the framerate isn’t dipping much.</p><p>It should be noted that I’m playing on the PS5 Pro. This is a pricey $749 suped-up version of the base PS5 console. I imagine the majority of PlayStation gamers will experience Crimson Desert on a regular PS5. I can’t speak to visuals/performance on base PS5, but according to <a href="https://www.pushsquare.com/news/2026/03/crimson-desert-looks-rough-on-base-ps5-heres-25-minutes-of-direct-capture-footage" target="_blank">PushSquare’s reporting</a>, the experience is quite significantly compromised on the regular console.</p><p>Still, I’m really looking forward to diving further into the world of Crimson Desert, as there’s clearly a lot to see and do, and at least so far, I’ve been plenty impressed with how everything looks, and most importantly, how everything runs. If you’re fortunate enough to have access to a PS5 Pro, then you can cast aside any pre-release skepticism, as Crimson Desert is really quite a looker. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exzJKO"></div>                            </div>                            <script src="https://kwizly.com/embed/exzJKO.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/gaming/crimson-desert-review">Crimson Desert review: overwhelming but ambitious</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/crimson-desert-might-be-the-talk-of-the-town-but-these-11-ps5-open-world-masterpieces-are-available-at-a-fraction-of-the-price">11 open-world PS5 games cheaper than Crimson Desert</a></li><li><a href="https://www.tomsguide.com/best-picks/the-best-ps5-games">The best PS5 games you can play right now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Crimson Desert might be the talk of the town, but these 11 PS5 open-world masterpieces are available at a fraction of the price ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Crimson Desert is the biggest gaming release of the week, and <a href="https://www.tomsguide.com/gaming/nintendo/over-2-2-million-copies-sold-over-release-weekend-pokemon-pokopia-hysteria-is-off-the-charts-and-these-8-accessories-will-enhance-your-switch-2-cozy-experience">Pokémon Pokopia</a> aside, the biggest launch in March.<br><br>The game from the South Korean developer Pearl Abyss is a massive open-world RPG that's said to be incredibly complex and vast, with claims that the immersive world is twice the size of Rockstar's magnum opus, Red Dead Redemption 2.</p><p>I absolutely love vast open-world video games with endless places to explore, gear to find, and side quests to complete, but truthfully, there are so many of these games that I'm sure many of even the most involved gamers haven't played them all.</p><p>I'm excited to play Crimson Desert, but considering its $70 price tag and the PS5's excellent collection of open-world games, I've decided to select 11 of my favorites (of which I've played them all) that might be worth your time instead of the latest release.</p>        <div class="featured_product_block featured_block_hero" data-id="c4001601-f638-4869-a0e9-6b929ae07cbd">            <a href="https://www.amazon.com/Crimson-Desert-Standard-PlayStation-5/dp/B0FST4FTPQ" data-model-name="Crimson Desert: Standard Edition - Playstation 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qqMEGdgwqtoZQFXGHuRf7f.jpg" alt="Deep Silver, Crimson Desert: Standard Edition - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Pearl Abyss</div>                                        <div class="featured__title">Crimson Desert: Standard Edition - Playstation 5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="cc74287a-4fd3-489e-9904-44cf669f1d3e">            <a href="https://www.amazon.com/Final-Fantasy-VII-Rebirth-PlayStation-5/dp/B0CGXZQ4CD/" data-model-name="Final Fantasy VII Rebirth - Exclusive Amazon Edition" 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/pu5oqVFCUrowYqSEVuksBg.jpg" alt="Square Enix, Final Fantasy VII Rebirth - Exclusive Amazon Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Square Enix</div>                                        <div class="featured__title">Final Fantasy VII Rebirth - Exclusive Amazon Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8e2ee494-d866-4cbb-bf8f-de7279b1e0e9">            <a href="https://www.amazon.com/Kingdom-Come-Deliverance-II-PlayStation-5/dp/B0D2FGZ3HF/" data-model-name="Kingdom Come: Deliverance II" 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/hLYy9sNtfFUcjokZrq7eyg.jpg" alt="Deep Silver, Kingdom Come: Deliverance II"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Deep Silver</div>                                        <div class="featured__title">Kingdom Come: Deliverance II</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d482012a-f654-4e15-825e-3af4fc536d41">            <a href="https://www.amazon.com/Red-Dead-Redemption-2-PlayStation-4/dp/B01M5DZ525/" data-model-name="Red Dead Redemption 2" 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/dVjPVMUDoqYBZ4TUpfM9Hi.jpg" alt="Rockstar Games, Red Dead Redemption 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Rockstar Games</div>                                        <div class="featured__title">Red Dead Redemption 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="378e4780-051f-40c8-b8d8-dbd646e22abf">            <a href="https://www.amazon.com/Cyberpunk-2077-Ultimate-PlayStation-5/dp/B0CP2Q75HM/" data-model-name="Cyberpunk 2077: Ultimate Edition" 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/UtrrJw83jbLSxmwVXCKQVj.jpg" alt="CD Projekt RED, Cyberpunk 2077: Ultimate Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CD Projekt RED</div>                                        <div class="featured__title">Cyberpunk 2077: Ultimate Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="36ad8773-bc84-473a-a744-ce16d8decdbe">            <a href="https://www.amazon.com/Witcher-Wild-Hunt-Complete-PlayStation-4/dp/B01K6010FM/" data-model-name="Witcher 3: Wild Hunt Complete Edition" 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/ovRZ5nkNLqZgDtvTsd79Jm.jpg" alt="CD Projekt RED, Witcher 3: Wild Hunt Complete Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CD Projekt RED</div>                                        <div class="featured__title">Witcher 3: Wild Hunt Complete Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="79882f50-bf99-4103-9021-5c967d787a3f">            <a href="https://www.amazon.com/Ghost-Y%C5%8Dtei-PS5-PlayStation-5/dp/B0F6F41T4H" data-model-name="Ghost of Yōtei" 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/A8EiwVFBcUEaSw2vBWJzTn.jpg" alt="PlayStation, Ghost of Yōtei"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Ghost of Yōtei</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5258677f-a84c-4da0-b831-6902da252b7f">            <a href="https://www.amazon.com/Avatar-Frontiers-Pandora-Ashes-PlayStation-5/dp/B0FS963QY8" data-model-name="Avatar: Frontiers of Pandora From the Ashes Edition" 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/VCzKLsJLEA8H94933uKR4.jpg" alt="Ubisoft, Avatar: Frontiers of Pandora From the Ashes Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ubisoft</div>                                        <div class="featured__title">Avatar: Frontiers of Pandora From the Ashes Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e7bbaefb-c6bc-455d-be01-5ac50dd34295">            <a href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB" data-model-name="Marvel’s Spider-Man 2" 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/WNow6HuQiUYm9DxqUDwW43.jpg" alt="PlayStation, Marvel’s Spider-Man 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Marvel’s Spider-Man 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="cd945847-d9a7-4d74-b52a-114de6ec730c">            <a href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" data-model-name="Elden Ring" 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/shuEwbktnRhVYmABv9Lpu3.jpg" alt="Bandai Namco, Elden Ring"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Bandai Namco</div>                                        <div class="featured__title">Elden Ring</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="dd503ca3-cd4a-43dd-9c11-bcdafc43741a">            <a href="https://www.amazon.com/Metaphor-ReFantazio-Launch-PlayStation-5/dp/B0D2FY9H73/" data-model-name="Metaphor: Refantazio Launch Edition" 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/T6ps4HpARxb2aC8TDjTuo4.jpg" alt="SEGA, Metaphor: Refantazio Launch Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SEGA</div>                                        <div class="featured__title">Metaphor: Refantazio Launch Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="70ddd161-d1ac-4981-a5c4-58037a15cc6c">            <a href="https://www.amazon.com/Horizon-Forbidden-West-Complete-PlayStation-5/dp/B0CK4VWNYL/" data-model-name="Horizon Forbidden West Complete Edition" 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/uBzfUGMTkr7z6UaUvJ7Lp5.jpg" alt="PlayStation, Horizon Forbidden West Complete Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Horizon Forbidden West Complete Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W0qkNO"></div>                            </div>                            <script src="https://kwizly.com/embed/W0qkNO.js" async></script><h2 id="what-is-crimson-desert">What is Crimson Desert?</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/VWIw_f8e9Pg" allowfullscreen></iframe></div></div><p>Now and then, a game pops up that really grabs your attention. That was me with Crimson Desert when it was initially revealed at The Game Awards in 2020, and I haven’t really stopped thinking about it since.</p><p>Crimson Desert is the next game from Pearl Abyss, best known for Black Desert Online, but instead of another sprawling MMO, this is a single-player, open-world action RPG set in the war-torn continent of Pywel. You play as Kliff, a mercenary trying to hold things together in a world that very much isn’t.</p><p>What’s grabbed my attention most from the gameplay videos is just the way it looks to offer an immersive 100-hour-plus experience across multiple genres. There’s a grounded, slightly messy realism that reminds me more of The Witcher 3: Wild Hunt, combat looks scrappy and heavy, and the sky islands remind me of one of my favorite games of all time: Tears of the Kingdom.</p><p>It also just looks… ridiculous, in a good way. The in-house engine is doing some serious work, with dynamic weather, dense environments, and the kind of visual detail that is seriously going to pop on high-end hardware like a PS5 Pro or a 50-series Nvidia graphics card.</p><p>I’m trying not to get too carried away, especially considering early impressions have said it's an overwhelming experience from the get-go. But Crimson Desert has that rare thing where it doesn’t just look impressive, it looks interesting. And that’s what’s got me hooked.</p><p>That said, the list above highlights some of the best video games of all time, and while I'm hopeful that Crimson Desert is excellent, it will have to be better than anyone could ever expect for it to come close to some of the titans listed above.</p> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/crimson-desert-might-be-the-talk-of-the-town-but-these-11-ps5-open-world-masterpieces-are-available-at-a-fraction-of-the-price</link>
                                                                            <description>
                            <![CDATA[ Crimson Desert is nearly here, but I think you should play a different PS5 open-world game instead, and these are my favorites. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">vXucigZie33C9WmHgp9qJC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DrYFm9CG6ffJrMdLCxTjQS-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 18 Mar 2026 13:45:04 +0000</pubDate>                                                                                                                                <updated>Thu, 19 Mar 2026 11:45:22 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ john-anthony.disotto@futurenet.com (John-Anthony Disotto) ]]></author>                    <dc:creator><![CDATA[ John-Anthony Disotto ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/apUjevMoC6MzjfVN7GBCoi-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;John-Anthony Disotto is the Collections Editor at Tom&#039;s Guide, curating advice on the best products to spend your hard-earned cash on. An award-winning journalist and longtime Apple expert, he previously covered AI at TechRadar and served as How To Editor at iMore.&lt;/p&gt;&lt;p&gt;He used to work for Apple as a technician focused on iOS and iPhone repairs at the Genius Bar and has used the Apple ecosystem for over a decade. In his spare time, John-Anthony can be found watching any sport under the sun, from football to darts, taking the term &#039;Lego house&#039; far too literally as he runs out of space to display any more plastic bricks, or chilling on the couch with his French bulldog, Kermit. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/DrYFm9CG6ffJrMdLCxTjQS-1920-80.jpg">
                                                            <media:credit><![CDATA[Getty Images / Girts Ragelis]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Ps5 controller]]></media:description>                                                            <media:text><![CDATA[Ps5 controller]]></media:text>
                                <media:title type="plain"><![CDATA[Ps5 controller]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DrYFm9CG6ffJrMdLCxTjQS-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Crimson Desert is the biggest gaming release of the week, and <a href="https://www.tomsguide.com/gaming/nintendo/over-2-2-million-copies-sold-over-release-weekend-pokemon-pokopia-hysteria-is-off-the-charts-and-these-8-accessories-will-enhance-your-switch-2-cozy-experience">Pokémon Pokopia</a> aside, the biggest launch in March.<br><br>The game from the South Korean developer Pearl Abyss is a massive open-world RPG that's said to be incredibly complex and vast, with claims that the immersive world is twice the size of Rockstar's magnum opus, Red Dead Redemption 2.</p><p>I absolutely love vast open-world video games with endless places to explore, gear to find, and side quests to complete, but truthfully, there are so many of these games that I'm sure many of even the most involved gamers haven't played them all.</p><p>I'm excited to play Crimson Desert, but considering its $70 price tag and the PS5's excellent collection of open-world games, I've decided to select 11 of my favorites (of which I've played them all) that might be worth your time instead of the latest release.</p>        <div class="featured_product_block featured_block_hero" data-id="c4001601-f638-4869-a0e9-6b929ae07cbd">            <a href="https://www.amazon.com/Crimson-Desert-Standard-PlayStation-5/dp/B0FST4FTPQ" data-model-name="Crimson Desert: Standard Edition - Playstation 5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qqMEGdgwqtoZQFXGHuRf7f.jpg" alt="Deep Silver, Crimson Desert: Standard Edition - Playstation 5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Pearl Abyss</div>                                        <div class="featured__title">Crimson Desert: Standard Edition - Playstation 5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="cc74287a-4fd3-489e-9904-44cf669f1d3e">            <a href="https://www.amazon.com/Final-Fantasy-VII-Rebirth-PlayStation-5/dp/B0CGXZQ4CD/" data-model-name="Final Fantasy VII Rebirth - Exclusive Amazon Edition" 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/pu5oqVFCUrowYqSEVuksBg.jpg" alt="Square Enix, Final Fantasy VII Rebirth - Exclusive Amazon Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Square Enix</div>                                        <div class="featured__title">Final Fantasy VII Rebirth - Exclusive Amazon Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="8e2ee494-d866-4cbb-bf8f-de7279b1e0e9">            <a href="https://www.amazon.com/Kingdom-Come-Deliverance-II-PlayStation-5/dp/B0D2FGZ3HF/" data-model-name="Kingdom Come: Deliverance II" 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/hLYy9sNtfFUcjokZrq7eyg.jpg" alt="Deep Silver, Kingdom Come: Deliverance II"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Deep Silver</div>                                        <div class="featured__title">Kingdom Come: Deliverance II</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d482012a-f654-4e15-825e-3af4fc536d41">            <a href="https://www.amazon.com/Red-Dead-Redemption-2-PlayStation-4/dp/B01M5DZ525/" data-model-name="Red Dead Redemption 2" 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/dVjPVMUDoqYBZ4TUpfM9Hi.jpg" alt="Rockstar Games, Red Dead Redemption 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Rockstar Games</div>                                        <div class="featured__title">Red Dead Redemption 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="378e4780-051f-40c8-b8d8-dbd646e22abf">            <a href="https://www.amazon.com/Cyberpunk-2077-Ultimate-PlayStation-5/dp/B0CP2Q75HM/" data-model-name="Cyberpunk 2077: Ultimate Edition" 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/UtrrJw83jbLSxmwVXCKQVj.jpg" alt="CD Projekt RED, Cyberpunk 2077: Ultimate Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CD Projekt RED</div>                                        <div class="featured__title">Cyberpunk 2077: Ultimate Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="36ad8773-bc84-473a-a744-ce16d8decdbe">            <a href="https://www.amazon.com/Witcher-Wild-Hunt-Complete-PlayStation-4/dp/B01K6010FM/" data-model-name="Witcher 3: Wild Hunt Complete Edition" 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/ovRZ5nkNLqZgDtvTsd79Jm.jpg" alt="CD Projekt RED, Witcher 3: Wild Hunt Complete Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>CD Projekt RED</div>                                        <div class="featured__title">Witcher 3: Wild Hunt Complete Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="79882f50-bf99-4103-9021-5c967d787a3f">            <a href="https://www.amazon.com/Ghost-Y%C5%8Dtei-PS5-PlayStation-5/dp/B0F6F41T4H" data-model-name="Ghost of Yōtei" 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/A8EiwVFBcUEaSw2vBWJzTn.jpg" alt="PlayStation, Ghost of Yōtei"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Ghost of Yōtei</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="5258677f-a84c-4da0-b831-6902da252b7f">            <a href="https://www.amazon.com/Avatar-Frontiers-Pandora-Ashes-PlayStation-5/dp/B0FS963QY8" data-model-name="Avatar: Frontiers of Pandora From the Ashes Edition" 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/VCzKLsJLEA8H94933uKR4.jpg" alt="Ubisoft, Avatar: Frontiers of Pandora From the Ashes Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Ubisoft</div>                                        <div class="featured__title">Avatar: Frontiers of Pandora From the Ashes Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="e7bbaefb-c6bc-455d-be01-5ac50dd34295">            <a href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB" data-model-name="Marvel’s Spider-Man 2" 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/WNow6HuQiUYm9DxqUDwW43.jpg" alt="PlayStation, Marvel’s Spider-Man 2"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Marvel’s Spider-Man 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="cd945847-d9a7-4d74-b52a-114de6ec730c">            <a href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6/" data-model-name="Elden Ring" 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/shuEwbktnRhVYmABv9Lpu3.jpg" alt="Bandai Namco, Elden Ring"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Bandai Namco</div>                                        <div class="featured__title">Elden Ring</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="dd503ca3-cd4a-43dd-9c11-bcdafc43741a">            <a href="https://www.amazon.com/Metaphor-ReFantazio-Launch-PlayStation-5/dp/B0D2FY9H73/" data-model-name="Metaphor: Refantazio Launch Edition" 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/T6ps4HpARxb2aC8TDjTuo4.jpg" alt="SEGA, Metaphor: Refantazio Launch Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>SEGA</div>                                        <div class="featured__title">Metaphor: Refantazio Launch Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="70ddd161-d1ac-4981-a5c4-58037a15cc6c">            <a href="https://www.amazon.com/Horizon-Forbidden-West-Complete-PlayStation-5/dp/B0CK4VWNYL/" data-model-name="Horizon Forbidden West Complete Edition" 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/uBzfUGMTkr7z6UaUvJ7Lp5.jpg" alt="PlayStation, Horizon Forbidden West Complete Edition"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Horizon Forbidden West Complete Edition</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W0qkNO"></div>                            </div>                            <script src="https://kwizly.com/embed/W0qkNO.js" async></script><h2 id="what-is-crimson-desert">What is Crimson Desert?</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/VWIw_f8e9Pg" allowfullscreen></iframe></div></div><p>Now and then, a game pops up that really grabs your attention. That was me with Crimson Desert when it was initially revealed at The Game Awards in 2020, and I haven’t really stopped thinking about it since.</p><p>Crimson Desert is the next game from Pearl Abyss, best known for Black Desert Online, but instead of another sprawling MMO, this is a single-player, open-world action RPG set in the war-torn continent of Pywel. You play as Kliff, a mercenary trying to hold things together in a world that very much isn’t.</p><p>What’s grabbed my attention most from the gameplay videos is just the way it looks to offer an immersive 100-hour-plus experience across multiple genres. There’s a grounded, slightly messy realism that reminds me more of The Witcher 3: Wild Hunt, combat looks scrappy and heavy, and the sky islands remind me of one of my favorite games of all time: Tears of the Kingdom.</p><p>It also just looks… ridiculous, in a good way. The in-house engine is doing some serious work, with dynamic weather, dense environments, and the kind of visual detail that is seriously going to pop on high-end hardware like a PS5 Pro or a 50-series Nvidia graphics card.</p><p>I’m trying not to get too carried away, especially considering early impressions have said it's an overwhelming experience from the get-go. But Crimson Desert has that rare thing where it doesn’t just look impressive, it looks interesting. And that’s what’s got me hooked.</p><p>That said, the list above highlights some of the best video games of all time, and while I'm hopeful that Crimson Desert is excellent, it will have to be better than anyone could ever expect for it to come close to some of the titans listed above.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Resident Evil Requiem too short? I'd buy these 12 PS5 games to scratch that horror action itch ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.amazon.com/Resident-Evil-Requiem-Amazon-Exclusive-PlayStation/dp/B0FY929QN1" target="_blank" rel="nofollow">Resident Evil Requiem ($69, Amazon)</a> might be the best video game I've played all year, but after completing the story, I can't help but want more.</p><p>Luckily, the PlayStation 5's catalog is filled with excellent survival horror video games like Grace's portion of RE 9, but also action to scratch that Leon zombie-killing itch.</p><p>If you're in the same boat as me, fret not, I've selected some of the best video game horror experiences out there, each with its own style and vibe.</p><p>If you're looking for something similar to the survival horror of Resident Evil Requiem and haven't played <a href="https://www.amazon.com/Resident-Evil-biohazard-Gold-PlayStation-5/dp/B0DKW9TJ23" target="_blank" rel="nofollow">Resident Evil: Biohazard ($19, Amazon)</a>, I'd recommend starting there. If Leon S Kennedy's badass action gameplay is more up your alley, check out <a href="https://www.amazon.com/Resident-Evil-4-PS5-PlayStation-5/dp/B0BJTKYLCB" target="_blank" rel="nofollow">Resident Evil 4 ($19, Amazon)</a> instead.</p><p>For those who have already played through Capcom's Resident Evil library on PS5, <a href="https://www.amazon.com/Silent-Hill-PlayStation-Amazon-Exclusive-Day/dp/B0F1C14LY8/" target="_blank" rel="nofollow">Silent Hill F ($69, Amazon)</a> is one of 2025's best horror games.</p><p>If you want a break from horror but still enjoy the gameplay of the latest entry in the Resident Evil Series, I've selected some of my favorite first-person shooter story-driven games, including Deathloop, as well as the <a href="https://www.amazon.com/BioShock-Collection-PlayStation-4/dp/B01HIZF83S/" target="_blank" rel="nofollow">Bioshock Collection ($18, Amazon)</a>, which is one of the best deals in gaming, full stop.</p>        <div class="featured_product_block featured_block_hero" data-id="416ce5a4-3049-4599-94f8-f12dbfe6d35d">            <a href="https://www.amazon.com/Resident-Evil-Requiem-Amazon-Exclusive-PlayStation/dp/B0FY929QN1" data-model-name="Resident Evil Requiem - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aDaaYvtvy9zVd9KicyuvQ8.jpg" alt="Capcom, Resident Evil Requiem - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil Requiem - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c5fd5e26-234b-48c4-a4d7-d43a8314c358">            <a href="https://www.amazon.com/Resident-Evil-4-PS5-PlayStation-5/dp/B0BJTKYLCB" data-model-name="Resident Evil 4 - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/j6ckGBfaveRqnAWA8y6Lm9.jpg" alt="Capcom, Resident Evil 4 - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil 4 - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b6f93982-8f41-4b2b-87fb-e083327f134f">            <a href="https://www.amazon.com/Resident-Evil-Village-Gold-PlayStation-5/dp/B0B75WMSFP/" data-model-name="Resident Evil Village Gold Edition - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/6BcUa6roKo74yAUh9WpBuC.jpg" alt="Capcom, Resident Evil Village Gold Edition - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil Village Gold Edition - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="de6e860a-f917-4034-b50e-e163f7d9c859">            <a href="https://www.amazon.com/Resident-Evil-2-PlayStation-5/dp/B0DKW2H52M/" data-model-name="Resident Evil 2 - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/XqaiZh3wauspVZu7JQ6C8F.jpg" alt="Capcom, Resident Evil 2 - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil 2 - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="66100612-3499-492e-8fe3-8f6522baa21a">            <a href="https://www.amazon.com/Resident-Evil-biohazard-Gold-PlayStation-5/dp/B0DKW9TJ23" data-model-name="Resident Evil 7 Biohazard Gold Edition - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/A7HmLAH3QCcypvuKiGmvfG.jpg" alt="Capcom, Resident Evil 7 Biohazard Gold Edition - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil 7 Biohazard Gold Edition - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="efcc8992-5d1e-4abd-a968-13baa7c5c676">            <a href="https://www.amazon.com/Silent-Hill-PlayStation-Amazon-Exclusive-Day/dp/B0F1C14LY8/" data-model-name="Silent Hill F - Day One Edition - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/9a5qWRtnnfAW9sUwGpHAbH.jpg" alt="Konami, Silent Hill F - Day One Edition - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Konami</div>                                        <div class="featured__title">Silent Hill F - Day One Edition - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="32ad0b07-37e6-4a4d-95bc-94dc11e9f6a4">            <a href="https://www.amazon.com/Silent-Hill-2-PS5-PlayStation-5/dp/B0CMC3C3Z9/" data-model-name="Silent Hill 2 - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ab5D7E6JdumUSHEPuUBeVJ.jpg" alt="Konami, Silent Hill 2 - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Konami</div>                                        <div class="featured__title">Silent Hill 2 - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="50baeb7c-281b-496c-b585-742713cbf50d">            <a href="https://www.amazon.com/Cronos-PlayStation-5/dp/B0FKNMXH4V/" data-model-name="Cronos - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/HdZNvgPgxaVFHtRvSigyyK.jpg" alt="Skybound Games, Cronos - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Skybound Games</div>                                        <div class="featured__title">Cronos - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6daea456-0be6-4c2e-b16f-5fbbb7058f76">            <a href="https://www.amazon.com/Returnal-PlayStation-5/dp/B08QFPS48J" data-model-name="Returnal - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZGwQtjhEZAL9AZ4wJCJKpL.jpg" alt="PlayStation, Returnal - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Returnal - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bd99c31c-8211-48ca-aebb-200b085ecd9a">            <a href="https://www.amazon.com/Warhammer-40-000-Space-Marine-PlayStation/dp/B0CVSDJNKS" data-model-name="Warhammer 40,000: Space Marine 2 - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cXEN4Zu8FjaHV67vFAGBhM.jpg" alt="Deep Silver, Warhammer 40,000: Space Marine 2 - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Deep Silver</div>                                        <div class="featured__title">Warhammer 40,000: Space Marine 2 - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6f9cc932-a39a-4b00-9f93-8e8e1c9d52d6">            <a href="https://www.amazon.com/DEATHLOOP-Standard-PlayStation-5/dp/B08NDYPWK7/" data-model-name="Deathloop - PS5" 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/TdbXjEXaj8X3hziG92KebN.jpg" alt="Bethesda, Deathloop - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Bethesda</div>                                        <div class="featured__title">Deathloop - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ce88af94-d50c-44fc-92d9-c6179386eae6">            <a href="https://www.amazon.com/BioShock-Collection-PlayStation-4/dp/B01HIZF83S/" data-model-name="Bioshock: The Collection - PS4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/d2jT27GVvp9xZK6Heh3pRP.jpg" alt="2K, Bioshock: The Collection - PS4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>2K</div>                                        <div class="featured__title">Bioshock: The Collection - PS4</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/resident-evil-requiem-too-short-id-buy-these-12-ps5-games-to-scratch-that-horror-action-itch</link>
                                                                            <description>
                            <![CDATA[ Resident Evil Requiem is amazing, but it also only takes around 10 hours to complete. These are the horror and action video games I'd recommend on PS5 to scratch that Resident Evil-filled gap in your life after the credits roll. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">BV4YwSTv6hohp4L6ZXEMZ4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aUwQc4gdCgHRAZvYSbTpJZ-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 02 Mar 2026 15:18:15 +0000</pubDate>                                                                                                                                <updated>Thu, 05 Mar 2026 09:00:15 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ john-anthony.disotto@futurenet.com (John-Anthony Disotto) ]]></author>                    <dc:creator><![CDATA[ John-Anthony Disotto ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/apUjevMoC6MzjfVN7GBCoi-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;John-Anthony Disotto is the Collections Editor at Tom&#039;s Guide, curating advice on the best products to spend your hard-earned cash on. An award-winning journalist and longtime Apple expert, he previously covered AI at TechRadar and served as How To Editor at iMore.&lt;/p&gt;&lt;p&gt;He used to work for Apple as a technician focused on iOS and iPhone repairs at the Genius Bar and has used the Apple ecosystem for over a decade. In his spare time, John-Anthony can be found watching any sport under the sun, from football to darts, taking the term &#039;Lego house&#039; far too literally as he runs out of space to display any more plastic bricks, or chilling on the couch with his French bulldog, Kermit. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/aUwQc4gdCgHRAZvYSbTpJZ-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony PlayStation / Capcom / Edited by Gemini]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Resident Evil video games in front of a haunted house]]></media:description>                                                            <media:text><![CDATA[Resident Evil video games in front of a haunted house]]></media:text>
                                <media:title type="plain"><![CDATA[Resident Evil video games in front of a haunted house]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aUwQc4gdCgHRAZvYSbTpJZ-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.amazon.com/Resident-Evil-Requiem-Amazon-Exclusive-PlayStation/dp/B0FY929QN1" target="_blank" rel="nofollow">Resident Evil Requiem ($69, Amazon)</a> might be the best video game I've played all year, but after completing the story, I can't help but want more.</p><p>Luckily, the PlayStation 5's catalog is filled with excellent survival horror video games like Grace's portion of RE 9, but also action to scratch that Leon zombie-killing itch.</p><p>If you're in the same boat as me, fret not, I've selected some of the best video game horror experiences out there, each with its own style and vibe.</p><p>If you're looking for something similar to the survival horror of Resident Evil Requiem and haven't played <a href="https://www.amazon.com/Resident-Evil-biohazard-Gold-PlayStation-5/dp/B0DKW9TJ23" target="_blank" rel="nofollow">Resident Evil: Biohazard ($19, Amazon)</a>, I'd recommend starting there. If Leon S Kennedy's badass action gameplay is more up your alley, check out <a href="https://www.amazon.com/Resident-Evil-4-PS5-PlayStation-5/dp/B0BJTKYLCB" target="_blank" rel="nofollow">Resident Evil 4 ($19, Amazon)</a> instead.</p><p>For those who have already played through Capcom's Resident Evil library on PS5, <a href="https://www.amazon.com/Silent-Hill-PlayStation-Amazon-Exclusive-Day/dp/B0F1C14LY8/" target="_blank" rel="nofollow">Silent Hill F ($69, Amazon)</a> is one of 2025's best horror games.</p><p>If you want a break from horror but still enjoy the gameplay of the latest entry in the Resident Evil Series, I've selected some of my favorite first-person shooter story-driven games, including Deathloop, as well as the <a href="https://www.amazon.com/BioShock-Collection-PlayStation-4/dp/B01HIZF83S/" target="_blank" rel="nofollow">Bioshock Collection ($18, Amazon)</a>, which is one of the best deals in gaming, full stop.</p>        <div class="featured_product_block featured_block_hero" data-id="416ce5a4-3049-4599-94f8-f12dbfe6d35d">            <a href="https://www.amazon.com/Resident-Evil-Requiem-Amazon-Exclusive-PlayStation/dp/B0FY929QN1" data-model-name="Resident Evil Requiem - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aDaaYvtvy9zVd9KicyuvQ8.jpg" alt="Capcom, Resident Evil Requiem - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil Requiem - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c5fd5e26-234b-48c4-a4d7-d43a8314c358">            <a href="https://www.amazon.com/Resident-Evil-4-PS5-PlayStation-5/dp/B0BJTKYLCB" data-model-name="Resident Evil 4 - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/j6ckGBfaveRqnAWA8y6Lm9.jpg" alt="Capcom, Resident Evil 4 - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil 4 - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b6f93982-8f41-4b2b-87fb-e083327f134f">            <a href="https://www.amazon.com/Resident-Evil-Village-Gold-PlayStation-5/dp/B0B75WMSFP/" data-model-name="Resident Evil Village Gold Edition - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/6BcUa6roKo74yAUh9WpBuC.jpg" alt="Capcom, Resident Evil Village Gold Edition - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil Village Gold Edition - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="de6e860a-f917-4034-b50e-e163f7d9c859">            <a href="https://www.amazon.com/Resident-Evil-2-PlayStation-5/dp/B0DKW2H52M/" data-model-name="Resident Evil 2 - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/XqaiZh3wauspVZu7JQ6C8F.jpg" alt="Capcom, Resident Evil 2 - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil 2 - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="66100612-3499-492e-8fe3-8f6522baa21a">            <a href="https://www.amazon.com/Resident-Evil-biohazard-Gold-PlayStation-5/dp/B0DKW9TJ23" data-model-name="Resident Evil 7 Biohazard Gold Edition - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/A7HmLAH3QCcypvuKiGmvfG.jpg" alt="Capcom, Resident Evil 7 Biohazard Gold Edition - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Capcom</div>                                        <div class="featured__title">Resident Evil 7 Biohazard Gold Edition - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="efcc8992-5d1e-4abd-a968-13baa7c5c676">            <a href="https://www.amazon.com/Silent-Hill-PlayStation-Amazon-Exclusive-Day/dp/B0F1C14LY8/" data-model-name="Silent Hill F - Day One Edition - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/9a5qWRtnnfAW9sUwGpHAbH.jpg" alt="Konami, Silent Hill F - Day One Edition - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Konami</div>                                        <div class="featured__title">Silent Hill F - Day One Edition - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="32ad0b07-37e6-4a4d-95bc-94dc11e9f6a4">            <a href="https://www.amazon.com/Silent-Hill-2-PS5-PlayStation-5/dp/B0CMC3C3Z9/" data-model-name="Silent Hill 2 - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ab5D7E6JdumUSHEPuUBeVJ.jpg" alt="Konami, Silent Hill 2 - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Konami</div>                                        <div class="featured__title">Silent Hill 2 - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="50baeb7c-281b-496c-b585-742713cbf50d">            <a href="https://www.amazon.com/Cronos-PlayStation-5/dp/B0FKNMXH4V/" data-model-name="Cronos - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/HdZNvgPgxaVFHtRvSigyyK.jpg" alt="Skybound Games, Cronos - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Skybound Games</div>                                        <div class="featured__title">Cronos - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6daea456-0be6-4c2e-b16f-5fbbb7058f76">            <a href="https://www.amazon.com/Returnal-PlayStation-5/dp/B08QFPS48J" data-model-name="Returnal - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZGwQtjhEZAL9AZ4wJCJKpL.jpg" alt="PlayStation, Returnal - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>PlayStation</div>                                        <div class="featured__title">Returnal - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bd99c31c-8211-48ca-aebb-200b085ecd9a">            <a href="https://www.amazon.com/Warhammer-40-000-Space-Marine-PlayStation/dp/B0CVSDJNKS" data-model-name="Warhammer 40,000: Space Marine 2 - PS5" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/cXEN4Zu8FjaHV67vFAGBhM.jpg" alt="Deep Silver, Warhammer 40,000: Space Marine 2 - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Deep Silver</div>                                        <div class="featured__title">Warhammer 40,000: Space Marine 2 - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6f9cc932-a39a-4b00-9f93-8e8e1c9d52d6">            <a href="https://www.amazon.com/DEATHLOOP-Standard-PlayStation-5/dp/B08NDYPWK7/" data-model-name="Deathloop - PS5" 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/TdbXjEXaj8X3hziG92KebN.jpg" alt="Bethesda, Deathloop - PS5"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Bethesda</div>                                        <div class="featured__title">Deathloop - PS5</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ce88af94-d50c-44fc-92d9-c6179386eae6">            <a href="https://www.amazon.com/BioShock-Collection-PlayStation-4/dp/B01HIZF83S/" data-model-name="Bioshock: The Collection - PS4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/d2jT27GVvp9xZK6Heh3pRP.jpg" alt="2K, Bioshock: The Collection - PS4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>2K</div>                                        <div class="featured__title">Bioshock: The Collection - PS4</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ GTA 6 pre-orders — PlayStation Store update could hint at new details soon ]]></title>
                                                                                                <dc:content><![CDATA[ <p>It looks like <a href="https://www.tomsguide.com/news/gta-6">Grand Theft Auto 6</a> may have just taken another step closer to actually being released. According to the dataminer <a href="https://x.com/PlaystationSize/status/2027951263602626570" target="_blank">PlayStation Game Size</a>, developers Rockstar have just added the title IDs for GTA 6 to the PlayStation Store. They speculate that this will precede some news about the game, possibly an announcement of pre-orders.</p><p>For those that don't know, title IDs are the different versions of the game that appear in a digital store. Presumably, the base version of the game has been added, suggesting a little more is happening behind the scenes than the placeholder listing that's been on the PS Store for several months.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2027951263602626570"><p lang="en" dir="ltr">Grand Theft Auto VI title IDs have been added to the PlayStation database. I expect we’ll see something about the game soon, probably the start of pre-orders. pic.twitter.com/PBda1Jvr5p<a href="https://twitter.com/cantworkitout/status/2027951263602626570">March 1, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>There isn't a whole lot of information to glean beyond this particular fact. PlayStation Game Size even admitted that there's no telling how long it might be between this database update and announcements about pricing. Apparently, it depends on the publisher, which would make predictions difficult, though they don't think there's going to be a long wait.</p><p>Obviously, this is going to offer a glimmer of hope for GTA fans, who are eagerly awaiting the release of the new game. It's been over 12 years since the release of GTA 5, not including the current-gen <a href="https://www.tomsguide.com/news/gta-v-is-coming-to-ps5-and-ps4-owners-get-a-free-upgrade">remaster</a>, which is longer than the time between the release of the original GTA in 1997 and GTA 4 in 2008. Considering <a href="https://www.tomsguide.com/gaming/gta-6-might-be-delayed-again-according-to-a-new-leak-heres-when-the-game-could-launch">GTA 6 has been officially delayed twice already</a>, anything that suggests it'll <a href="https://www.tomsguide.com/gaming/rockstar-announces-grand-theft-auto-iv-delayed-to-november-2026">actually arrive on November 19</a> can only be good news.</p><p>The reveal of pricing information is also especially important because there's been a lot of speculation that Rockstar may increase the price of the base game beyond the current $70 limit. In fact, some sources claim the developer (and publisher TakeTwo) may try to <a href="https://www.tomsguide.com/gaming/gta-6-may-sell-for-an-unprecedented-price-heres-how-much-it-could-cost">charge as much as $100</a> for the standard version of the game. </p><p>Nobody wants that, because games are expensive enough as it is. And while I do not doubt that plenty of people will pay full price for GTA 6, Rockstar would be mindful that higher prices may put some people off buying the game. Fewer people with the game means a smaller potential multiplayer base, and it's been clear for a while that this is where Rockstar makes the big bucks.</p><p>All we can do is speculate right now, and hopefully, this means we don't have much longer to wait before Rockstar reveals pre-order and pricing information. Alongside details of whatever special editions and potential early-ordering bonuses will be available.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XrzmMX"></div>                            </div>                            <script src="https://kwizly.com/embed/XrzmMX.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/gaming/nintendo/pokemon-at-30-every-pokemon-game-you-can-play-on-the-nintendo-switch-and-switch-2">Every Pokémon game you can play on the Nintendo Switch and Switch 2</a></li><li><a href="https://www.tomsguide.com/gaming/handheld-gaming/steam-deck-is-getting-a-usd100-price-hike-in-japan-is-the-us-next">Steam Deck is getting a $100 price hike in Japan — is the US next?</a></li><li><a href="https://www.tomsguide.com/gaming/ps5-pro-to-get-upgraded-pssr-for-better-graphics-and-performance-heres-the-game-youll-see-it-in-first">PS5 Pro to get upgraded PSSR for better graphics and performance</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/gta-6-pre-orders-playstation-store-update-could-hint-at-new-details-soon</link>
                                                                            <description>
                            <![CDATA[ GTA 6 title IDs have just landed in the PlayStation Store, and that could mean pricing and pre-order details could be on the way. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">8WfHLsUodTutW7QXQijJNN</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4TUTG7z8sBNcsajGFwkPaN-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 02 Mar 2026 10:54:14 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/4TUTG7z8sBNcsajGFwkPaN-1920-80.jpg">
                                                            <media:credit><![CDATA[Rockstar]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[GTA 6 featured poster]]></media:description>                                                            <media:text><![CDATA[GTA 6 featured poster]]></media:text>
                                <media:title type="plain"><![CDATA[GTA 6 featured poster]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/4TUTG7z8sBNcsajGFwkPaN-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It looks like <a href="https://www.tomsguide.com/news/gta-6">Grand Theft Auto 6</a> may have just taken another step closer to actually being released. According to the dataminer <a href="https://x.com/PlaystationSize/status/2027951263602626570" target="_blank">PlayStation Game Size</a>, developers Rockstar have just added the title IDs for GTA 6 to the PlayStation Store. They speculate that this will precede some news about the game, possibly an announcement of pre-orders.</p><p>For those that don't know, title IDs are the different versions of the game that appear in a digital store. Presumably, the base version of the game has been added, suggesting a little more is happening behind the scenes than the placeholder listing that's been on the PS Store for several months.</p><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2027951263602626570"><p lang="en" dir="ltr">Grand Theft Auto VI title IDs have been added to the PlayStation database. I expect we’ll see something about the game soon, probably the start of pre-orders. pic.twitter.com/PBda1Jvr5p<a href="https://twitter.com/cantworkitout/status/2027951263602626570">March 1, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>There isn't a whole lot of information to glean beyond this particular fact. PlayStation Game Size even admitted that there's no telling how long it might be between this database update and announcements about pricing. Apparently, it depends on the publisher, which would make predictions difficult, though they don't think there's going to be a long wait.</p><p>Obviously, this is going to offer a glimmer of hope for GTA fans, who are eagerly awaiting the release of the new game. It's been over 12 years since the release of GTA 5, not including the current-gen <a href="https://www.tomsguide.com/news/gta-v-is-coming-to-ps5-and-ps4-owners-get-a-free-upgrade">remaster</a>, which is longer than the time between the release of the original GTA in 1997 and GTA 4 in 2008. Considering <a href="https://www.tomsguide.com/gaming/gta-6-might-be-delayed-again-according-to-a-new-leak-heres-when-the-game-could-launch">GTA 6 has been officially delayed twice already</a>, anything that suggests it'll <a href="https://www.tomsguide.com/gaming/rockstar-announces-grand-theft-auto-iv-delayed-to-november-2026">actually arrive on November 19</a> can only be good news.</p><p>The reveal of pricing information is also especially important because there's been a lot of speculation that Rockstar may increase the price of the base game beyond the current $70 limit. In fact, some sources claim the developer (and publisher TakeTwo) may try to <a href="https://www.tomsguide.com/gaming/gta-6-may-sell-for-an-unprecedented-price-heres-how-much-it-could-cost">charge as much as $100</a> for the standard version of the game. </p><p>Nobody wants that, because games are expensive enough as it is. And while I do not doubt that plenty of people will pay full price for GTA 6, Rockstar would be mindful that higher prices may put some people off buying the game. Fewer people with the game means a smaller potential multiplayer base, and it's been clear for a while that this is where Rockstar makes the big bucks.</p><p>All we can do is speculate right now, and hopefully, this means we don't have much longer to wait before Rockstar reveals pre-order and pricing information. Alongside details of whatever special editions and potential early-ordering bonuses will be available.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XrzmMX"></div>                            </div>                            <script src="https://kwizly.com/embed/XrzmMX.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/gaming/nintendo/pokemon-at-30-every-pokemon-game-you-can-play-on-the-nintendo-switch-and-switch-2">Every Pokémon game you can play on the Nintendo Switch and Switch 2</a></li><li><a href="https://www.tomsguide.com/gaming/handheld-gaming/steam-deck-is-getting-a-usd100-price-hike-in-japan-is-the-us-next">Steam Deck is getting a $100 price hike in Japan — is the US next?</a></li><li><a href="https://www.tomsguide.com/gaming/ps5-pro-to-get-upgraded-pssr-for-better-graphics-and-performance-heres-the-game-youll-see-it-in-first">PS5 Pro to get upgraded PSSR for better graphics and performance</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Resident Evil Requiem first-person vs. third-person — here’s the best way to enjoy the new horror game ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/gaming/resident-evil-requiem-review">Resident Evil Requiem</a> always ranked as one of my most anticipated games of 2026, and after getting my hands on the game earlier this month, it lives up to the hype, and then some. In fact, it might just be my <em>favorite</em> Resident Evil game to date (excluding remakes). </p><p>But before you can dive into Capcom’s latest slice of slick survival horror-action, you are confronted with an important choice: first-person or third-person. The long-running franchise has been experimenting with perspective in recent years. Resident Evil 7: Biohazard brought the terror closer than ever via first-person, while the modern remakes of classics like Resident Evil 2 and <a href="https://www.tomsguide.com/reviews/resident-evil-4">Resident Evil 4</a> opted for a traditional over-the-shoulder point of view. </p><p>Resident Evil Requiem, which is the ninth mainline entry in the series, offers two playable characters: the returning Leon S. Kennedy and newcomer Grace Ashcroft, and allows you to select between the two play modes. It’s not the first Resident Evil game to do this; 2021’s <a href="https://www.tomsguide.com/reviews/resident-evil-village-review-its-almost-perfect">Resident Evil Village</a> offers a choice, with a third-person mode added via post-launch DLC.</p><p>But the difference in Resident Evil Requiem is that you have even <em>more</em> options. You can play the entire 12-hour campaign in first-person or third-person, or you can opt to switch perspectives depending on which character you’re playing as. I’ve been testing each mode to determine the best way to enjoy Resident Evil 9, and I’ve found there’s a clear winner. </p><div class="product"><a data-dimension112="70d67a8e-3b56-47e8-9d56-0347bd6cd615" data-action="Deal Block" data-label="Requiem" data-dimension48="Requiem" data-dimension25="$69" href="https://www.bestbuy.com/product/resident-evil-requiem-playstation-5/J7CXZVK288" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1298px;"><p class="vanilla-image-block" style="padding-top:115.56%;"><img id="t6iarbisuGMy5SzXoHtF9Q" name="resident-evil-requiem-ps5-na-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/t6iarbisuGMy5SzXoHtF9Q-1920-80.jpg" mos="" align="middle" fullscreen="" width="1298" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Resident Evil Requiem is the latest entry in the popular survival horror-action series. You play as dual protagonists, Grace Ashcroft and Leon S. Kenedy, as they unravel a shocking mystery and survive against the hordes of the undead and mutated creatures even more frightening. Combining tense horror and blistering action, Resident Evil Requiem is a must-play title.<a class="view-deal button" href="https://www.bestbuy.com/product/resident-evil-requiem-playstation-5/J7CXZVK288" target="_blank" rel="nofollow" data-dimension112="70d67a8e-3b56-47e8-9d56-0347bd6cd615" data-action="Deal Block" data-label="Requiem" data-dimension48="Requiem" data-dimension25="$69">View Deal</a></p></div><h2 id="both-viewpoints-have-their-advantages-and-disadvantages">Both viewpoints have their advantages (and disadvantages)</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/fXVy4mALHLY" allowfullscreen></iframe></div></div><p>I’m traditionally a third-person kind of person. While I certainly enjoy a good first-person shooter (I’m still regularly playing <a href="https://www.tomsguide.com/gaming/i-played-battlefield-6-for-over-20-hours-and-its-multiplayer-rivals-cod-but-skip-the-solo-mode">Battlefield 6</a> on my <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a>), when it comes to single-player experiences, third-person has always been my preferred perspective. </p><p>In the world of Resident Evil, being able to see your entire character does have its advantages. During the most frantic moments, when a mutated zombie or nightmarish creature is bearing down on you, it’s a lot easier to avoid getting munched on by the undead when you can fully take in your surroundings. Not to mention, in the case of Leon, it feels very fitting to play third-person, as the Leon-starring Resident Evil 4 set the standard by which many action games are still measuring up to even now, more than 20 years later.</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="pUHninx6CbUHRt8487AJsk" name="Resident Evil Requiem stalking boss" alt="Resident Evil Requiem" src="https://cdn.mos.cms.futurecdn.net/pUHninx6CbUHRt8487AJsk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>However, there’s no denying that third-person blunts the horrific atmosphere that Resident Evil thrives on. Resident Evil 7 is often credited as the most terrifying installment in the series, and I firmly believe the more immersive perspective is a major reason why that game still gets my palms sweating even after three complete playthroughs. Heck, I’ve just started a fourth run on the excellent Nintendo Switch 2 port, and I’m getting creeped out. </p><p>The same is true of Requiem. The fantastic first half takes place in the Rhodes Hill Chronic Care Center, and exploring the shadowy halls of this asylum feels all the more unnerving when you are vulnerable and can’t creatively maneuver your camera around each corner.</p><h2 id="forget-choosing-why-not-both">Forget choosing, why not both?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CVDdqjsDfPZDjVPY7bnDEe" name="Resident_Evil_Requiem_-_RE_Showcase_Screenshot_19" alt="Resident Evil Requiem: Leon aims his gun at a chainsaw-wielding zombie." src="https://cdn.mos.cms.futurecdn.net/CVDdqjsDfPZDjVPY7bnDEe-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>Going into Resident Evil Requiem, I really wasn’t sure how I was going to choose between first and third person. I was delighted when I discovered the Capcom developers had found a way to allow players to get the best of both.</p><p>While you are free to play the full game in either mode, the default option is actually a hybrid. Playing Leon’s chapters in third-person, and Grace’s in first-person. After sampling a portion of the game in every variant. Very quickly, it became clear that the default mixed approach was absolutely the way to play. </p><p>Not only does it allow you to enjoy the benefits of both, leaping between slick third-person action and terrifying first-person horror, but it’s also narratively appropriate. Leon is a grizzled veteran who has battled (and beaten) the worst this T-Virus-infected world can throw at him already, while Grace is comparatively fresh-faced and somewhat unprepared for her dark ordeal. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uVVT4hybTmti5p968Z76Ca" name="Resident Evil Requiem" alt="Resident Evil Requiem" src="https://cdn.mos.cms.futurecdn.net/uVVT4hybTmti5p968Z76Ca-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Grace’s portion of the game had me slowly creeping down low-lit corridors, nervous about what disgusting creature would pop up next (there’s plenty of nasties to encounter), while Leon’s section acted as a much-needed palate cleanser. They offered cathartic moments when I turned the tables on my tormentors and unloaded a whole load of lead into the face of any zombie foolish enough to cross my path, with a roundhouse kick for good measure. </p><p>In Resident Evil Requiem, the real answer to the choice between first-person and third-person is not to choose at all. Neither is superior, but situational instead. So, when you first boot up the game and are presented with the option, select the default setting. And if you find yourself greatly preferring one over the other, you can switch things up at any time.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exzzaO"></div>                            </div>                            <script src="https://kwizly.com/embed/exzzaO.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/gaming/resident-evil-requiem-review">Resident Evil Requiem review</a></li><li><a href="https://www.tomsguide.com/gaming/nintendo/pokemon-at-30-every-pokemon-game-you-can-play-on-the-nintendo-switch-and-switch-2">Every Pokémon game you can play on the Nintendo Switch 2</a></li><li><a href="https://www.tomsguide.com/gaming/pc-gaming/resident-evil-requiem-with-path-tracing-is-horrifying-and-i-mean-that-as-a-compliment-to-nvidia-and-dlss-4">Resident Evil Requiem turned me into a path tracing believer</a></li></ul><div data-model-name="Resident Evil Requiem" data-widget-type="review"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/resident-evil-requiem-first-person-vs-third-person-heres-the-best-way-to-enjoy-the-new-horror-game</link>
                                                                            <description>
                            <![CDATA[ Resident Evil Requiem is the first game in the series to offer a choice between a first and third-person camera at launch. Here's the best pick. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">2VphuoemFobM32C5qTSphR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/yhtd9E8hRfDXkxa5zaHShn-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 28 Feb 2026 09:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/yhtd9E8hRfDXkxa5zaHShn-1920-80.jpg">
                                                            <media:credit><![CDATA[Capcom]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Resident Evil Requiem: Grace aims her gun at a zombie.]]></media:description>                                                            <media:text><![CDATA[Resident Evil Requiem: Grace aims her gun at a zombie.]]></media:text>
                                <media:title type="plain"><![CDATA[Resident Evil Requiem: Grace aims her gun at a zombie.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/yhtd9E8hRfDXkxa5zaHShn-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/gaming/resident-evil-requiem-review">Resident Evil Requiem</a> always ranked as one of my most anticipated games of 2026, and after getting my hands on the game earlier this month, it lives up to the hype, and then some. In fact, it might just be my <em>favorite</em> Resident Evil game to date (excluding remakes). </p><p>But before you can dive into Capcom’s latest slice of slick survival horror-action, you are confronted with an important choice: first-person or third-person. The long-running franchise has been experimenting with perspective in recent years. Resident Evil 7: Biohazard brought the terror closer than ever via first-person, while the modern remakes of classics like Resident Evil 2 and <a href="https://www.tomsguide.com/reviews/resident-evil-4">Resident Evil 4</a> opted for a traditional over-the-shoulder point of view. </p><p>Resident Evil Requiem, which is the ninth mainline entry in the series, offers two playable characters: the returning Leon S. Kennedy and newcomer Grace Ashcroft, and allows you to select between the two play modes. It’s not the first Resident Evil game to do this; 2021’s <a href="https://www.tomsguide.com/reviews/resident-evil-village-review-its-almost-perfect">Resident Evil Village</a> offers a choice, with a third-person mode added via post-launch DLC.</p><p>But the difference in Resident Evil Requiem is that you have even <em>more</em> options. You can play the entire 12-hour campaign in first-person or third-person, or you can opt to switch perspectives depending on which character you’re playing as. I’ve been testing each mode to determine the best way to enjoy Resident Evil 9, and I’ve found there’s a clear winner. </p><div class="product"><a data-dimension112="70d67a8e-3b56-47e8-9d56-0347bd6cd615" data-action="Deal Block" data-label="Requiem" data-dimension48="Requiem" data-dimension25="$69" href="https://www.bestbuy.com/product/resident-evil-requiem-playstation-5/J7CXZVK288" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1298px;"><p class="vanilla-image-block" style="padding-top:115.56%;"><img id="t6iarbisuGMy5SzXoHtF9Q" name="resident-evil-requiem-ps5-na-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/t6iarbisuGMy5SzXoHtF9Q-1920-80.jpg" mos="" align="middle" fullscreen="" width="1298" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Resident Evil Requiem is the latest entry in the popular survival horror-action series. You play as dual protagonists, Grace Ashcroft and Leon S. Kenedy, as they unravel a shocking mystery and survive against the hordes of the undead and mutated creatures even more frightening. Combining tense horror and blistering action, Resident Evil Requiem is a must-play title.<a class="view-deal button" href="https://www.bestbuy.com/product/resident-evil-requiem-playstation-5/J7CXZVK288" target="_blank" rel="nofollow" data-dimension112="70d67a8e-3b56-47e8-9d56-0347bd6cd615" data-action="Deal Block" data-label="Requiem" data-dimension48="Requiem" data-dimension25="$69">View Deal</a></p></div><h2 id="both-viewpoints-have-their-advantages-and-disadvantages">Both viewpoints have their advantages (and disadvantages)</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/fXVy4mALHLY" allowfullscreen></iframe></div></div><p>I’m traditionally a third-person kind of person. While I certainly enjoy a good first-person shooter (I’m still regularly playing <a href="https://www.tomsguide.com/gaming/i-played-battlefield-6-for-over-20-hours-and-its-multiplayer-rivals-cod-but-skip-the-solo-mode">Battlefield 6</a> on my <a href="https://www.tomsguide.com/gaming/playstation/ps5-pro-review">PS5 Pro</a>), when it comes to single-player experiences, third-person has always been my preferred perspective. </p><p>In the world of Resident Evil, being able to see your entire character does have its advantages. During the most frantic moments, when a mutated zombie or nightmarish creature is bearing down on you, it’s a lot easier to avoid getting munched on by the undead when you can fully take in your surroundings. Not to mention, in the case of Leon, it feels very fitting to play third-person, as the Leon-starring Resident Evil 4 set the standard by which many action games are still measuring up to even now, more than 20 years later.</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="pUHninx6CbUHRt8487AJsk" name="Resident Evil Requiem stalking boss" alt="Resident Evil Requiem" src="https://cdn.mos.cms.futurecdn.net/pUHninx6CbUHRt8487AJsk-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>However, there’s no denying that third-person blunts the horrific atmosphere that Resident Evil thrives on. Resident Evil 7 is often credited as the most terrifying installment in the series, and I firmly believe the more immersive perspective is a major reason why that game still gets my palms sweating even after three complete playthroughs. Heck, I’ve just started a fourth run on the excellent Nintendo Switch 2 port, and I’m getting creeped out. </p><p>The same is true of Requiem. The fantastic first half takes place in the Rhodes Hill Chronic Care Center, and exploring the shadowy halls of this asylum feels all the more unnerving when you are vulnerable and can’t creatively maneuver your camera around each corner.</p><h2 id="forget-choosing-why-not-both">Forget choosing, why not both?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CVDdqjsDfPZDjVPY7bnDEe" name="Resident_Evil_Requiem_-_RE_Showcase_Screenshot_19" alt="Resident Evil Requiem: Leon aims his gun at a chainsaw-wielding zombie." src="https://cdn.mos.cms.futurecdn.net/CVDdqjsDfPZDjVPY7bnDEe-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>Going into Resident Evil Requiem, I really wasn’t sure how I was going to choose between first and third person. I was delighted when I discovered the Capcom developers had found a way to allow players to get the best of both.</p><p>While you are free to play the full game in either mode, the default option is actually a hybrid. Playing Leon’s chapters in third-person, and Grace’s in first-person. After sampling a portion of the game in every variant. Very quickly, it became clear that the default mixed approach was absolutely the way to play. </p><p>Not only does it allow you to enjoy the benefits of both, leaping between slick third-person action and terrifying first-person horror, but it’s also narratively appropriate. Leon is a grizzled veteran who has battled (and beaten) the worst this T-Virus-infected world can throw at him already, while Grace is comparatively fresh-faced and somewhat unprepared for her dark ordeal. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uVVT4hybTmti5p968Z76Ca" name="Resident Evil Requiem" alt="Resident Evil Requiem" src="https://cdn.mos.cms.futurecdn.net/uVVT4hybTmti5p968Z76Ca-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Grace’s portion of the game had me slowly creeping down low-lit corridors, nervous about what disgusting creature would pop up next (there’s plenty of nasties to encounter), while Leon’s section acted as a much-needed palate cleanser. They offered cathartic moments when I turned the tables on my tormentors and unloaded a whole load of lead into the face of any zombie foolish enough to cross my path, with a roundhouse kick for good measure. </p><p>In Resident Evil Requiem, the real answer to the choice between first-person and third-person is not to choose at all. Neither is superior, but situational instead. So, when you first boot up the game and are presented with the option, select the default setting. And if you find yourself greatly preferring one over the other, you can switch things up at any time.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-exzzaO"></div>                            </div>                            <script src="https://kwizly.com/embed/exzzaO.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/gaming/resident-evil-requiem-review">Resident Evil Requiem review</a></li><li><a href="https://www.tomsguide.com/gaming/nintendo/pokemon-at-30-every-pokemon-game-you-can-play-on-the-nintendo-switch-and-switch-2">Every Pokémon game you can play on the Nintendo Switch 2</a></li><li><a href="https://www.tomsguide.com/gaming/pc-gaming/resident-evil-requiem-with-path-tracing-is-horrifying-and-i-mean-that-as-a-compliment-to-nvidia-and-dlss-4">Resident Evil Requiem turned me into a path tracing believer</a></li></ul><div data-model-name="Resident Evil Requiem" data-widget-type="review"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The RAM crisis is out of control: Here's the most alarming tech products affected (so far) ]]></title>
                                                                                                <dc:content><![CDATA[ <p><a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a> is in full effect. With memory chip manufacturers prioritizing AI data centers, what we're left with is price hikes, shortages and delays on all the tech that we value the most. </p><p>Just how bad has it got? Well, before the memory shortage officially kicked into gear a few months ago, this <a href="https://www.amazon.com/G-SKILL-2x16GB-CL30-38-38-96-Desktop-Computer/dp/B0C1TKSDKR" target="_blank">32GB DDR5 RAM stick</a> could be picked up for $87. Now, it costs <strong>$484</strong>. That's just over a 450% increase, and that's <em>still </em>not the worst of it — DRAM and NAND storage memory prices have <a href="https://counterpointresearch.com/en/insights/7times-memory-price-surge-threatens-telcos-broadband-router-set-topbox-supply" target="_blank">skyrocketed by over 600%</a>. </p><p>For PC makers and enthusiasts, that's a tough blow. But if you're thinking you're in the clear, just because you don't buy RAM sticks yourself, I've got bad news: nothing is safe.  Phones, laptops, tablets, gaming consoles and yes, even Wi-Fi routers, will all be impacted by the RAM crisis. In fact, it's already taken effect. </p><p><a href="https://www.tomsguide.com/computing/buy-it-as-soon-as-you-can-lenovo-issues-urgent-warning-on-ram-crisis-spiking-prices">Companies are already scrambling</a> to scoop a dwindling supply of memory chips, with prices set to surge even higher going forward. The problem is, there's no end in sight anytime soon, as <a href="https://www.tomsguide.com/computing/someone-asked-me-today-how-long-the-dram-supply-shortage-would-last-i-may-need-to-revise-that-answer-analyst-predicts-bleak-future-for-ram-crisis">analysts</a> and even Micron itself are claiming <a href="https://www.tomsguide.com/computing/theres-just-not-enough-supply-to-go-around-micron-believes-ram-shortage-wont-improve-until-2028-at-least-until-the-ai-demand-starts-to-fade-away">we won't see any improvements until 2028</a>. Yikes. </p><p>We're in for the long haul, and we're already seeing the consequences of the biggest memory companies (SK Hynix, Micron and Samsung) pivoting supplies for an AI future. From shortages on our favorite products today to delays on the most anticipated devices, here are the biggest victims the RAM crisis has claimed (so far). </p><h2 id="valve-s-steam-deck-and-more">Valve's Steam Deck (and more)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3625px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ePtQiRAw8M9V2QGMEyEFTG" name="Steam Deck OLED-14.jpg" alt="Steam Deck OLED" src="https://cdn.mos.cms.futurecdn.net/ePtQiRAw8M9V2QGMEyEFTG-1920-80.jpg" mos="" align="middle" fullscreen="" width="3625" height="2039" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Who would have thought that a still-popular gaming handheld that released in 2022 would be so hard to get a hold of today? <a href="https://www.tomsguide.com/computing/hardware/steam-deck-oled-stock-is-drying-up-valve-confirms-and-the-ram-price-crunch-has-me-worried-for-the-steam-machine">Valve's Steam Deck is out of stock</a>,  and it's officially due to (you guessed it) “memory and storage shortages.”</p><p>Head over to <a href="https://store.steampowered.com/steamdeck" target="_blank">Steam</a> in the U.S., and you'll find that the <a href="https://www.tomsguide.com/reviews/steam-deck-oled">Steam Deck OLED</a>, along with the <a href="https://www.tomsguide.com/reviews/steam-deck-review-the-nintendo-switch-for-adults">OG Steam Deck</a>, can't be purchased. As <a href="https://store.steampowered.com/steamdeck" target="_blank">Valve's support page</a> notes, stock will be out "intermittently in some regions," although we've been <a href="https://www.tomsguide.com/gaming/handheld-gaming/steam-deck-oled-restock-im-tracking-all-inventory-so-you-dont-have-to">tracking restocks</a>, and Valve's gaming handheld hasn't shown up yet. </p><p>At the very least, every model is still available in the U.K., but who knows when stock will dry up in other regions, or how long the drought will last in those areas already affected. </p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7607921335993502990" data-video-id="7607921335993502990" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ Minimal for news / news suspense(1169746) - Hiraoka Kotaro" href="https://www.tiktok.com/music/Minimal-for-news-news-suspense-1169746-7055051802865862658">♬ Minimal for news / news suspense(1169746) - Hiraoka Kotaro</a></section>                    </blockquote></div>                <p>While the Steam Deck has had its moment to shine before shortages kicked in, this spells doom for everything else Valve has coming — the <a href="https://www.tomsguide.com/gaming/pc-gaming/steam-machine-vs-ps5-vs-xbox-series-x-s-vs-mac-mini-how-does-valves-new-console-compare">Steam Machine</a>, <a href="https://www.tomsguide.com/computing/vr-ar/steam-frame-will-take-over-vr-in-2026-3-key-features-i-cant-wait-for">Steam Frame</a> and Steam Controller. </p><p><a href="https://store.steampowered.com/news/group/45479024/view/625565405086220583" target="_blank">In a blog post</a>, the gaming giant revealed that its console-like PC, VR headset and gaming controller have been delayed to the “first half of the year,” as opposed to Q1 of 2026. And yes, it's due to “memory and storage shortages.” The RAM crisis is already delaying the biggest releases from Valve in years (and <a href="https://www.tomsguide.com/computing/half-life-3-and-steam-machine-could-be-delayed-and-you-can-blame-the-ram-price-crisis-for-that">maybe even the mythical Half-Life 3</a>?), but what's even more concerning is the price. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WLec9wkyEhDpZxRRLJYEqE" name="Valve Steam Machine" alt="Valve Steam Machine" src="https://cdn.mos.cms.futurecdn.net/WLec9wkyEhDpZxRRLJYEqE-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Valve)</span></figcaption></figure><p>The cost of the Steam Machine and the Steam Frame is still up in the air, and while Valve may have already had a fixed price for its upcoming tech, the company will "revisit" the price because of the memory shortage. This can only signal one thing: a price hike. </p><p>Many were already guessing the Steam Machine and Frame would be expensive, more so than the gaming consoles and VR headsets we see today. But now? We may have to add an extra $100 (or more) to what we imagined. As in, $999 for the Steam Machine and $799 for the Steam Frame. These are all just predictions, but considering the Steam Deck has already been affected by the RAM crisis, this only raises concerns about Valve's anticipated hardware. </p><h2 id="nvidia-skips-gaming-gpus">Nvidia skips gaming GPUs</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xWV7Xvua8aPb7TaLHKQ5Jj" name="Nvidia RTX 50 series GPU" alt="Nvidia RTX 50-series GPU held in hand with Nvidia logo on green background" src="https://cdn.mos.cms.futurecdn.net/xWV7Xvua8aPb7TaLHKQ5Jj-1920-80.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>Even Nvidia, the juggernaut that is all-in on AI, is struggling with the memory shortage. For the first time in three decades, <a href="https://www.tomsguide.com/computing/nvidia-wont-release-new-gaming-gpu-for-first-year-in-three-decades-due-to-ram-shortage-and-its-also-slashing-rtx-50-production">Team Green won't release a new gaming GPU this year</a>. </p><p>There had been a lot of talk about when we'd see <a href="https://www.tomsguide.com/computing/gpus/nvidia-rtx-50-super-gpu-rumors-everything-we-know-so-far">RTX 50 Super GPUs</a>, with rumors even pointing to a release of the RTX 5070 Super, RTX 5070 Ti Super, and RTX 5080 Super in late 2025. That didn't happen, but even at CES 2026, when Nvidia usually makes its big announcements, there were no new GPUs to be seen. </p><p>Instead, we got a first look at <a href="https://www.tomsguide.com/news/live/nvidia-ces-2026-keynote-live">Vera Rubin chips</a>, which are gearing up to power AI data centers and the like. It's expected to use HBM4 (High Bandwidth Memory 4), which is exactly what manufacturers are prioritizing over DRAM. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QCKTTLwmSEEx5S2XAMBXYC" name="RTX 5070 vs RTX 5070 Ti" alt="RTX 5070 vs RTX 5070 Ti" src="https://cdn.mos.cms.futurecdn.net/QCKTTLwmSEEx5S2XAMBXYC-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>So, instead of giving more previous VRAM to its anticipated set of RTX 50 Super graphics cards (which we'd love to see in the <a href="https://www.tomsguide.com/computing/gpus/nvidia-geforce-rtx-5070-review">RTX 5070</a> and <a href="https://www.tomsguide.com/computing/gpus/nvidia-geforce-rtx-5070-ti-review">RTX 5070 Ti</a>), Nvidia shift gears to fuel the AI train. </p><p>As it turns out, Nvidia has indefinitely delayed "Kicker" — the code name for the incremental RTX 50-series refresh, likely the Super cards that we expected to see this year. Even though the designs were reportedly finished, the company decided that it couldn't justify the memory costs.</p><p>So, what does this mean for the inevitable <a href="https://www.tomsguide.com/computing/gpus/nvidia-rtx-60-series-gpus-rumors-leaks-and-everything-we-know-so-far">RTX 60-series GPUs</a>? Well, a leak indicated we could see these <a href="https://www.tomsguide.com/computing/gpus/nvidia-rtx-60-series-in-early-2027-the-leak-sounds-huge-but-the-numbers-dont-add-up">debut in early 2027</a>, but with the ongoing memory crisis already taking its next Super-series off the list this year, there's good reason to believe we won't see these anytime soon. </p><h2 id="ps6-pushed-back">PS6 pushed back?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="y5T6EzpDkzjkm8NbGVewWW" name="PS5 Pro-9" alt="The PlayStation logo on a PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We've already seen the price of every <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> model <a href="https://www.tomsguide.com/gaming/playstation/every-ps5-model-is-getting-a-price-hike-in-the-u-s-and-todays-the-last-day-to-get-one-cheaper">increase by $50 last year</a>, due to a "backdrop of a challenging economic environment" at the time, but so far, we haven't seen Sony's console be largely affected by the memory and storage shortage. As for its next-gen model? It could be further away than we first thought. </p><p>According to a report from <a href="https://www.bloomberg.com/news/articles/2026-02-15/rampant-ai-demand-for-memory-is-fueling-a-growing-chip-crisis" target="_blank">Bloomberg</a>, Sony is considering <a href="https://www.tomsguide.com/gaming/rameggedon-comes-for-gaming-as-nintendo-and-playstation-mull-price-hikes-and-delays">pushing the launch of its PS6 back to 2028</a> at the earliest, all the way to 2029. And all signs are pointing to the RAM crisis. While rumors have claimed we may see the PS6 in 2028 anyway, some indicate a late 2027 release, which would line up with <a href="https://www.tomsguide.com/gaming/xbox/amd-hinted-the-next-gen-xbox-could-launch-in-2027-heres-why-im-not-convinced">AMD's hint that a next-gen Xbox is landing next year</a>. </p><p>To put this into perspective, the PS4 launched in November 2013, while the latest PS5 arrived in November 2020. The console cycle is generally seven years, and RAMageddon appears to be disrupting the flow already — possibly by two years. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xjx5MW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xjx5MW.js" async></script><p>With rumors suggesting the <a href="https://www.tomsguide.com/gaming/ps6-rumored-for-massive-30gb-ram-upgrade-as-next-xbox-will-pivot-to-pc-hybrid-what-we-know-so-far">PS6 is expected to come equipped with 32GB of DDR7 RAM</a> to power the next generation of gaming, which is double what the PS5 has (16GB GDDR6), we can start to piece together why Sony would delay the launch of its new console. </p><p>During the <a href="https://www.tomsguide.com/news/ps6-release-date-tipped-in-activision-blizzard-trial-what-we-know">Activision Blizzard trial back in 2023</a>, documents revealed that the next Xbox and PS6 were set for 2028. But times have changed, and the scarcity of RAM to power these consoles is making it harder for companies to know when the right time is to release their fresh products. </p><p>Remember how hard it was to get a PS5 when it launched? Now imagine Sony releasing its PS6 with a limited supply of RAM; the wait for restocks would be never-ending. </p><h2 id="nintendo-switch-2-price-hikes">Nintendo Switch 2 price hikes?</h2><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="H5XCv25fUwCBV3jkkWsiDZ" name="Nintendo_switch_2_ 13.JPG" alt="A Nintendo Switch 2 handheld console" src="https://cdn.mos.cms.futurecdn.net/H5XCv25fUwCBV3jkkWsiDZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-console-review">Nintendo Switch 2</a> already had to deal with <a href="https://www.tomsguide.com/computing/buying-cheap-tech-could-take-a-hit-in-2025-trumps-tariffs-explained">U.S. tariffs</a>, and many weren't happy with its price tag. Unfortunately, the RAM crisis may make matters worse. </p><p>Despite a successful launch, becoming the fastest-selling console of all time, <a href="https://www.tomsguide.com/gaming/rameggedon-comes-for-gaming-as-nintendo-and-playstation-mull-price-hikes-and-delays">Nintendo is considering raising prices this year</a>. Many had already expected this to happen, following in the footsteps of PlayStation and Xbox raising the cost of their consoles last year, but the memory shortage (and tariffs) appears to be accelerating this. </p><p>Analysts believe the <a href="https://www.tomsguide.com/gaming/nintendo/the-switch-2-is-set-to-follow-in-sony-and-microsofts-footsteps-with-its-own-price-hike-possible-bad-news-for-nintendos-red-hot-console-but-theres-a-silver-lining">Switch 2 will receive a $50 price bump</a>, taking it from $449 to $499 (the price for the Mario Kart World bundle). And this year, during an earnings call, Nintendo President Shuntaro Furukawa raised concerns about the <a href="https://www.tomsguide.com/gaming/nintendo/the-market-environment-is-indeed-challenging-nintendo-president-sounds-the-alarm-on-pressure-caused-by-surging-memory-prices-as-switch-2-forecast-stays-at-19-million">"pressure" caused by surging memory prices</a>. </p><p>"The market environment is indeed challenging. But we are engaging in long-term discussions with our suppliers to ensure we maintain a stable intake of chips,” Furukawa noted. That's a promising outlook, but many companies are vying for memory these days, so it only seems inevitable that Nintendo will eventually bump up the price of its Switch 2. </p><p>My advice? If there's a particular product you're interested in (in this case, the Switch 2), buy it now. With the RAM crisis already affecting the biggest products on the market, prices are only going to soar, and it will be a while before we see next-gen products come to shelves. Even if they do arrive, don't expect a huge supply. </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/lenovo-is-planning-another-pc-price-hike-in-march-and-im-all-out-of-patience-with-this-ai-bubble">Lenovo is planning another PC price hike in March — and I’m all out of patience with this AI bubble</a></li><li><a href="https://www.tomsguide.com/computing/someone-asked-me-today-how-long-the-dram-supply-shortage-would-last-i-may-need-to-revise-that-answer-analyst-predicts-bleak-future-for-ram-crisis">'Someone asked me today how long the DRAM supply shortage would last...I may need to revise that answer': analyst predicts bleak future for RAM crisis</a></li><li><a href="https://www.tomsguide.com/gaming/xbox/amd-hinted-the-next-gen-xbox-could-launch-in-2027-heres-why-im-not-convinced">AMD just hinted the next-gen Xbox could ‘launch in 2027’ — here’s why I’m not convinced</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/computing/the-ram-crisis-is-so-much-bigger-than-pcs-heres-the-rest-of-the-products-caught-in-the-crossfire</link>
                                                                            <description>
                            <![CDATA[ The RAM crisis affects far more than PCs, with everything from Valve's Steam Deck to Sony's PS6 on the line. Here's the gaming gear that might be impacted the most. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">zhZEiBKJL7rT6ogC3aWxLZ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EyjJUuKxjXzFDkrxdkQzRW-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 22 Feb 2026 06:30:00 +0000</pubDate>                                                                                                                                <updated>Mon, 23 Feb 2026 13:19:00 +0000</updated>
                                                                                                                                            <category><![CDATA[Computing]]></category>
                                                                                                                    <dc:creator><![CDATA[ Darragh Murphy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5QiaTSWf9FcVB7STxcdo4M-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Darragh is Tom’s Guide’s Computing Editor and is fascinated by all things bizarre in tech. This usually leads to assorted coverage varying from washing machines designed for earbuds to the wild world of laptops. Whether it&#039;s connecting Scar from The Lion King to two-factor authentication or turning his love for laptops into a fabricated rap battle from 8 Mile, he believes there’s always a quirky spin to be made.&lt;br&gt;&lt;br&gt;Darragh has previously been an Editor for Laptop Mag and a News Editor for Time Out Dubai, where he also headed the gaming and tech section. His work can be seen in Mashable, Android Police, Shortlist Dubai, Proton, theBit.nz, ReviewsFire and more. &lt;br&gt;&lt;br&gt;While laptops are his bread and butter, he’s also reviewed smartphones, monitors, speakers, docking stations and VPNs. He’s covered IFA, MWC Barcelona, the Consumer Electronics Show (&lt;a href=&quot;https://www.tomsguide.com/uk/tag/ces&quot; target=&quot;_blank&quot;&gt;CES&lt;/a&gt;) and more.&lt;br&gt;&lt;br&gt;When he&#039;s not checking out the latest devices and all things computing, he can be found going for dreaded long runs, watching terrible shark movies, and trying to find time to game.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EyjJUuKxjXzFDkrxdkQzRW-1920-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A single RAM stick]]></media:description>                                                            <media:text><![CDATA[A single RAM stick]]></media:text>
                                <media:title type="plain"><![CDATA[A single RAM stick]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EyjJUuKxjXzFDkrxdkQzRW-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/computing/ram-price-crisis-2026-everything-you-need-to-know">RAMageddon</a> is in full effect. With memory chip manufacturers prioritizing AI data centers, what we're left with is price hikes, shortages and delays on all the tech that we value the most. </p><p>Just how bad has it got? Well, before the memory shortage officially kicked into gear a few months ago, this <a href="https://www.amazon.com/G-SKILL-2x16GB-CL30-38-38-96-Desktop-Computer/dp/B0C1TKSDKR" target="_blank">32GB DDR5 RAM stick</a> could be picked up for $87. Now, it costs <strong>$484</strong>. That's just over a 450% increase, and that's <em>still </em>not the worst of it — DRAM and NAND storage memory prices have <a href="https://counterpointresearch.com/en/insights/7times-memory-price-surge-threatens-telcos-broadband-router-set-topbox-supply" target="_blank">skyrocketed by over 600%</a>. </p><p>For PC makers and enthusiasts, that's a tough blow. But if you're thinking you're in the clear, just because you don't buy RAM sticks yourself, I've got bad news: nothing is safe.  Phones, laptops, tablets, gaming consoles and yes, even Wi-Fi routers, will all be impacted by the RAM crisis. In fact, it's already taken effect. </p><p><a href="https://www.tomsguide.com/computing/buy-it-as-soon-as-you-can-lenovo-issues-urgent-warning-on-ram-crisis-spiking-prices">Companies are already scrambling</a> to scoop a dwindling supply of memory chips, with prices set to surge even higher going forward. The problem is, there's no end in sight anytime soon, as <a href="https://www.tomsguide.com/computing/someone-asked-me-today-how-long-the-dram-supply-shortage-would-last-i-may-need-to-revise-that-answer-analyst-predicts-bleak-future-for-ram-crisis">analysts</a> and even Micron itself are claiming <a href="https://www.tomsguide.com/computing/theres-just-not-enough-supply-to-go-around-micron-believes-ram-shortage-wont-improve-until-2028-at-least-until-the-ai-demand-starts-to-fade-away">we won't see any improvements until 2028</a>. Yikes. </p><p>We're in for the long haul, and we're already seeing the consequences of the biggest memory companies (SK Hynix, Micron and Samsung) pivoting supplies for an AI future. From shortages on our favorite products today to delays on the most anticipated devices, here are the biggest victims the RAM crisis has claimed (so far). </p><h2 id="valve-s-steam-deck-and-more">Valve's Steam Deck (and more)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3625px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ePtQiRAw8M9V2QGMEyEFTG" name="Steam Deck OLED-14.jpg" alt="Steam Deck OLED" src="https://cdn.mos.cms.futurecdn.net/ePtQiRAw8M9V2QGMEyEFTG-1920-80.jpg" mos="" align="middle" fullscreen="" width="3625" height="2039" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Who would have thought that a still-popular gaming handheld that released in 2022 would be so hard to get a hold of today? <a href="https://www.tomsguide.com/computing/hardware/steam-deck-oled-stock-is-drying-up-valve-confirms-and-the-ram-price-crunch-has-me-worried-for-the-steam-machine">Valve's Steam Deck is out of stock</a>,  and it's officially due to (you guessed it) “memory and storage shortages.”</p><p>Head over to <a href="https://store.steampowered.com/steamdeck" target="_blank">Steam</a> in the U.S., and you'll find that the <a href="https://www.tomsguide.com/reviews/steam-deck-oled">Steam Deck OLED</a>, along with the <a href="https://www.tomsguide.com/reviews/steam-deck-review-the-nintendo-switch-for-adults">OG Steam Deck</a>, can't be purchased. As <a href="https://store.steampowered.com/steamdeck" target="_blank">Valve's support page</a> notes, stock will be out "intermittently in some regions," although we've been <a href="https://www.tomsguide.com/gaming/handheld-gaming/steam-deck-oled-restock-im-tracking-all-inventory-so-you-dont-have-to">tracking restocks</a>, and Valve's gaming handheld hasn't shown up yet. </p><p>At the very least, every model is still available in the U.K., but who knows when stock will dry up in other regions, or how long the drought will last in those areas already affected. </p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7607921335993502990" data-video-id="7607921335993502990" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ Minimal for news / news suspense(1169746) - Hiraoka Kotaro" href="https://www.tiktok.com/music/Minimal-for-news-news-suspense-1169746-7055051802865862658">♬ Minimal for news / news suspense(1169746) - Hiraoka Kotaro</a></section>                    </blockquote></div>                <p>While the Steam Deck has had its moment to shine before shortages kicked in, this spells doom for everything else Valve has coming — the <a href="https://www.tomsguide.com/gaming/pc-gaming/steam-machine-vs-ps5-vs-xbox-series-x-s-vs-mac-mini-how-does-valves-new-console-compare">Steam Machine</a>, <a href="https://www.tomsguide.com/computing/vr-ar/steam-frame-will-take-over-vr-in-2026-3-key-features-i-cant-wait-for">Steam Frame</a> and Steam Controller. </p><p><a href="https://store.steampowered.com/news/group/45479024/view/625565405086220583" target="_blank">In a blog post</a>, the gaming giant revealed that its console-like PC, VR headset and gaming controller have been delayed to the “first half of the year,” as opposed to Q1 of 2026. And yes, it's due to “memory and storage shortages.” The RAM crisis is already delaying the biggest releases from Valve in years (and <a href="https://www.tomsguide.com/computing/half-life-3-and-steam-machine-could-be-delayed-and-you-can-blame-the-ram-price-crisis-for-that">maybe even the mythical Half-Life 3</a>?), but what's even more concerning is the price. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="WLec9wkyEhDpZxRRLJYEqE" name="Valve Steam Machine" alt="Valve Steam Machine" src="https://cdn.mos.cms.futurecdn.net/WLec9wkyEhDpZxRRLJYEqE-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Valve)</span></figcaption></figure><p>The cost of the Steam Machine and the Steam Frame is still up in the air, and while Valve may have already had a fixed price for its upcoming tech, the company will "revisit" the price because of the memory shortage. This can only signal one thing: a price hike. </p><p>Many were already guessing the Steam Machine and Frame would be expensive, more so than the gaming consoles and VR headsets we see today. But now? We may have to add an extra $100 (or more) to what we imagined. As in, $999 for the Steam Machine and $799 for the Steam Frame. These are all just predictions, but considering the Steam Deck has already been affected by the RAM crisis, this only raises concerns about Valve's anticipated hardware. </p><h2 id="nvidia-skips-gaming-gpus">Nvidia skips gaming GPUs</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xWV7Xvua8aPb7TaLHKQ5Jj" name="Nvidia RTX 50 series GPU" alt="Nvidia RTX 50-series GPU held in hand with Nvidia logo on green background" src="https://cdn.mos.cms.futurecdn.net/xWV7Xvua8aPb7TaLHKQ5Jj-1920-80.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>Even Nvidia, the juggernaut that is all-in on AI, is struggling with the memory shortage. For the first time in three decades, <a href="https://www.tomsguide.com/computing/nvidia-wont-release-new-gaming-gpu-for-first-year-in-three-decades-due-to-ram-shortage-and-its-also-slashing-rtx-50-production">Team Green won't release a new gaming GPU this year</a>. </p><p>There had been a lot of talk about when we'd see <a href="https://www.tomsguide.com/computing/gpus/nvidia-rtx-50-super-gpu-rumors-everything-we-know-so-far">RTX 50 Super GPUs</a>, with rumors even pointing to a release of the RTX 5070 Super, RTX 5070 Ti Super, and RTX 5080 Super in late 2025. That didn't happen, but even at CES 2026, when Nvidia usually makes its big announcements, there were no new GPUs to be seen. </p><p>Instead, we got a first look at <a href="https://www.tomsguide.com/news/live/nvidia-ces-2026-keynote-live">Vera Rubin chips</a>, which are gearing up to power AI data centers and the like. It's expected to use HBM4 (High Bandwidth Memory 4), which is exactly what manufacturers are prioritizing over DRAM. </p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QCKTTLwmSEEx5S2XAMBXYC" name="RTX 5070 vs RTX 5070 Ti" alt="RTX 5070 vs RTX 5070 Ti" src="https://cdn.mos.cms.futurecdn.net/QCKTTLwmSEEx5S2XAMBXYC-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>So, instead of giving more previous VRAM to its anticipated set of RTX 50 Super graphics cards (which we'd love to see in the <a href="https://www.tomsguide.com/computing/gpus/nvidia-geforce-rtx-5070-review">RTX 5070</a> and <a href="https://www.tomsguide.com/computing/gpus/nvidia-geforce-rtx-5070-ti-review">RTX 5070 Ti</a>), Nvidia shift gears to fuel the AI train. </p><p>As it turns out, Nvidia has indefinitely delayed "Kicker" — the code name for the incremental RTX 50-series refresh, likely the Super cards that we expected to see this year. Even though the designs were reportedly finished, the company decided that it couldn't justify the memory costs.</p><p>So, what does this mean for the inevitable <a href="https://www.tomsguide.com/computing/gpus/nvidia-rtx-60-series-gpus-rumors-leaks-and-everything-we-know-so-far">RTX 60-series GPUs</a>? Well, a leak indicated we could see these <a href="https://www.tomsguide.com/computing/gpus/nvidia-rtx-60-series-in-early-2027-the-leak-sounds-huge-but-the-numbers-dont-add-up">debut in early 2027</a>, but with the ongoing memory crisis already taking its next Super-series off the list this year, there's good reason to believe we won't see these anytime soon. </p><h2 id="ps6-pushed-back">PS6 pushed back?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="y5T6EzpDkzjkm8NbGVewWW" name="PS5 Pro-9" alt="The PlayStation logo on a PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We've already seen the price of every <a href="https://www.tomsguide.com/reviews/ps5">PS5</a> model <a href="https://www.tomsguide.com/gaming/playstation/every-ps5-model-is-getting-a-price-hike-in-the-u-s-and-todays-the-last-day-to-get-one-cheaper">increase by $50 last year</a>, due to a "backdrop of a challenging economic environment" at the time, but so far, we haven't seen Sony's console be largely affected by the memory and storage shortage. As for its next-gen model? It could be further away than we first thought. </p><p>According to a report from <a href="https://www.bloomberg.com/news/articles/2026-02-15/rampant-ai-demand-for-memory-is-fueling-a-growing-chip-crisis" target="_blank">Bloomberg</a>, Sony is considering <a href="https://www.tomsguide.com/gaming/rameggedon-comes-for-gaming-as-nintendo-and-playstation-mull-price-hikes-and-delays">pushing the launch of its PS6 back to 2028</a> at the earliest, all the way to 2029. And all signs are pointing to the RAM crisis. While rumors have claimed we may see the PS6 in 2028 anyway, some indicate a late 2027 release, which would line up with <a href="https://www.tomsguide.com/gaming/xbox/amd-hinted-the-next-gen-xbox-could-launch-in-2027-heres-why-im-not-convinced">AMD's hint that a next-gen Xbox is landing next year</a>. </p><p>To put this into perspective, the PS4 launched in November 2013, while the latest PS5 arrived in November 2020. The console cycle is generally seven years, and RAMageddon appears to be disrupting the flow already — possibly by two years. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-Xjx5MW"></div>                            </div>                            <script src="https://kwizly.com/embed/Xjx5MW.js" async></script><p>With rumors suggesting the <a href="https://www.tomsguide.com/gaming/ps6-rumored-for-massive-30gb-ram-upgrade-as-next-xbox-will-pivot-to-pc-hybrid-what-we-know-so-far">PS6 is expected to come equipped with 32GB of DDR7 RAM</a> to power the next generation of gaming, which is double what the PS5 has (16GB GDDR6), we can start to piece together why Sony would delay the launch of its new console. </p><p>During the <a href="https://www.tomsguide.com/news/ps6-release-date-tipped-in-activision-blizzard-trial-what-we-know">Activision Blizzard trial back in 2023</a>, documents revealed that the next Xbox and PS6 were set for 2028. But times have changed, and the scarcity of RAM to power these consoles is making it harder for companies to know when the right time is to release their fresh products. </p><p>Remember how hard it was to get a PS5 when it launched? Now imagine Sony releasing its PS6 with a limited supply of RAM; the wait for restocks would be never-ending. </p><h2 id="nintendo-switch-2-price-hikes">Nintendo Switch 2 price hikes?</h2><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="H5XCv25fUwCBV3jkkWsiDZ" name="Nintendo_switch_2_ 13.JPG" alt="A Nintendo Switch 2 handheld console" src="https://cdn.mos.cms.futurecdn.net/H5XCv25fUwCBV3jkkWsiDZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-console-review">Nintendo Switch 2</a> already had to deal with <a href="https://www.tomsguide.com/computing/buying-cheap-tech-could-take-a-hit-in-2025-trumps-tariffs-explained">U.S. tariffs</a>, and many weren't happy with its price tag. Unfortunately, the RAM crisis may make matters worse. </p><p>Despite a successful launch, becoming the fastest-selling console of all time, <a href="https://www.tomsguide.com/gaming/rameggedon-comes-for-gaming-as-nintendo-and-playstation-mull-price-hikes-and-delays">Nintendo is considering raising prices this year</a>. Many had already expected this to happen, following in the footsteps of PlayStation and Xbox raising the cost of their consoles last year, but the memory shortage (and tariffs) appears to be accelerating this. </p><p>Analysts believe the <a href="https://www.tomsguide.com/gaming/nintendo/the-switch-2-is-set-to-follow-in-sony-and-microsofts-footsteps-with-its-own-price-hike-possible-bad-news-for-nintendos-red-hot-console-but-theres-a-silver-lining">Switch 2 will receive a $50 price bump</a>, taking it from $449 to $499 (the price for the Mario Kart World bundle). And this year, during an earnings call, Nintendo President Shuntaro Furukawa raised concerns about the <a href="https://www.tomsguide.com/gaming/nintendo/the-market-environment-is-indeed-challenging-nintendo-president-sounds-the-alarm-on-pressure-caused-by-surging-memory-prices-as-switch-2-forecast-stays-at-19-million">"pressure" caused by surging memory prices</a>. </p><p>"The market environment is indeed challenging. But we are engaging in long-term discussions with our suppliers to ensure we maintain a stable intake of chips,” Furukawa noted. That's a promising outlook, but many companies are vying for memory these days, so it only seems inevitable that Nintendo will eventually bump up the price of its Switch 2. </p><p>My advice? If there's a particular product you're interested in (in this case, the Switch 2), buy it now. With the RAM crisis already affecting the biggest products on the market, prices are only going to soar, and it will be a while before we see next-gen products come to shelves. Even if they do arrive, don't expect a huge supply. </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/lenovo-is-planning-another-pc-price-hike-in-march-and-im-all-out-of-patience-with-this-ai-bubble">Lenovo is planning another PC price hike in March — and I’m all out of patience with this AI bubble</a></li><li><a href="https://www.tomsguide.com/computing/someone-asked-me-today-how-long-the-dram-supply-shortage-would-last-i-may-need-to-revise-that-answer-analyst-predicts-bleak-future-for-ram-crisis">'Someone asked me today how long the DRAM supply shortage would last...I may need to revise that answer': analyst predicts bleak future for RAM crisis</a></li><li><a href="https://www.tomsguide.com/gaming/xbox/amd-hinted-the-next-gen-xbox-could-launch-in-2027-heres-why-im-not-convinced">AMD just hinted the next-gen Xbox could ‘launch in 2027’ — here’s why I’m not convinced</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ RAMeggedon comes for gaming as Nintendo and PlayStation mull price hikes and delays ]]></title>
                                                                                                <dc:content><![CDATA[ <p>The greed of AI is <a href="https://www.tomsguide.com/computing/hardware/ddr5-ram-kit-deals-that-beat-the-price-crisis">impacting prices and release dates</a> across the tech world, from phones and laptops to gaming devices. This week, Valve <a href="https://www.tomsguide.com/computing/hardware/steam-deck-oled-stock-is-drying-up-valve-confirms-and-the-ram-price-crunch-has-me-worried-for-the-steam-machine">confirmed that Steam Deck</a> handheld consoles will be available intermittently due to a memory shortage.</p><p>Now, a new <a href="https://www.bloomberg.com/news/articles/2026-02-15/rampant-ai-demand-for-memory-is-fueling-a-growing-chip-crisis" target="_blank">report from Bloomberg</a> claims that the <a href="https://www.tomsguide.com/gaming/nintendo/ive-spent-24-hours-with-the-nintendo-switch-2-for-review-heres-5-things-i-love-and-2-things-i-dont">Nintendo Switch 2 </a>could see increased prices, and that Sony is considering delaying the next-generation <a href="https://www.tomsguide.com/gaming/playstation/ps6-leaks-and-rumors">PlayStation 6</a>. The overall report is worth a read for a look at how companies are responding to the shortage from memory makers to their customers.</p><p>The relevant portion comes toward the end, where Bloomberg reports that Nintendo is considering raising prices this year.  </p><h2 id="switch-2-hike-is-likely-coming">Switch 2 hike is likely coming</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3191px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nx3ypiZuGqcV3petw9MnG" name="switch-2-nyc-shoot-02" alt="Nintendo Switch 2 displaying Mario Kart World" src="https://cdn.mos.cms.futurecdn.net/nx3ypiZuGqcV3petw9MnG-1920-80.jpg" mos="" align="middle" fullscreen="" width="3191" height="1795" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>This isn't the first time we've heard rumors or speculation that Nintendo will increase the prices of its latest console. In January, a<a href="https://www.tomsguide.com/gaming/nintendo/the-switch-2-is-set-to-follow-in-sony-and-microsofts-footsteps-with-its-own-price-hike-possible-bad-news-for-nintendos-red-hot-console-but-theres-a-silver-lining"> reputable research firm predicted</a> a hike was coming this year.</p><p>Nintendo President Shintaro Furukawa didn't rule out raising prices in a separate January<a href="https://www.tomsguide.com/gaming/nintendo/our-basic-policy-is-to-recognize-tariffs-as-cost-and-pass-them-on-to-prices-nintendo-president-shares-worrying-comments-about-switch-2-price-hike"> interview with Kyoto Shimbun</a>. But he noted that the company is trying to get people into the ecosystem.</p><p><a href="https://www.tomsguide.com/gaming/nintendo/the-market-environment-is-indeed-challenging-nintendo-president-sounds-the-alarm-on-pressure-caused-by-surging-memory-prices-as-switch-2-forecast-stays-at-19-million">Nintendo execs sounded the alarm</a> in early February during its earnings calls. President Shuntaro Furukawa highlighted U.S. tariffs as an issue affecting Nintendo while also raising concerns about rising memory costs.</p><p>"The market environment is indeed challenging. But we are engaging in long-term discussions with our suppliers to ensure we maintain a stable intake of chips,” Furukawa said at the time.</p><p>Furukawa has repeatedly asserted that Nintendo has some cushion in memory, at least for 2026. After this year, that situation is more than likely to change.</p><h2 id="delayed-ps6">Delayed PS6</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FoDuvVWKYx8aq4aJJJG4CL" name="PlayStation Network passkey.jpg" alt="PlayStation passkey for PS5" src="https://cdn.mos.cms.futurecdn.net/FoDuvVWKYx8aq4aJJJG4CL-1920-80.jpg" mos="" align="middle" fullscreen="" width="1200" height="675" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Bloomberg also claimed that Sony is considering pushing the launch of the PS6 to 2028 or 2029. <a href="https://www.tomsguide.com/gaming/playstation/ps6-leaks-and-rumors">Most rumors currently</a> have the PS6 debuting in 2028, at the earliest in late 2027.</p><p>How memory shortages impact Sony will be interesting to track, as the company was recently rumored to <a href="https://www.tomsguide.com/gaming/ps6-rumored-for-massive-30gb-ram-upgrade-as-next-xbox-will-pivot-to-pc-hybrid-what-we-know-so-far">include up to 32GB of RAM</a> in the PS6. The initial worry was that a leap in memory would make the PS6 more expensive, but now it's not clear when the console will even launch.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O95opO"></div>                            </div>                            <script src="https://kwizly.com/embed/O95opO.js" async></script><p>Rumors have linked the PS6 closely to the next Xbox, which has been <a href="https://www.tomsguide.com/gaming/xbox/amd-hinted-the-next-gen-xbox-could-launch-in-2027-heres-why-im-not-convinced">tipped to launch next year</a>. The difference, though, is that Sony is expected to stick to a moretraditional console launch with a main living room box alongside a decently powerful handheld console.</p><p>Xbox is rumored to have a standard console but is also allegedly leaning into its "everything is an Xbox" marketing. That means a new console, a potential handheld device, and <a href="https://www.tomsguide.com/gaming/ps6-rumored-for-massive-30gb-ram-upgrade-as-next-xbox-will-pivot-to-pc-hybrid-what-we-know-so-far">reportedly Xboxes made by third-party</a> OEMs like Asus and Lenovo. That could give Microsoft more leeway to launch earlier than the PlayStation, but even Microsoft could still be constrained by memory constraints.</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/best-nintendo-switch-2-games">Best Nintendo Switch 2 games</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/turtle-beach-made-an-all-in-one-budget-racing-wheel-that-feels-like-a-cheat-code-and-it-helped-me-beat-peak-max-verstappen">Turtle Beach made an all-in-one budget racing wheel that 'feels like a cheat code' — and it helped me beat peak Max Verstappen</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/i-tested-the-razer-raiju-v3-pro-for-a-week-heres-why-its-the-best-ps5-pro-controller">I tested the Razer Raiju V3 Pro for a week — here’s why it’s the best PS5 'pro' controller</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/rameggedon-comes-for-gaming-as-nintendo-and-playstation-mull-price-hikes-and-delays</link>
                                                                            <description>
                            <![CDATA[ Memory shortages are starting to impact gaming, with Nintendo and PlayStation potentially making major decisions regarding their consoles. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ruaq42iJFxCpsg7wbbNXoQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/2uQ4GsqLJHm3CW4dwURXeb-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 17 Feb 2026 20:02:15 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/2uQ4GsqLJHm3CW4dwURXeb-1920-80.jpg">
                                                            <media:credit><![CDATA[Stephen Lambrechts / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Nintendo Switch 2 propped up on a kitchen table]]></media:description>                                                            <media:text><![CDATA[The Nintendo Switch 2 propped up on a kitchen table]]></media:text>
                                <media:title type="plain"><![CDATA[The Nintendo Switch 2 propped up on a kitchen table]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/2uQ4GsqLJHm3CW4dwURXeb-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The greed of AI is <a href="https://www.tomsguide.com/computing/hardware/ddr5-ram-kit-deals-that-beat-the-price-crisis">impacting prices and release dates</a> across the tech world, from phones and laptops to gaming devices. This week, Valve <a href="https://www.tomsguide.com/computing/hardware/steam-deck-oled-stock-is-drying-up-valve-confirms-and-the-ram-price-crunch-has-me-worried-for-the-steam-machine">confirmed that Steam Deck</a> handheld consoles will be available intermittently due to a memory shortage.</p><p>Now, a new <a href="https://www.bloomberg.com/news/articles/2026-02-15/rampant-ai-demand-for-memory-is-fueling-a-growing-chip-crisis" target="_blank">report from Bloomberg</a> claims that the <a href="https://www.tomsguide.com/gaming/nintendo/ive-spent-24-hours-with-the-nintendo-switch-2-for-review-heres-5-things-i-love-and-2-things-i-dont">Nintendo Switch 2 </a>could see increased prices, and that Sony is considering delaying the next-generation <a href="https://www.tomsguide.com/gaming/playstation/ps6-leaks-and-rumors">PlayStation 6</a>. The overall report is worth a read for a look at how companies are responding to the shortage from memory makers to their customers.</p><p>The relevant portion comes toward the end, where Bloomberg reports that Nintendo is considering raising prices this year.  </p><h2 id="switch-2-hike-is-likely-coming">Switch 2 hike is likely coming</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3191px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nx3ypiZuGqcV3petw9MnG" name="switch-2-nyc-shoot-02" alt="Nintendo Switch 2 displaying Mario Kart World" src="https://cdn.mos.cms.futurecdn.net/nx3ypiZuGqcV3petw9MnG-1920-80.jpg" mos="" align="middle" fullscreen="" width="3191" height="1795" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>This isn't the first time we've heard rumors or speculation that Nintendo will increase the prices of its latest console. In January, a<a href="https://www.tomsguide.com/gaming/nintendo/the-switch-2-is-set-to-follow-in-sony-and-microsofts-footsteps-with-its-own-price-hike-possible-bad-news-for-nintendos-red-hot-console-but-theres-a-silver-lining"> reputable research firm predicted</a> a hike was coming this year.</p><p>Nintendo President Shintaro Furukawa didn't rule out raising prices in a separate January<a href="https://www.tomsguide.com/gaming/nintendo/our-basic-policy-is-to-recognize-tariffs-as-cost-and-pass-them-on-to-prices-nintendo-president-shares-worrying-comments-about-switch-2-price-hike"> interview with Kyoto Shimbun</a>. But he noted that the company is trying to get people into the ecosystem.</p><p><a href="https://www.tomsguide.com/gaming/nintendo/the-market-environment-is-indeed-challenging-nintendo-president-sounds-the-alarm-on-pressure-caused-by-surging-memory-prices-as-switch-2-forecast-stays-at-19-million">Nintendo execs sounded the alarm</a> in early February during its earnings calls. President Shuntaro Furukawa highlighted U.S. tariffs as an issue affecting Nintendo while also raising concerns about rising memory costs.</p><p>"The market environment is indeed challenging. But we are engaging in long-term discussions with our suppliers to ensure we maintain a stable intake of chips,” Furukawa said at the time.</p><p>Furukawa has repeatedly asserted that Nintendo has some cushion in memory, at least for 2026. After this year, that situation is more than likely to change.</p><h2 id="delayed-ps6">Delayed PS6</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FoDuvVWKYx8aq4aJJJG4CL" name="PlayStation Network passkey.jpg" alt="PlayStation passkey for PS5" src="https://cdn.mos.cms.futurecdn.net/FoDuvVWKYx8aq4aJJJG4CL-1920-80.jpg" mos="" align="middle" fullscreen="" width="1200" height="675" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Bloomberg also claimed that Sony is considering pushing the launch of the PS6 to 2028 or 2029. <a href="https://www.tomsguide.com/gaming/playstation/ps6-leaks-and-rumors">Most rumors currently</a> have the PS6 debuting in 2028, at the earliest in late 2027.</p><p>How memory shortages impact Sony will be interesting to track, as the company was recently rumored to <a href="https://www.tomsguide.com/gaming/ps6-rumored-for-massive-30gb-ram-upgrade-as-next-xbox-will-pivot-to-pc-hybrid-what-we-know-so-far">include up to 32GB of RAM</a> in the PS6. The initial worry was that a leap in memory would make the PS6 more expensive, but now it's not clear when the console will even launch.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-O95opO"></div>                            </div>                            <script src="https://kwizly.com/embed/O95opO.js" async></script><p>Rumors have linked the PS6 closely to the next Xbox, which has been <a href="https://www.tomsguide.com/gaming/xbox/amd-hinted-the-next-gen-xbox-could-launch-in-2027-heres-why-im-not-convinced">tipped to launch next year</a>. The difference, though, is that Sony is expected to stick to a moretraditional console launch with a main living room box alongside a decently powerful handheld console.</p><p>Xbox is rumored to have a standard console but is also allegedly leaning into its "everything is an Xbox" marketing. That means a new console, a potential handheld device, and <a href="https://www.tomsguide.com/gaming/ps6-rumored-for-massive-30gb-ram-upgrade-as-next-xbox-will-pivot-to-pc-hybrid-what-we-know-so-far">reportedly Xboxes made by third-party</a> OEMs like Asus and Lenovo. That could give Microsoft more leeway to launch earlier than the PlayStation, but even Microsoft could still be constrained by memory constraints.</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/best-nintendo-switch-2-games">Best Nintendo Switch 2 games</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/turtle-beach-made-an-all-in-one-budget-racing-wheel-that-feels-like-a-cheat-code-and-it-helped-me-beat-peak-max-verstappen">Turtle Beach made an all-in-one budget racing wheel that 'feels like a cheat code' — and it helped me beat peak Max Verstappen</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/i-tested-the-razer-raiju-v3-pro-for-a-week-heres-why-its-the-best-ps5-pro-controller">I tested the Razer Raiju V3 Pro for a week — here’s why it’s the best PS5 'pro' controller</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 9 best PS5 President’s Day deals we’ve found so far: from discounted consoles to 50% off must-play games ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Given all the big announcements at last week's <a href="https://www.tomsguide.com/news/live/ps5-state-of-play-february-2026-live-updates">State of Play February 2026</a>, I've been excited to fire up my PlayStation 5 again after ditching it for the Switch 2 these past few months. President's Day weekend isn't usually as big a retail holiday as Black Friday or Cyber Monday, so I was surprised to see plenty of great gaming deals going on right now. </p><p>If you haven't been able to get your hands on a PS5 yet — or if you're aiming to snag a second console for yourself — now is your chance to finally score one at a discount. Our favorite deal today is the $100 discount up for grabs on the PS5 Slim at <a href="https://www.bestbuy.com/product/playstation-5-digital-edition-825gb-fortnite-flowering-chaos-bundle-playstation-5/JXHQ37TP84/sku/6647077" target="_blank" rel="nofollow">Best Buy</a> and <a href="https://www.walmart.com/ip/PS5-Standard-AE-Bundle-nbsp-Limited-Edition-Bundle/17849866691" target="_blank" rel="nofollow">Walmart</a>.  Plus, you can find some of the very best PS5 games at bargain prices right now, including <a href="https://www.amazon.com/Warhammer-40-000-Space-Marine-PlayStation/dp/B0CVSDJNKS/" target="_blank" rel="nofollow">Warhammer 40,000 Space Marine 2 for $29</a>, it's lowest price yet, or <a href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB" target="_blank" rel="nofollow">Marvel's Spider-Man 2 for just $47.</a></p><p>For even more ways to save, we've rounded up <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-games-are-too-expensive-and-im-tired-of-it-snag-these-presidents-day-switch-deals-while-you-can">the best Switch 2 deals this President's Day</a>. Also check out our <a href="https://www.tomsguide.com/live/news/i-was-going-to-skip-presidents-day-sales-this-year-but-these-deals-are-worth-it">Presidents' Day sale live blog</a> for all best deals this holiday weekend.</p><h3 class="article-body__section" id="section-president-s-day-ps5-deals-quick-links"><span>President's Day PS5 Deals - Quick links</span></h3><ul><li><strong>PS5 Slim bundle (Digital Edition): </strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-825gb-fortnite-flowering-chaos-bundle-playstation-5/JXHQ37TP84/sku/6647077" target="_blank" rel="nofollow"><strong>was $499 now $399</strong></a></li><li><strong>Sonic X Shadow Generations: </strong><a href="https://www.amazon.com/Sonic-X-Shadow-Generations-PlayStation-5/dp/B0D6JYR4M7/" target="_blank" rel="nofollow"><strong>was $49 now $13</strong></a></li><li><strong>Warhammer 40,000 Space Marine 2: </strong><a href="https://www.amazon.com/Warhammer-40-000-Space-Marine-PlayStation/dp/B0CVSDJNKS/" target="_blank" rel="nofollow"><strong>was $69 now $29</strong></a></li><li><strong>Elden Ring: </strong><a href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6?th=1" target="_blank" rel="nofollow"><strong>was $49 now $33</strong></a></li><li><strong>Assassin's Creed Shadows: </strong><a href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM"><strong>was $69 now $34</strong></a></li></ul><h3 class="article-body__section" id="section-ps5-console-deals"><span>PS5 console deals</span></h3><div class="product"><a data-dimension112="dc54f1e2-19f2-44f7-a520-436d3d1f0f7f" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension48="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension25="$399" href="https://www.bestbuy.com/product/playstation-5-digital-edition-825gb-fortnite-flowering-chaos-bundle-playstation-5/JXHQ37TP84/sku/6647077" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1126px;"><p class="vanilla-image-block" style="padding-top:47.51%;"><img id="4NKiFvYXPJcxga39Dbpkx3" name="ps5 bundle" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4NKiFvYXPJcxga39Dbpkx3-1920-80.png" mos="" align="middle" fullscreen="" width="1126" height="535" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-825gb-fortnite-flowering-chaos-bundle-playstation-5/JXHQ37TP84/sku/6647077" target="_blank" rel="nofollow" data-dimension112="dc54f1e2-19f2-44f7-a520-436d3d1f0f7f" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension48="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension25="$399">Fortnite Flowering Chaos Bundle (Digital Edition/825GB):: was $499 now $399</a></strong><br>The PS5 (Digital Edition) is the same great console, just minus the Blu-ray disc drive. While this model cannot play physical games, it is $50 cheaper, and the lack of a chunky drive improves the console's overall aesthetic. Just be warned, this deal is on the <em>new </em>model of the PS5 Slim, which drops the SSD down to 825GB. This bundle includes 8 PlayStation exclusive cosmetics for Fortnite and 1,000 V-Bucks.<a class="view-deal button" href="https://www.bestbuy.com/product/playstation-5-digital-edition-825gb-fortnite-flowering-chaos-bundle-playstation-5/JXHQ37TP84/sku/6647077" target="_blank" rel="nofollow" data-dimension112="dc54f1e2-19f2-44f7-a520-436d3d1f0f7f" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension48="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="92d64ec4-3af6-4aaa-9a6a-44806fd50ab3" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (1TB)" data-dimension48="Fortnite Flowering Chaos Bundle (1TB)" data-dimension25="$459" href="https://www.walmart.com/ip/PS5-Standard-AE-Bundle-nbsp-Limited-Edition-Bundle/17849866691" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:906px;"><p class="vanilla-image-block" style="padding-top:65.34%;"><img id="A4HHgCPVY79Zi7F9CQvCUc" name="ps5 disc" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/A4HHgCPVY79Zi7F9CQvCUc-1920-80.png" mos="" align="middle" fullscreen="" width="906" height="592" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.walmart.com/ip/PS5-Standard-AE-Bundle-nbsp-Limited-Edition-Bundle/17849866691" target="_blank" rel="nofollow" data-dimension112="92d64ec4-3af6-4aaa-9a6a-44806fd50ab3" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (1TB)" data-dimension48="Fortnite Flowering Chaos Bundle (1TB)" data-dimension25="$459">Fortnite Flowering Chaos Bundle (1TB): was $549 now $459</a></strong><br>If you've gotta have a disc drive, you can also save $100 off this version of the same PS5 bundle. It's the same great PlayStation console in a slimmer form factor and packs a larger 1TB SSD. The PS5 represents the pinnacle of Sony's gaming platform to date and offers a near-unbeatable library of must-play games.<a class="view-deal button" href="https://www.walmart.com/ip/PS5-Standard-AE-Bundle-nbsp-Limited-Edition-Bundle/17849866691" target="_blank" rel="nofollow" data-dimension112="92d64ec4-3af6-4aaa-9a6a-44806fd50ab3" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (1TB)" data-dimension48="Fortnite Flowering Chaos Bundle (1TB)" data-dimension25="$459">View Deal</a></p></div><h3 class="article-body__section" id="section-ps5-game-deals"><span>PS5 game deals</span></h3><div class="product"><a data-dimension112="0718f79b-ef7b-41b4-a22f-c6e696fb3ab9" data-action="Deal Block" data-label="Sonic X Shadow Generations - PS5" data-dimension48="Sonic X Shadow Generations - PS5" data-dimension25="$13" href="https://www.amazon.com/Sonic-X-Shadow-Generations-PlayStation-5/dp/B0D6JYR4M7/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1199px;"><p class="vanilla-image-block" style="padding-top:125.10%;"><img id="xfKBdRYGCqDAfcCBeTnbr3" name="81iEU3zUKcL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xfKBdRYGCqDAfcCBeTnbr3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1199" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Sonic-X-Shadow-Generations-PlayStation-5/dp/B0D6JYR4M7/" target="_blank" rel="nofollow" data-dimension112="0718f79b-ef7b-41b4-a22f-c6e696fb3ab9" data-action="Deal Block" data-label="Sonic X Shadow Generations - PS5" data-dimension48="Sonic X Shadow Generations - PS5" data-dimension25="$13">Sonic X Shadow Generations - PS5: was $49 now $13</a></strong><br>Right now, you can get a high-speed Sonic the Hedgehog adventure for less, as Sonic X Shadow Generations is $13 this holiday weekend. This remasters 2011's Sonic Generations and puts the titular anti-hero in the limelight in a brand new adventure of his own, giving you plenty of levels and challenges to blaze through as either the blue blur or his edgier foe. It's also worth noting that the PS5 version is still cheaper than either the <a href="https://www.amazon.com/Sonic-X-Shadow-Generations-Xbox/dp/B0D6JKTRHP/?th=1" target="_blank" rel="nofollow">Nintendo Switch</a> or <a href="https://www.amazon.com/Sonic-X-Shadow-Generations-Xbox/dp/B0F663CWT8/?th=1" target="_blank" rel="nofollow">Switch 2 edition</a>.<a class="view-deal button" href="https://www.amazon.com/Sonic-X-Shadow-Generations-PlayStation-5/dp/B0D6JYR4M7/" target="_blank" rel="nofollow" data-dimension112="0718f79b-ef7b-41b4-a22f-c6e696fb3ab9" data-action="Deal Block" data-label="Sonic X Shadow Generations - PS5" data-dimension48="Sonic X Shadow Generations - PS5" data-dimension25="$13">View Deal</a></p></div><div class="product"><a data-dimension112="086b38c3-1faf-46f2-914a-beee6c1b70f3" data-action="Deal Block" data-label="Elden Ring" data-dimension48="Elden Ring" data-dimension25="$33" href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:174px;"><p class="vanilla-image-block" style="padding-top:125.29%;"><img id="zd567pTzz5zVHzRH4YjqqQ" name="81h2WhI4dtL._AC_UY218_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zd567pTzz5zVHzRH4YjqqQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="174" height="218" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you're yet to venture into the Lands Between and experience From Software's vast and challenging open-world action-RPG, now's the perfect chance: <a href="https://www.tomsguide.com/reviews/elden-ring" data-dimension112="086b38c3-1faf-46f2-914a-beee6c1b70f3" data-action="Deal Block" data-label="Elden Ring" data-dimension48="Elden Ring" data-dimension25="$33">Elden Ring</a> is over 30% off for President's Day. Play as a Tarnished, choose your preferred combat build, and roam around Limgrave and beyond, exploring this huge dark fantasy world and facing down a ton of tough combat encounters and even tougher bosses as you set out to become the Elden Lord.<a class="view-deal button" href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6?th=1" target="_blank" rel="nofollow" data-dimension112="086b38c3-1faf-46f2-914a-beee6c1b70f3" data-action="Deal Block" data-label="Elden Ring" data-dimension48="Elden Ring" data-dimension25="$33">View Deal</a></p></div><div class="product"><a data-dimension112="1c246717-c09e-4ccb-8b0b-9af51089b18d" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$34" href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1158px;"><p class="vanilla-image-block" style="padding-top:129.53%;"><img id="tEFopvifi8tQ9BfBHB9rUF" name="81yVcGESG9L._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tEFopvifi8tQ9BfBHB9rUF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1158" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Step into the shoes of shinobi assassin, Naoe, and legendary samurai, Yasuke, for less in <a href="https://www.tomsguide.com/gaming/assassins-creed-shadows-review" target="_blank" data-dimension112="1c246717-c09e-4ccb-8b0b-9af51089b18d" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$34">Assassin's Creed Shadows</a>, the 2025 installment of Ubisoft's historical action-adventure series. Explore the open world of feudal Japan and hop between these two characters to explore and experience that world using two radically different playstyles: stealth or strength, shadows or steel. This Only At Amazon edition also includes the Sekiryu Character Pack, alongside the full game.<a class="view-deal button" href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM" target="_blank" rel="nofollow" data-dimension112="1c246717-c09e-4ccb-8b0b-9af51089b18d" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$34">View Deal</a></p></div><div class="product"><a data-dimension112="4baf3d55-f56e-4fd9-be83-2e90b7816573" data-action="Deal Block" data-label="Forbidden West" data-dimension48="Forbidden West" data-dimension25="$29" href="https://www.gamestop.com/video-games/products/horizon-forbidden-west-launch-edition---playstation-5/309470.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1298px;"><p class="vanilla-image-block" style="padding-top:115.56%;"><img id="6annQb7WsWazXeQxkxyuTF" name="horizon-forbidden-west-ps5-box-art.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6annQb7WsWazXeQxkxyuTF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1298" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The sequel to Horizon Zero Dawn on the PS4, <a href="https://www.tomsguide.com/reviews/horizon-forbidden-west" data-dimension112="4baf3d55-f56e-4fd9-be83-2e90b7816573" data-action="Deal Block" data-label="Forbidden West" data-dimension48="Forbidden West" data-dimension25="$29">Horizon Forbidden West</a> takes everything that was great about its predecessor and expands upon it. In this open-world action/adventure game, you take control of Aloy: a warrior in the post-apocalyptic United States that has been reclaimed by nature. There, she must contend with animal-like machines, as well as cunning human foes, as she ventures from her homeland towards the coast of the Pacific.<a class="view-deal button" href="https://www.gamestop.com/video-games/products/horizon-forbidden-west-launch-edition---playstation-5/309470.html" target="_blank" rel="nofollow" data-dimension112="4baf3d55-f56e-4fd9-be83-2e90b7816573" data-action="Deal Block" data-label="Forbidden West" data-dimension48="Forbidden West" data-dimension25="$29">View Deal</a></p></div><div class="product"><a data-dimension112="722e7652-cd4b-4fd3-b620-02f53e2ecc8a" data-action="Deal Block" data-label="Spider-Man 2" data-dimension48="Spider-Man 2" data-dimension25="$47" href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:170px;"><p class="vanilla-image-block" style="padding-top:128.24%;"><img id="vEvUQJEzcdskdAMvPf2Qzj" name="81WUPcfQ9OL._AC_UY218_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vEvUQJEzcdskdAMvPf2Qzj-1920-80.jpg" mos="" align="middle" fullscreen="" width="170" height="218" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/reviews/spider-man-2" data-dimension112="722e7652-cd4b-4fd3-b620-02f53e2ecc8a" data-action="Deal Block" data-label="Spider-Man 2" data-dimension48="Spider-Man 2" data-dimension25="$47">Marvel's Spider-Man 2</a> on PS5 sees Peter Parker and Miles Morales web-swinging into action for another stellar superhero romp that plays across Marvel's New York. Swap between the Spider-Men and deploy their new powers as you take on new villains from Spidey's rogues' gallery in this excellent action game that looks truly stunning on PS5. <a class="view-deal button" href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB" target="_blank" rel="nofollow" data-dimension112="722e7652-cd4b-4fd3-b620-02f53e2ecc8a" data-action="Deal Block" data-label="Spider-Man 2" data-dimension48="Spider-Man 2" data-dimension25="$47">View Deal</a></p></div><div class="product"><a data-dimension112="6763c47a-2204-4e78-b0b5-64bd68f4b212" data-action="Deal Block" data-label="Ragnarök" data-dimension48="Ragnarök" data-dimension25="$36" href="https://www.amazon.com/God-War-Ragnar%C3%B6k-PlayStation-5/dp/B0B61YDF5V" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:342px;"><p class="vanilla-image-block" style="padding-top:121.05%;"><img id="pLfkNWvA5iHK5Lz8sXQqaa" name="god-of-war-ragnarok-box-art.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pLfkNWvA5iHK5Lz8sXQqaa-1920-80.jpg" mos="" align="middle" fullscreen="" width="342" height="414" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The sequel to one of the most acclaimed PlayStation games of all time, <a href="https://www.tomsguide.com/reviews/god-of-war-ragnarok" data-dimension112="6763c47a-2204-4e78-b0b5-64bd68f4b212" data-action="Deal Block" data-label="Ragnarök" data-dimension48="Ragnarök" data-dimension25="$36">God of War Ragnarök</a> sees father and son duo Kratos and Atreus embark on another epic journey as they travel across all Nine Realms of Norse mythology. Enjoy visceral combat against a multitude of foes, as well as rewarding exploration and a highly cinematic story that culminates in a stunning finale that you won't soon forget.<a class="view-deal button" href="https://www.amazon.com/God-War-Ragnar%C3%B6k-PlayStation-5/dp/B0B61YDF5V" target="_blank" rel="nofollow" data-dimension112="6763c47a-2204-4e78-b0b5-64bd68f4b212" data-action="Deal Block" data-label="Ragnarök" data-dimension48="Ragnarök" data-dimension25="$36">View Deal</a></p></div><div class="product"><a data-dimension112="119219e6-cb1b-4113-99b3-7ec0c044f4d6" data-action="Deal Block" data-label="Space Marine 2" data-dimension48="Space Marine 2" data-dimension25="$29" href="https://www.amazon.com/Warhammer-40-000-Space-Marine-PlayStation/dp/B0CVSDJNKS/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:509px;"><p class="vanilla-image-block" style="padding-top:125.74%;"><img id="TnJ4VYZXKLfRvLsemCh483" name="6576886_sd.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TnJ4VYZXKLfRvLsemCh483-1920-80.jpg" mos="" align="middle" fullscreen="" width="509" height="640" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Embrace the skills and sheer brutality of a Space Marine in Warhammer 40,000: Space Marine 2, Saber Interactive's celebrated third-person action game. Playing solo or with friends, you'll deploy deadly weapons and unleash that arsenal on swarms of Tyranids, either in the campaign as Ultramarine Lieutenant Titus, or as your own Space Marine in PvE and PvP modes. Snag it for the lowest price yet at 42% off. <a class="view-deal button" href="https://www.amazon.com/Warhammer-40-000-Space-Marine-PlayStation/dp/B0CVSDJNKS/" target="_blank" rel="nofollow" data-dimension112="119219e6-cb1b-4113-99b3-7ec0c044f4d6" data-action="Deal Block" data-label="Space Marine 2" data-dimension48="Space Marine 2" data-dimension25="$29">View Deal</a></p></div><div data-model-name="Sony PS5 Pro" data-widget-type="review"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/9-best-ps5-presidents-day-deals-weve-found-so-far-from-discounted-consoles-to-50-percent-off-must-play-games</link>
                                                                            <description>
                            <![CDATA[ Shopping for the best PS5 President's Day deals? Here are the best discounts remaining on PS5 games, consoles, and more  this holiday weekend. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4AKdCxxamWNqryeDNiBLgL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XTer9DwF4rd9ZzdWEqnjQP-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 14 Feb 2026 19:55:57 +0000</pubDate>                                                                                                                                <updated>Sat, 14 Feb 2026 19:56:53 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alyse Stanley ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/BxNnQuBWRHqkv5xWZsjrjc-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alyse Stanley is a news editor at Tom’s Guide, overseeing weekend coverage and writing about the latest in tech, gaming, and entertainment. Before Tom’s Guide, Alyse worked as an editor for the Washington Post’s sunsetted video game section, Launcher, where she also wrote about indie games you shouldn’t miss, how to tackle your gaming backlog, and all things Nintendo. She previously led Gizmodo’s weekend news desk covering breaking tech news and has written game reviews and features for outlets like Polygon, Unwinnable, and Rock, Paper, Shotgun. A recent Chicago-area transplant born and raised in Virginia, Alyse is a big fan of horror movies, cartoons, and roller skating. She&#039;s also a puzzle fan and can often be found contributing to the NYT Connections coverage on Tom&#039;s Guide &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/XTer9DwF4rd9ZzdWEqnjQP-1920-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[PS5 Slim]]></media:description>                                                            <media:text><![CDATA[PS5 Slim]]></media:text>
                                <media:title type="plain"><![CDATA[PS5 Slim]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XTer9DwF4rd9ZzdWEqnjQP-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Given all the big announcements at last week's <a href="https://www.tomsguide.com/news/live/ps5-state-of-play-february-2026-live-updates">State of Play February 2026</a>, I've been excited to fire up my PlayStation 5 again after ditching it for the Switch 2 these past few months. President's Day weekend isn't usually as big a retail holiday as Black Friday or Cyber Monday, so I was surprised to see plenty of great gaming deals going on right now. </p><p>If you haven't been able to get your hands on a PS5 yet — or if you're aiming to snag a second console for yourself — now is your chance to finally score one at a discount. Our favorite deal today is the $100 discount up for grabs on the PS5 Slim at <a href="https://www.bestbuy.com/product/playstation-5-digital-edition-825gb-fortnite-flowering-chaos-bundle-playstation-5/JXHQ37TP84/sku/6647077" target="_blank" rel="nofollow">Best Buy</a> and <a href="https://www.walmart.com/ip/PS5-Standard-AE-Bundle-nbsp-Limited-Edition-Bundle/17849866691" target="_blank" rel="nofollow">Walmart</a>.  Plus, you can find some of the very best PS5 games at bargain prices right now, including <a href="https://www.amazon.com/Warhammer-40-000-Space-Marine-PlayStation/dp/B0CVSDJNKS/" target="_blank" rel="nofollow">Warhammer 40,000 Space Marine 2 for $29</a>, it's lowest price yet, or <a href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB" target="_blank" rel="nofollow">Marvel's Spider-Man 2 for just $47.</a></p><p>For even more ways to save, we've rounded up <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-games-are-too-expensive-and-im-tired-of-it-snag-these-presidents-day-switch-deals-while-you-can">the best Switch 2 deals this President's Day</a>. Also check out our <a href="https://www.tomsguide.com/live/news/i-was-going-to-skip-presidents-day-sales-this-year-but-these-deals-are-worth-it">Presidents' Day sale live blog</a> for all best deals this holiday weekend.</p><h3 class="article-body__section" id="section-president-s-day-ps5-deals-quick-links"><span>President's Day PS5 Deals - Quick links</span></h3><ul><li><strong>PS5 Slim bundle (Digital Edition): </strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-825gb-fortnite-flowering-chaos-bundle-playstation-5/JXHQ37TP84/sku/6647077" target="_blank" rel="nofollow"><strong>was $499 now $399</strong></a></li><li><strong>Sonic X Shadow Generations: </strong><a href="https://www.amazon.com/Sonic-X-Shadow-Generations-PlayStation-5/dp/B0D6JYR4M7/" target="_blank" rel="nofollow"><strong>was $49 now $13</strong></a></li><li><strong>Warhammer 40,000 Space Marine 2: </strong><a href="https://www.amazon.com/Warhammer-40-000-Space-Marine-PlayStation/dp/B0CVSDJNKS/" target="_blank" rel="nofollow"><strong>was $69 now $29</strong></a></li><li><strong>Elden Ring: </strong><a href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6?th=1" target="_blank" rel="nofollow"><strong>was $49 now $33</strong></a></li><li><strong>Assassin's Creed Shadows: </strong><a href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM"><strong>was $69 now $34</strong></a></li></ul><h3 class="article-body__section" id="section-ps5-console-deals"><span>PS5 console deals</span></h3><div class="product"><a data-dimension112="dc54f1e2-19f2-44f7-a520-436d3d1f0f7f" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension48="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension25="$399" href="https://www.bestbuy.com/product/playstation-5-digital-edition-825gb-fortnite-flowering-chaos-bundle-playstation-5/JXHQ37TP84/sku/6647077" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1126px;"><p class="vanilla-image-block" style="padding-top:47.51%;"><img id="4NKiFvYXPJcxga39Dbpkx3" name="ps5 bundle" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4NKiFvYXPJcxga39Dbpkx3-1920-80.png" mos="" align="middle" fullscreen="" width="1126" height="535" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.bestbuy.com/product/playstation-5-digital-edition-825gb-fortnite-flowering-chaos-bundle-playstation-5/JXHQ37TP84/sku/6647077" target="_blank" rel="nofollow" data-dimension112="dc54f1e2-19f2-44f7-a520-436d3d1f0f7f" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension48="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension25="$399">Fortnite Flowering Chaos Bundle (Digital Edition/825GB):: was $499 now $399</a></strong><br>The PS5 (Digital Edition) is the same great console, just minus the Blu-ray disc drive. While this model cannot play physical games, it is $50 cheaper, and the lack of a chunky drive improves the console's overall aesthetic. Just be warned, this deal is on the <em>new </em>model of the PS5 Slim, which drops the SSD down to 825GB. This bundle includes 8 PlayStation exclusive cosmetics for Fortnite and 1,000 V-Bucks.<a class="view-deal button" href="https://www.bestbuy.com/product/playstation-5-digital-edition-825gb-fortnite-flowering-chaos-bundle-playstation-5/JXHQ37TP84/sku/6647077" target="_blank" rel="nofollow" data-dimension112="dc54f1e2-19f2-44f7-a520-436d3d1f0f7f" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension48="Fortnite Flowering Chaos Bundle (Digital Edition/825GB):" data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="92d64ec4-3af6-4aaa-9a6a-44806fd50ab3" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (1TB)" data-dimension48="Fortnite Flowering Chaos Bundle (1TB)" data-dimension25="$459" href="https://www.walmart.com/ip/PS5-Standard-AE-Bundle-nbsp-Limited-Edition-Bundle/17849866691" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:906px;"><p class="vanilla-image-block" style="padding-top:65.34%;"><img id="A4HHgCPVY79Zi7F9CQvCUc" name="ps5 disc" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/A4HHgCPVY79Zi7F9CQvCUc-1920-80.png" mos="" align="middle" fullscreen="" width="906" height="592" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.walmart.com/ip/PS5-Standard-AE-Bundle-nbsp-Limited-Edition-Bundle/17849866691" target="_blank" rel="nofollow" data-dimension112="92d64ec4-3af6-4aaa-9a6a-44806fd50ab3" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (1TB)" data-dimension48="Fortnite Flowering Chaos Bundle (1TB)" data-dimension25="$459">Fortnite Flowering Chaos Bundle (1TB): was $549 now $459</a></strong><br>If you've gotta have a disc drive, you can also save $100 off this version of the same PS5 bundle. It's the same great PlayStation console in a slimmer form factor and packs a larger 1TB SSD. The PS5 represents the pinnacle of Sony's gaming platform to date and offers a near-unbeatable library of must-play games.<a class="view-deal button" href="https://www.walmart.com/ip/PS5-Standard-AE-Bundle-nbsp-Limited-Edition-Bundle/17849866691" target="_blank" rel="nofollow" data-dimension112="92d64ec4-3af6-4aaa-9a6a-44806fd50ab3" data-action="Deal Block" data-label="Fortnite Flowering Chaos Bundle (1TB)" data-dimension48="Fortnite Flowering Chaos Bundle (1TB)" data-dimension25="$459">View Deal</a></p></div><h3 class="article-body__section" id="section-ps5-game-deals"><span>PS5 game deals</span></h3><div class="product"><a data-dimension112="0718f79b-ef7b-41b4-a22f-c6e696fb3ab9" data-action="Deal Block" data-label="Sonic X Shadow Generations - PS5" data-dimension48="Sonic X Shadow Generations - PS5" data-dimension25="$13" href="https://www.amazon.com/Sonic-X-Shadow-Generations-PlayStation-5/dp/B0D6JYR4M7/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1199px;"><p class="vanilla-image-block" style="padding-top:125.10%;"><img id="xfKBdRYGCqDAfcCBeTnbr3" name="81iEU3zUKcL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xfKBdRYGCqDAfcCBeTnbr3-1920-80.jpg" mos="" align="middle" fullscreen="" width="1199" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Sonic-X-Shadow-Generations-PlayStation-5/dp/B0D6JYR4M7/" target="_blank" rel="nofollow" data-dimension112="0718f79b-ef7b-41b4-a22f-c6e696fb3ab9" data-action="Deal Block" data-label="Sonic X Shadow Generations - PS5" data-dimension48="Sonic X Shadow Generations - PS5" data-dimension25="$13">Sonic X Shadow Generations - PS5: was $49 now $13</a></strong><br>Right now, you can get a high-speed Sonic the Hedgehog adventure for less, as Sonic X Shadow Generations is $13 this holiday weekend. This remasters 2011's Sonic Generations and puts the titular anti-hero in the limelight in a brand new adventure of his own, giving you plenty of levels and challenges to blaze through as either the blue blur or his edgier foe. It's also worth noting that the PS5 version is still cheaper than either the <a href="https://www.amazon.com/Sonic-X-Shadow-Generations-Xbox/dp/B0D6JKTRHP/?th=1" target="_blank" rel="nofollow">Nintendo Switch</a> or <a href="https://www.amazon.com/Sonic-X-Shadow-Generations-Xbox/dp/B0F663CWT8/?th=1" target="_blank" rel="nofollow">Switch 2 edition</a>.<a class="view-deal button" href="https://www.amazon.com/Sonic-X-Shadow-Generations-PlayStation-5/dp/B0D6JYR4M7/" target="_blank" rel="nofollow" data-dimension112="0718f79b-ef7b-41b4-a22f-c6e696fb3ab9" data-action="Deal Block" data-label="Sonic X Shadow Generations - PS5" data-dimension48="Sonic X Shadow Generations - PS5" data-dimension25="$13">View Deal</a></p></div><div class="product"><a data-dimension112="086b38c3-1faf-46f2-914a-beee6c1b70f3" data-action="Deal Block" data-label="Elden Ring" data-dimension48="Elden Ring" data-dimension25="$33" href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:174px;"><p class="vanilla-image-block" style="padding-top:125.29%;"><img id="zd567pTzz5zVHzRH4YjqqQ" name="81h2WhI4dtL._AC_UY218_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zd567pTzz5zVHzRH4YjqqQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="174" height="218" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you're yet to venture into the Lands Between and experience From Software's vast and challenging open-world action-RPG, now's the perfect chance: <a href="https://www.tomsguide.com/reviews/elden-ring" data-dimension112="086b38c3-1faf-46f2-914a-beee6c1b70f3" data-action="Deal Block" data-label="Elden Ring" data-dimension48="Elden Ring" data-dimension25="$33">Elden Ring</a> is over 30% off for President's Day. Play as a Tarnished, choose your preferred combat build, and roam around Limgrave and beyond, exploring this huge dark fantasy world and facing down a ton of tough combat encounters and even tougher bosses as you set out to become the Elden Lord.<a class="view-deal button" href="https://www.amazon.com/Elden-Ring-PlayStation-5/dp/B09743F8P6?th=1" target="_blank" rel="nofollow" data-dimension112="086b38c3-1faf-46f2-914a-beee6c1b70f3" data-action="Deal Block" data-label="Elden Ring" data-dimension48="Elden Ring" data-dimension25="$33">View Deal</a></p></div><div class="product"><a data-dimension112="1c246717-c09e-4ccb-8b0b-9af51089b18d" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$34" href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1158px;"><p class="vanilla-image-block" style="padding-top:129.53%;"><img id="tEFopvifi8tQ9BfBHB9rUF" name="81yVcGESG9L._SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/tEFopvifi8tQ9BfBHB9rUF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1158" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Step into the shoes of shinobi assassin, Naoe, and legendary samurai, Yasuke, for less in <a href="https://www.tomsguide.com/gaming/assassins-creed-shadows-review" target="_blank" data-dimension112="1c246717-c09e-4ccb-8b0b-9af51089b18d" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$34">Assassin's Creed Shadows</a>, the 2025 installment of Ubisoft's historical action-adventure series. Explore the open world of feudal Japan and hop between these two characters to explore and experience that world using two radically different playstyles: stealth or strength, shadows or steel. This Only At Amazon edition also includes the Sekiryu Character Pack, alongside the full game.<a class="view-deal button" href="https://www.amazon.com/Assassins-Creed-Shadows-Limited-Exclusive-PlayStation/dp/B0D47WTKPM" target="_blank" rel="nofollow" data-dimension112="1c246717-c09e-4ccb-8b0b-9af51089b18d" data-action="Deal Block" data-label="Shadows" data-dimension48="Shadows" data-dimension25="$34">View Deal</a></p></div><div class="product"><a data-dimension112="4baf3d55-f56e-4fd9-be83-2e90b7816573" data-action="Deal Block" data-label="Forbidden West" data-dimension48="Forbidden West" data-dimension25="$29" href="https://www.gamestop.com/video-games/products/horizon-forbidden-west-launch-edition---playstation-5/309470.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1298px;"><p class="vanilla-image-block" style="padding-top:115.56%;"><img id="6annQb7WsWazXeQxkxyuTF" name="horizon-forbidden-west-ps5-box-art.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6annQb7WsWazXeQxkxyuTF-1920-80.jpg" mos="" align="middle" fullscreen="" width="1298" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The sequel to Horizon Zero Dawn on the PS4, <a href="https://www.tomsguide.com/reviews/horizon-forbidden-west" data-dimension112="4baf3d55-f56e-4fd9-be83-2e90b7816573" data-action="Deal Block" data-label="Forbidden West" data-dimension48="Forbidden West" data-dimension25="$29">Horizon Forbidden West</a> takes everything that was great about its predecessor and expands upon it. In this open-world action/adventure game, you take control of Aloy: a warrior in the post-apocalyptic United States that has been reclaimed by nature. There, she must contend with animal-like machines, as well as cunning human foes, as she ventures from her homeland towards the coast of the Pacific.<a class="view-deal button" href="https://www.gamestop.com/video-games/products/horizon-forbidden-west-launch-edition---playstation-5/309470.html" target="_blank" rel="nofollow" data-dimension112="4baf3d55-f56e-4fd9-be83-2e90b7816573" data-action="Deal Block" data-label="Forbidden West" data-dimension48="Forbidden West" data-dimension25="$29">View Deal</a></p></div><div class="product"><a data-dimension112="722e7652-cd4b-4fd3-b620-02f53e2ecc8a" data-action="Deal Block" data-label="Spider-Man 2" data-dimension48="Spider-Man 2" data-dimension25="$47" href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:170px;"><p class="vanilla-image-block" style="padding-top:128.24%;"><img id="vEvUQJEzcdskdAMvPf2Qzj" name="81WUPcfQ9OL._AC_UY218_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vEvUQJEzcdskdAMvPf2Qzj-1920-80.jpg" mos="" align="middle" fullscreen="" width="170" height="218" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/reviews/spider-man-2" data-dimension112="722e7652-cd4b-4fd3-b620-02f53e2ecc8a" data-action="Deal Block" data-label="Spider-Man 2" data-dimension48="Spider-Man 2" data-dimension25="$47">Marvel's Spider-Man 2</a> on PS5 sees Peter Parker and Miles Morales web-swinging into action for another stellar superhero romp that plays across Marvel's New York. Swap between the Spider-Men and deploy their new powers as you take on new villains from Spidey's rogues' gallery in this excellent action game that looks truly stunning on PS5. <a class="view-deal button" href="https://www.amazon.com/MARVELS-SPIDER-MAN-2-Standard-PlayStation-5/dp/B0C7WQRCPB" target="_blank" rel="nofollow" data-dimension112="722e7652-cd4b-4fd3-b620-02f53e2ecc8a" data-action="Deal Block" data-label="Spider-Man 2" data-dimension48="Spider-Man 2" data-dimension25="$47">View Deal</a></p></div><div class="product"><a data-dimension112="6763c47a-2204-4e78-b0b5-64bd68f4b212" data-action="Deal Block" data-label="Ragnarök" data-dimension48="Ragnarök" data-dimension25="$36" href="https://www.amazon.com/God-War-Ragnar%C3%B6k-PlayStation-5/dp/B0B61YDF5V" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:342px;"><p class="vanilla-image-block" style="padding-top:121.05%;"><img id="pLfkNWvA5iHK5Lz8sXQqaa" name="god-of-war-ragnarok-box-art.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pLfkNWvA5iHK5Lz8sXQqaa-1920-80.jpg" mos="" align="middle" fullscreen="" width="342" height="414" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The sequel to one of the most acclaimed PlayStation games of all time, <a href="https://www.tomsguide.com/reviews/god-of-war-ragnarok" data-dimension112="6763c47a-2204-4e78-b0b5-64bd68f4b212" data-action="Deal Block" data-label="Ragnarök" data-dimension48="Ragnarök" data-dimension25="$36">God of War Ragnarök</a> sees father and son duo Kratos and Atreus embark on another epic journey as they travel across all Nine Realms of Norse mythology. Enjoy visceral combat against a multitude of foes, as well as rewarding exploration and a highly cinematic story that culminates in a stunning finale that you won't soon forget.<a class="view-deal button" href="https://www.amazon.com/God-War-Ragnar%C3%B6k-PlayStation-5/dp/B0B61YDF5V" target="_blank" rel="nofollow" data-dimension112="6763c47a-2204-4e78-b0b5-64bd68f4b212" data-action="Deal Block" data-label="Ragnarök" data-dimension48="Ragnarök" data-dimension25="$36">View Deal</a></p></div><div class="product"><a data-dimension112="119219e6-cb1b-4113-99b3-7ec0c044f4d6" data-action="Deal Block" data-label="Space Marine 2" data-dimension48="Space Marine 2" data-dimension25="$29" href="https://www.amazon.com/Warhammer-40-000-Space-Marine-PlayStation/dp/B0CVSDJNKS/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:509px;"><p class="vanilla-image-block" style="padding-top:125.74%;"><img id="TnJ4VYZXKLfRvLsemCh483" name="6576886_sd.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TnJ4VYZXKLfRvLsemCh483-1920-80.jpg" mos="" align="middle" fullscreen="" width="509" height="640" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Embrace the skills and sheer brutality of a Space Marine in Warhammer 40,000: Space Marine 2, Saber Interactive's celebrated third-person action game. Playing solo or with friends, you'll deploy deadly weapons and unleash that arsenal on swarms of Tyranids, either in the campaign as Ultramarine Lieutenant Titus, or as your own Space Marine in PvE and PvP modes. Snag it for the lowest price yet at 42% off. <a class="view-deal button" href="https://www.amazon.com/Warhammer-40-000-Space-Marine-PlayStation/dp/B0CVSDJNKS/" target="_blank" rel="nofollow" data-dimension112="119219e6-cb1b-4113-99b3-7ec0c044f4d6" data-action="Deal Block" data-label="Space Marine 2" data-dimension48="Space Marine 2" data-dimension25="$29">View Deal</a></p></div><div data-model-name="Sony PS5 Pro" data-widget-type="review"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The best PS5 game you (probably) haven't played just got a prequel announced at State of Play — and you can get the original right now for just $9 ]]></title>
                                                                                                <dc:content><![CDATA[ <p>When it comes to video games, I'm quite picky. I love story-driven RPGs and that's the genre I'm most attracted to. But sometimes, these RPGs with their 100+ hour playtime can feel like a lot, and I need a break from them. Recently, when I completed my ninth playthrough of <a href="https://www.tomsguide.com/opinion/baldurs-gate-3-is-a-love-letter-to-dungeons-and-dragons-and-its-all-i-want-to-play-right-now">Baldur's Gate 3</a> and was on the character creation screen once again to start another one, I stopped myself. It was time for a change.</p><p>So I did what most of us do when we don't know what to play next: I browsed the deals section of the PlayStation Store on my <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a>. That's when I came across a 2D side-scrolling game called <a href="https://store.playstation.com/en-us/concept/10008521" target="_blank" rel="nofollow">Neva, which is currently down to just $9 / £7 from $19 / £16 on the PS Store</a>, and I pulled the trigger and bought it. It's one of the best decisions I've ever made. And at <a href="https://www.tomsguide.com/news/live/ps5-state-of-play-february-2026-live-updates">this week's State of Play</a>, its prequel was announced (dropping on February 19), so now is the perfect time to play it!</p><div class="product"><a data-dimension112="53b9869d-af7a-405d-917b-37024ac85bff" data-action="Deal Block" data-label="(Digital Download)" data-dimension48="(Digital Download)" data-dimension25="$9" href="https://store.playstation.com/en-us/concept/10008521" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1023px;"><p class="vanilla-image-block" style="padding-top:146.63%;"><img id="ZZY9a2SN3x44f6r3kFtg3U" name="Neva-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZZY9a2SN3x44f6r3kFtg3U-1920-80.jpg" mos="" align="middle" fullscreen="" width="1023" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://store.playstation.com/en-us/concept/10008521" target="_blank" rel="nofollow" data-dimension112="53b9869d-af7a-405d-917b-37024ac85bff" data-action="Deal Block" data-label="(Digital Download)" data-dimension48="(Digital Download)" data-dimension25="$9">(Digital Download): was $19 now $9</a></strong><br>Released in 2024, Neva is a 2D puzzle-platformer. You play as a young woman named Alba, and you travel with your wolf companion called Neva, across four seasons in a world corrupted by darkness and strange entities who try to harm you.<a class="view-deal button" href="https://store.playstation.com/en-us/concept/10008521" target="_blank" rel="nofollow" data-dimension112="53b9869d-af7a-405d-917b-37024ac85bff" data-action="Deal Block" data-label="(Digital Download)" data-dimension48="(Digital Download)" data-dimension25="$9">View Deal</a></p></div><p>Neva is a puzzle-platformer with barely any dialog, where the beautiful art design and stunning music do the talking for the game. It conveys a lovely story which you only understand when you reach the end, and it may drive you to tears — I sobbed like a baby. Should you play Neva? Yes, and then play it again, and again. Let me tell you why (minor spoilers alert!).</p><h2 id="an-existential-game-that-keeps-you-guessing">An existential game that keeps you guessing</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="q7UCcuhPjZPB4sSSY52mUS" name="Neva-op-ed-3" alt="Screenshot from Neva, a 2D side-scrolling game by Nomada Studio" src="https://cdn.mos.cms.futurecdn.net/q7UCcuhPjZPB4sSSY52mUS-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nomada Studio)</span></figcaption></figure><p>Neva is a beautiful story told through no words. The only time your character, called Alba, speaks is when she's calling out for her wolf, Neva, and even then, all she says is the wolf's name. Alba and Neva venture through perspective-shifting and occasionally trippy landscapes that are nothing short of stunning. The music is just as gorgeous, ramping up into semi-rock ballads when enemies are upon you.</p><p>The world is plagued by darkness and formless masked creatures but you never find out how or why they came about to be — but your goal is to rid the world of them with your sword and your wolf by your side. You watch the world succumb to the darkness as you go through the four seasons, with each "act" named Summer, Fall, Winter and Spring. Birds fall from the sky, flowers bloom black, animals die and their bodies are taken over by the masked demons.</p><div class="product"><a data-dimension112="eafc5483-8858-4620-a916-20fc64c96fdb" data-action="Deal Block" data-label="(Physical Edition)" data-dimension48="(Physical Edition)" data-dimension25="$29" href="https://www.amazon.com/Neva-PlayStation-5/dp/B0DK62PVH1/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1023px;"><p class="vanilla-image-block" style="padding-top:146.63%;"><img id="ZZY9a2SN3x44f6r3kFtg3U" name="Neva-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZZY9a2SN3x44f6r3kFtg3U-1920-80.jpg" mos="" align="middle" fullscreen="" width="1023" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Neva-PlayStation-5/dp/B0DK62PVH1/" target="_blank" rel="nofollow" data-dimension112="eafc5483-8858-4620-a916-20fc64c96fdb" data-action="Deal Block" data-label="(Physical Edition)" data-dimension48="(Physical Edition)" data-dimension25="$29">(Physical Edition): was $34 now $29</a></strong><br>If you like owning physical copies of games or are just a collector, the physical edition of Neva is currently 15% off at Amazon, bringing the price down from $34 to $29.<a class="view-deal button" href="https://www.amazon.com/Neva-PlayStation-5/dp/B0DK62PVH1/" target="_blank" rel="nofollow" data-dimension112="eafc5483-8858-4620-a916-20fc64c96fdb" data-action="Deal Block" data-label="(Physical Edition)" data-dimension48="(Physical Edition)" data-dimension25="$29">View Deal</a></p></div><p>Neva revolves around parenthood and the emotional bond you can develop with animals. It's similar to existential games like <a href="https://www.tomsguide.com/gaming/endling-extinction-is-forever">Endling</a>, another fantastic, soul-crushing game where the world has been destroyed by humankind's greed and capitalism. Through no words, Neva conveys a heart-wrenching story of loss, as the opening sequence features a very sad scene (that I won't disclose lest I spoil it for you) — and yes, I was crying within the first 10 minutes of playing the game.</p><h2 id="all-about-looking-after-one-another">All about looking after one another</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kBpEKHouGawbxZDSniN63R" name="Neva-op-ed-5" alt="Screenshot from Neva, a 2D side-scrolling game by Nomada Studio" src="https://cdn.mos.cms.futurecdn.net/kBpEKHouGawbxZDSniN63R-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nomada Studio)</span></figcaption></figure><p>Alongside being about parenthood, Neva is all about looking after one another. Your wolf, Neva, starts out as a cub, and is clumsy and easily distracted, like a little puppy. She'll grab on to leaves and follow butterflies, and you must take her to feeding spots to ensure she's getting sufficient nourishment.</p><p>When you jump a big gap and she follows you, she nearly falls off the ledge so you must grab her and soothe her. Yes, you can pet Neva — you can even have a little cuddle with her once you've progressed through the first level! While the first few levels revolve around you looking after Neva, she eventually grows up and gets attacks of her own, and she starts having your back. She can tackle enemies and objects by teleporting (she's magical), and aid you in battle by sneaking up on the demons.</p><p>Utilizing Neva and spending time with her contributes towards earning trophies on the PS5. For instance, one of them requires you to soothe her in a certain level, and another sees you calling out her name a few times. You're dependant on Neva and her survival is semi-dependant on you. I grew quite attached to Neva and I wanted to pet her as much as I could — the game does an excellent job of giving you a sense of responsibility.</p><h2 id="buttery-smooth-platforming">Buttery smooth platforming</h2><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="Cv3WBTtRmbAWAFM572AwRQ" name="Neva-op-ed-2" alt="Screenshot from Neva, a 2D side-scrolling game by Nomada Studio" src="https://cdn.mos.cms.futurecdn.net/Cv3WBTtRmbAWAFM572AwRQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nomada Studio)</span></figcaption></figure><p>To traverse the ever-changing landscape where trees become blackened and break off, you must jump, double jump and dash over obstacles and to ensure you don't fall to your death. Alongside platforming, there are plenty of puzzles you must solve, and these are all well-thought out and designed. They never feel repetitive — and they can't, really, given that Neva has a completion time of just over three hours.</p><p>If you're squeamish about blood or gore, you don't have to worry about that with this game. Death scenes in Neva aren't like those in most other games. There's no blood when your character dies. Instead, you and any other creature who falls gets covered in black flowers. I also like that you can choose the Story Mode difficulty which makes it impossible for Alba to die, resulting in a more relaxed experience focussing on the narrative.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QhuruZcjdDrYz4zznjfGAS" name="Neva-op-ed-4" alt="Screenshot from Neva, a 2D side-scrolling game by Nomada Studio" src="https://cdn.mos.cms.futurecdn.net/QhuruZcjdDrYz4zznjfGAS-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nomada Studio)</span></figcaption></figure><p>The storytelling, combined with the music, artsy graphics, and the narrative revolving around parenthood, may have you guessing the ending. I did too, and I thought I had it figured out, but as the last cutscene played, nothing could have prepared me for it. All I could do was sob into my hands.... and then revisit the chapters to Platinum it (and Platinum it, I did).</p><p>Neva: The Prologue drops on February 19, and you'd best believe that I will be getting it day one. If you want to play Neva now, and I highly recommend that you do, you can grab it for <a href="https://store.playstation.com/en-us/concept/10008521" target="_blank" rel="nofollow">just $9 / £7 at the PlayStation Store</a>. Neva is also available on PC, macOS, Nintendo Switch, PS4 and Xbox Series X|S.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eBGPoW"></div>                            </div>                            <script src="https://kwizly.com/embed/eBGPoW.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/gaming/endling-extinction-is-forever">Don’t let looks fool you, this survival game on PS5 featuring foxes will make you cry your eyes out</a></li><li><a href="https://www.tomsguide.com/gaming/nintendo/valentines-day-2026-best-couch-co-op-games">Staying in with your partner on Valentine’s Day? These are the 9 best couch co-op and two-player games to play on a cozy night-in</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/5-games-to-play-first-on-your-new-ps5">Just got a PS5? Here's the 5 best games to play first</a></li></ul><div data-widget-type="multimodelreview" data-model-name="Neva,Sony PlayStation 5"></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/the-best-ps5-game-you-probably-havent-played-just-got-a-prequel-announced-at-state-of-play-and-you-can-get-the-original-right-now-for-just-usd9</link>
                                                                            <description>
                            <![CDATA[ Neva tells a heartbreaking story about parenthood in a world ravished by darkness, and it's the best indie game you can play right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">keJb7BcW3oNEUF5tpBkZeP</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/HQdmuqXVDQfwFsJH9FyfHQ-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 14 Feb 2026 08:01:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ nikita.achanta@futurenet.com (Nikita Achanta) ]]></author>                    <dc:creator><![CDATA[ Nikita Achanta ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oXuvixDz99SbZp9z8Uoor3-320-70.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Nikita is a Senior Writer on the Reviews team at Tom&#039;s Guide. She is a lifelong gaming and photography enthusiast, especially interested in wildlife photography. Having worked as a Sub Editor and Writer for Canon EMEA, she’s a bit of a grammar nerd (and a supporter of the Oxford comma), and has also interviewed photographers from all over the world and working in different genres. A holder of two master’s degrees, the most recent one being in Magazine Journalism from Cardiff University, Nikita’s work has appeared in several publications such as Motor Sport Magazine, NME, Marriott Bonvoy, The Independent, and Metro. Her favorite tech includes the PS5, the DJI Air 3S, and the Fujifilm X-T50. She&#039;s also a licensed drone pilot and cameras expert so you&#039;ll find her testing those nearly every week.&lt;/p&gt;&lt;p&gt;In her downtime, Nikita can usually be found sinking hours into RPGs on her PS5, flying a drone, out on a walk with a camera in hand, at a concert, watching F1, or planning her next tattoo. You can follow her photography account on Instagram&lt;a href=&quot;https://www.instagram.com/photos.bynikita/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt; here&lt;/a&gt;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/HQdmuqXVDQfwFsJH9FyfHQ-1920-80.jpg">
                                                            <media:credit><![CDATA[Nomada Studio]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Screenshot from Neva, a 2D side-scrolling game by Nomada Studio]]></media:description>                                                            <media:text><![CDATA[Screenshot from Neva, a 2D side-scrolling game by Nomada Studio]]></media:text>
                                <media:title type="plain"><![CDATA[Screenshot from Neva, a 2D side-scrolling game by Nomada Studio]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/HQdmuqXVDQfwFsJH9FyfHQ-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When it comes to video games, I'm quite picky. I love story-driven RPGs and that's the genre I'm most attracted to. But sometimes, these RPGs with their 100+ hour playtime can feel like a lot, and I need a break from them. Recently, when I completed my ninth playthrough of <a href="https://www.tomsguide.com/opinion/baldurs-gate-3-is-a-love-letter-to-dungeons-and-dragons-and-its-all-i-want-to-play-right-now">Baldur's Gate 3</a> and was on the character creation screen once again to start another one, I stopped myself. It was time for a change.</p><p>So I did what most of us do when we don't know what to play next: I browsed the deals section of the PlayStation Store on my <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a>. That's when I came across a 2D side-scrolling game called <a href="https://store.playstation.com/en-us/concept/10008521" target="_blank" rel="nofollow">Neva, which is currently down to just $9 / £7 from $19 / £16 on the PS Store</a>, and I pulled the trigger and bought it. It's one of the best decisions I've ever made. And at <a href="https://www.tomsguide.com/news/live/ps5-state-of-play-february-2026-live-updates">this week's State of Play</a>, its prequel was announced (dropping on February 19), so now is the perfect time to play it!</p><div class="product"><a data-dimension112="53b9869d-af7a-405d-917b-37024ac85bff" data-action="Deal Block" data-label="(Digital Download)" data-dimension48="(Digital Download)" data-dimension25="$9" href="https://store.playstation.com/en-us/concept/10008521" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1023px;"><p class="vanilla-image-block" style="padding-top:146.63%;"><img id="ZZY9a2SN3x44f6r3kFtg3U" name="Neva-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZZY9a2SN3x44f6r3kFtg3U-1920-80.jpg" mos="" align="middle" fullscreen="" width="1023" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://store.playstation.com/en-us/concept/10008521" target="_blank" rel="nofollow" data-dimension112="53b9869d-af7a-405d-917b-37024ac85bff" data-action="Deal Block" data-label="(Digital Download)" data-dimension48="(Digital Download)" data-dimension25="$9">(Digital Download): was $19 now $9</a></strong><br>Released in 2024, Neva is a 2D puzzle-platformer. You play as a young woman named Alba, and you travel with your wolf companion called Neva, across four seasons in a world corrupted by darkness and strange entities who try to harm you.<a class="view-deal button" href="https://store.playstation.com/en-us/concept/10008521" target="_blank" rel="nofollow" data-dimension112="53b9869d-af7a-405d-917b-37024ac85bff" data-action="Deal Block" data-label="(Digital Download)" data-dimension48="(Digital Download)" data-dimension25="$9">View Deal</a></p></div><p>Neva is a puzzle-platformer with barely any dialog, where the beautiful art design and stunning music do the talking for the game. It conveys a lovely story which you only understand when you reach the end, and it may drive you to tears — I sobbed like a baby. Should you play Neva? Yes, and then play it again, and again. Let me tell you why (minor spoilers alert!).</p><h2 id="an-existential-game-that-keeps-you-guessing">An existential game that keeps you guessing</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="q7UCcuhPjZPB4sSSY52mUS" name="Neva-op-ed-3" alt="Screenshot from Neva, a 2D side-scrolling game by Nomada Studio" src="https://cdn.mos.cms.futurecdn.net/q7UCcuhPjZPB4sSSY52mUS-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nomada Studio)</span></figcaption></figure><p>Neva is a beautiful story told through no words. The only time your character, called Alba, speaks is when she's calling out for her wolf, Neva, and even then, all she says is the wolf's name. Alba and Neva venture through perspective-shifting and occasionally trippy landscapes that are nothing short of stunning. The music is just as gorgeous, ramping up into semi-rock ballads when enemies are upon you.</p><p>The world is plagued by darkness and formless masked creatures but you never find out how or why they came about to be — but your goal is to rid the world of them with your sword and your wolf by your side. You watch the world succumb to the darkness as you go through the four seasons, with each "act" named Summer, Fall, Winter and Spring. Birds fall from the sky, flowers bloom black, animals die and their bodies are taken over by the masked demons.</p><div class="product"><a data-dimension112="eafc5483-8858-4620-a916-20fc64c96fdb" data-action="Deal Block" data-label="(Physical Edition)" data-dimension48="(Physical Edition)" data-dimension25="$29" href="https://www.amazon.com/Neva-PlayStation-5/dp/B0DK62PVH1/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1023px;"><p class="vanilla-image-block" style="padding-top:146.63%;"><img id="ZZY9a2SN3x44f6r3kFtg3U" name="Neva-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZZY9a2SN3x44f6r3kFtg3U-1920-80.jpg" mos="" align="middle" fullscreen="" width="1023" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong><a href="https://www.amazon.com/Neva-PlayStation-5/dp/B0DK62PVH1/" target="_blank" rel="nofollow" data-dimension112="eafc5483-8858-4620-a916-20fc64c96fdb" data-action="Deal Block" data-label="(Physical Edition)" data-dimension48="(Physical Edition)" data-dimension25="$29">(Physical Edition): was $34 now $29</a></strong><br>If you like owning physical copies of games or are just a collector, the physical edition of Neva is currently 15% off at Amazon, bringing the price down from $34 to $29.<a class="view-deal button" href="https://www.amazon.com/Neva-PlayStation-5/dp/B0DK62PVH1/" target="_blank" rel="nofollow" data-dimension112="eafc5483-8858-4620-a916-20fc64c96fdb" data-action="Deal Block" data-label="(Physical Edition)" data-dimension48="(Physical Edition)" data-dimension25="$29">View Deal</a></p></div><p>Neva revolves around parenthood and the emotional bond you can develop with animals. It's similar to existential games like <a href="https://www.tomsguide.com/gaming/endling-extinction-is-forever">Endling</a>, another fantastic, soul-crushing game where the world has been destroyed by humankind's greed and capitalism. Through no words, Neva conveys a heart-wrenching story of loss, as the opening sequence features a very sad scene (that I won't disclose lest I spoil it for you) — and yes, I was crying within the first 10 minutes of playing the game.</p><h2 id="all-about-looking-after-one-another">All about looking after one another</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kBpEKHouGawbxZDSniN63R" name="Neva-op-ed-5" alt="Screenshot from Neva, a 2D side-scrolling game by Nomada Studio" src="https://cdn.mos.cms.futurecdn.net/kBpEKHouGawbxZDSniN63R-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nomada Studio)</span></figcaption></figure><p>Alongside being about parenthood, Neva is all about looking after one another. Your wolf, Neva, starts out as a cub, and is clumsy and easily distracted, like a little puppy. She'll grab on to leaves and follow butterflies, and you must take her to feeding spots to ensure she's getting sufficient nourishment.</p><p>When you jump a big gap and she follows you, she nearly falls off the ledge so you must grab her and soothe her. Yes, you can pet Neva — you can even have a little cuddle with her once you've progressed through the first level! While the first few levels revolve around you looking after Neva, she eventually grows up and gets attacks of her own, and she starts having your back. She can tackle enemies and objects by teleporting (she's magical), and aid you in battle by sneaking up on the demons.</p><p>Utilizing Neva and spending time with her contributes towards earning trophies on the PS5. For instance, one of them requires you to soothe her in a certain level, and another sees you calling out her name a few times. You're dependant on Neva and her survival is semi-dependant on you. I grew quite attached to Neva and I wanted to pet her as much as I could — the game does an excellent job of giving you a sense of responsibility.</p><h2 id="buttery-smooth-platforming">Buttery smooth platforming</h2><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="Cv3WBTtRmbAWAFM572AwRQ" name="Neva-op-ed-2" alt="Screenshot from Neva, a 2D side-scrolling game by Nomada Studio" src="https://cdn.mos.cms.futurecdn.net/Cv3WBTtRmbAWAFM572AwRQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nomada Studio)</span></figcaption></figure><p>To traverse the ever-changing landscape where trees become blackened and break off, you must jump, double jump and dash over obstacles and to ensure you don't fall to your death. Alongside platforming, there are plenty of puzzles you must solve, and these are all well-thought out and designed. They never feel repetitive — and they can't, really, given that Neva has a completion time of just over three hours.</p><p>If you're squeamish about blood or gore, you don't have to worry about that with this game. Death scenes in Neva aren't like those in most other games. There's no blood when your character dies. Instead, you and any other creature who falls gets covered in black flowers. I also like that you can choose the Story Mode difficulty which makes it impossible for Alba to die, resulting in a more relaxed experience focussing on the narrative.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QhuruZcjdDrYz4zznjfGAS" name="Neva-op-ed-4" alt="Screenshot from Neva, a 2D side-scrolling game by Nomada Studio" src="https://cdn.mos.cms.futurecdn.net/QhuruZcjdDrYz4zznjfGAS-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nomada Studio)</span></figcaption></figure><p>The storytelling, combined with the music, artsy graphics, and the narrative revolving around parenthood, may have you guessing the ending. I did too, and I thought I had it figured out, but as the last cutscene played, nothing could have prepared me for it. All I could do was sob into my hands.... and then revisit the chapters to Platinum it (and Platinum it, I did).</p><p>Neva: The Prologue drops on February 19, and you'd best believe that I will be getting it day one. If you want to play Neva now, and I highly recommend that you do, you can grab it for <a href="https://store.playstation.com/en-us/concept/10008521" target="_blank" rel="nofollow">just $9 / £7 at the PlayStation Store</a>. Neva is also available on PC, macOS, Nintendo Switch, PS4 and Xbox Series X|S.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eBGPoW"></div>                            </div>                            <script src="https://kwizly.com/embed/eBGPoW.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/gaming/endling-extinction-is-forever">Don’t let looks fool you, this survival game on PS5 featuring foxes will make you cry your eyes out</a></li><li><a href="https://www.tomsguide.com/gaming/nintendo/valentines-day-2026-best-couch-co-op-games">Staying in with your partner on Valentine’s Day? These are the 9 best couch co-op and two-player games to play on a cozy night-in</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/5-games-to-play-first-on-your-new-ps5">Just got a PS5? Here's the 5 best games to play first</a></li></ul><div data-widget-type="multimodelreview" data-model-name="Neva,Sony PlayStation 5"></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ PS5 State of Play February 2026 live updates — God of War Remake, MGS Collection Vol. 2 and every game announced ]]></title>
                                                                                                <dc:content><![CDATA[ <div class="live-content"><p>State of Play February 2026 is over, and after a packed 85 minutes of gaming goodness, there's <em>so much </em>to talk about. From the reveal of the God of War Trilogy Remake to the MGS Master Collection Vol. 2 and more.</p><p>Sony promised it would deliver a lengthy showcase of PS5 games arriving on the console in 2026, and beyond, and it certainly delivered. There was at least one announcement for every type of player. And I'm pretty sure the "Chicken Man" from Project Windless is about to take over the internet.</p><p>Don't worry if you missed Today's State of Play, you can watch it back below, and we've got a full roundup of all the PS5 announcements in this live blog.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7606156214195571998" data-video-id="7606156214195571998" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7606156198488476446">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <h2 id="how-to-re-watch-state-of-play-for-february-2026">How to (re)watch State of Play for February 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/P0e5YEXtZu0" allowfullscreen></iframe></div></div><p>If you missed State of Play February 2026, or just want to rewatch the showcase, you can watch it back via the VOD link above. Of course, if you don't have a spare 85 minutes, you can read on to see all the new trailers.</p></div><div class="live-content"><time datetime="2026-02-12T12:50:19+00:00">February 12, 2026 – 7:50 AM</time><h2 id="welcome-5">Welcome!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="A92fAFp8GUDRCcdSBJbUKd" name="PS5 Pro.jpg" alt="PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/A92fAFp8GUDRCcdSBJbUKd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Hello, welcome to Tom's Guide's live coverage of the PS5 State of Play for February 2026. I'm Rory, a Senior Entertainment Editor, and I'll be guiding you through today's PlayStation showcase (with some help from a few colleagues). The event doesn't start for a few hours, but there's still plenty to cover, so let's get talking PlayStation...</p></div><div class="live-content"><time datetime="2026-02-12T13:16:27+00:00">February 12, 2026 – 8:16 AM</time><h2 id="today-s-state-of-play-is-going-to-be-a-big-one">Today's State of Play is going to be a BIG one</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:920px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="YjQgFQT9J6kopyr5nu4evh" name="Playstation store.jpg" alt="PlayStation Store Holiday Sale" src="https://cdn.mos.cms.futurecdn.net/YjQgFQT9J6kopyr5nu4evh-1920-80.jpg" mos="" align="middle" fullscreen="" width="920" height="518" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>One of the key details about today's State of Play is that it will run for "60+ minutes" per the <a href="https://blog.playstation.com/2026/02/09/state-of-play-returns-this-thursday-february-12/" target="_blank">PlayStation Blog</a>. That would be welcome news in any context, but it's even more of a big deal here because that will make it the longest State of Play broadcast to date. It's clear that Sony has a lot it wants to share with players!</p></div><div class="live-content"><time datetime="2026-02-12T13:22:15+00:00">February 12, 2026 – 8:22 AM</time><h2 id="there-s-one-huge-reason-i-m-feeling-the-hype">There's one huge reason I'm feeling 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:2048px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NPBExEtUSpawN8ZNGGdWUi" name="ps_studios.jpg" alt="playstation studios" src="https://cdn.mos.cms.futurecdn.net/NPBExEtUSpawN8ZNGGdWUi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2048" height="1152" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I'm always excited for any State of Play, but there's a particular reason that today's broadcast has got me really hyped: PlayStation Studios will have a presence. </p><p>If you're out of the loop, PlayStation Studios is the umbrella group used to mark Sony-owned developers like Naughty Dog, Sucker Punch, Insomniac, Housemarque and more. Often PlayStation Studios teams don't feature during State of Play, but this time, at least some of the developers will be showcased. </p><p>To set expectations, Sony isn't promising <em>every </em>PlayStation Studios team will be present, but hopefully we hear more from the likes of Naughty Dog and Bluepoint Games who have been quiet on their current projects for quite a while now.</p></div><div class="live-content"><time datetime="2026-02-12T13:33:26+00:00">February 12, 2026 – 8:33 AM</time><h2 id="marathon-is-the-first-game-confirmed-for-state-of-play">Marathon is the first game confirmed for State of Play</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Df7TS5tqVo8uZm4VDZi9Cg" name="marathon-ps5-game-2026" alt="Screen from Marathon on PS5" src="https://cdn.mos.cms.futurecdn.net/Df7TS5tqVo8uZm4VDZi9Cg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / Bungie)</span></figcaption></figure><p>It's by no means a surprise, but Marathon is one game we know we be featured during State of Play. </p><p>Sony-owned developer Bungie confirmed the sci-fi shooter would be included in the broadcast via a post on the game's official discord server, noting that "we're excited to share we'll be part of the PlayStation State of Play."</p><p>Marathon is a big bet for developer Bungie, who need a win after the most recent Destiny 2 expansions haven't quite met player demand. The game is set to launch on March 5, so it always seems likely that Sony would use this State of Play to give it another big push ahead of the release date in just a few weeks. </p><p>This first-person extraction shooter looks like it might be landing at just the right time following the uber-success of ARC Raiders, there's plenty of demand for more games in the genre, and Marathon looks different enough to carve out its own spot. </p></div><div class="live-content"><time datetime="2026-02-12T13:45:27+00:00">February 12, 2026 – 8:45 AM</time><h2 id="here-s-another-ps5-game-we-can-confidently-predict-will-feature">Here's another PS5 game we can confidently predict will feature</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RwmuWfPnXm7yb6nmJNNUZA" name="State of Play _ February 12, 2025 [English] 53-34 screenshot" alt="Saros" src="https://cdn.mos.cms.futurecdn.net/RwmuWfPnXm7yb6nmJNNUZA-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>There were always two PlayStation Studios games that I felt highly confident would appear at State of Play. One was Marathon, which is now confirmed, the other is Saros from developer Housemarque. </p><p>Saros was announced at last year's February showcase, and is currently slated for release on April 30. It's a spiritual successor to 2021's GOTY-worthy Returnal. Based on the brief gameplay snippets we've seen, it's going to offer the same blockbuster bullet-hell gameplay in an intriguing, and sinister, sci-fi world. It also appears that the story might be a little less mysterious this time, which some players will prefer.</p><p>As noted, it's due to launch in the spring, so it seems very likely Saros will get a new trailer in this State of Play as Sony looks to ramp up the marketing ahead of April.</p></div><div class="live-content"><time datetime="2026-02-12T13:55:46+00:00">February 12, 2026 – 8:55 AM</time><h2 id="insomniac-s-wolverine-might-not-show-it-s-claws-today">Insomniac's Wolverine might not show it's claws today</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="brkRET2rLiiqB38ggQjQsW" name="wolverine-2025-state-of-play-ps5-game" alt="Marvel's Wolverine image showing Logan" src="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>With Marathon, Saros and Marvel's Wolverine making up the tentpole trio of PlayStation Studios games confirmed for 2026 (as of writing, at least), it stands to reason that all three will feature in today's State of Play. But there's reason to think that Logan might give this showcase a miss and keep his claws hidden away. </p><p>In response to a question on X, asking when gamers would get to learn more about Wolverine, Insomniac Games' official account offered up the vague, "Spring 2026" in reply. At least in my calendar, February isn't quite spring, so don't bet on Wolverine being included in this PlayStation event.</p><p>Of course, this could be intentional misdirection from the folks at Insomniac, but we'll just have to wait until the State of Play February later today to find out.   </p></div><div class="live-content"><time datetime="2026-02-12T14:05:39+00:00">February 12, 2026 – 9:05 AM</time><h2 id="just-joining-us-here-s-the-key-state-of-play-details">Just joining us? Here's the key State of Play details</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="G6iHnUaHZfLvU9ubZcuPHP" name="TG_shutterstock_PS5-controller_LIST.jpg" alt="Playstation 5 controller" src="https://cdn.mos.cms.futurecdn.net/G6iHnUaHZfLvU9ubZcuPHP-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>It's the start of the working day in the U.S. (on the east coast, at least), so if you're just joining me, the key details you need to know are that today (Feb. 12) will see the first PS5 State of Play in 2026, it'll begin at <strong>12 pm PT / 5 pm ET / 10 pm GMT.</strong></p><p>The live broadcast is set to last for at last an hour (Sony is saying "60+ minutes"), and will include games from PlayStation Studios. Today could be a very big day in the world of PlayStation, and I'm bringing you all the details in this live blog!</p></div><div class="live-content"><time datetime="2026-02-12T14:18:30+00:00">February 12, 2026 – 9:18 AM</time><h2 id="gimme-more-from-marvel-tokon">Gimme more from Marvel Tokon!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GuvJmhTi3uYUhdeh8LA55V" name="Marvel Tokon beta 4" alt="Marvel Tokon: Fighting Souls" src="https://cdn.mos.cms.futurecdn.net/GuvJmhTi3uYUhdeh8LA55V-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>I'm not typically a fighting game player (that's in part because I usually suck at them), but one fighter I'm keeping an eye on is Marvel Tokon: Fighting Souls. </p><p>This fighter from acclaimed developer Arc System Works combines Marvel's stable of superheroes with an anime-style art style, which is immediately striking. It also features my boy, Spider-Man, in the playable roster, which always gets my attention. </p><p>It set to launch sometime in 2026, and so seems a good candidate to feature at State of Play. Maybe we'll get a firm release date in just a matter of hours.</p></div><div class="live-content"><time datetime="2026-02-12T14:38:30+00:00">February 12, 2026 – 9:38 AM</time><h2 id="is-it-finally-time-to-see-more-of-intergalactic">Is it finally time to see more of Intergalactic? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gGHYy9kM2a4pZMfY2DzSSQ" name="intergalactic-the-heretic-prophet-screenshot" alt="Intergalactic: The Heretic Prophet screenshot" src="https://cdn.mos.cms.futurecdn.net/gGHYy9kM2a4pZMfY2DzSSQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / Naughty Dog)</span></figcaption></figure><p>For the last 12 months, during every PlayStation State of Play, and events like Summer Game Fest and The Game Awards, I've been keeping my fingers crossed that we get a new trailer for Nuaghty Dog's Intergalactic: The Heretic Prophet.</p><p>So far, I've been let down every time, but there's no question about, I'm ready to get hurt again. Intergalactic represents Naughty Dog's first new IP since The Last of Us way back in 2013, and I just cannot wait to learn more about this sci-fi experience. </p><p>The first trailer we got back in December 2024 instantly grabbed me, and Naughty Dog are a developer that has yet to disappoint me (yes, I even rank The Last of Us Part 2 as a masterpiece). I'm not totally convinced we will see Intergalactic today in the State of Play, as it's rumored for a 2027 release, but I'm keep hoping until then.</p></div><div class="live-content"><time datetime="2026-02-12T14:51:37+00:00">February 12, 2026 – 9:51 AM</time><h2 id="is-kratos-about-to-go-2d">Is Kratos about to go 2D? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AXNNW7PLmYmCxqswRjhu8R" name="God of War Ragnarok - Kratos vs creature.jpg" alt="God of War Ragnarok" src="https://cdn.mos.cms.futurecdn.net/AXNNW7PLmYmCxqswRjhu8R-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>One of the big rumors circulating in the gaming world right now is that PlayStation is quietly working on a God of War spin-off title. That seems a pretty boilerplate rumor on the surface (a popular franchise gets a spin-off title, which is hardly unexpected), but more surprisingly, it's claimed this game will be a 2D side-scroller. </p><p>Remember, <strong>this is a rumor</strong>, but over on the <a href="https://www.reddit.com/r/GamingLeaksAndRumours/comments/1r1vcyo/natethehate_on_rumored_2d_god_of_war_whispers_of/" target="_blank">GamingLeaksAndRumours subreddit</a>, a new post linking back to NateTheHate (a well-known leaker) claims that God of War 2D is in development, and that Sony is considering a multi-platform launch. </p><p>Perhaps today's State of Play 2026 will see God of War 2D revealed to the world, or maybe all the online rumors are false and Kratos is sticking to three dimensions.</p></div><div class="live-content"><time datetime="2026-02-12T15:07:13+00:00">February 12, 2026 – 10:07 AM</time><h2 id="will-ac-black-flag-remake-set-sail-at-state-of-play">Will AC: Black Flag Remake set sail at State of Play?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="czF4dBP5bRVSqBpZAshs4k" name="Assassins-Creed-IV--Black-Flag.jpg" alt="assassin's creed iv: black flag" src="https://cdn.mos.cms.futurecdn.net/czF4dBP5bRVSqBpZAshs4k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ubisoft)</span></figcaption></figure><p>Another long-standing internet rumor is that Assassin's Creed IV: Black Friday is getting a shiny new remake, bringing back the pirate-themed adventure for a new generation of consoles. Heck, this one might even be more than a rumor, as an Ubisoft social media account made a cheeky reference to its existence in January. </p><p>Further adding to the fire, Amazon UK added a listing for an <a href="https://www.amazon.co.uk/Assassins-Creed-Black-Flag-Remaster/dp/1835417701#detailBullets_feature_div" target="_blank" rel="nofollow">"Assassin's Creed Black Flag Remastered Art Book"</a> this week with a scheduled release date of March 24. This could be a listing error, and/or a placeholder release date. But if Black Flag is coming back in just a matter of weeks, you'd expect it to be showcased soon. </p><p>This State of Play could be the ideal place for Ubisoft to announce that one of the most beloved Assassin's Creed games in the franchise's history is returning.</p></div><div class="live-content"><time datetime="2026-02-12T15:20:09+00:00">February 12, 2026 – 10:20 AM</time><h2 id="time-for-one-last-look-at-resident-evil-requiem">Time for one last look at Resident Evil Requiem? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CVDdqjsDfPZDjVPY7bnDEe" name="Resident_Evil_Requiem_-_RE_Showcase_Screenshot_19" alt="Resident Evil Requiem: Leon aims his gun at a chainsaw-wielding zombie." src="https://cdn.mos.cms.futurecdn.net/CVDdqjsDfPZDjVPY7bnDEe-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>Resident Evil Requiem is entering the final stages of it's marketing push, with the survival horror game set to launch on February 27. Soon it'll be in our hands, and I can't wait to see the twisted horrors the team over at Capcom have created for us.</p><p>It seems likely that Resident Evil Requiem might feature in one final gaming showcase before release, and that would be State of Play. Personally, I was sold on this game from its first trailer, and I actually don't want to see anymore for fear of having a surprise moment spoiled. So if Resi 9 does pop up, I might look away!  </p></div><div class="live-content"><time datetime="2026-02-12T15:36:19+00:00">February 12, 2026 – 10:36 AM</time><h2 id="more-than-6-hours-to-go-until-state-of-play">More than 6 hours to go until State of Play!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="y5T6EzpDkzjkm8NbGVewWW" name="PS5 Pro-9" alt="The PlayStation logo on a PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>You know, in my head, it felt like we were a little closer, but we've still got more than six hours until State of Play February 2026 goes live. As noted, I'm usually one to advice keeping expectations in check, but I'm really feeling the hype for this one. Here's hoping that PlayStation can deliver a showcase packed with great reveals. </p></div><div class="live-content"><time datetime="2026-02-12T15:50:48+00:00">February 12, 2026 – 10:50 AM</time><h2 id="spidey-might-be-swinging-onto-ps-this-month">Spidey might be swinging onto PS+ this month</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jJMkNusyEQMGTpNJ9UAKwa" name="spider-man-2-screenshot-ps5-08.jpg" alt="Spider-Man 2 screenshot" src="https://cdn.mos.cms.futurecdn.net/jJMkNusyEQMGTpNJ9UAKwa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Earlier this month, <a href="https://www.dealabs.com/magazine/ps-plus-extra-une-grosse-exclusivite-ps5-debarque-ce-mois-de-fevrier-61029" target="_blank">Deadlabs,</a> a site with a strong record of leaking PlayStation Plus games, reported that February's headline for Extra/Premium members would be Marvel's Spider-Man 2. It'll be added to the PS+ Game Collection alongside Test Drive Unlimited Solar Crown and Neva. </p><p>This would be a big deal, Spider-Man 2 is one of the PS5's most high-profile console exclusives, and I'm sure any PS+ subscriber who hasn't played it yet would be delighted. Assuming this report from Deadlabs is accurate (and as noted, the track record is strong), I expect the Spidey sequel heading to PS+ will be confirmed during the State of Play event.</p></div><div class="live-content"><time datetime="2026-02-12T16:06:04+00:00">February 12, 2026 – 11:06 AM</time><h2 id="icymi-horizon-hunters-gathering-was-just-announced">ICYMI: Horizon Hunters Gathering was just announced </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YhffejPLEhTLJYVz8sAmMn" name="horizon-hunters-gathering-ps5" alt="Horizon Hunters Gathering screenshot" src="https://cdn.mos.cms.futurecdn.net/YhffejPLEhTLJYVz8sAmMn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Last week, Guerrilla Games confirmed the next game set in the world of Horizon, it's not the full Horizon 3 many fans wanted, instead it's called Horizon Hunters Gathering and it's a three-player co-op experience with a more cartoony art style. </p><p>The reception online has been a little mixed, but I'm interested to see more, and don't mean the switch in overall aesthetic and tone. Horizon's post-apocalyptic future full of metallic creatures to hunt seems like a great candidate for a co-op game, and the roster of "hero" characters each offers their own set of unique skills. </p><p>While I'm not fully sold on Horizon Hunters Gathering just yet, as we've seen so little of the game so far, but the announcement <a href="https://blog.playstation.com/2026/02/05/announcing-horizon-hunters-gathering-guerrillas-new-co-op-action-game/" target="_blank">PlayStation Blog post</a> promised more details to come in the months ahead, and maybe that'll mean at State of Play. </p></div><div class="live-content"><time datetime="2026-02-12T16:25:51+00:00">February 12, 2026 – 11:25 AM</time><h2 id="the-witcher-3-is-getting-dlc-in-2026-really">The Witcher 3 is getting DLC in 2026? Really?</h2><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="4kreJNsk4ppWNoTG8a9KyJ" name="witcher-3-on-ps5-image (3).JPG" alt="Witcher 3 next-gen update screenshot" src="https://cdn.mos.cms.futurecdn.net/4kreJNsk4ppWNoTG8a9KyJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: CD Projekt Red)</span></figcaption></figure><p>One of the strangest rumors that just refuses to die, is that The Witcher 3: Wild Hunt is getting a new DLC expansion in 2026. Yes, The Witcher 3, the GOTY-winning RPG released in 2015. I'm certainly not mad if this rumor proves to be accurate, but I would be very surprised. Single-player games don't usually get DLC a decade later. </p><p>The reports suggest the DLC will lead into The Witcher 4, which is currently in development over at Polish studio CD Projekt Red. The game's last major update came in 2022, when it was ported over to PS5/Xbox Series X, and got a small selection of new content that tied into Netflix's "The Witcher" TV show.</p><p>However, that was a single quest, and some new armor options, the rumors here claim this will be a more meaty expansion, in line with it's previous, 2015's Hearts of Stone and 2016's Blood and Wine. Consider me skeptical of this rumor being accurate, but if I'm incorrect, and it's at State of Play, I'd very happy to be wrong.</p></div><div class="live-content"><time datetime="2026-02-12T16:36:31+00:00">February 12, 2026 – 11:36 AM</time><h2 id="007-first-light-might-break-cover-again-at-state-of-play">007: First Light might break cover (again) at State of Play!</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/pwRpK8eoLLE" allowfullscreen></iframe></div></div><p>Last September, PlayStation held an <em>entire </em>State of Play dedicated to 007: First Light. Single-game State of Play's aren't super uncommon, but they're typically reserved for PlayStation Studio titles. The fact that this new 007 adventure from IO Interactive got one all to itself was certainly a great boon for Bond fanatics. </p><p>A few performance hiccups in the gameplay footage aside, I was very impressed with the 30-minute presentation, and I'm eagerly anticipating the game's launch in May 2026. So, all of this is to say, don't be surprised if 007: First Light appears today. </p></div><div class="live-content"><time datetime="2026-02-12T16:58:25+00:00">February 12, 2026 – 11:58 AM</time><h2 id="will-starfield-s-long-rumored-ps5-port-ever-actually-happen">Will Starfield's long rumored PS5 port ever actually happen?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="scmjkwqjDFxJxrT3TXnNwg" name="Starfield Grav Jump.jpg" alt="Starfield gravity jump" src="https://cdn.mos.cms.futurecdn.net/scmjkwqjDFxJxrT3TXnNwg-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bethesda)</span></figcaption></figure><p>We live in strange times. Xbox games now release on PS5, but one title that remains Xbox console exclusive is Starfield. This sci-fi RPG from Skyrim maker Bethesda launched on Xbox (and PC) in 2023, and more than two years later, PS5 players still haven't been able to explore its intergalactic world for themselves. </p><p>Look, I know Starfield didn't enjoy the <em>best </em>reception from some RPG players, but personally, I mostly enjoyed my time with this one, and if it ever does come to PS5, I would happily give it a second play-through. There have been rumors of a PS5 port circulating pretty much since 2023, but they've heated up further in early 2026. </p><p>Perhaps, today's State of Play is when Bethesda will reveal that Starfield is the latest Xbox title to play nice with PlayStation. However, don't bet on it, leaker Shinobi62 claims (via <a href="https://www.reddit.com/r/GamingLeaksAndRumours/comments/1r0ay09/shinobi602_says_that_more_starfield_news/" target="_blank">Reddit</a>) that news on Starfield's PS5 version won't come till March. </p></div><div class="live-content"><time datetime="2026-02-12T17:21:42+00:00">February 12, 2026 – 12:21 PM</time><h2 id="ps-portal-could-get-a-big-upgrade">PS Portal could get a BIG upgrade</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="F49tf3bTbzrfLHzdrKG6rW" name="PS Portal-1.jpg" alt="Marvel's Spider-Man 2 on PlayStation Portal" src="https://cdn.mos.cms.futurecdn.net/F49tf3bTbzrfLHzdrKG6rW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Moving away from PlayStation games, let's talk accessories, specifically the PlayStation Portal remote player. Per <a href="https://x.com/Zuby_Tech/status/2010031067554865444" target="_blank">Zuby Tech</a>, this nifty PS5 handheld could get a major upgrade in the form of a new OLED model. The current PS Portal uses an LCD screen, but fans have wanted one with an OLED display since launch. For now, this is just a rumor, so take it with a large grain of salt, but maybe this State of Play won't just include new game reveals, but also a look at some PS5 accessories!</p></div><div class="live-content"><time datetime="2026-02-12T17:48:01+00:00">February 12, 2026 – 12:48 PM</time><h2 id="let-s-talk-grand-theft-auto-vi">Let's talk Grand Theft Auto VI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hyce8Ftu8N8gj3Dx5Dqg6b" name="gta-6-Jason_Duval_01" alt="Grand Theft Auto VI screenshot" src="https://cdn.mos.cms.futurecdn.net/hyce8Ftu8N8gj3Dx5Dqg6b-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar)</span></figcaption></figure><p>I've been scrolling social media to see what other gamers want to see at State of Play February 2026, and a recurring title is, unsurprisingly, Grand Theft Auto VI. </p><p>Never say never, but I would be <em>stunned</em> if GTA 6 had any sort of presence. For starters, Take-Two's Strauss Zelnick (CEO of Rockstar Games' parent company) recently said in an earnings call that GTA 6 marketing would begin in the summer, and secondly, GTA 6 is such a big deal that it would overshadow everything else. </p><p>So, while I can't 100% rule it out, I would suggest not getting your hopes up that today will be the day that we get to see a little more of GTA 6.</p></div><div class="live-content"><time datetime="2026-02-12T18:05:42+00:00">February 12, 2026 – 1:05 PM</time><h2 id="only-4-hours-left-until-state-of-play-february-2026">Only 4 hours left until State of Play February 2026! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Juzeg3dZVDBEbhgw9Kaqbb" name="TG_PS5_hard-drive_SSD-5.jpg" alt="PS5 Internal Storage replacement photos." src="https://cdn.mos.cms.futurecdn.net/Juzeg3dZVDBEbhgw9Kaqbb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We're getting there, slowly we're getting there. State of Play 2026 is just four hours away now. Won't be too much longer before we can see exactly what PlayStation Studios, and some of Sony's third-party partners, have in store for us. Remember, even if you can't watch along live, we'll have all the updates for you in this live blog! </p></div><div class="live-content"><time datetime="2026-02-12T18:20:06+00:00">February 12, 2026 – 1:20 PM</time><h2 id="pssr-update-coming">PSSR update coming?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FLq8rLXNv9UZJuFXKBT7WH" name="PS5_Pro_PSSR.jpg" alt="PSSR on PS5 Pro in Ratchet & Clank: Rift Apart" src="https://cdn.mos.cms.futurecdn.net/FLq8rLXNv9UZJuFXKBT7WH-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Hey, all! Tony Polanco here, and I'm taking over this blog for the next few hours. Like many of you, I'm excited to see what Sony is cooking for this 60-minute-long State of Play!</p><p>The main thing I'm looking forward to is anything regarding PSSR updates. According to Japanese insider <a href="https://x.com/Gust_FAN/status/2010888697357721845" target="_blank">Gust_FAN</a> (via <a href="https://www.dlcompare.com/gaming-news/ps5-pro-performance-upgrade-with-pssr-2-0-expected-before-the-end-of-march-70263" target="_blank">DL Compare</a>), PSSR will receive a major update soon that will incorporate similar features to FSR 4 on the PS5 Pro. This should improve image quality and overall performance.</p><p>One of the more intriguing aspects of this rumor is that older, lower-resolution games from PlayStation's back catalog will be playable at higher resolutions. We've heard discussions about this in the past, but it might actually happen now.</p><p>"PSSR 2" is very much in the rumor territory right now, but given how this State of Play is an hour long, perhaps Sony will unveil this update and detail what to expect.</p></div><div class="live-content"><time datetime="2026-02-12T18:40:12+00:00">February 12, 2026 – 1:40 PM</time><h2 id="wolverine-might-be-a-no-show">Wolverine might be a no-show</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="brkRET2rLiiqB38ggQjQsW" name="wolverine-2025-state-of-play-ps5-game" alt="Marvel's Wolverine image showing Logan" src="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Insomniac's Wolverine is one of the most anticipated PS5 games. While this State of Play seems like a natural place to show more gameplay, it seems it might be a no-show.</p><p>As <a href="https://www.ign.com/articles/spider-man-developer-suggests-wolverine-will-skip-tomorrows-big-state-of-play" target="_blank">IGN</a> reports, Insomniac Games went on social media and said we'd get more Wolverine info  in "spring 2026." Given how it's currently February, that seems to rule out seeing the game during State of Play.</p><p>While this will surely disappoint many, I agree with IGN in that Sony is likely planning a dedicated PlayStation Showcase for Wolverine. Instead of cramming in some footage during today's State of Play, we could instead get a whole show that goes into more detail. If that's the case, I'm willing to wait longer!</p></div><div class="live-content"><time datetime="2026-02-12T19:00:06+00:00">February 12, 2026 – 2:00 PM</time><h2 id="rumored-ps-portal-oled-could-surface">Rumored PS Portal OLED could surface</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HwADRGb76aT8btrLpT6XPh" name="PlayStation Portal-2.jpg" alt="A PlayStation Portal showing Marvel's Spider-Man 2" src="https://cdn.mos.cms.futurecdn.net/HwADRGb76aT8btrLpT6XPh-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the other major rumors floating around is that we'll see an updated PlayStation Portal with an OLED display (according to <a href="https://x.com/Zuby_Tech/status/2010031067554865444" target="_blank">Zuby Tech</a>). Considering how successful the current model has been, I can see Sony releasing a follow-up device to keep the momentum going.</p><p>I have mixed feelings on this. While the PS Portal is much better now than it was at launch, I personally don't travel enough to really need an on-the-go PS5. That said, if the OLED panel is nice enough, it could change my mind.</p><p>As with PSSR 2, this is a rumor, so take it with an appropriate level of skepticism. That said, I won't blame you if you decide to hold out hope for an official announcement. Given how I cover gaming hardware news, you can bet on me covering this story if it happens.</p></div><div class="live-content"><time datetime="2026-02-12T19:20:13+00:00">February 12, 2026 – 2:20 PM</time><h2 id="a-ghost-of-sparta-sequel">A Ghost of Sparta sequel???</h2><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:62.53%;"><img id="NSis8UEFLbzHdcGmfZD5bZ" name="God-of-War-Ghost-of-Sparta.jpg" alt="God of War: Ghost of Sparta" src="https://cdn.mos.cms.futurecdn.net/NSis8UEFLbzHdcGmfZD5bZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="938" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Speaking of rumors, one of the wildest I've heard is that we could get a 2D Metroidvania-like God of War game starring Kratos' brother, Deimos. That's already bonkers enough, but rumors also suggest that this title might be multi-platform... as in it might also arrive on rival systems like Switch 2 and Xbox Series X.</p><p>While this rumor seems extremely far-fetched, it comes to us via <a href="https://www.reddit.com/r/GamingLeaksAndRumours/comments/1r1vcyo/natethehate_on_rumored_2d_god_of_war_whispers_of/" target="_blank">NateTheHate</a>, who has a pretty good track record when it comes to PlayStation leaks. Because of that, we can't completely discount it, even though it is very much a rumor.</p><p>I love the God of War series, and especially love Ghost of Sparta on PSP. If this 2D game serves as a semi-sequel or spin-off where we get to play as Deimos, I'm all for it. Let's see how this rumor pans out.</p></div><div class="live-content"><time datetime="2026-02-12T19:40:11+00:00">February 12, 2026 – 2:40 PM</time><h2 id="marvel-tokon-s-roster-reveal-could-happen">Marvel Tokon's roster reveal could happen</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JL98xjoMxh3mjUnftsEwtF" name="Marvel Tokon lede" alt="Marvel Tokon: Fighting Souls" src="https://cdn.mos.cms.futurecdn.net/JL98xjoMxh3mjUnftsEwtF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Unlike my colleague Rory Mellon, I absolutely love fighting games, and Marvel Tokon is one of the titles I'm anticipating most. We haven't gotten much info on this game (check out my <a href="https://www.tomsguide.com/gaming/i-played-marvel-tokon-fighting-souls-and-it-could-be-my-next-big-fighting-game-heres-why">Marvel Tokon preview</a> for my thoughts), but signs point to some news happening at State of Play.</p><p>Earlier this week, the game's Steam page received an unexpected update to its listing. The most significant morsel is that it will launch with 20 playable characters. While this has caused some ire in the FGC (fighting game community), I think that's a nice-sized roster to start with, as this game will get more characters via season passes, just like all modern fighting games do.</p><p>I won't speculate on which characters will be in the roster, but I will say I hope we finally get the Fantastic Four in a Marvel fighting game, as Marvel's First Family has never appeared in any of the Capcom Marvel games (at least not as fully playable characters). And if you'll allow me to nerd out, I'd love for Hulk and Wolverine to be in the game so I can form a team with them, Spider-Man, and Ghost Rider, who were the "new" Fantastic Four in the early '90s.</p><p>Nerding out aside, I expect a big showing for Marvel Tokon today.</p></div><div class="live-content"><time datetime="2026-02-12T20:00:08+00:00">February 12, 2026 – 3:00 PM</time><h2 id="resident-evil-requiem-update">Resident Evil Requiem update?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="R9o4mkFHBy2DV5WD63Xf7W" name="Resident_Evil_Requiem_-_Screenshot_3" alt="Resident Evil Requiem" src="https://cdn.mos.cms.futurecdn.net/R9o4mkFHBy2DV5WD63Xf7W-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>While this is a PlayStation show, we're sure to see some third-party games tossed into the mix. To that end, one game I'm sure will pop up is Resident Evil Requiem, as it's slated to drop on February 27.</p><p>I've played two demos of Resident Evil Requiem: <a href="https://www.tomsguide.com/gaming/i-played-resident-evil-requiem-and-its-already-my-most-anticipated-game-of-2026">one focusing on Grace Ashcroft</a> and <a href="https://www.tomsguide.com/gaming/i-just-played-resident-evil-requiem-and-its-mix-of-action-and-horror-is-exactly-what-i-want">another featuring both her and Leon</a>. I'm a huge fan of the franchise, so it shouldn't surprise you that even after playing those demos, I still want more. I'm curious to see what we could see today, but I can't wait regardless!</p></div><div class="live-content"><time datetime="2026-02-12T20:20:08+00:00">February 12, 2026 – 3:20 PM</time><h2 id="potential-xbox-announcements">Potential Xbox announcements</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="t5tafvrJgwzkG5s7YFb8kT" name="Halo Campaign Evolved" alt="Halo: Campaign Evolved" src="https://cdn.mos.cms.futurecdn.net/t5tafvrJgwzkG5s7YFb8kT-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Microsoft)</span></figcaption></figure><p>With Xbox games now arriving on PS5, it's not unreasonable to wonder which Microsoft-developed games might have a showing during State of Play.</p><p>As we posted before, rumors are circulating that Starfield might finally get a PS5 release date. That could happen, but I think it's a safe bet that we might get something (even if it's in a sizzle reel) for Halo: Campaign Evolved, as that has been confirmed for PS5. Gears of War: E-Day or even Forza Horizon 6 could also get a showing.</p><p>With the console war effectively over, it would be smart for Xbox to fully embrace advertising its games on rival showcases like State of Play. We'll see if the company decides to show anything today.</p></div><div class="live-content"><time datetime="2026-02-12T20:40:14+00:00">February 12, 2026 – 3:40 PM</time><h2 id="a-heretical-appearance">A Heretical appearance?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="udfPYBrYKhnyGNKiK3jivG" name="Intergalactic - The Heretic Prophecy" alt="Intergalactic: The Heretic Prophecy" src="https://cdn.mos.cms.futurecdn.net/udfPYBrYKhnyGNKiK3jivG-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>I just looked it up, and I can't believe it's been over a year since we saw our first glimpse of Intergalactic: The Heretic Prophecy. While some say the game will release at the end of 2026, I'm with Jason Schreier, who says Naughty Dog's upcoming space-based title is actually coming out in 2027.</p><p>Given that, it's unclear if the game will show up during State of Play. If it does, I'm sure it'll break the internet... in both good and bad ways. I wasn't exactly enamored with The Last of Us Part II, so I can't say I'm hyped for Intergalactic, as the trailer left me feeling ambivalent. But I haven't completely discounted it, so hopefully I'll see something to spark my interest.</p></div><div class="live-content"><time datetime="2026-02-12T21:00:13+00:00">February 12, 2026 – 4:00 PM</time><h2 id="are-you-excited-for-marathon">Are you excited for Marathon?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Df7TS5tqVo8uZm4VDZi9Cg" name="marathon-ps5-game-2026" alt="Screen from Marathon on PS5" src="https://cdn.mos.cms.futurecdn.net/Df7TS5tqVo8uZm4VDZi9Cg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / Bungie)</span></figcaption></figure><p>Scott, stepping in for Tony. </p><p>I'm curious, I am a Destiny apologist, even the current messy model that is Destiny 2. It's one of the best feeling shooters available even if the surrounding story has gotten insane. Though perhaps we've just gotten back to the "that wizard came from the moon" era.</p><p>Anyway, I am willing to give Bungie a try despite the mess. And I am excited for Marathon. </p><p>What about you?</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OK6ZmW"></div>                            </div>                            <script src="https://kwizly.com/embed/OK6ZmW.js" async></script></div><div class="live-content"><time datetime="2026-02-12T21:20:28+00:00">February 12, 2026 – 4:20 PM</time><h2 id="40-minute-countdown">40 minute countdown</h2><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2020845405362163855"><p lang="en" dir="ltr">A new State of Play airs February 12.Tune in for 60+ minutes of news, gameplay updates, and announcements from game studios across the globe: https://t.co/wz6dklBvoa pic.twitter.com/VRStSNZ6RM<a href="https://twitter.com/cantworkitout/status/2020845405362163855">February 9, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Hey, hey, look at that. We're 30 minutes away from the State of Play starting. </p><p>As a reminder, it starts at 2 pm PT, 5 pm ET, and 11 pm CET. </p><p>You can watch on <a href="https://www.twitch.tv/playstation" target="_blank">Twitch</a> and <a href="https://www.youtube.com/user/PlayStation" target="_blank">YouTube</a>.</p></div><div class="live-content"><time datetime="2026-02-12T21:40:22+00:00">February 12, 2026 – 4:40 PM</time><h2 id="miracles-can-happen-but-probably-not">Miracles can happen (but probably not)</h2><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="2aK3fuwuTsytM4utGN22Uj" name="21416815651_d3d0e62fc3_o.png" alt="A fight scene in Bloodborne" src="https://cdn.mos.cms.futurecdn.net/2aK3fuwuTsytM4utGN22Uj-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: PlayStation)</span></figcaption></figure><p>There's a running joke that Sony will continually disappoint fans by not announcing Bloodborne 2. </p><p>With that in mind, here are some other sequel games that won't get announced that I'm actually interested in potentially seeing:</p><ul><li>The Order sequel</li><li>Resist4nce</li><li>Sly Cooper 5</li><li>J4k & D4xter</li><li>Kingdom Hearts 4</li><li>Killzone 4</li><li>A true Final Fantasy Tactics 2</li></ul><p>It's a surprising number of fourquels, but that's how the cookie crumbles sometimes.</p></div><div class="live-content"><time datetime="2026-02-12T21:45:41+00:00">February 12, 2026 – 4:45 PM</time><h2 id="just-15-minutes-until-state-of-play-is-live">Just 15 minutes until State of Play is live! </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/P0e5YEXtZu0" allowfullscreen></iframe></div></div><p>Hey, it's Rory here. I'm back from break and ready to guide you through the State of Play February 2026 from start to finish. The official countdown has begun, and the YouTube chat is already moving faster than I can read it. There's only 15 minutes until the biggest State of Play broadcast ever is live, so get ready, it's almost time!  </p></div><div class="live-content"><time datetime="2026-02-12T21:50:35+00:00">February 12, 2026 – 4:50 PM</time><h2 id="one-final-wish-from-me-before-the-show-begins">One final wish from me before the show begins!</h2><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="BD5pSALUFi5xo6UFS4MhMg" name="🔴 THE GAME AWARDS 2025_ Official 4K60FPS Livestream (Today - 7_30p ET _ 4_30p PT _ 12_30a GMT) 2-15-59 screenshot" alt="THE GAME AWARDS 2025" src="https://cdn.mos.cms.futurecdn.net/BD5pSALUFi5xo6UFS4MhMg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>State of Play is just 10 minutes away, so I'm making my final prediction, or maybe my final wish, I'd love to see more from Control: Resonant. This first control was one of my favorite games of 2019, and rare title I've earned the Platinum trophy in twice (on both PS4 and PS5). So here's hoping that Remedy have our next look at the game primed for today, and if we're super lucky we could even get a release date!</p></div><div class="live-content"><time datetime="2026-02-12T21:57:02+00:00">February 12, 2026 – 4:57 PM</time><h2 id="this-is-your-5-minute-warning">This is your 5 minute warning! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="y5T6EzpDkzjkm8NbGVewWW" name="PS5 Pro-9" alt="The PlayStation logo on a PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If you're not already sitting comfortable, with your stream (or this live blog) ready, now is the time to get in position. State of Play February 206 begins in less than five minutes. And I'm predicting that Saros or Marathon will kick off the showcase!</p></div><div class="live-content"><time datetime="2026-02-12T22:01:14+00:00">February 12, 2026 – 5:01 PM</time><h2 id="state-of-play-feb-2026-is-live">State of Play Feb. 2026 is LIVE!</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/P0e5YEXtZu0" allowfullscreen></iframe></div></div><p>The waiting is over, and the speculating is done. State of Play February 2026 starts now. Stand by for live updates, even if you can't watch along at home (or at work!), I'll have all the announcements for you in this live blog... </p></div><div class="live-content"><time datetime="2026-02-12T22:03:05+00:00">February 12, 2026 – 5:03 PM</time><h2 id="kena-bridge-of-spirits-sequel-opens-the-show">Kena: Bridge of Spirits sequel opens the show!</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/12EQpTwn4lY" allowfullscreen></iframe></div></div><p>Here's an opener I didn't have on my bingo card, a sequel to 2021's charming action-platform, Kena: Bridge of Spirits! </p></div><div class="live-content"><time datetime="2026-02-12T22:05:29+00:00">February 12, 2026 – 5:05 PM</time><h2 id="kena-scars-of-kosmora-is-coming-2026">Kena: Scars of Kosmora is coming 2026</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:854px;"><p class="vanilla-image-block" style="padding-top:56.21%;"><img id="ssVv4EPEeDbtNVSycrw9ye" name="State of Play _ February 12, 2026 [English] 32-14 screenshot" alt="State of Play Feb 2026 Kena: Scars of Kosmora" src="https://cdn.mos.cms.futurecdn.net/ssVv4EPEeDbtNVSycrw9ye-1920-80.png" mos="" align="middle" fullscreen="" width="854" height="480" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>The sequel is called Kena: Scars of Kosmora, and it'll be launching on PS5 and PC in 2026. It stars an older, more experienced, Kena and is set in a new land, the titular Kosmora. It looks once again to combine a charming art style with surprisingly demanding combat. Consider me sold!  </p></div><div class="live-content"><time datetime="2026-02-12T22:06:48+00:00">February 12, 2026 – 5:06 PM</time><h2 id="ghost-of-yotei-legends">Ghost of Yotei Legends? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:854px;"><p class="vanilla-image-block" style="padding-top:56.21%;"><img id="NLsXLFgTCbb5qQ7d2Ye4J8" name="State of Play _ February 12, 2026 [English] 34-21 screenshot" alt="State of Play Feb 2026 Ghost of yotei mp" src="https://cdn.mos.cms.futurecdn.net/NLsXLFgTCbb5qQ7d2Ye4J8-1920-80.png" mos="" align="middle" fullscreen="" width="854" height="480" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: SOny)</span></figcaption></figure><p>Next up, it's an announcement from Sucker Punch. Will this be the Ghost of Yotei Legends multiplayer mode? </p></div><div class="live-content"><time datetime="2026-02-12T22:08:02+00:00">February 12, 2026 – 5:08 PM</time><h2 id="yup-ghost-of-yotei-legends-launches-on-march-10">Yup, Ghost of Yotei Legends launches on March 10!</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/5VYyhow-EU8" allowfullscreen></iframe></div></div><p>Fans of co-op samurai action rejoice, Ghost of Yotei is getting a Legends mode update next month. </p></div><div class="live-content"><time datetime="2026-02-12T22:09:22+00:00">February 12, 2026 – 5:09 PM</time><h2 id="death-stranding-2-on-the-beach-comes-to-pc-on-march-19">Death Stranding 2: On the Beach comes to PC on March 19</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/4b6hcN5vZsw" allowfullscreen></iframe></div></div><p>Fantastic sequel Death Stranding 2: On the Beach won't be PS5-locked for much longer as it's making it's way over to PC on March 19. This was a contender for GOTY at The Game Awards, and will no doubt look truly incredible on a beefy gaming PC.</p></div><div class="live-content"><time datetime="2026-02-12T22:10:41+00:00">February 12, 2026 – 5:10 PM</time><h2 id="4-loop-gameplay-is-up-next">4:Loop gameplay is up next!</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/hoXXNPgqYkw" allowfullscreen></iframe></div></div><p>Next, it's time for an update on sci-fi co-op game 4:Loop. I'm still not totally sure what the hook of this title is, but it appears to have a bit of ARC Raiders about it, so maybe it'll also suck up a whole bunch of my free time when it launches on PS5.</p></div><div class="live-content"><time datetime="2026-02-12T22:12:22+00:00">February 12, 2026 – 5:12 PM</time><h2 id="4-loop-wants-your-help">4:Loop wants your help!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:854px;"><p class="vanilla-image-block" style="padding-top:56.21%;"><img id="6wzGSqySDKWaeS8jMFJrcX" name="State of Play _ February 12, 2026 [English] 38-16 screenshot" alt="State of Play Feb 2026 Four loop" src="https://cdn.mos.cms.futurecdn.net/6wzGSqySDKWaeS8jMFJrcX-1920-80.png" mos="" align="middle" fullscreen="" width="854" height="480" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>4:Loop will have upcoming play tests as the developers "want your help" to craft the game, but no details have been given yet about when these will be. Without even a vague release date, I think we can assume 4:Loop still has a way to go until launch.</p></div><div class="live-content"><time datetime="2026-02-12T22:13:51+00:00">February 12, 2026 – 5:13 PM</time><h2 id="pragmata-looks-better-ever-time-i-see-it-and-get-s-a-demo">Pragmata looks better ever time I see it (and get's a demo)! </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/6lbf5ZPUtx0" allowfullscreen></iframe></div></div><p>A quick trailer for Capcom's Pragmata next. Every time I see this game, my interest levels increase. It's out on April 24, but even better, there's a playable demo which is available to download from the PlayStation Store right now! </p></div><div class="live-content"><time datetime="2026-02-12T22:15:12+00:00">February 12, 2026 – 5:15 PM</time><h2 id="resident-evil-time">Resident Evil time!</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/u2jrHzua0jA" allowfullscreen></iframe></div></div><p>Well, I called this one earlier, but it's Capcom's turn in the spotlight as Resident Evil Requiem takes the State of Play (virtual) stage. It's out February 27, and I really don't need to see more of this game. I'm completely sold, so I'm looking away till it's over!</p></div><div class="live-content"><time datetime="2026-02-12T22:19:33+00:00">February 12, 2026 – 5:19 PM</time><h2 id="legacy-of-kain-defiance-remastered-and-brigandine-abyss">Legacy of Kain Defiance Remastered and Brigandine Abyss!</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/Jocj5kRYcFE" allowfullscreen></iframe></div></div><p>Legacy of Kain: Defiance launched in 2003, and the final game in the series is getting a remastered edition. It'll be out next month, and includes a bunch of upgrades. And we also got a look at strategy game Brigandine Abyss, out in 2026.</p></div><div class="live-content"><time datetime="2026-02-12T22:21:35+00:00">February 12, 2026 – 5:21 PM</time><h2 id="dead-or-alive-6-last-round-and-a-new-installment-in-the-series">Dead or Alive 6: Last Round and a NEW installment in the series!</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/5z0L0ba4r8k" allowfullscreen></iframe></div></div><p>Dead or Alive 6 is getting brought to PS5 in a Last Round package, and we also got confirmation that Dead or Alive 30th Anniversary is in development as well. Lots for fans of the fighting game franchise to look for to! </p></div><div class="live-content"><time datetime="2026-02-12T22:23:00+00:00">February 12, 2026 – 5:23 PM</time><h2 id="control-resonant-gameplay-premieres-at-state-of-play">Control Resonant gameplay premieres at State of Play! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2hznXMYqmLi5V2WpWSmc48" name="State of Play _ February 12, 2026 [English] 48-42 screenshot" alt="Control Resonant" src="https://cdn.mos.cms.futurecdn.net/2hznXMYqmLi5V2WpWSmc48-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>One of my wishes came true, next it's uncut gameplay of Control: Resonant, and it looks pretty darn impressive. There's a lot to take in, including a new Manhattan-set level, new powers and new enemies. It looks a lot more open than the first Control. </p></div><div class="live-content"><time datetime="2026-02-12T22:26:52+00:00">February 12, 2026 – 5:26 PM</time><h2 id="crimson-moon-announced">Crimson Moon announced! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6nUmCZxGPhumiUMWgCGaaa" name="State of Play _ February 12, 2026 [English] 51-50 screenshot" alt="Crimson Moon" src="https://cdn.mos.cms.futurecdn.net/6nUmCZxGPhumiUMWgCGaaa-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Well, it's always nice to see something new at these events, Crimson Moon appears to be a fantasy action game. Looks a little Soulslike, but I got HUGE Darksiders vibes from it, I was thinking it was a new Darksiders game for most of the trailer!</p></div><div class="live-content"><time datetime="2026-02-12T22:28:28+00:00">February 12, 2026 – 5:28 PM</time><h2 id="beast-of-reincarnation-gets-a-new-trailer-and-release-date">Beast of Reincarnation gets a new trailer and release date!</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/zqxdVtJ24ms" allowfullscreen></iframe></div></div><p>Did you think Game Freak could only make Pokemon games? Well take a look at Beast of Reincarnation, which is heading to PS5 on August 4. I've scanned the trailer but I cannot see a Charizard anywhere! </p></div><div class="live-content"><time datetime="2026-02-12T22:29:57+00:00">February 12, 2026 – 5:29 PM</time><h2 id="mina-the-hollower-gets-a-new-look">Mina The Hollower gets a new look!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wNukqkuzDwJocuWNgt2nwC" name="State of Play _ February 12, 2026 [English] 56-9 screenshot" alt="Mina the Hollower" src="https://cdn.mos.cms.futurecdn.net/wNukqkuzDwJocuWNgt2nwC-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Shovel Knight fans, you'll want to check out this new look at Mina The Hollower, the next game from Yacht Club Games. It's out later this year and an exclsuive demo drops on PS5 tomorrow (Feb. 13)</p></div><div class="live-content"><time datetime="2026-02-12T22:31:28+00:00">February 12, 2026 – 5:31 PM</time><h2 id="charming-indie-neva-is-getting-a-prequel">Charming indie Neva is getting a prequel!</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/ik25sbAG94s" allowfullscreen></iframe></div></div><p>I know one colleague who is very happy because charming indie Neva is getting a prequel called... Neva: Prologue. It's out February 19. </p></div><div class="live-content"><time datetime="2026-02-12T22:33:34+00:00">February 12, 2026 – 5:33 PM</time><h2 id="yakoh-shinobi-ops-is-next-up">Yakoh Shinobi Ops is next up!</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/lHMwFxOa-_A" allowfullscreen></iframe></div></div><p>The next announcement is Yakoh Shinobi Ops, which is an isometric stealth-action game based on the gameplay footage. It also includes a very vicious monkey! </p></div><div class="live-content"><time datetime="2026-02-12T22:35:27+00:00">February 12, 2026 – 5:35 PM</time><h2 id="project-windless-casts-you-as-a-chicken">Project Windless casts you as a... chicken?</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/HD0dMr3kAQs" allowfullscreen></iframe></div></div><p>Are you playing as an oversized chicken with a huge sword?! One of the more original games we've seen today, this cinematic action game has you playing as a humanoid chicken in a bloody fantasy world. It's called Project Windless! </p></div><div class="live-content"><time datetime="2026-02-12T22:36:51+00:00">February 12, 2026 – 5:36 PM</time><h2 id="star-wars-alert">Star Wars alert!</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/XDBc-kbL-Ic" allowfullscreen></iframe></div></div><p>We've flown over to a galaxy far, far away for Star Wars: Galactic Racer, a new racing game (duh!) set in the beloved sci-fi universe. It's out in 2026, and looks ridiculously cinematic! </p></div><div class="live-content"><time datetime="2026-02-12T22:38:17+00:00">February 12, 2026 – 5:38 PM</time><h2 id="new-trailer-for-007-first-light">New trailer for 007: First Light!</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/trvIyyFt_MM" allowfullscreen></iframe></div></div><p>Another correct prediction for me (Though this was a bit of a freebie), 007: First Light gets a new trailer. It looks great, and probably the closest to a new Uncharted game we'll be seeing for a while. It's out on May 27, and if you pre-order now you get the Deluxe Edition at no extra cost, which is a new perk for early adopters. </p></div><div class="live-content"><time datetime="2026-02-12T22:39:33+00:00">February 12, 2026 – 5:39 PM</time><h2 id="konami-is-taking-over-the-state-of-play">Konami is taking over the State of Play!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QfaoQZCJfnqCxDWoT6e7iP" name="State of Play _ February 12, 2026 [English] 1-5-34 screenshot" alt="Konami" src="https://cdn.mos.cms.futurecdn.net/QfaoQZCJfnqCxDWoT6e7iP-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Sony's trying something new here, by giving the stage over to Konami, it's like a second showcase within a showcase! </p></div><div class="live-content"><time datetime="2026-02-12T22:41:31+00:00">February 12, 2026 – 5:41 PM</time><h2 id="mgs-master-collection-vol-2-is-real">MGS Master Collection Vol. 2 is real!</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/a3AujdsJvjI" allowfullscreen></iframe></div></div><p>Good news for MGS fans (I can hear TG's Tony Polanco screaming from here), Metal Gear Solid Master Collection Vol. 2 is here, and will include MGS 4 and MGS Peace Walker. It's out on August 27. This is great news in general, as MGS 4 was previously locked to the PS3, but from the summer, it'll be playable on modern hardware. </p><p>The MGS Master Collection Vol. 1 is also getting a free update with a new sharper resolution setting. It's rolling out today, and MGS 3 Delta: Snake Eater is on sale!</p></div><div class="live-content"><time datetime="2026-02-12T22:45:26+00:00">February 12, 2026 – 5:45 PM</time><h2 id="mgs-x-darwin-s-paradox">MGS x Darwin's Paradox! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EQokgbZNc6ftBjfF63afuF" name="State of Play _ February 12, 2026 [English] 1-11-20 screenshot" alt="Darwin's Playbook" src="https://cdn.mos.cms.futurecdn.net/EQokgbZNc6ftBjfF63afuF-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>The upcoming octopus game, Darwin's Paradox, is getting a crossover with Metal Gear Solid. That's not something I ever expected to type, but I'm here for it, and the comical-looking game is getting a demo that's out before its full launch on April 2. </p></div><div class="live-content"><time datetime="2026-02-12T22:47:40+00:00">February 12, 2026 – 5:47 PM</time><h2 id="castlevania-lives">Castlevania lives! </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/X3-SJLWzjmE" allowfullscreen></iframe></div></div><p>It's a good day for Castlevania fans, as the series is back after 15 years in the shadows. It's a new side-scrolling adventure, called Castlevania: Belmont's Curse. It's out in 2026. You play Trevor Belmont, and it looks like a modern spin on the series.</p></div><div class="live-content"><time datetime="2026-02-12T22:49:39+00:00">February 12, 2026 – 5:49 PM</time><h2 id="i-think-i-hear-silent-hill-music">I think I hear Silent Hill music!</h2><p>Silent Hill is enjoying a franchise revival after the fantastic Silent Hill 2 Remake and Silent Hill f, and I'm pretty sure this our first look at what's next for the horror series...</p></div><div class="live-content"><time datetime="2026-02-12T22:51:07+00:00">February 12, 2026 – 5:51 PM</time><h2 id="silent-hill-townfall-is-coming-2026">Silent Hill Townfall is coming 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/CvN3dP92wxU" allowfullscreen></iframe></div></div><p>The previously announced Silent Hill Townfall gets a new look with some quick shots of gameplay. There's a fullSilent Hill Transmission following this State of Play where we're going to hear more about the game, so be sure to stick around for that! </p></div><div class="live-content"><time datetime="2026-02-12T22:53:22+00:00">February 12, 2026 – 5:53 PM</time><h2 id="konami-s-next-and-final-game-is-rev-noir">Konami's next (and final) game is Rev.Noir!</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/SGRT0_YrOZs" allowfullscreen></iframe></div></div><p>One for the anime as we get a trailer for Rev.Noir, which is in development for PS5, and is described as a new JRPG title. It looks a bit generic for my tastes, but I'm sure genre fans are going to be very intrigued about this one.</p></div><div class="live-content"><time datetime="2026-02-12T22:55:00+00:00">February 12, 2026 – 5:55 PM</time><h2 id="john-wick-the-video-game-right">John Wick: The Video Game, right? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SqXZSku7P6NmXmSzYBonNY" name="State of Play _ February 12, 2026 [English] 1-21-3 screenshot" alt="John Wick" src="https://cdn.mos.cms.futurecdn.net/SqXZSku7P6NmXmSzYBonNY-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I'm pretty sure this next trailer is for a John Wick game....</p></div><div class="live-content"><time datetime="2026-02-12T22:56:56+00:00">February 12, 2026 – 5:56 PM</time><h2 id="yup-john-wick-from-saber-is-confirmed">Yup, John Wick from Saber is confirmed!</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/OhHvHrDBru8" allowfullscreen></iframe></div></div><p>Guess we'll soon be living out our John Wick fantasies as the Baba Yaga himself, as Saber is making a John Wick game. The trailer was very slick, but we only got a very brief look at what appears to be gameplay, and no date, so don't expect to be playing anytime soon! </p></div><div class="live-content"><time datetime="2026-02-12T22:58:22+00:00">February 12, 2026 – 5:58 PM</time><h2 id="finally-marathon-time">Finally Marathon time!</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/lygqlbSi9TE" allowfullscreen></iframe></div></div><p>This one was confirmed prior to the show, so it's no sunrise to see a new trailer for Bungie's Marathon. It's out on March 5, and there will be a preview weekend Feb. 26 to March 2, so you can give the sci-fi extraction shooter a shot before launch. Bungie are calling it the "Server Slam," which is a fantastic name for a beta!</p></div><div class="live-content"><time datetime="2026-02-12T23:00:54+00:00">February 12, 2026 – 6:00 PM</time><h2 id="the-leaks-were-true-spider-man-2-comes-to-ps">The leaks were true, Spider-Man 2 comes to PS+</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DRnXCh84ut7xc3pJQgudq4" name="Marvel's Spider-Man 2.jpg" alt="Marvel's Spider-Man 2" src="https://cdn.mos.cms.futurecdn.net/DRnXCh84ut7xc3pJQgudq4-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>If you somehow haven't played Marvel's Spider-Man 2 on PS5 yet, soon you'll have no excuse as the game is heading over to PS+ (at the Extra/Premium tier) later this month. New games are being added to the Classic Library as well, Time Crisis and Tekken Dark Resurrection. </p></div><div class="live-content"><time datetime="2026-02-12T23:02:01+00:00">February 12, 2026 – 6:02 PM</time><h2 id="saros-gets-the-spotlight">Saros gets the spotlight</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ENXufMEGDGpyGzjrZKtmFE" name="State of Play _ February 12, 2025 [English] 53-23 screenshot" alt="Saros" src="https://cdn.mos.cms.futurecdn.net/ENXufMEGDGpyGzjrZKtmFE-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Saros, the spiritual follow-up to Returnal, is up next. This is another game I was extremely confident would feature at State of Play, the only surprise is that it's taken this long to appear. </p></div><div class="live-content"><time datetime="2026-02-12T23:05:00+00:00">February 12, 2026 – 6:05 PM</time><h2 id="the-show-s-not-over-yet">The show's not over yet...</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JL98xjoMxh3mjUnftsEwtF" name="Marvel Tokon lede" alt="Marvel Tokon: Fighting Souls" src="https://cdn.mos.cms.futurecdn.net/JL98xjoMxh3mjUnftsEwtF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Saros' gameplay presentation is over, and we've ticked over the hour mark, but we're not done yet, the next trailer is for Marvel Tokon! </p></div><div class="live-content"><time datetime="2026-02-12T23:07:17+00:00">February 12, 2026 – 6:07 PM</time><h2 id="marvel-tokon-looks-excellent-again-and-is-out-august-6">Marvel Tokon looks excellent (again), and is out August 6!</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/X4C_0Yf43fM" allowfullscreen></iframe></div></div><p>We got a release date for Marvel Tokon at the end of that very polished trailer; it's out on August 6. I'm already going to be a Spider-Man main, but we've also got confirmation that X-Men will be included. The game revolves around building a four-character team, so there will be a spot for Wolverine in my roster!</p></div><div class="live-content"><time datetime="2026-02-12T23:08:11+00:00">February 12, 2026 – 6:08 PM</time><h2 id="i-think-this-is-the-last-reveal">I think this is the last reveal!</h2><p>Santa Monica Studios logo pops up, and God of War music starts playing, this is probably the big closing game!</p></div><div class="live-content"><time datetime="2026-02-12T23:09:58+00:00">February 12, 2026 – 6:09 PM</time><h2 id="god-of-war-trilogy-remake-is-confirmed">God of War Trilogy Remake is confirmed!</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/G_tq12WisX8" allowfullscreen></iframe></div></div><p>It looks like the requests for the original God of War games to return have been heard. God of War Trilogy Remake has just been announced at State of Play! </p><p>It's still "in the early stages," so don't expect any further updates on this project for a while, but still, it's sure to have PlayStation fans very hyped in months to come!</p></div><div class="live-content"><time datetime="2026-02-12T23:12:27+00:00">February 12, 2026 – 6:12 PM</time><h2 id="but-there-s-more-god-of-war-2d-revealed">But there's more... God of War 2D revealed! </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/eFhOo6NTt70" allowfullscreen></iframe></div></div><p>The rumors about a 2D God of War game were accurate; you play Kratos before he was a God, when he was a Spartan warrior. It's a very different spin on the franchise! </p><p>It's called God of War: Sons of Sparta, and it's out<strong> TODAY! </strong></p></div><div class="live-content"><time datetime="2026-02-12T23:14:19+00:00">February 12, 2026 – 6:14 PM</time><h2 id="and-that-s-a-wrap-on-state-of-play-february-2026">And that's a wrap on State of Play February 2026</h2><p>After a jam packed 85 minutes of game reveals and new trailers, State of Play February 2026 draws to a close. The one-two punch of a God of War Trilogy Remake and a new 2D game (Sons of Sparta) that you can play today capped the showcase. </p></div><div class="live-content"><time datetime="2026-02-12T23:28:43+00:00">February 12, 2026 – 6:28 PM</time><h2 id="that-was-a-very-solid-but-not-spectacular-state-of-play">That was a very solid (but not spectacular) State of Play! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9TgxHLqSZdRtBa7kriUhTP" name="State of Play _ February 12, 2026 [English] 1-41-13 screenshot" alt="That's a wrap on State of Play Feb 2026" src="https://cdn.mos.cms.futurecdn.net/9TgxHLqSZdRtBa7kriUhTP-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Whelp, the first State of Play for 2026 is in the can, and I was pretty pleased overall. While it lacked major surprises, we got updates on games I'm super excited to play (Saros, Control Resonant and more), and a few new reveals caught my eye, too. It wasn't quite the State of Play of dreams some predicted but it was a solid event.</p></div><div class="live-content"><time datetime="2026-02-12T23:44:22+00:00">February 12, 2026 – 6:44 PM</time><h2 id="so-what-games-intrigued-you">So, what games intrigued you?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eAREqW"></div>                            </div>                            <script src="https://kwizly.com/embed/eAREqW.js" async></script><p>That was supersized State of Play with a surprising number of games. </p><p>So, what games caught your eye.</p><p>Me? The Chicken man of Project Windless looked interesting and I'm a sucker for God of War.</p><p>I'm also curious about Yakoh and if it will scratch the Tenchu itch, but the isometric view isn't quite what Tenchu was, still. </p></div><div class="live-content"><time datetime="2026-02-13T00:20:58+00:00">February 12, 2026 – 7:20 PM</time><h2 id="read-a-book">Read a book?</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/HD0dMr3kAQs" allowfullscreen></iframe></div></div><p>Project Windless is one of the games that I'm most intrigued by. As the trailer notes it's based on a Korean fantasy series called The Bird That Drinks Tears. </p><p>From what I can tell the book is finally being <a href="https://www.amazon.com/Heart-Nhaga-Novel-Drinks-Tears/dp/0063349892/ref=tmm_hrd_swatch_0" target="_blank">translated into English and will come out this June</a>.</p><p>I plan on checking out the book when it finally releases.</p><p>What about you? Did you find this interesting?</p></div><div class="live-content"><time datetime="2026-02-13T00:33:46+00:00">February 12, 2026 – 7:33 PM</time><h2 id="that-s-a-wrap">That's a wrap</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9TgxHLqSZdRtBa7kriUhTP" name="State of Play _ February 12, 2026 [English] 1-41-13 screenshot" alt="That's a wrap on State of Play Feb 2026" src="https://cdn.mos.cms.futurecdn.net/9TgxHLqSZdRtBa7kriUhTP-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>As these games finally come out, Tom's Guide will have reviews and hands-ons on a good chunk of these titles as we can. </p><p>What's next, we're hoping for more hardware announcements from PlayStation including the rumored OLED Portal and news about PSSR advancements.</p></div> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/news/live/ps5-state-of-play-february-2026-live-updates</link>
                                                                            <description>
                            <![CDATA[ State of Play for February 2026 was packed with exciting new PS5 announcements, reveals and trailers. Here's a full recap of the show. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">8cZwheQjMFivW66QLurVdK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/zLn7zbmxckzSDWPobTx7ud-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 12 Feb 2026 13:12:47 +0000</pubDate>                                                                                                                                <updated>Fri, 13 Feb 2026 13:46:16 +0000</updated>
                                                                                                                                            <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></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-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/zLn7zbmxckzSDWPobTx7ud-1920-80.jpg">
                                                            <media:credit><![CDATA[Sony]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[State of Play Feb 2026 - Marathon/Saros]]></media:description>                                                            <media:text><![CDATA[State of Play Feb 2026 - Marathon/Saros]]></media:text>
                                <media:title type="plain"><![CDATA[State of Play Feb 2026 - Marathon/Saros]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/zLn7zbmxckzSDWPobTx7ud-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="live-content"><p>State of Play February 2026 is over, and after a packed 85 minutes of gaming goodness, there's <em>so much </em>to talk about. From the reveal of the God of War Trilogy Remake to the MGS Master Collection Vol. 2 and more.</p><p>Sony promised it would deliver a lengthy showcase of PS5 games arriving on the console in 2026, and beyond, and it certainly delivered. There was at least one announcement for every type of player. And I'm pretty sure the "Chicken Man" from Project Windless is about to take over the internet.</p><p>Don't worry if you missed Today's State of Play, you can watch it back below, and we've got a full roundup of all the PS5 announcements in this live blog.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7606156214195571998" data-video-id="7606156214195571998" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7606156198488476446">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <h2 id="how-to-re-watch-state-of-play-for-february-2026">How to (re)watch State of Play for February 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/P0e5YEXtZu0" allowfullscreen></iframe></div></div><p>If you missed State of Play February 2026, or just want to rewatch the showcase, you can watch it back via the VOD link above. Of course, if you don't have a spare 85 minutes, you can read on to see all the new trailers.</p></div><div class="live-content"><time datetime="2026-02-12T12:50:19+00:00">February 12, 2026 – 7:50 AM</time><h2 id="welcome-5">Welcome!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="A92fAFp8GUDRCcdSBJbUKd" name="PS5 Pro.jpg" alt="PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/A92fAFp8GUDRCcdSBJbUKd-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Hello, welcome to Tom's Guide's live coverage of the PS5 State of Play for February 2026. I'm Rory, a Senior Entertainment Editor, and I'll be guiding you through today's PlayStation showcase (with some help from a few colleagues). The event doesn't start for a few hours, but there's still plenty to cover, so let's get talking PlayStation...</p></div><div class="live-content"><time datetime="2026-02-12T13:16:27+00:00">February 12, 2026 – 8:16 AM</time><h2 id="today-s-state-of-play-is-going-to-be-a-big-one">Today's State of Play is going to be a BIG one</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:920px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="YjQgFQT9J6kopyr5nu4evh" name="Playstation store.jpg" alt="PlayStation Store Holiday Sale" src="https://cdn.mos.cms.futurecdn.net/YjQgFQT9J6kopyr5nu4evh-1920-80.jpg" mos="" align="middle" fullscreen="" width="920" height="518" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>One of the key details about today's State of Play is that it will run for "60+ minutes" per the <a href="https://blog.playstation.com/2026/02/09/state-of-play-returns-this-thursday-february-12/" target="_blank">PlayStation Blog</a>. That would be welcome news in any context, but it's even more of a big deal here because that will make it the longest State of Play broadcast to date. It's clear that Sony has a lot it wants to share with players!</p></div><div class="live-content"><time datetime="2026-02-12T13:22:15+00:00">February 12, 2026 – 8:22 AM</time><h2 id="there-s-one-huge-reason-i-m-feeling-the-hype">There's one huge reason I'm feeling 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:2048px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NPBExEtUSpawN8ZNGGdWUi" name="ps_studios.jpg" alt="playstation studios" src="https://cdn.mos.cms.futurecdn.net/NPBExEtUSpawN8ZNGGdWUi-1920-80.jpg" mos="" align="middle" fullscreen="" width="2048" height="1152" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I'm always excited for any State of Play, but there's a particular reason that today's broadcast has got me really hyped: PlayStation Studios will have a presence. </p><p>If you're out of the loop, PlayStation Studios is the umbrella group used to mark Sony-owned developers like Naughty Dog, Sucker Punch, Insomniac, Housemarque and more. Often PlayStation Studios teams don't feature during State of Play, but this time, at least some of the developers will be showcased. </p><p>To set expectations, Sony isn't promising <em>every </em>PlayStation Studios team will be present, but hopefully we hear more from the likes of Naughty Dog and Bluepoint Games who have been quiet on their current projects for quite a while now.</p></div><div class="live-content"><time datetime="2026-02-12T13:33:26+00:00">February 12, 2026 – 8:33 AM</time><h2 id="marathon-is-the-first-game-confirmed-for-state-of-play">Marathon is the first game confirmed for State of Play</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Df7TS5tqVo8uZm4VDZi9Cg" name="marathon-ps5-game-2026" alt="Screen from Marathon on PS5" src="https://cdn.mos.cms.futurecdn.net/Df7TS5tqVo8uZm4VDZi9Cg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / Bungie)</span></figcaption></figure><p>It's by no means a surprise, but Marathon is one game we know we be featured during State of Play. </p><p>Sony-owned developer Bungie confirmed the sci-fi shooter would be included in the broadcast via a post on the game's official discord server, noting that "we're excited to share we'll be part of the PlayStation State of Play."</p><p>Marathon is a big bet for developer Bungie, who need a win after the most recent Destiny 2 expansions haven't quite met player demand. The game is set to launch on March 5, so it always seems likely that Sony would use this State of Play to give it another big push ahead of the release date in just a few weeks. </p><p>This first-person extraction shooter looks like it might be landing at just the right time following the uber-success of ARC Raiders, there's plenty of demand for more games in the genre, and Marathon looks different enough to carve out its own spot. </p></div><div class="live-content"><time datetime="2026-02-12T13:45:27+00:00">February 12, 2026 – 8:45 AM</time><h2 id="here-s-another-ps5-game-we-can-confidently-predict-will-feature">Here's another PS5 game we can confidently predict will feature</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RwmuWfPnXm7yb6nmJNNUZA" name="State of Play _ February 12, 2025 [English] 53-34 screenshot" alt="Saros" src="https://cdn.mos.cms.futurecdn.net/RwmuWfPnXm7yb6nmJNNUZA-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>There were always two PlayStation Studios games that I felt highly confident would appear at State of Play. One was Marathon, which is now confirmed, the other is Saros from developer Housemarque. </p><p>Saros was announced at last year's February showcase, and is currently slated for release on April 30. It's a spiritual successor to 2021's GOTY-worthy Returnal. Based on the brief gameplay snippets we've seen, it's going to offer the same blockbuster bullet-hell gameplay in an intriguing, and sinister, sci-fi world. It also appears that the story might be a little less mysterious this time, which some players will prefer.</p><p>As noted, it's due to launch in the spring, so it seems very likely Saros will get a new trailer in this State of Play as Sony looks to ramp up the marketing ahead of April.</p></div><div class="live-content"><time datetime="2026-02-12T13:55:46+00:00">February 12, 2026 – 8:55 AM</time><h2 id="insomniac-s-wolverine-might-not-show-it-s-claws-today">Insomniac's Wolverine might not show it's claws today</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="brkRET2rLiiqB38ggQjQsW" name="wolverine-2025-state-of-play-ps5-game" alt="Marvel's Wolverine image showing Logan" src="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>With Marathon, Saros and Marvel's Wolverine making up the tentpole trio of PlayStation Studios games confirmed for 2026 (as of writing, at least), it stands to reason that all three will feature in today's State of Play. But there's reason to think that Logan might give this showcase a miss and keep his claws hidden away. </p><p>In response to a question on X, asking when gamers would get to learn more about Wolverine, Insomniac Games' official account offered up the vague, "Spring 2026" in reply. At least in my calendar, February isn't quite spring, so don't bet on Wolverine being included in this PlayStation event.</p><p>Of course, this could be intentional misdirection from the folks at Insomniac, but we'll just have to wait until the State of Play February later today to find out.   </p></div><div class="live-content"><time datetime="2026-02-12T14:05:39+00:00">February 12, 2026 – 9:05 AM</time><h2 id="just-joining-us-here-s-the-key-state-of-play-details">Just joining us? Here's the key State of Play details</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="G6iHnUaHZfLvU9ubZcuPHP" name="TG_shutterstock_PS5-controller_LIST.jpg" alt="Playstation 5 controller" src="https://cdn.mos.cms.futurecdn.net/G6iHnUaHZfLvU9ubZcuPHP-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>It's the start of the working day in the U.S. (on the east coast, at least), so if you're just joining me, the key details you need to know are that today (Feb. 12) will see the first PS5 State of Play in 2026, it'll begin at <strong>12 pm PT / 5 pm ET / 10 pm GMT.</strong></p><p>The live broadcast is set to last for at last an hour (Sony is saying "60+ minutes"), and will include games from PlayStation Studios. Today could be a very big day in the world of PlayStation, and I'm bringing you all the details in this live blog!</p></div><div class="live-content"><time datetime="2026-02-12T14:18:30+00:00">February 12, 2026 – 9:18 AM</time><h2 id="gimme-more-from-marvel-tokon">Gimme more from Marvel Tokon!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GuvJmhTi3uYUhdeh8LA55V" name="Marvel Tokon beta 4" alt="Marvel Tokon: Fighting Souls" src="https://cdn.mos.cms.futurecdn.net/GuvJmhTi3uYUhdeh8LA55V-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>I'm not typically a fighting game player (that's in part because I usually suck at them), but one fighter I'm keeping an eye on is Marvel Tokon: Fighting Souls. </p><p>This fighter from acclaimed developer Arc System Works combines Marvel's stable of superheroes with an anime-style art style, which is immediately striking. It also features my boy, Spider-Man, in the playable roster, which always gets my attention. </p><p>It set to launch sometime in 2026, and so seems a good candidate to feature at State of Play. Maybe we'll get a firm release date in just a matter of hours.</p></div><div class="live-content"><time datetime="2026-02-12T14:38:30+00:00">February 12, 2026 – 9:38 AM</time><h2 id="is-it-finally-time-to-see-more-of-intergalactic">Is it finally time to see more of Intergalactic? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gGHYy9kM2a4pZMfY2DzSSQ" name="intergalactic-the-heretic-prophet-screenshot" alt="Intergalactic: The Heretic Prophet screenshot" src="https://cdn.mos.cms.futurecdn.net/gGHYy9kM2a4pZMfY2DzSSQ-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / Naughty Dog)</span></figcaption></figure><p>For the last 12 months, during every PlayStation State of Play, and events like Summer Game Fest and The Game Awards, I've been keeping my fingers crossed that we get a new trailer for Nuaghty Dog's Intergalactic: The Heretic Prophet.</p><p>So far, I've been let down every time, but there's no question about, I'm ready to get hurt again. Intergalactic represents Naughty Dog's first new IP since The Last of Us way back in 2013, and I just cannot wait to learn more about this sci-fi experience. </p><p>The first trailer we got back in December 2024 instantly grabbed me, and Naughty Dog are a developer that has yet to disappoint me (yes, I even rank The Last of Us Part 2 as a masterpiece). I'm not totally convinced we will see Intergalactic today in the State of Play, as it's rumored for a 2027 release, but I'm keep hoping until then.</p></div><div class="live-content"><time datetime="2026-02-12T14:51:37+00:00">February 12, 2026 – 9:51 AM</time><h2 id="is-kratos-about-to-go-2d">Is Kratos about to go 2D? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="AXNNW7PLmYmCxqswRjhu8R" name="God of War Ragnarok - Kratos vs creature.jpg" alt="God of War Ragnarok" src="https://cdn.mos.cms.futurecdn.net/AXNNW7PLmYmCxqswRjhu8R-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>One of the big rumors circulating in the gaming world right now is that PlayStation is quietly working on a God of War spin-off title. That seems a pretty boilerplate rumor on the surface (a popular franchise gets a spin-off title, which is hardly unexpected), but more surprisingly, it's claimed this game will be a 2D side-scroller. </p><p>Remember, <strong>this is a rumor</strong>, but over on the <a href="https://www.reddit.com/r/GamingLeaksAndRumours/comments/1r1vcyo/natethehate_on_rumored_2d_god_of_war_whispers_of/" target="_blank">GamingLeaksAndRumours subreddit</a>, a new post linking back to NateTheHate (a well-known leaker) claims that God of War 2D is in development, and that Sony is considering a multi-platform launch. </p><p>Perhaps today's State of Play 2026 will see God of War 2D revealed to the world, or maybe all the online rumors are false and Kratos is sticking to three dimensions.</p></div><div class="live-content"><time datetime="2026-02-12T15:07:13+00:00">February 12, 2026 – 10:07 AM</time><h2 id="will-ac-black-flag-remake-set-sail-at-state-of-play">Will AC: Black Flag Remake set sail at State of Play?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="czF4dBP5bRVSqBpZAshs4k" name="Assassins-Creed-IV--Black-Flag.jpg" alt="assassin's creed iv: black flag" src="https://cdn.mos.cms.futurecdn.net/czF4dBP5bRVSqBpZAshs4k-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ubisoft)</span></figcaption></figure><p>Another long-standing internet rumor is that Assassin's Creed IV: Black Friday is getting a shiny new remake, bringing back the pirate-themed adventure for a new generation of consoles. Heck, this one might even be more than a rumor, as an Ubisoft social media account made a cheeky reference to its existence in January. </p><p>Further adding to the fire, Amazon UK added a listing for an <a href="https://www.amazon.co.uk/Assassins-Creed-Black-Flag-Remaster/dp/1835417701#detailBullets_feature_div" target="_blank" rel="nofollow">"Assassin's Creed Black Flag Remastered Art Book"</a> this week with a scheduled release date of March 24. This could be a listing error, and/or a placeholder release date. But if Black Flag is coming back in just a matter of weeks, you'd expect it to be showcased soon. </p><p>This State of Play could be the ideal place for Ubisoft to announce that one of the most beloved Assassin's Creed games in the franchise's history is returning.</p></div><div class="live-content"><time datetime="2026-02-12T15:20:09+00:00">February 12, 2026 – 10:20 AM</time><h2 id="time-for-one-last-look-at-resident-evil-requiem">Time for one last look at Resident Evil Requiem? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="CVDdqjsDfPZDjVPY7bnDEe" name="Resident_Evil_Requiem_-_RE_Showcase_Screenshot_19" alt="Resident Evil Requiem: Leon aims his gun at a chainsaw-wielding zombie." src="https://cdn.mos.cms.futurecdn.net/CVDdqjsDfPZDjVPY7bnDEe-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>Resident Evil Requiem is entering the final stages of it's marketing push, with the survival horror game set to launch on February 27. Soon it'll be in our hands, and I can't wait to see the twisted horrors the team over at Capcom have created for us.</p><p>It seems likely that Resident Evil Requiem might feature in one final gaming showcase before release, and that would be State of Play. Personally, I was sold on this game from its first trailer, and I actually don't want to see anymore for fear of having a surprise moment spoiled. So if Resi 9 does pop up, I might look away!  </p></div><div class="live-content"><time datetime="2026-02-12T15:36:19+00:00">February 12, 2026 – 10:36 AM</time><h2 id="more-than-6-hours-to-go-until-state-of-play">More than 6 hours to go until State of Play!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="y5T6EzpDkzjkm8NbGVewWW" name="PS5 Pro-9" alt="The PlayStation logo on a PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>You know, in my head, it felt like we were a little closer, but we've still got more than six hours until State of Play February 2026 goes live. As noted, I'm usually one to advice keeping expectations in check, but I'm really feeling the hype for this one. Here's hoping that PlayStation can deliver a showcase packed with great reveals. </p></div><div class="live-content"><time datetime="2026-02-12T15:50:48+00:00">February 12, 2026 – 10:50 AM</time><h2 id="spidey-might-be-swinging-onto-ps-this-month">Spidey might be swinging onto PS+ this month</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="jJMkNusyEQMGTpNJ9UAKwa" name="spider-man-2-screenshot-ps5-08.jpg" alt="Spider-Man 2 screenshot" src="https://cdn.mos.cms.futurecdn.net/jJMkNusyEQMGTpNJ9UAKwa-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Earlier this month, <a href="https://www.dealabs.com/magazine/ps-plus-extra-une-grosse-exclusivite-ps5-debarque-ce-mois-de-fevrier-61029" target="_blank">Deadlabs,</a> a site with a strong record of leaking PlayStation Plus games, reported that February's headline for Extra/Premium members would be Marvel's Spider-Man 2. It'll be added to the PS+ Game Collection alongside Test Drive Unlimited Solar Crown and Neva. </p><p>This would be a big deal, Spider-Man 2 is one of the PS5's most high-profile console exclusives, and I'm sure any PS+ subscriber who hasn't played it yet would be delighted. Assuming this report from Deadlabs is accurate (and as noted, the track record is strong), I expect the Spidey sequel heading to PS+ will be confirmed during the State of Play event.</p></div><div class="live-content"><time datetime="2026-02-12T16:06:04+00:00">February 12, 2026 – 11:06 AM</time><h2 id="icymi-horizon-hunters-gathering-was-just-announced">ICYMI: Horizon Hunters Gathering was just announced </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YhffejPLEhTLJYVz8sAmMn" name="horizon-hunters-gathering-ps5" alt="Horizon Hunters Gathering screenshot" src="https://cdn.mos.cms.futurecdn.net/YhffejPLEhTLJYVz8sAmMn-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Last week, Guerrilla Games confirmed the next game set in the world of Horizon, it's not the full Horizon 3 many fans wanted, instead it's called Horizon Hunters Gathering and it's a three-player co-op experience with a more cartoony art style. </p><p>The reception online has been a little mixed, but I'm interested to see more, and don't mean the switch in overall aesthetic and tone. Horizon's post-apocalyptic future full of metallic creatures to hunt seems like a great candidate for a co-op game, and the roster of "hero" characters each offers their own set of unique skills. </p><p>While I'm not fully sold on Horizon Hunters Gathering just yet, as we've seen so little of the game so far, but the announcement <a href="https://blog.playstation.com/2026/02/05/announcing-horizon-hunters-gathering-guerrillas-new-co-op-action-game/" target="_blank">PlayStation Blog post</a> promised more details to come in the months ahead, and maybe that'll mean at State of Play. </p></div><div class="live-content"><time datetime="2026-02-12T16:25:51+00:00">February 12, 2026 – 11:25 AM</time><h2 id="the-witcher-3-is-getting-dlc-in-2026-really">The Witcher 3 is getting DLC in 2026? Really?</h2><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="4kreJNsk4ppWNoTG8a9KyJ" name="witcher-3-on-ps5-image (3).JPG" alt="Witcher 3 next-gen update screenshot" src="https://cdn.mos.cms.futurecdn.net/4kreJNsk4ppWNoTG8a9KyJ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: CD Projekt Red)</span></figcaption></figure><p>One of the strangest rumors that just refuses to die, is that The Witcher 3: Wild Hunt is getting a new DLC expansion in 2026. Yes, The Witcher 3, the GOTY-winning RPG released in 2015. I'm certainly not mad if this rumor proves to be accurate, but I would be very surprised. Single-player games don't usually get DLC a decade later. </p><p>The reports suggest the DLC will lead into The Witcher 4, which is currently in development over at Polish studio CD Projekt Red. The game's last major update came in 2022, when it was ported over to PS5/Xbox Series X, and got a small selection of new content that tied into Netflix's "The Witcher" TV show.</p><p>However, that was a single quest, and some new armor options, the rumors here claim this will be a more meaty expansion, in line with it's previous, 2015's Hearts of Stone and 2016's Blood and Wine. Consider me skeptical of this rumor being accurate, but if I'm incorrect, and it's at State of Play, I'd very happy to be wrong.</p></div><div class="live-content"><time datetime="2026-02-12T16:36:31+00:00">February 12, 2026 – 11:36 AM</time><h2 id="007-first-light-might-break-cover-again-at-state-of-play">007: First Light might break cover (again) at State of Play!</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/pwRpK8eoLLE" allowfullscreen></iframe></div></div><p>Last September, PlayStation held an <em>entire </em>State of Play dedicated to 007: First Light. Single-game State of Play's aren't super uncommon, but they're typically reserved for PlayStation Studio titles. The fact that this new 007 adventure from IO Interactive got one all to itself was certainly a great boon for Bond fanatics. </p><p>A few performance hiccups in the gameplay footage aside, I was very impressed with the 30-minute presentation, and I'm eagerly anticipating the game's launch in May 2026. So, all of this is to say, don't be surprised if 007: First Light appears today. </p></div><div class="live-content"><time datetime="2026-02-12T16:58:25+00:00">February 12, 2026 – 11:58 AM</time><h2 id="will-starfield-s-long-rumored-ps5-port-ever-actually-happen">Will Starfield's long rumored PS5 port ever actually happen?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="scmjkwqjDFxJxrT3TXnNwg" name="Starfield Grav Jump.jpg" alt="Starfield gravity jump" src="https://cdn.mos.cms.futurecdn.net/scmjkwqjDFxJxrT3TXnNwg-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Bethesda)</span></figcaption></figure><p>We live in strange times. Xbox games now release on PS5, but one title that remains Xbox console exclusive is Starfield. This sci-fi RPG from Skyrim maker Bethesda launched on Xbox (and PC) in 2023, and more than two years later, PS5 players still haven't been able to explore its intergalactic world for themselves. </p><p>Look, I know Starfield didn't enjoy the <em>best </em>reception from some RPG players, but personally, I mostly enjoyed my time with this one, and if it ever does come to PS5, I would happily give it a second play-through. There have been rumors of a PS5 port circulating pretty much since 2023, but they've heated up further in early 2026. </p><p>Perhaps, today's State of Play is when Bethesda will reveal that Starfield is the latest Xbox title to play nice with PlayStation. However, don't bet on it, leaker Shinobi62 claims (via <a href="https://www.reddit.com/r/GamingLeaksAndRumours/comments/1r0ay09/shinobi602_says_that_more_starfield_news/" target="_blank">Reddit</a>) that news on Starfield's PS5 version won't come till March. </p></div><div class="live-content"><time datetime="2026-02-12T17:21:42+00:00">February 12, 2026 – 12:21 PM</time><h2 id="ps-portal-could-get-a-big-upgrade">PS Portal could get a BIG upgrade</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="F49tf3bTbzrfLHzdrKG6rW" name="PS Portal-1.jpg" alt="Marvel's Spider-Man 2 on PlayStation Portal" src="https://cdn.mos.cms.futurecdn.net/F49tf3bTbzrfLHzdrKG6rW-1920-80.jpg" mos="" align="middle" fullscreen="" width="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>Moving away from PlayStation games, let's talk accessories, specifically the PlayStation Portal remote player. Per <a href="https://x.com/Zuby_Tech/status/2010031067554865444" target="_blank">Zuby Tech</a>, this nifty PS5 handheld could get a major upgrade in the form of a new OLED model. The current PS Portal uses an LCD screen, but fans have wanted one with an OLED display since launch. For now, this is just a rumor, so take it with a large grain of salt, but maybe this State of Play won't just include new game reveals, but also a look at some PS5 accessories!</p></div><div class="live-content"><time datetime="2026-02-12T17:48:01+00:00">February 12, 2026 – 12:48 PM</time><h2 id="let-s-talk-grand-theft-auto-vi">Let's talk Grand Theft Auto VI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hyce8Ftu8N8gj3Dx5Dqg6b" name="gta-6-Jason_Duval_01" alt="Grand Theft Auto VI screenshot" src="https://cdn.mos.cms.futurecdn.net/hyce8Ftu8N8gj3Dx5Dqg6b-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rockstar)</span></figcaption></figure><p>I've been scrolling social media to see what other gamers want to see at State of Play February 2026, and a recurring title is, unsurprisingly, Grand Theft Auto VI. </p><p>Never say never, but I would be <em>stunned</em> if GTA 6 had any sort of presence. For starters, Take-Two's Strauss Zelnick (CEO of Rockstar Games' parent company) recently said in an earnings call that GTA 6 marketing would begin in the summer, and secondly, GTA 6 is such a big deal that it would overshadow everything else. </p><p>So, while I can't 100% rule it out, I would suggest not getting your hopes up that today will be the day that we get to see a little more of GTA 6.</p></div><div class="live-content"><time datetime="2026-02-12T18:05:42+00:00">February 12, 2026 – 1:05 PM</time><h2 id="only-4-hours-left-until-state-of-play-february-2026">Only 4 hours left until State of Play February 2026! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Juzeg3dZVDBEbhgw9Kaqbb" name="TG_PS5_hard-drive_SSD-5.jpg" alt="PS5 Internal Storage replacement photos." src="https://cdn.mos.cms.futurecdn.net/Juzeg3dZVDBEbhgw9Kaqbb-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>We're getting there, slowly we're getting there. State of Play 2026 is just four hours away now. Won't be too much longer before we can see exactly what PlayStation Studios, and some of Sony's third-party partners, have in store for us. Remember, even if you can't watch along live, we'll have all the updates for you in this live blog! </p></div><div class="live-content"><time datetime="2026-02-12T18:20:06+00:00">February 12, 2026 – 1:20 PM</time><h2 id="pssr-update-coming">PSSR update coming?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="FLq8rLXNv9UZJuFXKBT7WH" name="PS5_Pro_PSSR.jpg" alt="PSSR on PS5 Pro in Ratchet & Clank: Rift Apart" src="https://cdn.mos.cms.futurecdn.net/FLq8rLXNv9UZJuFXKBT7WH-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Hey, all! Tony Polanco here, and I'm taking over this blog for the next few hours. Like many of you, I'm excited to see what Sony is cooking for this 60-minute-long State of Play!</p><p>The main thing I'm looking forward to is anything regarding PSSR updates. According to Japanese insider <a href="https://x.com/Gust_FAN/status/2010888697357721845" target="_blank">Gust_FAN</a> (via <a href="https://www.dlcompare.com/gaming-news/ps5-pro-performance-upgrade-with-pssr-2-0-expected-before-the-end-of-march-70263" target="_blank">DL Compare</a>), PSSR will receive a major update soon that will incorporate similar features to FSR 4 on the PS5 Pro. This should improve image quality and overall performance.</p><p>One of the more intriguing aspects of this rumor is that older, lower-resolution games from PlayStation's back catalog will be playable at higher resolutions. We've heard discussions about this in the past, but it might actually happen now.</p><p>"PSSR 2" is very much in the rumor territory right now, but given how this State of Play is an hour long, perhaps Sony will unveil this update and detail what to expect.</p></div><div class="live-content"><time datetime="2026-02-12T18:40:12+00:00">February 12, 2026 – 1:40 PM</time><h2 id="wolverine-might-be-a-no-show">Wolverine might be a no-show</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="brkRET2rLiiqB38ggQjQsW" name="wolverine-2025-state-of-play-ps5-game" alt="Marvel's Wolverine image showing Logan" src="https://cdn.mos.cms.futurecdn.net/brkRET2rLiiqB38ggQjQsW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Insomniac's Wolverine is one of the most anticipated PS5 games. While this State of Play seems like a natural place to show more gameplay, it seems it might be a no-show.</p><p>As <a href="https://www.ign.com/articles/spider-man-developer-suggests-wolverine-will-skip-tomorrows-big-state-of-play" target="_blank">IGN</a> reports, Insomniac Games went on social media and said we'd get more Wolverine info  in "spring 2026." Given how it's currently February, that seems to rule out seeing the game during State of Play.</p><p>While this will surely disappoint many, I agree with IGN in that Sony is likely planning a dedicated PlayStation Showcase for Wolverine. Instead of cramming in some footage during today's State of Play, we could instead get a whole show that goes into more detail. If that's the case, I'm willing to wait longer!</p></div><div class="live-content"><time datetime="2026-02-12T19:00:06+00:00">February 12, 2026 – 2:00 PM</time><h2 id="rumored-ps-portal-oled-could-surface">Rumored PS Portal OLED could surface</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HwADRGb76aT8btrLpT6XPh" name="PlayStation Portal-2.jpg" alt="A PlayStation Portal showing Marvel's Spider-Man 2" src="https://cdn.mos.cms.futurecdn.net/HwADRGb76aT8btrLpT6XPh-1920-80.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One of the other major rumors floating around is that we'll see an updated PlayStation Portal with an OLED display (according to <a href="https://x.com/Zuby_Tech/status/2010031067554865444" target="_blank">Zuby Tech</a>). Considering how successful the current model has been, I can see Sony releasing a follow-up device to keep the momentum going.</p><p>I have mixed feelings on this. While the PS Portal is much better now than it was at launch, I personally don't travel enough to really need an on-the-go PS5. That said, if the OLED panel is nice enough, it could change my mind.</p><p>As with PSSR 2, this is a rumor, so take it with an appropriate level of skepticism. That said, I won't blame you if you decide to hold out hope for an official announcement. Given how I cover gaming hardware news, you can bet on me covering this story if it happens.</p></div><div class="live-content"><time datetime="2026-02-12T19:20:13+00:00">February 12, 2026 – 2:20 PM</time><h2 id="a-ghost-of-sparta-sequel">A Ghost of Sparta sequel???</h2><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:62.53%;"><img id="NSis8UEFLbzHdcGmfZD5bZ" name="God-of-War-Ghost-of-Sparta.jpg" alt="God of War: Ghost of Sparta" src="https://cdn.mos.cms.futurecdn.net/NSis8UEFLbzHdcGmfZD5bZ-1920-80.jpg" mos="" align="middle" fullscreen="" width="1500" height="938" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Speaking of rumors, one of the wildest I've heard is that we could get a 2D Metroidvania-like God of War game starring Kratos' brother, Deimos. That's already bonkers enough, but rumors also suggest that this title might be multi-platform... as in it might also arrive on rival systems like Switch 2 and Xbox Series X.</p><p>While this rumor seems extremely far-fetched, it comes to us via <a href="https://www.reddit.com/r/GamingLeaksAndRumours/comments/1r1vcyo/natethehate_on_rumored_2d_god_of_war_whispers_of/" target="_blank">NateTheHate</a>, who has a pretty good track record when it comes to PlayStation leaks. Because of that, we can't completely discount it, even though it is very much a rumor.</p><p>I love the God of War series, and especially love Ghost of Sparta on PSP. If this 2D game serves as a semi-sequel or spin-off where we get to play as Deimos, I'm all for it. Let's see how this rumor pans out.</p></div><div class="live-content"><time datetime="2026-02-12T19:40:11+00:00">February 12, 2026 – 2:40 PM</time><h2 id="marvel-tokon-s-roster-reveal-could-happen">Marvel Tokon's roster reveal could happen</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JL98xjoMxh3mjUnftsEwtF" name="Marvel Tokon lede" alt="Marvel Tokon: Fighting Souls" src="https://cdn.mos.cms.futurecdn.net/JL98xjoMxh3mjUnftsEwtF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Unlike my colleague Rory Mellon, I absolutely love fighting games, and Marvel Tokon is one of the titles I'm anticipating most. We haven't gotten much info on this game (check out my <a href="https://www.tomsguide.com/gaming/i-played-marvel-tokon-fighting-souls-and-it-could-be-my-next-big-fighting-game-heres-why">Marvel Tokon preview</a> for my thoughts), but signs point to some news happening at State of Play.</p><p>Earlier this week, the game's Steam page received an unexpected update to its listing. The most significant morsel is that it will launch with 20 playable characters. While this has caused some ire in the FGC (fighting game community), I think that's a nice-sized roster to start with, as this game will get more characters via season passes, just like all modern fighting games do.</p><p>I won't speculate on which characters will be in the roster, but I will say I hope we finally get the Fantastic Four in a Marvel fighting game, as Marvel's First Family has never appeared in any of the Capcom Marvel games (at least not as fully playable characters). And if you'll allow me to nerd out, I'd love for Hulk and Wolverine to be in the game so I can form a team with them, Spider-Man, and Ghost Rider, who were the "new" Fantastic Four in the early '90s.</p><p>Nerding out aside, I expect a big showing for Marvel Tokon today.</p></div><div class="live-content"><time datetime="2026-02-12T20:00:08+00:00">February 12, 2026 – 3:00 PM</time><h2 id="resident-evil-requiem-update">Resident Evil Requiem update?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="R9o4mkFHBy2DV5WD63Xf7W" name="Resident_Evil_Requiem_-_Screenshot_3" alt="Resident Evil Requiem" src="https://cdn.mos.cms.futurecdn.net/R9o4mkFHBy2DV5WD63Xf7W-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Capcom)</span></figcaption></figure><p>While this is a PlayStation show, we're sure to see some third-party games tossed into the mix. To that end, one game I'm sure will pop up is Resident Evil Requiem, as it's slated to drop on February 27.</p><p>I've played two demos of Resident Evil Requiem: <a href="https://www.tomsguide.com/gaming/i-played-resident-evil-requiem-and-its-already-my-most-anticipated-game-of-2026">one focusing on Grace Ashcroft</a> and <a href="https://www.tomsguide.com/gaming/i-just-played-resident-evil-requiem-and-its-mix-of-action-and-horror-is-exactly-what-i-want">another featuring both her and Leon</a>. I'm a huge fan of the franchise, so it shouldn't surprise you that even after playing those demos, I still want more. I'm curious to see what we could see today, but I can't wait regardless!</p></div><div class="live-content"><time datetime="2026-02-12T20:20:08+00:00">February 12, 2026 – 3:20 PM</time><h2 id="potential-xbox-announcements">Potential Xbox announcements</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="t5tafvrJgwzkG5s7YFb8kT" name="Halo Campaign Evolved" alt="Halo: Campaign Evolved" src="https://cdn.mos.cms.futurecdn.net/t5tafvrJgwzkG5s7YFb8kT-1920-80.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Microsoft)</span></figcaption></figure><p>With Xbox games now arriving on PS5, it's not unreasonable to wonder which Microsoft-developed games might have a showing during State of Play.</p><p>As we posted before, rumors are circulating that Starfield might finally get a PS5 release date. That could happen, but I think it's a safe bet that we might get something (even if it's in a sizzle reel) for Halo: Campaign Evolved, as that has been confirmed for PS5. Gears of War: E-Day or even Forza Horizon 6 could also get a showing.</p><p>With the console war effectively over, it would be smart for Xbox to fully embrace advertising its games on rival showcases like State of Play. We'll see if the company decides to show anything today.</p></div><div class="live-content"><time datetime="2026-02-12T20:40:14+00:00">February 12, 2026 – 3:40 PM</time><h2 id="a-heretical-appearance">A Heretical appearance?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="udfPYBrYKhnyGNKiK3jivG" name="Intergalactic - The Heretic Prophecy" alt="Intergalactic: The Heretic Prophecy" src="https://cdn.mos.cms.futurecdn.net/udfPYBrYKhnyGNKiK3jivG-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>I just looked it up, and I can't believe it's been over a year since we saw our first glimpse of Intergalactic: The Heretic Prophecy. While some say the game will release at the end of 2026, I'm with Jason Schreier, who says Naughty Dog's upcoming space-based title is actually coming out in 2027.</p><p>Given that, it's unclear if the game will show up during State of Play. If it does, I'm sure it'll break the internet... in both good and bad ways. I wasn't exactly enamored with The Last of Us Part II, so I can't say I'm hyped for Intergalactic, as the trailer left me feeling ambivalent. But I haven't completely discounted it, so hopefully I'll see something to spark my interest.</p></div><div class="live-content"><time datetime="2026-02-12T21:00:13+00:00">February 12, 2026 – 4:00 PM</time><h2 id="are-you-excited-for-marathon">Are you excited for Marathon?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Df7TS5tqVo8uZm4VDZi9Cg" name="marathon-ps5-game-2026" alt="Screen from Marathon on PS5" src="https://cdn.mos.cms.futurecdn.net/Df7TS5tqVo8uZm4VDZi9Cg-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony / Bungie)</span></figcaption></figure><p>Scott, stepping in for Tony. </p><p>I'm curious, I am a Destiny apologist, even the current messy model that is Destiny 2. It's one of the best feeling shooters available even if the surrounding story has gotten insane. Though perhaps we've just gotten back to the "that wizard came from the moon" era.</p><p>Anyway, I am willing to give Bungie a try despite the mess. And I am excited for Marathon. </p><p>What about you?</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OK6ZmW"></div>                            </div>                            <script src="https://kwizly.com/embed/OK6ZmW.js" async></script></div><div class="live-content"><time datetime="2026-02-12T21:20:28+00:00">February 12, 2026 – 4:20 PM</time><h2 id="40-minute-countdown">40 minute countdown</h2><div class="see-more see-more--clipped"><figure><blockquote class="twitter-tweet hawk-ignore" data-lang="en" cite="https://twitter.com/cantworkitout/status/2020845405362163855"><p lang="en" dir="ltr">A new State of Play airs February 12.Tune in for 60+ minutes of news, gameplay updates, and announcements from game studios across the globe: https://t.co/wz6dklBvoa pic.twitter.com/VRStSNZ6RM<a href="https://twitter.com/cantworkitout/status/2020845405362163855">February 9, 2026</a></p></blockquote></figure><div class="see-more__filter"></div></div><p>Hey, hey, look at that. We're 30 minutes away from the State of Play starting. </p><p>As a reminder, it starts at 2 pm PT, 5 pm ET, and 11 pm CET. </p><p>You can watch on <a href="https://www.twitch.tv/playstation" target="_blank">Twitch</a> and <a href="https://www.youtube.com/user/PlayStation" target="_blank">YouTube</a>.</p></div><div class="live-content"><time datetime="2026-02-12T21:40:22+00:00">February 12, 2026 – 4:40 PM</time><h2 id="miracles-can-happen-but-probably-not">Miracles can happen (but probably not)</h2><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="2aK3fuwuTsytM4utGN22Uj" name="21416815651_d3d0e62fc3_o.png" alt="A fight scene in Bloodborne" src="https://cdn.mos.cms.futurecdn.net/2aK3fuwuTsytM4utGN22Uj-1920-80.png" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: PlayStation)</span></figcaption></figure><p>There's a running joke that Sony will continually disappoint fans by not announcing Bloodborne 2. </p><p>With that in mind, here are some other sequel games that won't get announced that I'm actually interested in potentially seeing:</p><ul><li>The Order sequel</li><li>Resist4nce</li><li>Sly Cooper 5</li><li>J4k & D4xter</li><li>Kingdom Hearts 4</li><li>Killzone 4</li><li>A true Final Fantasy Tactics 2</li></ul><p>It's a surprising number of fourquels, but that's how the cookie crumbles sometimes.</p></div><div class="live-content"><time datetime="2026-02-12T21:45:41+00:00">February 12, 2026 – 4:45 PM</time><h2 id="just-15-minutes-until-state-of-play-is-live">Just 15 minutes until State of Play is live! </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/P0e5YEXtZu0" allowfullscreen></iframe></div></div><p>Hey, it's Rory here. I'm back from break and ready to guide you through the State of Play February 2026 from start to finish. The official countdown has begun, and the YouTube chat is already moving faster than I can read it. There's only 15 minutes until the biggest State of Play broadcast ever is live, so get ready, it's almost time!  </p></div><div class="live-content"><time datetime="2026-02-12T21:50:35+00:00">February 12, 2026 – 4:50 PM</time><h2 id="one-final-wish-from-me-before-the-show-begins">One final wish from me before the show begins!</h2><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="BD5pSALUFi5xo6UFS4MhMg" name="🔴 THE GAME AWARDS 2025_ Official 4K60FPS Livestream (Today - 7_30p ET _ 4_30p PT _ 12_30a GMT) 2-15-59 screenshot" alt="THE GAME AWARDS 2025" src="https://cdn.mos.cms.futurecdn.net/BD5pSALUFi5xo6UFS4MhMg-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>State of Play is just 10 minutes away, so I'm making my final prediction, or maybe my final wish, I'd love to see more from Control: Resonant. This first control was one of my favorite games of 2019, and rare title I've earned the Platinum trophy in twice (on both PS4 and PS5). So here's hoping that Remedy have our next look at the game primed for today, and if we're super lucky we could even get a release date!</p></div><div class="live-content"><time datetime="2026-02-12T21:57:02+00:00">February 12, 2026 – 4:57 PM</time><h2 id="this-is-your-5-minute-warning">This is your 5 minute warning! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="y5T6EzpDkzjkm8NbGVewWW" name="PS5 Pro-9" alt="The PlayStation logo on a PS5 Pro" src="https://cdn.mos.cms.futurecdn.net/y5T6EzpDkzjkm8NbGVewWW-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>If you're not already sitting comfortable, with your stream (or this live blog) ready, now is the time to get in position. State of Play February 206 begins in less than five minutes. And I'm predicting that Saros or Marathon will kick off the showcase!</p></div><div class="live-content"><time datetime="2026-02-12T22:01:14+00:00">February 12, 2026 – 5:01 PM</time><h2 id="state-of-play-feb-2026-is-live">State of Play Feb. 2026 is LIVE!</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/P0e5YEXtZu0" allowfullscreen></iframe></div></div><p>The waiting is over, and the speculating is done. State of Play February 2026 starts now. Stand by for live updates, even if you can't watch along at home (or at work!), I'll have all the announcements for you in this live blog... </p></div><div class="live-content"><time datetime="2026-02-12T22:03:05+00:00">February 12, 2026 – 5:03 PM</time><h2 id="kena-bridge-of-spirits-sequel-opens-the-show">Kena: Bridge of Spirits sequel opens the show!</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/12EQpTwn4lY" allowfullscreen></iframe></div></div><p>Here's an opener I didn't have on my bingo card, a sequel to 2021's charming action-platform, Kena: Bridge of Spirits! </p></div><div class="live-content"><time datetime="2026-02-12T22:05:29+00:00">February 12, 2026 – 5:05 PM</time><h2 id="kena-scars-of-kosmora-is-coming-2026">Kena: Scars of Kosmora is coming 2026</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:854px;"><p class="vanilla-image-block" style="padding-top:56.21%;"><img id="ssVv4EPEeDbtNVSycrw9ye" name="State of Play _ February 12, 2026 [English] 32-14 screenshot" alt="State of Play Feb 2026 Kena: Scars of Kosmora" src="https://cdn.mos.cms.futurecdn.net/ssVv4EPEeDbtNVSycrw9ye-1920-80.png" mos="" align="middle" fullscreen="" width="854" height="480" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>The sequel is called Kena: Scars of Kosmora, and it'll be launching on PS5 and PC in 2026. It stars an older, more experienced, Kena and is set in a new land, the titular Kosmora. It looks once again to combine a charming art style with surprisingly demanding combat. Consider me sold!  </p></div><div class="live-content"><time datetime="2026-02-12T22:06:48+00:00">February 12, 2026 – 5:06 PM</time><h2 id="ghost-of-yotei-legends">Ghost of Yotei Legends? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:854px;"><p class="vanilla-image-block" style="padding-top:56.21%;"><img id="NLsXLFgTCbb5qQ7d2Ye4J8" name="State of Play _ February 12, 2026 [English] 34-21 screenshot" alt="State of Play Feb 2026 Ghost of yotei mp" src="https://cdn.mos.cms.futurecdn.net/NLsXLFgTCbb5qQ7d2Ye4J8-1920-80.png" mos="" align="middle" fullscreen="" width="854" height="480" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: SOny)</span></figcaption></figure><p>Next up, it's an announcement from Sucker Punch. Will this be the Ghost of Yotei Legends multiplayer mode? </p></div><div class="live-content"><time datetime="2026-02-12T22:08:02+00:00">February 12, 2026 – 5:08 PM</time><h2 id="yup-ghost-of-yotei-legends-launches-on-march-10">Yup, Ghost of Yotei Legends launches on March 10!</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/5VYyhow-EU8" allowfullscreen></iframe></div></div><p>Fans of co-op samurai action rejoice, Ghost of Yotei is getting a Legends mode update next month. </p></div><div class="live-content"><time datetime="2026-02-12T22:09:22+00:00">February 12, 2026 – 5:09 PM</time><h2 id="death-stranding-2-on-the-beach-comes-to-pc-on-march-19">Death Stranding 2: On the Beach comes to PC on March 19</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/4b6hcN5vZsw" allowfullscreen></iframe></div></div><p>Fantastic sequel Death Stranding 2: On the Beach won't be PS5-locked for much longer as it's making it's way over to PC on March 19. This was a contender for GOTY at The Game Awards, and will no doubt look truly incredible on a beefy gaming PC.</p></div><div class="live-content"><time datetime="2026-02-12T22:10:41+00:00">February 12, 2026 – 5:10 PM</time><h2 id="4-loop-gameplay-is-up-next">4:Loop gameplay is up next!</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/hoXXNPgqYkw" allowfullscreen></iframe></div></div><p>Next, it's time for an update on sci-fi co-op game 4:Loop. I'm still not totally sure what the hook of this title is, but it appears to have a bit of ARC Raiders about it, so maybe it'll also suck up a whole bunch of my free time when it launches on PS5.</p></div><div class="live-content"><time datetime="2026-02-12T22:12:22+00:00">February 12, 2026 – 5:12 PM</time><h2 id="4-loop-wants-your-help">4:Loop wants your help!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:854px;"><p class="vanilla-image-block" style="padding-top:56.21%;"><img id="6wzGSqySDKWaeS8jMFJrcX" name="State of Play _ February 12, 2026 [English] 38-16 screenshot" alt="State of Play Feb 2026 Four loop" src="https://cdn.mos.cms.futurecdn.net/6wzGSqySDKWaeS8jMFJrcX-1920-80.png" mos="" align="middle" fullscreen="" width="854" height="480" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>4:Loop will have upcoming play tests as the developers "want your help" to craft the game, but no details have been given yet about when these will be. Without even a vague release date, I think we can assume 4:Loop still has a way to go until launch.</p></div><div class="live-content"><time datetime="2026-02-12T22:13:51+00:00">February 12, 2026 – 5:13 PM</time><h2 id="pragmata-looks-better-ever-time-i-see-it-and-get-s-a-demo">Pragmata looks better ever time I see it (and get's a demo)! </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/6lbf5ZPUtx0" allowfullscreen></iframe></div></div><p>A quick trailer for Capcom's Pragmata next. Every time I see this game, my interest levels increase. It's out on April 24, but even better, there's a playable demo which is available to download from the PlayStation Store right now! </p></div><div class="live-content"><time datetime="2026-02-12T22:15:12+00:00">February 12, 2026 – 5:15 PM</time><h2 id="resident-evil-time">Resident Evil time!</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/u2jrHzua0jA" allowfullscreen></iframe></div></div><p>Well, I called this one earlier, but it's Capcom's turn in the spotlight as Resident Evil Requiem takes the State of Play (virtual) stage. It's out February 27, and I really don't need to see more of this game. I'm completely sold, so I'm looking away till it's over!</p></div><div class="live-content"><time datetime="2026-02-12T22:19:33+00:00">February 12, 2026 – 5:19 PM</time><h2 id="legacy-of-kain-defiance-remastered-and-brigandine-abyss">Legacy of Kain Defiance Remastered and Brigandine Abyss!</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/Jocj5kRYcFE" allowfullscreen></iframe></div></div><p>Legacy of Kain: Defiance launched in 2003, and the final game in the series is getting a remastered edition. It'll be out next month, and includes a bunch of upgrades. And we also got a look at strategy game Brigandine Abyss, out in 2026.</p></div><div class="live-content"><time datetime="2026-02-12T22:21:35+00:00">February 12, 2026 – 5:21 PM</time><h2 id="dead-or-alive-6-last-round-and-a-new-installment-in-the-series">Dead or Alive 6: Last Round and a NEW installment in the series!</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/5z0L0ba4r8k" allowfullscreen></iframe></div></div><p>Dead or Alive 6 is getting brought to PS5 in a Last Round package, and we also got confirmation that Dead or Alive 30th Anniversary is in development as well. Lots for fans of the fighting game franchise to look for to! </p></div><div class="live-content"><time datetime="2026-02-12T22:23:00+00:00">February 12, 2026 – 5:23 PM</time><h2 id="control-resonant-gameplay-premieres-at-state-of-play">Control Resonant gameplay premieres at State of Play! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2hznXMYqmLi5V2WpWSmc48" name="State of Play _ February 12, 2026 [English] 48-42 screenshot" alt="Control Resonant" src="https://cdn.mos.cms.futurecdn.net/2hznXMYqmLi5V2WpWSmc48-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>One of my wishes came true, next it's uncut gameplay of Control: Resonant, and it looks pretty darn impressive. There's a lot to take in, including a new Manhattan-set level, new powers and new enemies. It looks a lot more open than the first Control. </p></div><div class="live-content"><time datetime="2026-02-12T22:26:52+00:00">February 12, 2026 – 5:26 PM</time><h2 id="crimson-moon-announced">Crimson Moon announced! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6nUmCZxGPhumiUMWgCGaaa" name="State of Play _ February 12, 2026 [English] 51-50 screenshot" alt="Crimson Moon" src="https://cdn.mos.cms.futurecdn.net/6nUmCZxGPhumiUMWgCGaaa-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Well, it's always nice to see something new at these events, Crimson Moon appears to be a fantasy action game. Looks a little Soulslike, but I got HUGE Darksiders vibes from it, I was thinking it was a new Darksiders game for most of the trailer!</p></div><div class="live-content"><time datetime="2026-02-12T22:28:28+00:00">February 12, 2026 – 5:28 PM</time><h2 id="beast-of-reincarnation-gets-a-new-trailer-and-release-date">Beast of Reincarnation gets a new trailer and release date!</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/zqxdVtJ24ms" allowfullscreen></iframe></div></div><p>Did you think Game Freak could only make Pokemon games? Well take a look at Beast of Reincarnation, which is heading to PS5 on August 4. I've scanned the trailer but I cannot see a Charizard anywhere! </p></div><div class="live-content"><time datetime="2026-02-12T22:29:57+00:00">February 12, 2026 – 5:29 PM</time><h2 id="mina-the-hollower-gets-a-new-look">Mina The Hollower gets a new look!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wNukqkuzDwJocuWNgt2nwC" name="State of Play _ February 12, 2026 [English] 56-9 screenshot" alt="Mina the Hollower" src="https://cdn.mos.cms.futurecdn.net/wNukqkuzDwJocuWNgt2nwC-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Shovel Knight fans, you'll want to check out this new look at Mina The Hollower, the next game from Yacht Club Games. It's out later this year and an exclsuive demo drops on PS5 tomorrow (Feb. 13)</p></div><div class="live-content"><time datetime="2026-02-12T22:31:28+00:00">February 12, 2026 – 5:31 PM</time><h2 id="charming-indie-neva-is-getting-a-prequel">Charming indie Neva is getting a prequel!</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/ik25sbAG94s" allowfullscreen></iframe></div></div><p>I know one colleague who is very happy because charming indie Neva is getting a prequel called... Neva: Prologue. It's out February 19. </p></div><div class="live-content"><time datetime="2026-02-12T22:33:34+00:00">February 12, 2026 – 5:33 PM</time><h2 id="yakoh-shinobi-ops-is-next-up">Yakoh Shinobi Ops is next up!</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/lHMwFxOa-_A" allowfullscreen></iframe></div></div><p>The next announcement is Yakoh Shinobi Ops, which is an isometric stealth-action game based on the gameplay footage. It also includes a very vicious monkey! </p></div><div class="live-content"><time datetime="2026-02-12T22:35:27+00:00">February 12, 2026 – 5:35 PM</time><h2 id="project-windless-casts-you-as-a-chicken">Project Windless casts you as a... chicken?</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/HD0dMr3kAQs" allowfullscreen></iframe></div></div><p>Are you playing as an oversized chicken with a huge sword?! One of the more original games we've seen today, this cinematic action game has you playing as a humanoid chicken in a bloody fantasy world. It's called Project Windless! </p></div><div class="live-content"><time datetime="2026-02-12T22:36:51+00:00">February 12, 2026 – 5:36 PM</time><h2 id="star-wars-alert">Star Wars alert!</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/XDBc-kbL-Ic" allowfullscreen></iframe></div></div><p>We've flown over to a galaxy far, far away for Star Wars: Galactic Racer, a new racing game (duh!) set in the beloved sci-fi universe. It's out in 2026, and looks ridiculously cinematic! </p></div><div class="live-content"><time datetime="2026-02-12T22:38:17+00:00">February 12, 2026 – 5:38 PM</time><h2 id="new-trailer-for-007-first-light">New trailer for 007: First Light!</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/trvIyyFt_MM" allowfullscreen></iframe></div></div><p>Another correct prediction for me (Though this was a bit of a freebie), 007: First Light gets a new trailer. It looks great, and probably the closest to a new Uncharted game we'll be seeing for a while. It's out on May 27, and if you pre-order now you get the Deluxe Edition at no extra cost, which is a new perk for early adopters. </p></div><div class="live-content"><time datetime="2026-02-12T22:39:33+00:00">February 12, 2026 – 5:39 PM</time><h2 id="konami-is-taking-over-the-state-of-play">Konami is taking over the State of Play!</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QfaoQZCJfnqCxDWoT6e7iP" name="State of Play _ February 12, 2026 [English] 1-5-34 screenshot" alt="Konami" src="https://cdn.mos.cms.futurecdn.net/QfaoQZCJfnqCxDWoT6e7iP-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Sony's trying something new here, by giving the stage over to Konami, it's like a second showcase within a showcase! </p></div><div class="live-content"><time datetime="2026-02-12T22:41:31+00:00">February 12, 2026 – 5:41 PM</time><h2 id="mgs-master-collection-vol-2-is-real">MGS Master Collection Vol. 2 is real!</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/a3AujdsJvjI" allowfullscreen></iframe></div></div><p>Good news for MGS fans (I can hear TG's Tony Polanco screaming from here), Metal Gear Solid Master Collection Vol. 2 is here, and will include MGS 4 and MGS Peace Walker. It's out on August 27. This is great news in general, as MGS 4 was previously locked to the PS3, but from the summer, it'll be playable on modern hardware. </p><p>The MGS Master Collection Vol. 1 is also getting a free update with a new sharper resolution setting. It's rolling out today, and MGS 3 Delta: Snake Eater is on sale!</p></div><div class="live-content"><time datetime="2026-02-12T22:45:26+00:00">February 12, 2026 – 5:45 PM</time><h2 id="mgs-x-darwin-s-paradox">MGS x Darwin's Paradox! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EQokgbZNc6ftBjfF63afuF" name="State of Play _ February 12, 2026 [English] 1-11-20 screenshot" alt="Darwin's Playbook" src="https://cdn.mos.cms.futurecdn.net/EQokgbZNc6ftBjfF63afuF-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>The upcoming octopus game, Darwin's Paradox, is getting a crossover with Metal Gear Solid. That's not something I ever expected to type, but I'm here for it, and the comical-looking game is getting a demo that's out before its full launch on April 2. </p></div><div class="live-content"><time datetime="2026-02-12T22:47:40+00:00">February 12, 2026 – 5:47 PM</time><h2 id="castlevania-lives">Castlevania lives! </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/X3-SJLWzjmE" allowfullscreen></iframe></div></div><p>It's a good day for Castlevania fans, as the series is back after 15 years in the shadows. It's a new side-scrolling adventure, called Castlevania: Belmont's Curse. It's out in 2026. You play Trevor Belmont, and it looks like a modern spin on the series.</p></div><div class="live-content"><time datetime="2026-02-12T22:49:39+00:00">February 12, 2026 – 5:49 PM</time><h2 id="i-think-i-hear-silent-hill-music">I think I hear Silent Hill music!</h2><p>Silent Hill is enjoying a franchise revival after the fantastic Silent Hill 2 Remake and Silent Hill f, and I'm pretty sure this our first look at what's next for the horror series...</p></div><div class="live-content"><time datetime="2026-02-12T22:51:07+00:00">February 12, 2026 – 5:51 PM</time><h2 id="silent-hill-townfall-is-coming-2026">Silent Hill Townfall is coming 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/CvN3dP92wxU" allowfullscreen></iframe></div></div><p>The previously announced Silent Hill Townfall gets a new look with some quick shots of gameplay. There's a fullSilent Hill Transmission following this State of Play where we're going to hear more about the game, so be sure to stick around for that! </p></div><div class="live-content"><time datetime="2026-02-12T22:53:22+00:00">February 12, 2026 – 5:53 PM</time><h2 id="konami-s-next-and-final-game-is-rev-noir">Konami's next (and final) game is Rev.Noir!</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/SGRT0_YrOZs" allowfullscreen></iframe></div></div><p>One for the anime as we get a trailer for Rev.Noir, which is in development for PS5, and is described as a new JRPG title. It looks a bit generic for my tastes, but I'm sure genre fans are going to be very intrigued about this one.</p></div><div class="live-content"><time datetime="2026-02-12T22:55:00+00:00">February 12, 2026 – 5:55 PM</time><h2 id="john-wick-the-video-game-right">John Wick: The Video Game, right? </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SqXZSku7P6NmXmSzYBonNY" name="State of Play _ February 12, 2026 [English] 1-21-3 screenshot" alt="John Wick" src="https://cdn.mos.cms.futurecdn.net/SqXZSku7P6NmXmSzYBonNY-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>I'm pretty sure this next trailer is for a John Wick game....</p></div><div class="live-content"><time datetime="2026-02-12T22:56:56+00:00">February 12, 2026 – 5:56 PM</time><h2 id="yup-john-wick-from-saber-is-confirmed">Yup, John Wick from Saber is confirmed!</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/OhHvHrDBru8" allowfullscreen></iframe></div></div><p>Guess we'll soon be living out our John Wick fantasies as the Baba Yaga himself, as Saber is making a John Wick game. The trailer was very slick, but we only got a very brief look at what appears to be gameplay, and no date, so don't expect to be playing anytime soon! </p></div><div class="live-content"><time datetime="2026-02-12T22:58:22+00:00">February 12, 2026 – 5:58 PM</time><h2 id="finally-marathon-time">Finally Marathon time!</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/lygqlbSi9TE" allowfullscreen></iframe></div></div><p>This one was confirmed prior to the show, so it's no sunrise to see a new trailer for Bungie's Marathon. It's out on March 5, and there will be a preview weekend Feb. 26 to March 2, so you can give the sci-fi extraction shooter a shot before launch. Bungie are calling it the "Server Slam," which is a fantastic name for a beta!</p></div><div class="live-content"><time datetime="2026-02-12T23:00:54+00:00">February 12, 2026 – 6:00 PM</time><h2 id="the-leaks-were-true-spider-man-2-comes-to-ps">The leaks were true, Spider-Man 2 comes to PS+</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DRnXCh84ut7xc3pJQgudq4" name="Marvel's Spider-Man 2.jpg" alt="Marvel's Spider-Man 2" src="https://cdn.mos.cms.futurecdn.net/DRnXCh84ut7xc3pJQgudq4-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>If you somehow haven't played Marvel's Spider-Man 2 on PS5 yet, soon you'll have no excuse as the game is heading over to PS+ (at the Extra/Premium tier) later this month. New games are being added to the Classic Library as well, Time Crisis and Tekken Dark Resurrection. </p></div><div class="live-content"><time datetime="2026-02-12T23:02:01+00:00">February 12, 2026 – 6:02 PM</time><h2 id="saros-gets-the-spotlight">Saros gets the spotlight</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ENXufMEGDGpyGzjrZKtmFE" name="State of Play _ February 12, 2025 [English] 53-23 screenshot" alt="Saros" src="https://cdn.mos.cms.futurecdn.net/ENXufMEGDGpyGzjrZKtmFE-1920-80.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Saros, the spiritual follow-up to Returnal, is up next. This is another game I was extremely confident would feature at State of Play, the only surprise is that it's taken this long to appear. </p></div><div class="live-content"><time datetime="2026-02-12T23:05:00+00:00">February 12, 2026 – 6:05 PM</time><h2 id="the-show-s-not-over-yet">The show's not over yet...</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JL98xjoMxh3mjUnftsEwtF" name="Marvel Tokon lede" alt="Marvel Tokon: Fighting Souls" src="https://cdn.mos.cms.futurecdn.net/JL98xjoMxh3mjUnftsEwtF-1920-80.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony Interactive Entertainment)</span></figcaption></figure><p>Saros' gameplay presentation is over, and we've ticked over the hour mark, but we're not done yet, the next trailer is for Marvel Tokon! </p></div><div class="live-content"><time datetime="2026-02-12T23:07:17+00:00">February 12, 2026 – 6:07 PM</time><h2 id="marvel-tokon-looks-excellent-again-and-is-out-august-6">Marvel Tokon looks excellent (again), and is out August 6!</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/X4C_0Yf43fM" allowfullscreen></iframe></div></div><p>We got a release date for Marvel Tokon at the end of that very polished trailer; it's out on August 6. I'm already going to be a Spider-Man main, but we've also got confirmation that X-Men will be included. The game revolves around building a four-character team, so there will be a spot for Wolverine in my roster!</p></div><div class="live-content"><time datetime="2026-02-12T23:08:11+00:00">February 12, 2026 – 6:08 PM</time><h2 id="i-think-this-is-the-last-reveal">I think this is the last reveal!</h2><p>Santa Monica Studios logo pops up, and God of War music starts playing, this is probably the big closing game!</p></div><div class="live-content"><time datetime="2026-02-12T23:09:58+00:00">February 12, 2026 – 6:09 PM</time><h2 id="god-of-war-trilogy-remake-is-confirmed">God of War Trilogy Remake is confirmed!</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/G_tq12WisX8" allowfullscreen></iframe></div></div><p>It looks like the requests for the original God of War games to return have been heard. God of War Trilogy Remake has just been announced at State of Play! </p><p>It's still "in the early stages," so don't expect any further updates on this project for a while, but still, it's sure to have PlayStation fans very hyped in months to come!</p></div><div class="live-content"><time datetime="2026-02-12T23:12:27+00:00">February 12, 2026 – 6:12 PM</time><h2 id="but-there-s-more-god-of-war-2d-revealed">But there's more... God of War 2D revealed! </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/eFhOo6NTt70" allowfullscreen></iframe></div></div><p>The rumors about a 2D God of War game were accurate; you play Kratos before he was a God, when he was a Spartan warrior. It's a very different spin on the franchise! </p><p>It's called God of War: Sons of Sparta, and it's out<strong> TODAY! </strong></p></div><div class="live-content"><time datetime="2026-02-12T23:14:19+00:00">February 12, 2026 – 6:14 PM</time><h2 id="and-that-s-a-wrap-on-state-of-play-february-2026">And that's a wrap on State of Play February 2026</h2><p>After a jam packed 85 minutes of game reveals and new trailers, State of Play February 2026 draws to a close. The one-two punch of a God of War Trilogy Remake and a new 2D game (Sons of Sparta) that you can play today capped the showcase. </p></div><div class="live-content"><time datetime="2026-02-12T23:28:43+00:00">February 12, 2026 – 6:28 PM</time><h2 id="that-was-a-very-solid-but-not-spectacular-state-of-play">That was a very solid (but not spectacular) State of Play! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9TgxHLqSZdRtBa7kriUhTP" name="State of Play _ February 12, 2026 [English] 1-41-13 screenshot" alt="That's a wrap on State of Play Feb 2026" src="https://cdn.mos.cms.futurecdn.net/9TgxHLqSZdRtBa7kriUhTP-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>Whelp, the first State of Play for 2026 is in the can, and I was pretty pleased overall. While it lacked major surprises, we got updates on games I'm super excited to play (Saros, Control Resonant and more), and a few new reveals caught my eye, too. It wasn't quite the State of Play of dreams some predicted but it was a solid event.</p></div><div class="live-content"><time datetime="2026-02-12T23:44:22+00:00">February 12, 2026 – 6:44 PM</time><h2 id="so-what-games-intrigued-you">So, what games intrigued you?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eAREqW"></div>                            </div>                            <script src="https://kwizly.com/embed/eAREqW.js" async></script><p>That was supersized State of Play with a surprising number of games. </p><p>So, what games caught your eye.</p><p>Me? The Chicken man of Project Windless looked interesting and I'm a sucker for God of War.</p><p>I'm also curious about Yakoh and if it will scratch the Tenchu itch, but the isometric view isn't quite what Tenchu was, still. </p></div><div class="live-content"><time datetime="2026-02-13T00:20:58+00:00">February 12, 2026 – 7:20 PM</time><h2 id="read-a-book">Read a book?</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/HD0dMr3kAQs" allowfullscreen></iframe></div></div><p>Project Windless is one of the games that I'm most intrigued by. As the trailer notes it's based on a Korean fantasy series called The Bird That Drinks Tears. </p><p>From what I can tell the book is finally being <a href="https://www.amazon.com/Heart-Nhaga-Novel-Drinks-Tears/dp/0063349892/ref=tmm_hrd_swatch_0" target="_blank">translated into English and will come out this June</a>.</p><p>I plan on checking out the book when it finally releases.</p><p>What about you? Did you find this interesting?</p></div><div class="live-content"><time datetime="2026-02-13T00:33:46+00:00">February 12, 2026 – 7:33 PM</time><h2 id="that-s-a-wrap">That's a wrap</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2560px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9TgxHLqSZdRtBa7kriUhTP" name="State of Play _ February 12, 2026 [English] 1-41-13 screenshot" alt="That's a wrap on State of Play Feb 2026" src="https://cdn.mos.cms.futurecdn.net/9TgxHLqSZdRtBa7kriUhTP-1920-80.png" mos="" align="middle" fullscreen="" width="2560" height="1440" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Sony)</span></figcaption></figure><p>As these games finally come out, Tom's Guide will have reviews and hands-ons on a good chunk of these titles as we can. </p><p>What's next, we're hoping for more hardware announcements from PlayStation including the rumored OLED Portal and news about PSSR advancements.</p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The Sony PlayStation Portal could get a Pro edition with a major display upgrade ]]></title>
                                                                                                <dc:content><![CDATA[ <p>Since launching in 2023, the PlayStation Portal has slowly been becoming more of a handheld console and not just a remote streaming device. Now, a new rumor indicates Sony is working on an upgraded version that would make it even better.</p><p>In a post on X, leaker <a href="https://x.com/Zuby_Tech/status/2010031067554865444" target="_blank">Zuby_Tech</a> (spotted by <a href="https://www.notebookcheck.net/The-PlayStation-Portal-could-get-an-OLED-upgrade-with-its-next-model-refresh.1201763.0.html" target="_blank">Notebook Check</a>) claimed that Sony will release a new version that could feature an OLED display with a 120Hz refresh rate. They also said it could potentially be dubbed the PlayStation Portal Pro. </p><p>Sony has not announced any refreshes for the Portal. </p><p>The current Portal features a 1080p LCD screen with a 60Hz refresh rate. An OLED display would be a major upgrade that delivers deeper blacks, better contrast, and colors. Honestly, that alone might make the PS Portal an attractive option. </p><p>Zuby_Tech did not provide a timeline or potential price for the Portal Pro.</p><h2 id="playstation-6-and-the-next-playstation-handheld">PlayStation 6 and the next PlayStation handheld</h2><p>Presumably, the updated PlayStation Portal would need to launch in the next year. We are taking this with a grain of salt because the next generation of Sony consoles isn't far off.</p><p>Sony has <a href="https://www.tomsguide.com/gaming/playstation/ps6-is-coming-in-a-few-years-sony-and-amd-just-teased-3-breakthrough-graphics-features-for-the-future-of-gaming">already confirmed that it's partnering with AMD</a> on the PS6, which should come out in "a few years." And last year, a <a href="https://www.tomsguide.com/gaming/ps6-and-new-playstation-handheld-specs-reportedly-leak-and-suggest-a-huge-upgrade-over-ps5">slew of rumors </a>suggested that Sony would release some kind of <a href="https://www.tomsguide.com/gaming/playstation/rumored-playstation-handheld-seemingly-confirmed-heres-what-we-know">PlayStation 6 handheld</a> alongside the <a href="https://www.tomsguide.com/gaming/playstation/im-skeptical-about-the-ps6-heres-3-upgrades-that-could-change-my-mind">PS6</a>. </p><p>The PS6 handheld is supposed to be capable of <a href="https://www.tomsguide.com/gaming/playstation/rumored-playstation-handheld-seemingly-confirmed-heres-what-we-know">playing PS5 games natively, </a>based on a Bloomberg report from November last year.</p><p>At the earliest, it's expected that we'll see Sony announce the next generation in the fall of 2027, possibly 2028, which would mark the traditional seven-year cycle Sony has followed with previous console generations.</p><h2 id="nintendo-too">Nintendo too?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Juxvb6aK7PUJQmtiEwnCeb" name="Nintendo-Switch-2-SFII" alt="The Nintendo Switch 2 propped up on a kitchen table" src="https://cdn.mos.cms.futurecdn.net/Juxvb6aK7PUJQmtiEwnCeb-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Stephen Lambrechts / Tom's Guide)</span></figcaption></figure><p>Speaking of OLED displays, Nintendo fans may have been disappointed that the <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-console-review">Nintendo Switch 2</a> launched with an LCD display rather than an OLED one, despite the <a href="https://www.tomsguide.com/reviews/nintendo-switch-oled">OLED Switch</a> existing. </p><p>However, an OLED version may be coming. A separate report from <a href="https://www.notebookcheck.net/New-Switch-2-Pro-OLED-or-Lite-console-model-possible-after-discovery-on-Nintendo-Account-site.1205283.0.html">Notebook Check</a> reveals that a mysterious code appeared on the Nintendo Account portal site, hinting at future versions of the Switch 2.</p><p>The strange "OSM" code attached to an image of the Switch 2 hints that Nintendo could ship an OLED model. Other speculation includes the release of a Pro model with higher memory, though with the current <a href="https://www.tomsguide.com/computing/ram-prices-are-exploding-heres-why-and-everything-you-need-to-know-about-surviving-ramageddon">RAM crisis</a> that seems less likely.</p><p>Instead, it's posited that Nintendo could launch a Lite model similar to the original <a href="https://www.tomsguide.com/reviews/nintendo-switch-lite">Nintendo Switch Lite</a> version that ditched the dock and kept the controllers locked to the body. <br><br>Or it could be nothing. We'll just have to wait and see!</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/playstation/ive-used-the-ps5-pro-every-day-for-a-year-heres-what-i-like-and-dislike">I’ve used the PS5 Pro every day for a year — here’s what I like (and don't) after 1,000+ hours of play</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/ive-been-playing-my-16-year-old-psp-go-for-a-month-and-now-i-cant-wait-for-ps6s-rumored-next-gen-handheld">I’ve been playing my 16-year-old PSP Go for a month, and now I can’t wait for PS6’s rumored next-gen handheld</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/intels-panther-lake-might-be-a-great-ballpark-estimate-for-how-ps6-handhelds-perform-leaker-claims">Leaker compares Intel's Panther Lake with rumored AMD 'Canis' chips that could power the PS6 Handheld</a></li></ul> ]]></dc:content>
                                                                                                                                            <link>https://www.tomsguide.com/gaming/playstation/the-sony-playstation-portal-could-get-a-pro-edition-with-a-major-display-upgrade</link>
                                                                            <description>
                            <![CDATA[ A new leak claims Sony is planning on putting an OLED display on the next version of the PlayStation Portal. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">jShvhffD8eaoBF6h3Jvcva</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/BQugizGHkFVy4HFkCroVLm-1920-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 16 Jan 2026 22:50:55 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Playstation]]></category>
                                                    <category><![CDATA[Gaming]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ-320-70.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/BQugizGHkFVy4HFkCroVLm-1920-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The PlayStation Portal on a counter with the start screen for Horizon Forbidden West]]></media:description>                                                            <media:text><![CDATA[The PlayStation Portal on a counter with the start screen for Horizon Forbidden West]]></media:text>
                                <media:title type="plain"><![CDATA[The PlayStation Portal on a counter with the start screen for Horizon Forbidden West]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/BQugizGHkFVy4HFkCroVLm-1920-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Since launching in 2023, the PlayStation Portal has slowly been becoming more of a handheld console and not just a remote streaming device. Now, a new rumor indicates Sony is working on an upgraded version that would make it even better.</p><p>In a post on X, leaker <a href="https://x.com/Zuby_Tech/status/2010031067554865444" target="_blank">Zuby_Tech</a> (spotted by <a href="https://www.notebookcheck.net/The-PlayStation-Portal-could-get-an-OLED-upgrade-with-its-next-model-refresh.1201763.0.html" target="_blank">Notebook Check</a>) claimed that Sony will release a new version that could feature an OLED display with a 120Hz refresh rate. They also said it could potentially be dubbed the PlayStation Portal Pro. </p><p>Sony has not announced any refreshes for the Portal. </p><p>The current Portal features a 1080p LCD screen with a 60Hz refresh rate. An OLED display would be a major upgrade that delivers deeper blacks, better contrast, and colors. Honestly, that alone might make the PS Portal an attractive option. </p><p>Zuby_Tech did not provide a timeline or potential price for the Portal Pro.</p><h2 id="playstation-6-and-the-next-playstation-handheld">PlayStation 6 and the next PlayStation handheld</h2><p>Presumably, the updated PlayStation Portal would need to launch in the next year. We are taking this with a grain of salt because the next generation of Sony consoles isn't far off.</p><p>Sony has <a href="https://www.tomsguide.com/gaming/playstation/ps6-is-coming-in-a-few-years-sony-and-amd-just-teased-3-breakthrough-graphics-features-for-the-future-of-gaming">already confirmed that it's partnering with AMD</a> on the PS6, which should come out in "a few years." And last year, a <a href="https://www.tomsguide.com/gaming/ps6-and-new-playstation-handheld-specs-reportedly-leak-and-suggest-a-huge-upgrade-over-ps5">slew of rumors </a>suggested that Sony would release some kind of <a href="https://www.tomsguide.com/gaming/playstation/rumored-playstation-handheld-seemingly-confirmed-heres-what-we-know">PlayStation 6 handheld</a> alongside the <a href="https://www.tomsguide.com/gaming/playstation/im-skeptical-about-the-ps6-heres-3-upgrades-that-could-change-my-mind">PS6</a>. </p><p>The PS6 handheld is supposed to be capable of <a href="https://www.tomsguide.com/gaming/playstation/rumored-playstation-handheld-seemingly-confirmed-heres-what-we-know">playing PS5 games natively, </a>based on a Bloomberg report from November last year.</p><p>At the earliest, it's expected that we'll see Sony announce the next generation in the fall of 2027, possibly 2028, which would mark the traditional seven-year cycle Sony has followed with previous console generations.</p><h2 id="nintendo-too">Nintendo too?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Juxvb6aK7PUJQmtiEwnCeb" name="Nintendo-Switch-2-SFII" alt="The Nintendo Switch 2 propped up on a kitchen table" src="https://cdn.mos.cms.futurecdn.net/Juxvb6aK7PUJQmtiEwnCeb-1920-80.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Stephen Lambrechts / Tom's Guide)</span></figcaption></figure><p>Speaking of OLED displays, Nintendo fans may have been disappointed that the <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-console-review">Nintendo Switch 2</a> launched with an LCD display rather than an OLED one, despite the <a href="https://www.tomsguide.com/reviews/nintendo-switch-oled">OLED Switch</a> existing. </p><p>However, an OLED version may be coming. A separate report from <a href="https://www.notebookcheck.net/New-Switch-2-Pro-OLED-or-Lite-console-model-possible-after-discovery-on-Nintendo-Account-site.1205283.0.html">Notebook Check</a> reveals that a mysterious code appeared on the Nintendo Account portal site, hinting at future versions of the Switch 2.</p><p>The strange "OSM" code attached to an image of the Switch 2 hints that Nintendo could ship an OLED model. Other speculation includes the release of a Pro model with higher memory, though with the current <a href="https://www.tomsguide.com/computing/ram-prices-are-exploding-heres-why-and-everything-you-need-to-know-about-surviving-ramageddon">RAM crisis</a> that seems less likely.</p><p>Instead, it's posited that Nintendo could launch a Lite model similar to the original <a href="https://www.tomsguide.com/reviews/nintendo-switch-lite">Nintendo Switch Lite</a> version that ditched the dock and kept the controllers locked to the body. <br><br>Or it could be nothing. We'll just have to wait and see!</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/playstation/ive-used-the-ps5-pro-every-day-for-a-year-heres-what-i-like-and-dislike">I’ve used the PS5 Pro every day for a year — here’s what I like (and don't) after 1,000+ hours of play</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/ive-been-playing-my-16-year-old-psp-go-for-a-month-and-now-i-cant-wait-for-ps6s-rumored-next-gen-handheld">I’ve been playing my 16-year-old PSP Go for a month, and now I can’t wait for PS6’s rumored next-gen handheld</a></li><li><a href="https://www.tomsguide.com/gaming/playstation/intels-panther-lake-might-be-a-great-ballpark-estimate-for-how-ps6-handhelds-perform-leaker-claims">Leaker compares Intel's Panther Lake with rumored AMD 'Canis' chips that could power the PS6 Handheld</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>