Error message

  • Deprecated function: implode(): Passing glue string after array is deprecated. Swap the parameters in drupal_get_feeds() (line 394 of /home/cay45lq1/public_html/includes/common.inc).
  • Deprecated function: The each() function is deprecated. This message will be suppressed on further calls in menu_set_active_trail() (line 2405 of /home/cay45lq1/public_html/includes/menu.inc).

TechRadar News

New forum topics

Subscribe to TechRadar News feed
All the latest content from the TechRadar team
Updated: 18 hours 54 min ago

'6G is going to make all of us into walking cameras' — Quote of the day by Qualcomm CEO Cristiano Amon on the future of wearable tech

Sun, 07/19/2026 - 17:00

Qualcomm's been at the heart of chipmaking for smartphones and mobile devices for years, with its line of Snapdragon chips powering Android smartphones throughout the 4G and 5G era. With 6G set to roll out in the 2030s, the jury's still out on its potential impact. Qualcomm's CEO Cristiano Amon, however, has painted a curious vision.

Every step you take

Amon, who's been in charge of the American semiconductor manufacturer since he was promoted in 2021, outlined how he sees 6G shaping future hardware in an interview on Fox Business.

Quote of the day

This article is part of TechRadar Pro's QOTD project to provide an insight into the minds of the brightest and most recognized figures in the technology industry today and in years gone by. Read the full series here.

The CEO is bullish on smart glasses hitting the mainstream, suggesting that the cameras built into these devices will be continuously streaming video and capture data in real-time (including audio) to feed a user's personal AI.

Where does 6G come into the picture? The technology permits far faster top speeds compared with today's 5G networks. Theoretically, future mobile networks can reach 1Tbps by taking advantage of the sub-terahertz spectrum. This comes alongside minimal latency.

Through the looking glass

Smart glasses have been out of vogue for many years – especially since Google's clunky Google Glass debut. Recently, however, they've found a new lease of life thanks to improving display technology as well as more intuitive and ergonomic form factors.

One of the best examples of this is the longstanding collaboration between Meta and Ray-Ban. Although these glasses look the part, the camera functionality has received plenty of backlash, with some owners even refraining from wearing them in public.

Although the technology might be there with 6G mobile networks, there are still plenty of obstacles in the way of the number of people happy to wear smart glasses for the new form factor to really take off.

Categories: Technology

Are you a Necronomicon expert? Prove it by taking on our tricky Evil Dead horror franchise quiz

Sun, 07/19/2026 - 17:00

To celebrate Evil Dead Burn coming out in theaters this month, I've put together the ultimate quiz to test fans of the popular horror franchise.

Ever since The Evil Dead was released in 1981, the series has been a favorite among genre fans and is widely recognizable, but have you been paying attention to it? I bet you won't be able to get a perfect score on my quiz, so now's your chance to prove me wrong!

Don't worry if you haven't seen Evil Dead Burn yet, because this quiz only covers the previous movies, meaning you won't find any spoilers for the new movie lurking in here.

But there's plenty of trivia about the rest of the franchise, from the original release to the 2013 remake. These horror movies are among the most fascinating, from the scripts all the way to what happened on set.

Feeling brave? Scroll down to try out the quiz now, and see if you can survive to the very end.

How did you do? Let me know your score in the comments below, and if you're hungry for more horror trivia, why not check out my Resident Evil movie quiz ahead of Zach Cregger's adaptation, which arrives later this year.

Or we've got an ultimate Walking Dead quiz for fans of the hit zombie series. If you think you're a superfan, join other quizzers and prove your knowledge.

For more horror streaming recommendations, I've got you covered too. Take a look at the best horror movies streaming on Netflix, Prime Video, Shudder, and more in July 2026 to find something good to watch.

Categories: Technology

The quiet comeback of boring computing: why ports, keyboards, and repairability matter again

Sun, 07/19/2026 - 11:00

Up until fairly recently, laptop design followed a similar pattern, no matter whether you were picking a new Windows laptop or a MacBook.

Machines became thinner, many premium models shed ports, keyboards lost travel, and more components were soldered or glued into place.

Some companies presented these updates couched in the language of progress, even if they made computers less useful, less comfortable to use, and harder to keep alive over multiple years.

In 2026, the mood seems to be beginning to shift. HDMI and card slots have returned to premium laptops, and many manufacturers are paying closer attention to keyboards, batteries, and repair access.

Leading the way, Framework has turned replaceable hardware into its defining idea, and even Apple is showing signs that a modern laptop does not need to be an entirely sealed unit.

None of this is glamorous, which is part of the appeal: the next meaningful improvement in computing may be a machine that works well, connects to what you own, and can survive long enough to become boring.

(Image credit: Future)The laptop industry spent years mistaking subtraction for progress

Over the past 10 years, laptop design has been moving steadily towards the central tenets of thinner, lighter, and cleaner, while ports, removable batteries, and replaceable components disappeared.

The trade-offs were often presented as unavoidable – the price of owning something modern, sleek, portable.

Of course, some of these changes brought real benefits; today’s laptops are faster, quieter, and easier to carry than the bulky machines they replaced, and improvements in chip design mean they are more powerful than ever.

Problems arose though when minimalism became the goal rather than a means to an end. Removing an HDMI port saved a little space but left users carrying dongles; soldered storage reduced flexibility long after the initial purchase. The list goes on.

Several of those decisions have since been quietly reversed.

Apple returned to a more conventional keyboard after long-standing durability issues, then restored HDMI, MagSafe, and an SD card slot to the MacBook Pro.

Other manufacturers have also followed a similar path, adding ports and improving repair access without turning their laptops back into bulky desktop replacements.

Recent Surface devices have made batteries, displays, SSDs, and keyboards replaceable, while Dell and Lenovo now use modular USB-C ports in selected laptops so a damaged socket can be changed without replacing the motherboard.

These are still exceptions focusing on a few components, but they make this welcome comeback broader than a Framework-only experiment.

(Image credit: Framework)Framework designs laptops for their next owner – and their existing one

For anyone dispirited by the state of the modern laptop industry, Framework came to the rescue, building its laptops around many of the features the wider industry had abandoned.

Owners can replace the memory, storage, battery, keyboard, display, ports, and even the mainboard, while expansion cards make it possible to swap connections such as USB-C, HDMI, and an SD card reader.

Someone who bought a Framework Laptop 13 several years ago can install a newer mainboard or display without replacing the rest of the machine. A new generation does not automatically make the old one obsolete – owners can upgrade the part that matters and leave everything else alone.

It should also make buying second-hand less of a gamble, since a later owner can replace a tired battery or upgrade the mainboard rather than inheriting a sealed snapshot of the original specification.

Even the familiar design serves a purpose: Framework’s laptops may not look dramatically different with each release, but keeping the same basic chassis allows components made years apart to work together.

If we're being honest, that is far more useful than another cosmetic redesign.

Not everything is perfect with this strategy, of course. Framework machines can cost more than sealed rivals with similar specifications, and earlier models have not always matched the best laptops for battery life or overall polish.

Their long-term value also depends on a relatively small company continuing to support the platform. Even so, Framework has shown that repairability does not need to mean owning an awkward experiment rather than a normal laptop.

(Image credit: Apple)The MacBook Neo is Apple's concession, rather than a revolution

Apple’s new MacBook Neo takes a more cautious step in the same direction.

To start with, its battery is screwed into place and several ports sit on replaceable boards. Parts such as the display, speakers, and trackpad can also be removed without the level of adhesive found in many recent MacBooks.

Apple also published a repair manual from launch, a somewhat surprising move from the company, while iFixit awarded it 6 out of 10 – the best score for a MacBook in around 14 years.

The caveat – and sadly there is one – is that this makes the Neo more repairable, but not especially upgradeable.

Its memory and storage are soldered in place, so the specification chosen at checkout is the one owners will keep for the life of the machine. Given the crazy price hikes due to the AI memory boom, this can make things quite expensive.

One of its two USB-C ports is also limited to USB 2 speeds, and it lacks a backlit keyboard.

The result is that it's easier to restore or fix the original machine when something breaks, a small but meaningful achievement on an entry-level laptop, where a large repair bill can quickly make replacement look like the more economical option.

Perhaps the bigger win is that Apple has shown that a slim, polished MacBook does not need to be completely sealed shut.

(Image credit: iFixit)Repairability is useful even when you never hold a screwdriver

Most people will never replace a laptop battery or swap out a damaged port themselves, but they still benefit from a machine designed to make those jobs possible.

Accessible parts give places like independent repair shops, school technicians, and company IT teams a better chance of fixing a fault without replacing an entire assembly.

A commonplace issue like a worn battery becomes a simple routine repair, while a damaged charging socket is a small parts replacement rather than a motherboard-scale repair.

The same principle applies to ports and keyboards. These are among the most heavily used parts of any laptop, yet manufacturers have often treated them as secondary to thinness or appearance.

A useful selection of connections saves years of adapter clutter, while a comfortable, replaceable keyboard matters far more in daily use than a slightly slimmer lid.

(Image credit: Lance Ulanoff / Future)The right to forget about your computer

The most mature technologies tend to disappear into the background. We do not want to admire a laptop’s design "courage" every time we connect a monitor, replace a battery, or type for several hours.

Fundamentally, we want it to work without creating new problems – and work for as many years as possible.

Framework has pushed that idea further than anyone else, while the MacBook Neo shows that parts of it can survive inside a mainstream product.

Neither will reverse years of sealed design overnight. What they do is suggest a different measure of progress: not how quickly a computer looks old, but how long it remains useful enough to ignore.

Categories: Technology

I've spent weeks testing the Razer Hammerhead V3 HyperSpeed gaming earbuds and it's left me desperate to go back to my SteelSeries Arctis GameBuds

Sun, 07/19/2026 - 10:00
Razer Hammerhead V3 HyperSpeed: two-minute review

The first thing I thought when I pulled the Razer Hammerhead V3 HyperSpeed gaming earbuds out of their box was “Wow, these are ugly.”

Not exactly the strongest first impression, but it’s unavoidable when each bud has a weird, bulbous design that gives them an appearance like a pair of obese AirPods. The shiny black plastic material looks cheap, as does the printed Razer logo on the outside, which (despite all the Razer Chroma branding on the box) is just a decal that doesn't illuminate.

They’re thankfully not uncomfortable to wear, but even in your ears they’re nowhere near as stylish as similarly priced competitors like the SteelSeries Arctis GameBuds.

With much flatter sound, they’re significantly less versatile (especially if you’re after a pair of gaming earbuds that you can also use to listen to music) and offer fewer features than that model to boot, with inferior active noise cancellation (ANC) that fails to block out most background noise when you’re out and about.

(Image credit: Future)

The Razer buds’ biggest benefit is the use of the latest Bluetooth 6.0 standard, which allows for ultra-low-latency connectivity with compatible devices and is ideal if you’re a serious mobile gamer looking for something to use with the latest phones. The included 2.4GHz Razer HyperSpeed Wireless dongle is also impressively compact and offers similar low-latency performance on PC, PlayStation 5, and handhelds like the Nintendo Switch 2.

This alone might be worth the compromises elsewhere if you’re a really serious mobile gamer, though there are a few more things worthy of praise. The included case is well-designed and feels pretty high quality, with an attractive RGB strip that is illuminated to denote pairing or charging status. I also really like how you don’t have to take the dongle if you want to use it: simply plug the case into your machine, and you’re ready to go, which makes it basically impossible to leave behind.

Find the Razer Hammerhead V3 HyperSpeed gaming earbuds at the right price - and they could be a good pick.

Razer Hammerhead V3 HyperSpeed review: price & availability
  • Costs $129.99 / £129.99 / AU$229.95
  • Available via Razer right now
  • Availability at other retailers seems spotty

The Razer Hammer V3 HyperSpeed gaming earbuds cost $129.99 / £129.99 / AU$229.95 if you buy them directly from Razer, which is where I would recommend getting them, as stock at other retailers seems spotty.

If you do choose to buy from the likes of Amazon, be mindful not to accidentally purchase the cheaper Razer Hammerhead V3 X or older Razer Hammerhead True Wireless X model, as they look very similar.

At this price, the earbuds are going head to head with the likes of the SteelSeries Arctis GameBuds, which originally launched at $159.99 / £159.99 / AU$359 but are now regularly discounted to around $130 / £100 in the US and UK.

Even factoring in the added $30 / £30 at full price, I think the Arctis GameBuds are much better value. They offer a much more stylish design, versatile sound that you can easily customize with hundreds of selectable EQ profiles, in addition to slightly better overall battery life.

Razer Hammerhead V3 HyperSpeed review: specs

Razer Hammerhead True Wireless X

Price

$129.99 / £129.99 / AU$229.95

Weight

0.19oz / 5.6g (each bud); 2.22oz / 63g (case)

Compatibility

PC, PS5, mobile, Nintendo Switch, Nintendo Switch 2

Connection type

2.4GHz HyperSpeed Wireless / Bluetooth 6.0

Battery life

~40 hours

Features

THX Spatial Audio license included

Software

Razer Audio (mobile) / Razer Synapse (PC)

Razer Hammerhead V3 HyperSpeed review: design and features
  • Look bulky and dated
  • THX Spatial Audio support
  • Case is good

You should know by now that I’m not a big fan of how these earbuds look. They have a basic stemmed in-ear design with quite a bulbous body constructed from shiny black plastic and a cheap-looking green Razer decal on the back. They honestly look like something you’d buy on Amazon for under 50 bucks rather than a product from a premium gaming brand.

The case is much better, at least. It’s large, but still easily pocketable, and has a pleasant matte texture to its exterior and a very robust hinge with satisfyingly strong magnets. There’s a subtle strip of LED lighting on it as well, which lights up in an attractive rainbow pattern when the case is opened. It also illuminates different colors to denote charging or pairing status, battery level, and so on, which makes it surprisingly practical as well.

Inside the case, there’s plenty of space for the two earbuds and a little slot for the compact HyperSpeed Wireless dongle. When in the case, the dongle is nestled inside a Type-C port with passthrough connectivity. This means you can plug the entire case directly into your PC or console in order to pair the buds, which is pretty handy and helps keep everything in one place.

Aside from this, the Razer Hammerhead V3 HyperSpeed gaming earbuds don’t have a particularly expansive feature set compared to the offerings of other brands. The earbuds support ANC and a transparency mode, in addition to automatic pausing when removed from your ears. The compatible software offers three default EQ profiles (for gaming, music, and movies, respectively) plus the ability to create your own.

On PC, the buds come with a license key for THX Spatial Audio, which simulates 360-degree sound decently well and is a solid bonus.

(Image credit: Future)Razer Hammerhead V3 HyperSpeed review: performance
  • Sound is okay
  • ANC is poor
  • Decent battery life

Although it is impressively low-latency and thus suited for competitive gaming, I found the sound of the Razer Hammerhead V3 HyperSpeed to be so-so compared to similarly priced alternatives. In the default gaming preset, the bass is plenty punchy, but they lack clarity and sounds quite muffled in the high end. It’s good enough for the likes of PUBG: Battlegrounds or Counter-Strike 2, but would be an incredibly poor fit for more story-driven titles.

The music-listening experience is bad, and no amount of EQ tweaking could remedy the uninspiring sound. I would recommend swerving the default music EQ as well, as it’s absolutely rancid and tanks not only the bass but also the low mids, leading to sound that’s not dissimilar to that produced by the free earbuds you get on an airplane.

Alternating between the Razer Hammerhead V3 HyperSpeed and the SteelSeries Arctis GameBuds, there is simply no contest: the SteelSeries pair sounds better no matter what you throw at it, and the fact that it can handle music too means that you don’t need to buy a second pair to use with your phone.

The ANC also underperforms compared to alternatives, be they the GameBuds or others such as the Sony Inzone Buds. It fails to block out much background sound and even struggles to drown out the consistent, low noise from a desk fan. If you want to take these on a plane, just forget about it.

The microphones are okay, but not particularly reliable. With any kind of background noise, they can begin to struggle to pick up your voice - which had me relying on my desktop mic instead. Touch controls are quite awkward as well. They feel unresponsive and struggle to pick up inputs, leading to frequent accidental pauses or skips if you’re trying to use them for your tunes.

The battery life is at least one area where the Razer Hammerhead V3 HyperSpeed doesn't disappoint. I easily managed 7-8 hours per charge with the buds, and the case holds enough to fully top them up about four times when you're on the go.

(Image credit: Future)Should I buy the Razer Hammerhead V3 HyperSpeed?Buy it if…

You’re after low latency at all costs
These are some of the few gaming earbuds with Bluetooth 6.0 support, which might be a compelling reason to buy if that’s what you’re after.

Don’t buy it if…

You crave premium sound
The Razer Hammerhead V3 HyperSpeed gaming earbuds deliver unexceptional sound for the price. You can easily find alternatives that sound better for the same money.

You want more features
The Razer Hammerhead V3 HyperSpeed gaming earbuds also have fewer features than the competition, particularly the likes of the SteelSeries Arctis GameBuds with its many software options.View Deal

Razer Hammerhead V3 HyperSpeed review: also consider

Here are two more compelling options to weigh up.

Razer Hammerhead V3 HyperSpeed

SteelSeries Arctis GameBuds

PlayStation Pulse Explore earbuds

Price

$129.99 / £129.99 / AU$229.95

$159.99 / £159.99 / AU$359

$199.99 / £199.99 / AU$329

Weight

0.19oz / 5.6g (each bud); 2.22oz / 63g (case)

0.19oz / 5.3g (each bud); 1.7oz / 48.7g (case)

0.2oz / 6.5g (one earbud with medium tip)

Compatibility

PC, PS5, mobile, Nintendo Switch, Nintendo Switch 2

Xbox, PlayStation, Nintendo Switch, PC

PS5, PlayStation Portal, PC, mobile

Connection type

2.4GHz HyperSpeed Wireless / Bluetooth 6.0

2.4Ghz (via USB-C), Bluetooth 5.3 (mobile)

PlayStation Link wireless, Bluetooth (mobile)

Battery life

~40 hours

Up to 40 hours (buds 10 hours; case 30 hours)

5 hours with 10 hours from the charging case

Features

THX Spatial Audio license included

360° Spatial Audio, Qi Wireless Charging Case, 6mm neodymium drivers, four-mic ANC, transparency mode, in-ear detection/sensor, IP55 rating, fast charge, companion app with more than 100 presets

Planar Magnetic Drivers, AI-enhanced noise rejection, Dual Device connectivity, 3 sets of ear tips

Software

Razer Audio (mobile) / Razer Synapse (PC)

Arctis Companion App (mobile), SteelSeries Sonar (PC)

N/A

SteelSeries Arctis GameBuds
The SteelSeries Arctis GameBuds are the wireless gaming earbuds to beat right now. They offer great sound out of the box, plus hundreds of customizable EQ presets that make them perfect no matter what you are playing.

For more information, check out our full SteelSeries Arctis GameBuds review

PlayStation Pulse Explore earbuds
If you’re shopping for earbuds to use with a PS5, then the official PlayStation Pulse Explore earbuds are a decent pick. They sound far better than the Hammerhead V3 HyperSpeed pair thanks to their planar magnetic drivers.

For more information, check out our full PlayStation Pulse Explore earbuds review

How I tested the Razer Hammerhead V3 HyperSpeed
  • Tested for multiple weeks
  • Used with PC and mobile
  • Compared to other gaming earbuds

I tested the Razer Hammerhead V3 HyperSpeed gaming earbuds for multiple weeks across both PC and mobile, playing a range of different games.

This included plenty of Call of Duty: Black Ops 7, PUBG: Battlegrounds, Battlefield 6, Forza Horizon 6, Grand Theft Auto 5, and more, in addition to mobile titles like Neverness to Everness, and Call of Duty Mobile.

Throughout my time with the buds, I compared the experience to my hands-on testing of other gaming earbuds, including the SteelSeries Arctis GameBuds and other products featured on our best gaming earbuds guide.

Read more about how we test

First reviewed July 2026

Categories: Technology

I'm worried about the future of MacBooks — and these M7 chip rumors are to blame

Sun, 07/19/2026 - 09:00

Apple's MacBooks seemingly have some big changes on the horizon. One of the biggest is the rumored MacBook Ultra packing that OLED screen, and this is something to be excited about, don't get me wrong. Well, worries about the price aside, and wider issues around Mac pricing overall, but there's something I'm more concerned about now.

Namely the direction in which Apple is heading with its M-series silicon, following the latest rumor dump from prolific leaker Mark Gurman. In last weekend's Power On newsletter for Bloomberg, Gurman dropped a whole lot of fresh info about Apple's CPU roadmap and the incoming M6, M7 and M8 chips.

The leaker tells us — and bear in mind, this is all just rumors, but eye-opening speculation nonetheless — that Apple is doing something very different with the next range of M silicon. The M6 will consist of just a vanilla chip, with no more powerful variants, which isn't something Apple has ever done before — there's always been a Pro and Max version (if not an Ultra, too).

This is because Apple apparently wants to usher in the M7 series more swiftly, with the M6 debuting late this year and the M7 following in the first half of 2027, just six months (or so) later. The M7 will have a full complement of Pro, Max and Ultra chips, the former two following at the end of 2027, with the Ultra in 2028. Gurman believes this is Apple's current plan and the reason for rushing to get to the M7 is AI.

Cue multiple groans, no doubt. Gurman theorizes: "The reason for this break with tradition: AI. Apple had been planning major neural-processing upgrades for the M7 family and ultimately decided those improvements were important enough to justify accelerating the next generation rather than completing the M6 lineup."

We're further told that beyond this, Apple is "already developing M8 chips with even greater AI capabilities" to land in 2028.

Gurman concludes: "The takeaway is that AI is no longer just another feature Apple's chips need to support. It is now shaping how those products are designed and when they are shipped."

A wise path to follow?

(Image credit: Lance Ulanoff / Future)

So, what am I worried about here exactly? Obviously there's a strong suggestion that AI is taking much more of a center stage role with Mac chips, and given what's currently going on with MacBooks, I've got to wonder about the wisdom of this — and how it might affect Apple's PC sales.

Currently Mac sales are strong and considerably buoyed by the launch of the MacBook Neo in March 2026, a budget laptop that has undoubtedly flown off the shelves. However, Apple's recent price hikes have poured cold water on those sales prospects to an extent, even hitting the MacBook Neo, which went up by $100 in the US (£100 in the UK, and AU$150 in Australia).

Granted, while it's odd for a device to get a price rise like this so soon after launch, given the demand around the Neo, it's not going to be sidelined with this increase (although the upper-tier model with 512GB storage now looks shakier and out of budget territory, frankly). The harder pill to swallow is the harsher MacBook Air price hikes, and as we pointed out a few weeks back, some wallet-friendly Windows 11 laptops now look a lot more tempting after Apple's price increases.

Looking on Reddit, it's not hard to find a lot of unhappiness about the MacBook price hikes. There's considerable angst from some people who were thinking of pulling the trigger on a new Apple laptop, and then watched those price increases swoop in, and are now feeling the opposite of buyer's remorse (holdout's regret?). Some of those folks are acting with their wallets, closing them and vowing to wait for a better buying opportunity now that they've missed the boat, as it were.

That could be a long wait, though. Of late, we're hearing a lot of gloomy news about the RAM crisis getting worse later this year, and in 2027 — maybe a lot worse. The memory supply situation is what caused Apple to jack up Mac prices, of course, and it's difficult to see how the MacBook maker will continue to weather this storm if it worsens next year, given that its resources in terms of built-up inventory of RAM (or SSDs) are clearly running dry (or have run dry).

Rumors have continued to persist about Apple potentially tapping Chinese memory chip makers for its RAM needs, as an alternative to the big three mainstream suppliers (Micron, Samsung, SK Hynix). That's a worrying development in itself, and it's doubtful whether even Tim Cook can pull off navigating that kind of negotiation before he leaves his Apple CEO role (there are various possible hurdles to clear and governmental complications, put it that way).

Diving into AI headfirst

(Image credit: Apple)

I don't think any of this bodes particularly well for next year's Mac sales given the prospect of pressure around more price hikes (although yes, other PC makers face the exact same unfavorable conditions). And then we come back to this apparent renewed focus on AI, which hasn't gone down well on Reddit and other social media.

Here's one Redditor who sums all this up neatly: "I was about to buy a new MacBook to replace my M1 Pro with an ailing battery and small storage. But then Apple jacked up the prices by almost 20%. And now they are diving into AI headfirst. It might be time for me to look at Framework laptops."

There's a strong backlash against AI right now, whether that's about sprawling data centers and them chugging huge amounts of power, or Copilot in Windows 11 and indeed Apple Intelligence. So, it's no surprise that the idea of "diving into AI headfirst" has been greeted by a lot of skepticism.

What exactly is Apple Intelligence going to serve up in terms of compelling features in the next year or two? The trouble is that this feels very much up in the air, yet Apple is supposedly building its Mac strategy around this now. It seems like a bit of a leap into the unknown to say the least, and I'm not surprised that it's making Mac fans nervous.

Okay, so this AI focus is still just a rumor, although Gurman is one of the more reliable Apple sources out there, and it appears to be a well enough fleshed-out piece of speculation. Even if it's true, Apple may yet switch away from this course, but for now, I'm struggling to find the logic of shifting to a heavier AI focus so soon.

Maybe the reasons for this will become clearer as we see how Apple Intelligence develops in the near future. However, in the meantime, I think there are reasons to be concerned about Mac sales potentially flagging next year, between disgruntled MacBook holdouts, the continued RAM crisis, and cynicism around Apple's apparent new AI-led approach.

Categories: Technology

Think you're the ultimate Tom Holland Spider-Man fan? Put your knowledge to the test against our Marvel mastermind in this tricky MCU quiz

Sun, 07/19/2026 - 08:00

2026 is a big year for Tom Holland. The popular actor has already appeared in one of this year's most anticipated new movies in Christopher Nolan's The Odyssey, and he'll soon be wearing his iconic superhero spandex once more when Spider-Man: Brand New Day releases later this month.

Starring in two of 2026's biggest films would be worth cheering about in itself. However, this year also sees Holland celebrate the 10th anniversary of his debut in the Marvel Cinematic Universe (MCU), which happened in 2016's Captain America: Civil War. Hey, I wasn't lying when I said 2026 was a big year for the A-lister.

With six MCU apperances already under his belt, Holland is now a certifiable stalwart of Marvel's cinematic juggernaut — so much so, in fact, that I believe some of you consider yourselves to be the biggest Tom Holland Spider-Man superfan.

Well, now is the time to put your superhero skills to the test. Below, I've rounded up 35 questions — some are way tougher than others — about Holland's wallcrawling career so far, including a query or five about Spider-Man 4.

So, what are you waiting for? Load up your web shooters and swing on over to the forthcoming quiz, and see if you have what it takes to be crowned the ultimate Holland Spider-Fan. Good luck!

For more on the forthcoming Marvel Phase 6 film, find out everything we know so far about Spider-Man: Brand New Day. Keep your eyes fixed on TechRadar later in July, too, for even more coverage of the hotly-anticipated movie.

Spider-Man: Brand New Day thwips its way into theaters on July 29 (UK) and July 31 (everywhere else).

Categories: Technology

What is the release date for Avatar Aang: The Last Airbender on Paramount+?

Sun, 07/19/2026 - 08:00

2026 is giving us Aang squared. Not only did Netflix give us Avatar: The Last Airbender season 2 in late June, but now Paramount+ returns to its popular animated franchise with Avatar Aang: The Last Airbender.

The title is only slightly changed, but the difference between the two stories is huge. In the latter, it's been 13 years since the gang defeated Lord Ozai and the Fire Nation, and attentions have turned to a new airbender called Tagah.

Together, Aang and Tagah embark on a global quest to find the relic before a group called The Denied. But, will they succeed — and when does Avatar Aang: The Last Airbender arrive on Paramount+?

What time can I watch Avatar Aang: The Last Airbender on Paramount+?

If you avoided seeing Avatar Aang: The Last Airbender when it was leaked in full earlier this year, you'll be able to catch it on one of the world's best streaming services on July 25, 2026.

Like the streamer's other releases, such as The Madison and Landman, we can expect this Paramount movie to arrive at 12am PT. Here's when it will be released in other nations globally:

  • US – 12am PT / 3am ET
  • Canada – 12am PT / 3am ET
  • UK – 8am BST
  • India – 1:30pm IST
  • Singapore – 4pm SGT
  • Australia – 7pm AEDT
  • New Zealand – 9pm NZDT
When do new episodes of Avatar Aang: The Last Airbender come out?

(Image credit: Paramount+)

Unlike the original series, Avatar Aang: The Last Airbender is actually a feature-length film. Clocking in with a runtime of 99 minutes, that's roughly the equivalent of four episodes of the original series.

For those who want to watch it on the big screen, it's also getting a theatrical release. However, only select theaters in New York and Los Angeles will be showing it between July 24 and 30. You'll need to be quick, then, to secure your tickets to experience it during its limited run in cinemas.

Categories: Technology

Don’t let unreliable free VPNs ruin your World Cup Final watch party – here’s the cheapest way to watch securely

Sun, 07/19/2026 - 08:00

It’s finally here – at 3pm ET / 8pm BST, Spain and Argentina step onto the pitch at the MetLife Stadium in New Jersey for the 2026 World Cup Final.

Arguably, today’s match is the sporting event of the year – and as such, fans will be tuning in from every corner of the globe.

If you’re hoping to catch the match but want to keep your connection secure, or want to access streams from your home region while travelling abroad, a VPN is a great way to establish a fast, safe connection to your streaming service of choice.

It can be tempting to pick up one of the best free VPNs for your World Cup watch party, but these aren’t always as reliable as their paid counterparts. PrivadoVPN is one of the more cost effective options on the market for a reliable, fast, and secure paid VPN, offering real upgrades over its free counterpart.

PrivadoVPN: from $1.11/month or $10.99 for one month

PrivadoVPN is our pick for the best value VPN for the 2026 World Cup Final. In our testing, it offered fantastic top speeds of up to 2,334Mbps, offers a variety of server locations, and comes with useful features like a powerful ad-blocker and content controls. What’s more, PrivadoVPN is one of the cheapest paid VPNs on the market when you opt for a long-term plan, with an equivalent price of as little as $1.11 per month. Its pay-monthly rate of $10.99 per month is pretty competitive, too. View Deal

Free VPNs come with compromises

Stepping up to PrivadoVPN's paid tier removes restrictive data caps (Image credit: PrivadoVPN)

Free VPNs include restrictions that aren’t present on their paid counterparts. These might not be an issue for everyday browsing, but can be a real problem for video streaming.

Issues with free VPNs can include restrictive data usage limits, limited server locations or connection to a random location, and slower network speeds.

For crucial sports events like the World Cup Final, the last thing you want to deal with is buffering, a blurry, low-resolution picture, or a connection to the wrong country.

Luckily, upgrading to a paid VPN doesn’t have to be expensive. For a competitive price, PrivadoVPN’s paid edition does away with its free version’s 10GB data cap and ups its single connection limit to 10 devices at once.

Other options

If PrivadoVPN isn’t for you, there are other options on the market. TechRadar’s VPN Editor Rob Dunne has made his pick for the World Cup Final with NordVPN, which tops our list of the best VPNs overall.

If you’re looking to save money, our pick for the best cheap VPN is Surfshark VPN, which offers a comprehensive feature set but isn’t quite as cheap as Privado VPN.

Categories: Technology

Which DJI camera should I buy? Here's our essential guide to your options, including the results of our in-depth testing

Sun, 07/19/2026 - 08:00

Historically, the DJI brand has been all about drones. It remains an undisputed leader in that category, but in recent years its also solidified a name in compact cameras for content capture.

The two key ranges are the Osmo Action and the Osmo Pocket. The Action is DJI's classic action camera, with a rugged build designed to happily capture high-quality content no matter how much you bump, drop, submerge, freeze, or generally throw it about. The Pocket is a compact, image-stabilizing gimbal camera designed for vloggers. It can easily switch between vertical and horizontal shooting, and is set up to make selfie capture easy. There are also a couple of outliers: the Osmo 360 360-degree camera and the tiny, wearable Osmo Nano.

Most of these cams are leaders in their respective categories — this brand crops up in numerous best-of lists, including the best action camera, best 360 camera and best vlogging camera. If you're thinking of buying one but aren't quite sure of your options, or which to pick, you've come to the right place.

Our camera review team has tested every single one of the DJI cameras currently available to buy, and below you'll find a quick guide to the different models, plus summaries of our main testing takeaways, and links to read the full review for each (hit the More details button).

Note: You will only see cards for the products available to buy in your region. Due to FCC fun and games, not all new models are available in the US.

DJI Osmo Action

Osmo Actions are traditional action cameras — DJI's answer to a GoPro. They sport an all-in-one design, with all the hallmarks you'd expect from a good action cam: a robust, waterproof, compact design, front and back screens, mics, and features like time-lapse, slow-mo and (on newer models) subject tracking.

The current generation is the Osmo Action 6, but the Osmo Action 5 Pro (there's no not-Pro version, so treat this like a naming quirk) and the Osmo Action 4 are widely available too, including direct from DJI. It's also quite easy to get hold of an Osmo Action 3.

The specs and features differ slightly from model to model — you can see our review of each one by hitting the 'More details' button, and this DJI Osmo Action comparison page is useful for highlighting the differences.

You'll struggle to find either now, but the two previous models are the Action 2 and the original Osmo Action. The Action 2 was a particularly interesting swerve from DJI — it looked completely different from the rest of the range, with a modular build. For the third gen, DJI pivoted straight back to a more traditional all-in-one design, and that's what it's stuck with ever since.

DJI Osmo Action 6

Read our full review

Pros
  • Larger 1/1.1-inch sensor
  • Great image quality
  • Impressive battery life
  • Expanding modular system
Cons
  • Aggressive in-camera processing
  • Fiddly accessory attachment point
DJI Osmo Action 5 Pro

Read our full review

Pros
  • Good dynamic range and detail
  • Dual OLED screens
  • Waterproof to 20m without case
  • Long battery life
  • Works superbly with DJI Mic 2
Cons
  • No 5.3K+ video option
  • SuperNight mode is merely okay
DJI Action 4

Read our full review

Pros
  • Much improved image quality
  • Wider FOV than the main competition
  • Excellent stabilization
  • Incredibly convenient mounting
Cons
  • Minimum 0.4m focus distance
  • Middling battery life
  • Old-school microSD card limits potential
DJI Osmo Action 3

Read our full review

Pros
  • Incredibly convenient mounting
  • Best-in-class diving depths
  • Wider FOV than the main competition
  • Excellent battery performance
  • Handy front touchscreen
Cons
  • Poor lowlight performance
  • 360-degree horizon leveling caps at 2.7K
  • Worse video quality than the best GoPros
  • Photography modes aren’t competitive
DJI Action 2

Pros
  • Premium, smart modular design
  • Smaller than rival action cams
  • Class-leading horizon leveling
  • Wider FOV than Hero 10 Black
  • Punchy AMOLED display
Cons
  • Overheating limits clip length
  • Muted default color profile
  • Uninspiring low-light performance
  • Extra modules aren’t waterproof
  • No external audio source recording
DJI Osmo Pocket

Osmo pockets are compact, gimbal-stabilized 4K cameras designed specifically for vlogging. The current model is the DJI Osmo Pocket 4 — although it's not yet sold in the US. The Osmo Pocket 3 is still widely available to buy, as (to a certain extent) is the DJI Pocket 2.

Both the 3 and 4 boast a compact design, excellent video stabilization, crisp 4K video, the ability to swap easily between vertical and horizontal shooting. The 4th gen version polishes things up a bit, improving the slow-mo mode, bumping up the video specs, tightening up the subject tracking and making it available in more modes, boosting battery life and increasing the internal memory. It also adds a magnetic gimbal arm, onto which accessories such as fill lights can be snapped.

If you're not quite sure about the Pocket range, another option for content creators is to stick with your phone for recording, but add in a DJI Osmo Mobile — a smartphone gimbal with advanced tracking capabilities.

DJI Osmo Pocket 4

Read our full review

Pros
  • Very sticky subject tracking
  • More headline features available in more shooting modes
  • Built-in storage added
  • Attractive color profiles
Cons
  • Feels like a 'playing it safe' upgrade
  • Just 4K video, just a single camera
  • Can get warm when using the power-hungry features
DJI OSMO Pocket 3

Read our full review

Pros
  • 1-inch sensor
  • Bigger and better screen
  • Portrait recording option
  • Slow-mo mode now up to 4k at 120fps
Cons
  • Usability of touchscreen needs improvement
  • Can get hot when filming
  • No built-in storage
DJI Pocket 2

Read our full review

Pros
  • The most pocketable, stable camera around
  • Creator Combo perfect for vloggers
  • Very useful tracking feature
Cons
  • Poor low light performance
  • Struggles with high-contrast scenes
  • Can get hot while filming 4K
Outliers

Finally, there are a couple of (as-yet) standalone DJI cameras. The DJI Osmo Nano is a shrunk-down and stripped back version of its Action series. Small enough to be mounted on a pendant or hat, it's designed for on-the-go content capture. The magnetic, modular design makes it nice and versatile.

The Osmo 360 is a DJI's first 360-degree camera, and we thought it was "undeniably extremely compelling" first effort. We were impressed with the pricing too, which is very competitive within that particular market.

DJI Osmo Nano

Read our full review

Pros
  • Superb value
  • Onboard storage (64GB or 128GB)
  • Package is lighter than Insta360 Go Ultra
  • Good dynamic range and deep colors
Cons
  • Dock is only splashproof
  • Non-removable batteries
  • Interface is less intuitive than rivals
DJI Osmo 360

Read our full review

Pros
  • Affordable price for premium performance
  • Works with DJI microphones
  • Built-in storage
Cons
  • Non-replaceable lenses
  • Not suitable for underwater video at launch
Categories: Technology

I tested the Eufy Omni S2 robotic vacuum — and it's expensive and impressive in equal measure

Sun, 07/19/2026 - 07:00
Eufy Omni S2: two-minute review

Eufy’s latest flagship robotic vacuum and mop, the Omni S2 is a hugely impressive appliance that combines excellent mopping with brilliant vacuuming to create one of the best home cleaning systems you can buy. It also self-cleans so thoroughly that, after several weeks of daily use, the dust bin, rollers and mop still looked like new.

The Omni S2 uses warm water to clean its spinning mop as it goes, while also scraping away dirt and using cyclone technology to whisk dust more efficiently into the onboard bin, instead of leaving it to clog up the filters. Water is ozonated in the base station to further improve cleaning performance, and there’s an integrated detergent system too.

The robot itself can even be fitted with a fragrance diffuser, which makes your room smell nice after every clean; three different scents are included in the box and, along with the detergent, and can be replenished from Eufy’s website.

(Image credit: Future)

It navigates well, mostly avoiding contact with walls and doors while driving very closely to all manner of obstacles without pushing them around, driving over them or ingesting them. The S2 is good at climbing over raised carpets, rugs and door thresholds — something the Omni S1 struggled with – and the app does a great job of quickly mapping your home, with a simple editing system for labeling every room correctly, and even adding virtual furniture.

I was impressed by how quiet the Omni S2 is, even with its powerful Cyclone mode engaged, and how the base station doesn’t sound like an Airbus when emptying the robot. It’s a very expensive product, but one that looks good and performs extremely well.

Eufy Omni S2: price and availability
  • List price: $1,599 / £1,599 / AU$2,299
  • Launched: March 2026

Just two years on from the launch of the Omni S1 Pro, Eufy now has the Omni S2. This is now the company’s flagship robotic vacuum and mop, with a price, performance and feature set to match.

It carries a recommended retail price of $1,599 / £1,599 / AU$2,299, making it £300 more expensive than the S1 pro, which remains on sale. That’s an awful lot of money for a vacuum cleaner — especially when

Eufy’s own range of robovacs starts under the £150 mark, and one of my favourites — the X10 Pro Omni vacuum and mop — is a comparative snip at £599.

What does the extra £1,000 get you with the S2? More power, of course, with greater suction thanks to Eufy’s new AeroTurbo 2.0 tech, improved intelligence, greater threshold clearance, a more powerful mop, better computer vision, a self-cleaning mop, electrolysed water, integrated detergent and even a built-in fragrance system with three included scents to pick from.

An additional cost to bear in mind is Eufy’s replacement parts kit. The brushes, bags, mops and rollers of all vacuum cleaners need replacing, so ongoing costs aren’t unusual, but Eufy likes to charge plenty. A complete kit for the S2 is £79.99. Premium parts for a premium robovac, I suppose. More welcome is Eufy’s new two-year warranty, which applies to all robot vacuums launched in 2026 and doubles the previous coverage.

  • Value score: 3.5/5
Eufy Omni S2: specifications

Specification

Detail

Max suction

30,000 Pa

Robot diameter

350 mm

Robot height

3.4 in / 85 mm

Dock dimensions

15.0 x 17.7 x 26.4 in / 380 x 450 x 670 mm

Dust bin volume (base)

2.5 litres

Water tank volume (base)

3L (clean) 2L (dirty)

Base type

Charge, auto-empty, hot water mop wash, hot air mop dry, clean water refill, self-clean

Max threshold clearance

Up to 1.7 in / 42mm

Mop type

Self-cleaner roller

Mop pad lifting

1.10 in / 28 mm

Max runtime

180 minutes

Eufy Omni S2: design
  • Docking station with charger, dust bag, water tanks and mop drying
  • Rotating, self-cleaning mop
  • Integrated detergent and fragrance supply

The S2 has a similar but more refined look than its S1 predecessor. The subtle bronze tint to sections of the robot and docking station give it a premium aesthetic that blends nicely with the futuristic lighting in both the clean water tank of the dock, and the robot’s onboard dust bin.

Taller than many docking stations, but significantly more elegant than most, the Omni S2’s appearance helps to justify its lofty price tag — and that’s further aided by the display and touch controls on top of the dock. These are handily located to press without stooping down to the robot itself, while the screen is useful for checking on the robot’s status and spotting error messages.

FutureFutureFutureFuture

Short of making you a cup of tea while the robot cleans up, the S2’s docking station does absolutely everything. It charges the robot, empties its dust bin, replenishes its water supply (and even ozonates fresh water before it’s fed to the mop), cleans the mop with water heated to 70 degrees centigrade, dries it with hot air, refills the detergent tank, and has enough dust bin capacity for up to a claimed 68 days between bag replacements.

The robot itself is almost circular, with a central roller that’s claimed to be 100 percent tangle free, a pair of spinning side brushes, and a roller mop that self-cleans, slides outwards by 1.5cm to reach into corners and even an onboard fragrance supply to make your home smell nice. The S2 includes three different fragrances in the box, but these are a bespoke design so replacements can only be bought from Eufy itself. The same goes for the detergent bottle too, while thankfully the 2.5-litre dust bags are generic.

FutureFutureFutureFuture

I like how the Omni S2 looks. Its design is more sophisticated than that of the S1, and I can imagine it neatly complementing the lavish houses of its deep-pocketed buyers. And while tall, at 670mm (26.4 inches), the docking station is relatively slim.

The robot is also relatively short, at 85mm. This compares favorably against taller, bulkier robovacs like the Dyson Spot+Scrub AI, which towers over the Eufy at 110mm and is less capable of cleaning beneath low furniture.

A welcome design upgrade for the Eufy Omni S2 is its ability to now clear door thresholds up to 4.2cm tall, up from just 2cm for the Omni S1. I was often left frustrated by that robot’s inability to drive up from exposed floorboards to a carpeted neighboring room, but have had no such issues with the S2.

  • Design score: 5/5
Eufy Omni S2: performance
  • Impressive vacuuming
  • Excellent mopping
  • Strong improvement over the S1

From the setup process and mapping, to vacuuming, mopping, navigation and self-cleaning, the Omni S2 is a triumph. You might say it should well be for the massive price tag, but even in 2026 it’s rare for such a complex new product to impress so universally. Where the Eufy Omni S1 struggled in some key areas — navigation, threshold clearance and sometimes even vacuuming — the S2’s performance is close to perfect.

Yes, it’s an ultra-premium product with a price to match. This is right up there with your Leica camera, Rimowa suitcase and five-figure turntable. I imagine the typical Omni S2 owner is the sort of person who wouldn't blink at splashing out on a pair of Apple AirPods Max 2 at the airport because they forgot their first-gens at home. They’d probably deal with a flight delay by picking up a new Swiss watch, too.

(Image credit: Future)

And that’s absolutely fine. Whatever the product, there’s always something that happens to sell the most expensive one, and for robotic vacuums that just so happens to be Eufy with the Omni S2. That doesn’t inherently count against it, because there are always customers happy to pay a premium for the one they like, or not really care about the cost because the S2’s spec sheet, design and feature set already put it at the top of the market.

What matters is how it performs in the real world, and how that compares to user expectations. Naturally, mine were at an all-time high and the S2 mostly delivered. The vacuuming performance is noticeably better than with the S1, and after a month of testing I still smile at the neat stripes vacuumed into my lounge carpet — and at how pleasant the S2’s fragrance system makes every room smell.

(Image credit: Future)

Eufy has improved navigation since the S1, and now the S2 is smart enough to not vacuum over the tasselled ends of a rug. It also automatically detects rug and carpet thickness, then raises itself by up to 50mm (1.97 inches) to prevent getting stuck in deep-pile fabric. In my testing, the S2 flagged a potentially tricky bit of carpet — which was actually an integrated but deeply contoured door mat — so I could tell it to ignore the concern or permanently avoid it.

Navigation and map creation is generally good. The robot only once got stuck and called for help, and I was impressed by how quickly the S2 mapped the ground floor of my home and did a decent job of detecting room boundaries. I used the app to fine-tune these, and was pleased to see how the S2 had added 3D cupboards, sofas, tables, chairs and other bits of furniture to the map. This isn’t strictly necessary, but it’s nice to see how the S2 correctly understands its environment.

(Image credit: Future)

Eufy claims a maximum suction of 30,000Pa, which is a huge upgrade over the 8,000Pa of the Omni S1 and other Eufy robots like the X10. There are four suction modes — Quiet, Standard, Turbo and Max — three options of cleaning intensity, three water levels, and the option of performing each cleaning task once or twice. As with the S1, the S2 returns to base whenever it needs to empty its bin, clean the mop, replenish its water supply or charge the battery. A mode called AI Automation promises to adjust cleaning strategy based on room type, floor material and cleaning frequency.

The Omni S2 deeply impressed during the first few weeks of general use, keeping hard floors and carpets clean — even after a cockapoo puppy joined our household, and his insistence on helping with garden projects brought a lot of dirt into the house. It was a joy, quite frankly, to have the S2 on hand, ready to clean up after every chaotic evening of dog zoomies.

(Image credit: Future)

I also loved how the S2 kept itself clean. Not only is the mop cleaned and dried with every use, but the cyclone-style dust collection ensures the onboard bin is practically spotless after each empty, and the filters don’t get clogged up. The rollers also looked like new after many hours of use, thanks to an anti-tangle design that actually works.

The mopping system works as well as the S1’s — evidenced by the absolutely filthy water collected in the waste tank of the docking station. I’d recommend owners empty this frequently, because if you wait a couple of weeks or so until it’s full, pouring it away is a seriously stinky process.

(Image credit: Future)

During TechRadar’s standardized robovac tests the Omni S2 continued to perform very well. These tests include two rounds of vacuuming on both carpets and hard floors, plus an obstacle avoidance test and a mopping test.

Pleasingly, the Omni S2’s vacuum performance is better than its predecessor, the two-year-old Omni S1. Vacuuming up oats from carpet was particularly impressive, with not a single piece being missed (except where I set the target zone in slightly the wrong place).

@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap');@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap');#fv-chart-1784294155314-yqci7jgyv *, #fv-chart-1784294155314-yqci7jgyv *:before, #fv-chart-1784294155314-yqci7jgyv *:after, #fv-chart-1784294155314-yqci7jgyv-slideshow *, #fv-chart-1784294155314-yqci7jgyv-slideshow *:before, #fv-chart-1784294155314-yqci7jgyv-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1784294155314-yqci7jgyv, #fv-chart-1784294155314-yqci7jgyv-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1784294155314-yqci7jgyv {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1784294155314-yqci7jgyv .fv-inner-wrapper {color: #1F2937 !important; background-color: #ffffff !important;padding: 1.5rem 1.5rem 2rem !important; border-radius: 0.5rem !important;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1) !important;margin: 1rem 0 !important; display: flex !important; flex-direction: column !important;overflow: hidden !important;}#fv-chart-1784294155314-yqci7jgyv .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1784294155314-yqci7jgyv.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1784294155314-yqci7jgyv.fv-full-bleed .fv-inner-wrapper {padding: 0 !important;border-radius: 0 !important;box-shadow: none !important;margin: 0 !important;background-color: transparent !important;}#fv-chart-1784294155314-yqci7jgyv .fv-inner-wrapper.fv-is-shop-the-look {padding: 0 !important;border-radius: 0 !important;box-shadow: none !important;margin: 0 !important;background-color: transparent !important;}#fv-chart-1784294155314-yqci7jgyv-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1784294155314-yqci7jgyv-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv-slideshow .fv-slide {width: 100% !important;animation: fv-fade-in 0.3s ease-in-out;}@keyframes fv-fade-in {from { opacity: 0; }to { opacity: 1; }}#fv-chart-1784294155314-yqci7jgyv-slideshow .fv-slideshow-nav-row {position: relative !important;display: flex !important;justify-content: space-between !important;align-items: center !important;padding: 0 0 16px 0 !important;width: 100% !important;z-index: 20 !important;}#fv-chart-1784294155314-yqci7jgyv-slideshow .fv-nav-btn {background-color: var(--riv-primary) !important;color: #ffffff !important;border: none !important;border-radius: 4px !important;padding: 8px 16px !important;font-size: 14px !important;font-weight: 700 !important;cursor: pointer !important;display: flex !important;align-items: center !important;justify-content: center !important;gap: 6px !important;transition: opacity 0.2s, background-color 0.2s !important;height: 36px !important;text-transform: none !important;box-shadow: 0 1px 2px rgba(0,0,0,0.1) !important;}#fv-chart-1784294155314-yqci7jgyv-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1784294155314-yqci7jgyv-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1784294155314-yqci7jgyv-slideshow .fv-nav-btn.disabled {background-color: #E5E7EB !important;color: #9CA3AF !important;cursor: default !important;pointer-events: none !important;box-shadow: none !important;}#fv-chart-1784294155314-yqci7jgyv-slideshow .fv-slide-counter {font-family: 'Poppins', sans-serif !important;font-size: 14px !important;font-weight: 600 !important;color: #374151 !important;text-align: center !important;min-width: 40px !important;background-color: rgba(255,255,255,0.8) !important;padding: 2px 8px !important;border-radius: 10px !important;}#fv-chart-1784294155314-yqci7jgyv-slideshow .fv-slideshow-select {position: absolute !important;top: 10px !important;right: 10px !important;z-index: 20 !important;appearance: none !important;-webkit-appearance: none !important;-moz-appearance: none !important;background-color: white !important;border: 1px solid #d1d5db !important;color: #1F2937 !important;font-family: 'Open Sans', sans-serif !important;font-size: 14px !important;font-weight: 600 !important;padding: 6px 32px 6px 12px !important;border-radius: 4px !important;cursor: pointer !important;box-shadow: 0 1px 2px rgba(0,0,0,0.05) !important;background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e") !important;background-position: right 0.5rem center !important;background-repeat: no-repeat !important;background-size: 1.5em 1.5em !important;}#fv-chart-1784294155314-yqci7jgyv-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-chart-title {font-weight: bold !important;text-align: center !important;margin-bottom: 0.5rem !important;color: var(--riv-primary) !important;font-size: 20px !important;line-height: 1.2 !important;font-family: 'Open Sans', sans-serif !important;text-transform: none !important;white-space: normal !important;overflow-wrap: break-word !important;padding: 0 20px !important;}#fv-chart-1784294155314-yqci7jgyv .fv-chart-subhead {font-size: 18px !important;font-weight: 500 !important;text-align: center !important;margin-bottom: 2rem !important;color: #374151 !important;line-height: 1.7 !important;font-family: 'Open Sans', sans-serif !important;display: block !important;text-transform: none !important;padding: 0 20px !important;}#fv-chart-1784294155314-yqci7jgyv .rv-chart-caption { font-size: 15px !important; color: #374151 !important; text-align: center !important; font-style: normal !important; font-weight: normal !important; line-height: 1.7 !important; font-family: 'Open Sans', sans-serif !important; display: block !important; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-select { background: transparent; border: none; border-bottom: 2px solid; font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; padding: 0.25rem 0; cursor: pointer; outline: none; appearance: none; -webkit-appearance: none; -moz-appearance: none; max-width: 100%; width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-select option { font-family: 'Open Sans', sans-serif; font-weight: 400; font-size: 14px; color: #374151; direction: ltr; text-align: left; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-vs { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; color: #374151; letter-spacing: 0.1em; padding: 0 1rem; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-bar { height: 32px; width: var(--target-width); transition: width 0.8s ease-out; animation: fv-grow-max-width 0.8s ease-out forwards; display: flex; align-items: center; overflow: hidden; color: #ffffff; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-bar-right { border-radius: 0 4px 4px 0; justify-content: flex-start; padding: 0 8px; }@keyframes fv-grow-max-width {from { max-width: 0; }to { max-width: 100%; }}#fv-chart-1784294155314-yqci7jgyv .fv-versus-center-line { position: absolute; left: 50%; top: 0; bottom: 0; width: 4px; background-color: #ffffff; transform: translateX(-50%); z-index: 1; }#fv-chart-1784294155314-yqci7jgyv .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1784294155314-yqci7jgyv .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1784294155314-yqci7jgyv .fv-versus-label { position: absolute; left: 50%; transform: translateX(-50%); top: 0; background-color: transparent; border: none; box-shadow: none; padding: 0; font-family: 'Open Sans', sans-serif; font-weight: 700; font-size: 14px; color: #374151; white-space: nowrap; }#fv-chart-1784294155314-yqci7jgyv .sr-only { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; border: 0 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1784294155314-yqci7jgyv.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-wrapper { position: relative !important; width: 100% !important; overflow: hidden !important; border-radius: 0 !important; background-color: #000 !important; touch-action: pan-y !important; user-select: none !important; -webkit-user-select: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-inner { position: relative !important; width: 100% !important; height: 100% !important; display: block !important; transform-origin: center center !important; transition: transform 0.1s ease-out !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-bg { display: block !important; width: 100% !important; height: auto !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-fg { position: absolute !important; top: 0 !important; left: 0 !important; width: 100% !important; height: 100% !important; object-fit: cover !important; clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%) !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-slider { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 32px !important; transform: translateX(-50%) !important; cursor: ew-resize !important; z-index: 10 !important; user-select: none !important; -webkit-user-select: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-slider-line { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 4px !important; background-color: white !important; transform: translateX(-50%) !important; box-shadow: 0 0 10px rgba(0,0,0,0.5) !important; pointer-events: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-handle { position: absolute !important; top: 50% !important; left: 50% !important; transform: translate(-50%, -50%) !important; width: 32px !important; height: 32px !important; background-color: white !important; border-radius: 50% !important; box-shadow: 0 2px 6px rgba(0,0,0,0.3) !important; display: flex !important; align-items: center !important; justify-content: center !important; gap: 4px !important; pointer-events: none !important; z-index: 11 !important; overflow: hidden !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-arrow-left { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-right: 4px solid #4b5563 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-arrow-right { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-left: 4px solid #4b5563 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-label { position: absolute !important; top: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; padding: 0.25rem 0.75rem !important; border-radius: 0.25rem !important; font-size: 0.875rem !important; font-weight: 500 !important; pointer-events: none !important; backdrop-filter: blur(4px) !important; z-index: 5 !important; transition: right 0.3s ease, opacity 0.2s ease !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-expand-btn, #fv-chart-1784294155314-yqci7jgyv .fv-image-compare-close-btn { position: absolute !important; bottom: 1rem !important; right: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; border: none !important; border-radius: 0.25rem !important; padding: 0.5rem !important; cursor: pointer !important; z-index: 20 !important; display: flex !important; align-items: center !important; justify-content: center !important; backdrop-filter: blur(4px) !important; transition: background-color 0.2s !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-expand-btn:hover, #fv-chart-1784294155314-yqci7jgyv .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-wrapper.fv-image-compare-fullscreen { position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; width: 100% !important; height: 100% !important; z-index: 999999 !important; display: flex !important; align-items: center !important; justify-content: center !important; background-color: rgba(0, 0, 0, 0.9) !important; margin: 0 !important; touch-action: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner { width: 100% !important; height: 100% !important; display: flex !important; align-items: center !important; justify-content: center !important; cursor: grab !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-bg { position: absolute !important; top: 0 !important; left: 0 !important; max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-fg { max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1784294155314-yqci7jgyv .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1784294155314-yqci7jgyv .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1784294155314-yqci7jgyv .fv-logo {display: block !important;margin: 0 auto !important;width: 120px !important;min-width: 120px !important;max-width: 120px !important;height: auto !important;object-fit: contain !important;flex-shrink: 0 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1784294155314-yqci7jgyv .fv-dropdown-title {appearance: none !important;-webkit-appearance: none !important;-moz-appearance: none !important;background: transparent !important;border: none !important;font-size: 18px !important;font-weight: 600 !important;color: var(--riv-primary) !important;padding-right: 28px !important;padding-left: 10px !important;cursor: pointer !important;text-align: center !important;text-align-last: center !important;width: auto !important;max-width: 100% !important;font-family: 'Open Sans', sans-serif !important;line-height: 1.3 !important;margin: 0 !important;text-overflow: ellipsis !important;overflow: hidden !important;white-space: nowrap !important;}#fv-chart-1784294155314-yqci7jgyv .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-dropdown-chevron {position: absolute !important;right: 0 !important;top: 50% !important;transform: translateY(-50%) !important;pointer-events: none !important;color: var(--riv-primary) !important;display: flex !important;align-items: center !important;}#fv-chart-1784294155314-yqci7jgyv .fv-carousel-title-controls { display: flex !important; justify-content: space-between !important; align-items: center !important; margin-bottom: 16px !important; width: 100% !important; gap: 12px !important; }#fv-chart-1784294155314-yqci7jgyv .fv-carousel-nav-btn {background: transparent !important; border: 1px solid #d1d5db !important; border-radius: 6px !important; padding: 6px 10px !important;cursor: pointer !important; font-size: 14px !important; color: #374151 !important; display: flex !important; align-items: center !important; gap: 4px !important; font-family: 'Open Sans', sans-serif !important;}#fv-chart-1784294155314-yqci7jgyv .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1784294155314-yqci7jgyv .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1784294155314-yqci7jgyv .fv-legend { display: flex !important; justify-content: center !important; flex-wrap: wrap !important; gap: 8px 16px !important; margin: 0 !important; padding: 0 !important; margin-top: 1rem !important; }#fv-chart-1784294155314-yqci7jgyv .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1784294155314-yqci7jgyv .fv-multi-value-legend {display: flex !important;justify-content: center !important;flex-wrap: wrap !important;gap: 12px 24px !important;margin-bottom: 1.5rem !important;padding: 0 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-multi-legend-item { display: flex !important; align-items: center !important; gap: 8px !important; font-size: 14px !important; color: #374151 !important; font-weight: 500 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1784294155314-yqci7jgyv .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1784294155314-yqci7jgyv .fv-benchmark-title {font-size: 18px !important; font-weight: 600 !important; margin-bottom: 16px !important; margin-top: 0 !important; padding: 0 !important;text-align: center !important; color: var(--riv-primary) !important; flex: 1 !important; min-width: 0 !important;font-family: 'Open Sans', sans-serif !important; line-height: 1.3 !important;text-transform: none !important;white-space: normal !important;overflow-wrap: break-word !important;word-wrap: break-word !important;max-width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv .fv-bar-row, #fv-chart-1784294155314-yqci7jgyv .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-label { width: 150px !important; flex-shrink: 0 !important; font-size: 14px !important; color: #374151 !important; padding-right: 10px !important; text-align: right !important; font-weight: 500 !important; display: block !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-container { flex-grow: 1 !important; background-color: #E5E7EB !important; border-radius: 4px !important; min-height: 25px !important; border: 1px solid #D1D5DB !important; position: relative !important; display: flex !important; align-items: center !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-commentary-inline { display: none !important; position: absolute !important; left: 150px !important; top: 0 !important; bottom: 0 !important; right: 0 !important; width: calc(100% - 150px) !important; margin: 0 !important; padding: 0 8px !important; font-size: 13px !important; color: #fff !important; background: rgba(0,0,0,0.8) !important; border-radius: 4px !important; line-height: 1.4 !important; font-weight: normal !important; text-transform: none !important; word-wrap: break-word !important; z-index: 10 !important; align-items: center !important; overflow-y: auto !important; }#fv-chart-1784294155314-yqci7jgyv.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1784294155314-yqci7jgyv.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1784294155314-yqci7jgyv.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar { height: 100% !important; border-radius: 3px !important; display: flex !important; align-items: center !important; transition: opacity 0.2s ease, width 0.8s ease-out !important; min-height: 23px !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-inner-content { display: flex !important; justify-content: space-between !important; align-items: center !important; width: 100% !important; height: 100% !important; padding: 0 8px !important; font-size: 14px !important; font-weight: bold !important; overflow: hidden !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-value-outside { padding-left: 8px !important; font-size: 14px !important; font-weight: bold !important; color: #374151 !important; white-space: nowrap !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1784294155314-yqci7jgyv .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1784294155314-yqci7jgyv .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1784294155314-yqci7jgyv .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1784294155314-yqci7jgyv .fv-stacked-segment { height: 100% !important; display: flex !important; align-items: center !important; justify-content: flex-end !important; padding-right: 8px !important; border-right: 1px solid rgba(255,255,255,0.3) !important; }#fv-chart-1784294155314-yqci7jgyv .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1784294155314-yqci7jgyv .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1784294155314-yqci7jgyv .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1784294155314-yqci7jgyv .fv-grouped-product-title { width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.5rem !important; font-weight: 700 !important; font-size: 14px !important; color: #374151 !important; text-transform: none !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1784294155314-yqci7jgyv .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1784294155314-yqci7jgyv .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-ticks { display: flex !important; justify-content: space-between !important; padding-top: 4px !important; font-size: 13px !important; color: #374151 !important; }#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-ticks span::before { content: '' !important; position: absolute !important; top: -6px !important; left: 50% !important; transform: translateX(-50%) !important; width: 2px !important; height: 4px !important; background-color: #D1D5DB !important; border-radius: 1px !important; }#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-title { text-align: center !important; font-size: 15px !important; color: #374151 !important; margin-top: 8px !important; margin-bottom: 16px !important; line-height: 1.5 !important; padding: 0 1rem !important; display: block !important; font-weight: bold !important; }#fv-chart-1784294155314-yqci7jgyv .fv-y-axis-title {font-size: 15px !important;color: #374151 !important;line-height: 1.5 !important;text-align: left !important;padding-left: 5.83% !important;margin-bottom: 4px !important;display: block !important;font-weight: bold !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-pie-container,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-row,#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-stacked-product,#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-grouped-bar-product,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-bar-row,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-stacked-product,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-bar-label:not(.fv-grouped-product-title) {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-label,#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-grouped-product-title,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-bar-label,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-grouped-product-title {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-container,#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-cluster,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-bar-container,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus-within {position: static !important; display: block !important; width: 100% !important; margin: 4px 0 0 0 !important; padding: 0 !important; background: transparent !important; color: #6B7280 !important; font-size: 12px !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-x-axis-wrapper,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-x-axis-label-space,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-x-axis-chart-space,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-benchmark-title,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-dropdown-title,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-carousel-nav-btn,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-chart-title,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-chart-subhead,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-versus-header,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-versus-select-wrapper,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-versus-vs,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-versus-select-container,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-versus-select,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-stl-shop-all-btn,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-stl-shop-all-btn {bottom: 0.5rem !important; right: 0.5rem !important; height: 2rem !important; font-size: 0.75rem !important; padding: 0 0.75rem 0 2.5rem !important; max-width: calc(100% - 1rem) !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-stl-shop-all-logo,#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-stl-shop-all-icon,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-bar-commentary-inline,#fv-chart-1784294155314-yqci7jgyv.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1784294155314-yqci7jgyv.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1784294155314-yqci7jgyv .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1784294155314-yqci7jgyv .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-bar-row,#fv-chart-1784294155314-yqci7jgyv .fv-stacked-product,#fv-chart-1784294155314-yqci7jgyv .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1784294155314-yqci7jgyv .fv-bar-label:not(.fv-grouped-product-title) {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-bar-label,#fv-chart-1784294155314-yqci7jgyv .fv-grouped-product-title {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-bar-container,#fv-chart-1784294155314-yqci7jgyv .fv-bar-cluster {width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294155314-yqci7jgyv .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294155314-yqci7jgyv .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294155314-yqci7jgyv .fv-bar-row .fv-bar-commentary-inline:focus-within {position: static !important; display: block !important; width: 100% !important; margin: 4px 0 0 0 !important; padding: 0 !important; background: transparent !important; color: #6B7280 !important; font-size: 12px !important;}#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-label-space {display: none !important;}#fv-chart-1784294155314-yqci7jgyv .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1784294155314-yqci7jgyv .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1784294155314-yqci7jgyv .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1784294155314-yqci7jgyv .fv-chart-title {padding: 0 8px !important;}#fv-chart-1784294155314-yqci7jgyv .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1784294155314-yqci7jgyv .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1784294155314-yqci7jgyv .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1784294155314-yqci7jgyv .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1784294155314-yqci7jgyv .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1784294155314-yqci7jgyv .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv .fv-stl-shop-all-btn {bottom: 0.5rem !important; right: 0.5rem !important; height: 2rem !important; font-size: 0.75rem !important; padding: 0 0.75rem 0 2.5rem !important; max-width: calc(100% - 1rem) !important;}#fv-chart-1784294155314-yqci7jgyv .fv-stl-shop-all-logo,#fv-chart-1784294155314-yqci7jgyv .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1784294155314-yqci7jgyv .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1784294155314-yqci7jgyv .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1784294155314-yqci7jgyv .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1784294155314-yqci7jgyv.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Overall Chart Title","description": "Subhead to describe the test and what's being measured and why","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-07-17T13:15:55.315Z","citation": "Add your caption to explain the data, the learnings and the key takeaways of the data being visualized","keywords": ["Image Comparison","benchmark","comparison","performance","review","TechRadar"],"measurementTechnique": "Performance Benchmarking","variableMeasured": []}Before vacuumingAfter vacuumingwindow.iFrameResizer = {heightCalculationMethod: 'taggedElement'};(function() {window.fvAnimateCharts = function(chartWrapper) {if (!chartWrapper) return;function animateBars(chartElement) {if (!chartElement) return;var bars = chartElement.querySelectorAll('.fv-bar, .fv-stacked-segment');bars.forEach(function(bar, index) {bar.style.setProperty('width', '0%', 'important');bar.style.setProperty('transition', 'none', 'important');var targetWidth = bar.dataset.targetWidth;if (targetWidth === undefined) return;void bar.offsetWidth;var targetMargin = bar.dataset.targetMargin;var baseMargin = bar.dataset.baseMargin;if (baseMargin !== undefined) {bar.style.setProperty('margin-left', baseMargin + '%', 'important');}setTimeout(function() {var marginTransition = baseMargin !== undefined ? ', margin-left 0.8s ease-out' : '';bar.style.setProperty('transition', 'opacity 0.2s ease, width 0.8s ease-out' + marginTransition, 'important');bar.style.setProperty('width', targetWidth + '%', 'important');if (targetMargin !== undefined && baseMargin !== undefined) {bar.style.setProperty('margin-left', targetMargin + '%', 'important');}}, index * 50 + 50);});}function animateLineChart(chartElement) {if (!chartElement) return;var lineSvg = chartElement.querySelector('svg');if (!lineSvg) return;var paths = lineSvg.querySelectorAll('.riv-line-path');paths.forEach(function(p, i) {if (typeof p.getTotalLength === 'function') {var len = p.getTotalLength();p.style.transition = 'none';p.style.strokeDasharray = len;p.style.strokeDashoffset = len;p.getBoundingClientRect();setTimeout(function() {p.style.transition = 'stroke-dashoffset 1s ease-out ' + (i * 0.1) + 's, stroke-width 0.2s, opacity 0.2s';p.style.strokeDashoffset = '0';}, 100);}});var dots = lineSvg.querySelectorAll('.riv-dot');dots.forEach(function(dot, i) {dot.style.opacity = '0';setTimeout(function() {dot.style.transition = 'opacity 0.3s ease';dot.style.opacity = '1';}, 500 + i * 10);});}var charts = chartWrapper.querySelectorAll('.fv-chart-item');charts.forEach(function(chart) {if (window.getComputedStyle(chart).display === 'none') return;var chartType = chart.dataset.chartType;if (chartType === 'Line') {animateLineChart(chart);} else if (chartType !== 'Pie') {animateBars(chart);}});};function initialize(uniqueId, isSlideshow) {var root = document.getElementById(uniqueId);if (!root && !isSlideshow) return;function setupWrapper(chartWrapper) {if (!chartWrapper) return;function checkMobileView() {var width = chartWrapper.getBoundingClientRect().width;var isMobileDevice = window.screen && Math.min(window.screen.width, window.screen.height) <= 599;var isMobile;if (width === 0) {isMobile = isMobileDevice || window.matchMedia('(max-width: 599px)').matches;} else {isMobile = isMobileDevice || width < 600;}if (isMobile) {chartWrapper.classList.add('mobile-view');} else {chartWrapper.classList.remove('mobile-view');}}checkMobileView();if (typeof ResizeObserver !== 'undefined') {var ro = new ResizeObserver(function() {checkMobileView();});ro.observe(chartWrapper);}window.addEventListener('resize', checkMobileView);var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true';if (labelsOnTop) {var charts = chartWrapper.querySelectorAll('.fv-chart-item');var hasVisibleBarChart = false;charts.forEach(function(c) {if (window.getComputedStyle(c).display !== 'none') {var cType = c.dataset.chartType;if (cType === 'Bar' || cType === 'Stacked Bar' || cType === 'Versus') {hasVisibleBarChart = true;}}});if (hasVisibleBarChart) {chartWrapper.classList.add('labels-on-top');} else {chartWrapper.classList.remove('labels-on-top');}} else {chartWrapper.classList.remove('labels-on-top');}chartWrapper.querySelectorAll('.riv-line-legend').forEach(function(legend) {var chartId = legend.dataset.chart;var chart = chartWrapper.querySelector('[id="' + chartId + '"]');if (!chart) return;var lines = chart.querySelectorAll('.riv-line-path');var dots = chart.querySelectorAll('.riv-dot');var legendItems = legend.querySelectorAll('.riv-legend-item');legendItems.forEach(function(item) {var productName = item.dataset.product;var safeProductName = productName.replace(/"/g, '\"');var line = chart.querySelector('.riv-line-path[data-product="' + safeProductName + '"]');var productDots = chart.querySelectorAll('.riv-dot[data-product="' + safeProductName + '"]');if (line && !line.dataset.origStroke) {line.dataset.origStroke = line.getAttribute('stroke-width') || '2';}var highlight = function() {if (legend.querySelector('.isolated')) return;lines.forEach(function(l) { l.style.opacity = '0.2'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '0.2'; });legendItems.forEach(function(i) { i.style.opacity = '0.3'; i.style.transition = 'opacity 0.2s'; });if (line) {line.style.opacity = '1';line.setAttribute('stroke-width', '4');}productDots.forEach(function(d) { d.style.opacity = '1'; });item.style.opacity = '1';};var clearHighlight = function() {if (legend.querySelector('.isolated')) return;lines.forEach(function(l) { l.style.opacity = '1'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '1'; });legendItems.forEach(function(i) { i.style.opacity = '1'; });};var toggleIsolate = function() {var isIsolated = item.classList.contains('isolated');legendItems.forEach(function(i) { i.classList.remove('isolated'); });if (isIsolated) {lines.forEach(function(l) { l.style.opacity = '1'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '1'; });legendItems.forEach(function(i) { i.style.opacity = '1'; });} else {item.classList.add('isolated');lines.forEach(function(l) { l.style.opacity = '0.2'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '0.2'; });legendItems.forEach(function(i) { i.style.opacity = '0.3'; i.style.transition = 'opacity 0.2s'; });if (line) {line.style.opacity = '1';line.setAttribute('stroke-width', '4');}productDots.forEach(function(d) { d.style.opacity = '1'; });item.style.opacity = '1';}};item.addEventListener('mouseenter', highlight);item.addEventListener('focus', highlight);item.addEventListener('mouseleave', clearHighlight);item.addEventListener('blur', clearHighlight);item.addEventListener('click', toggleIsolate);if (line) {line.style.cursor = 'pointer';line.addEventListener('mouseenter', highlight);line.addEventListener('mouseleave', clearHighlight);line.addEventListener('click', toggleIsolate);}});});var versusCharts = chartWrapper.querySelectorAll('.fv-versus-chart');versusCharts.forEach(function(vc) {var dataJson = vc.getAttribute('data-versus-data');var leftColor = vc.getAttribute('data-left-color') || '#E53935';var rightColor = vc.getAttribute('data-right-color') || '#FFB300';if (!dataJson) return;var versusData = JSON.parse(dataJson);var leftSelect = vc.querySelector('.fv-select-left');var rightSelect = vc.querySelector('.fv-select-right');var rows = vc.querySelectorAll('.fv-versus-row');function updateVersusChart() {var leftProduct = leftSelect.value;var rightProduct = rightSelect.value;leftSelect.style.color = leftColor;leftSelect.style.borderColor = leftColor;rightSelect.style.color = rightColor;rightSelect.style.borderColor = rightColor;rows.forEach(function(row) {var index = parseInt(row.getAttribute('data-index'));var data = versusData[index];if (!data) return;var leftVal = data.productData[leftProduct] ? data.productData[leftProduct].value : undefined;var rightVal = data.productData[rightProduct] ? data.productData[rightProduct].value : undefined;var leftIsNum = typeof leftVal === 'number';var rightIsNum = typeof rightVal === 'number';var leftNum = leftIsNum ? leftVal : 0;var rightNum = rightIsNum ? rightVal : 0;var maxVal = Math.max(leftNum, rightNum, 0.0001);var leftWidth = leftIsNum ? (leftNum / maxVal) * 95 : 0;var rightWidth = rightIsNum ? (rightNum / maxVal) * 85 : 0;var winner = null;var pctDiffStr = null;if (leftIsNum && rightIsNum) {if (leftNum > rightNum) {winner = 'left';if (rightNum > 0) {var diff = Math.round(((leftNum - rightNum) / rightNum) * 100);pctDiffStr = '+' + diff.toLocaleString() + '%';}} else if (rightNum > leftNum) {winner = 'right';if (leftNum > 0) {var diff = Math.round(((rightNum - leftNum) / leftNum) * 100);pctDiffStr = '+' + diff.toLocaleString() + '%';}}}var leftDisplay = data.productData[leftProduct] && data.productData[leftProduct].displayValue !== undefined ? data.productData[leftProduct].displayValue : (leftIsNum ? leftNum.toLocaleString() : (leftVal !== undefined ? leftVal : '-'));var rightDisplay = data.productData[rightProduct] && data.productData[rightProduct].displayValue !== undefined ? data.productData[rightProduct].displayValue : (rightIsNum ? rightNum.toLocaleString() : (rightVal !== undefined ? rightVal : '-'));var unit = (data.productData[leftProduct] && data.productData[leftProduct].unit) ||(data.productData[rightProduct] && data.productData[rightProduct].unit) || '';var leftTextStr = leftDisplay;var rightTextStr = rightDisplay;var leftBar = row.querySelector('.fv-versus-bar-left');var rightBar = row.querySelector('.fv-versus-bar-right');var leftText = row.querySelector('.fv-inside-left');var rightText = row.querySelector('.fv-inside-right');var labelText = row.querySelector('.fv-versus-label span');var leftWrapper = row.querySelector('.fv-versus-bar-left-wrapper');var rightWrapper = row.querySelector('.fv-versus-bar-right-wrapper');var existingPctDiffs = row.querySelectorAll('.fv-versus-pct-diff');existingPctDiffs.forEach(function(el) { el.remove(); });if (winner === 'left' && pctDiffStr) {var pctSpan = document.createElement('span');pctSpan.className = 'fv-versus-pct-diff';pctSpan.style.color = 'rgba(255, 255, 255, 0.9)';pctSpan.textContent = pctDiffStr;if (leftBar) leftBar.insertBefore(pctSpan, leftBar.firstChild);} else if (winner === 'right' && pctDiffStr) {var pctSpan = document.createElement('span');pctSpan.className = 'fv-versus-pct-diff';pctSpan.style.color = 'rgba(255, 255, 255, 0.9)';pctSpan.textContent = pctDiffStr;if (rightBar) rightBar.appendChild(pctSpan);}if (leftBar) {leftBar.style.backgroundColor = leftColor;leftBar.dataset.targetWidth = leftWidth;leftBar.style.setProperty('--target-width', leftWidth + '%');leftBar.style.width = leftWidth + '%';}if (rightBar) {rightBar.style.backgroundColor = rightColor;rightBar.dataset.targetWidth = rightWidth;rightBar.style.setProperty('--target-width', rightWidth + '%');rightBar.style.width = rightWidth + '%';}if (leftText) {leftText.innerHTML = leftTextStr;}if (rightText) {rightText.innerHTML = rightTextStr;}if (labelText) {labelText.textContent = data.attribute + (unit ? ' (' + unit + ')' : '');}});}if (leftSelect) leftSelect.addEventListener('change', updateVersusChart);if (rightSelect) rightSelect.addEventListener('change', updateVersusChart);});var barRows = chartWrapper.querySelectorAll('.fv-bar-row');var globalCaptionEl = chartWrapper.querySelector('.rv-chart-caption');var fallbackCaptionHtml = globalCaptionEl ? globalCaptionEl.innerHTML : '';barRows.forEach(function(row) {var commentaryEl = row.querySelector('[data-commentary-key]');if (commentaryEl) {var commentaryText = commentaryEl.textContent;if (commentaryText && commentaryText.trim().length > 0) {row.addEventListener('mouseenter', function() {if (!chartWrapper.classList.contains('mobile-view') && globalCaptionEl) {globalCaptionEl.innerHTML = commentaryText;globalCaptionEl.classList.add('fv-bar-active-caption');}});row.addEventListener('mouseleave', function() {if (!chartWrapper.classList.contains('mobile-view') && globalCaptionEl) {globalCaptionEl.innerHTML = fallbackCaptionHtml;globalCaptionEl.classList.remove('fv-bar-active-caption');}});}}});var charts = chartWrapper.querySelectorAll('.fv-chart-item');var dropdown = chartWrapper.querySelector('.fv-dropdown-title');var prevBtn = chartWrapper.querySelector('.fv-carousel-nav-btn.prev');var nextBtn = chartWrapper.querySelector('.fv-carousel-nav-btn.next');var carouselTitle = chartWrapper.querySelector('.fv-carousel-title-controls .fv-benchmark-title');var counter = chartWrapper.querySelector('.fv-carousel-counter');var subheadEl = chartWrapper.querySelector('.fv-chart-subhead');var captionEl = chartWrapper.querySelector('.rv-chart-caption');var footerContentEl = chartWrapper.querySelector('.fv-footer-content');var bottomBarEl = chartWrapper.querySelector('.fv-bottom-bar');var logoEl = chartWrapper.querySelector('.fv-logo');if (charts.length > 1 && (dropdown || prevBtn)) {var currentChartIndex = 0;var titles = [];if (dropdown) {titles = Array.from(dropdown.options).map(function(o) { return o.text; });} else {charts.forEach(function(c) {titles.push(c.getAttribute('data-title') || '');});}function showInternalChart(index) {if (index < 0) index = charts.length - 1;if (index >= charts.length) index = 0;currentChartIndex = index;charts.forEach(function(c, i) {c.style.display = i === index ? 'block' : 'none';if (i === index) {var cType = c.dataset.chartType;if (cType === 'Line') {} else if (cType !== 'Pie') {window.fvAnimateCharts(chartWrapper);}var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true';if (labelsOnTop && (cType === 'Bar' || cType === 'Stacked Bar' || cType === 'Versus')) {chartWrapper.classList.add('labels-on-top');} else {chartWrapper.classList.remove('labels-on-top');}}});if (dropdown) dropdown.value = index;if (carouselTitle && titles[index]) carouselTitle.textContent = titles[index];if (counter) counter.textContent = (index + 1) + ' of ' + charts.length;var activeChart = charts[index];if (activeChart) {var newSubhead = activeChart.getAttribute('data-subhead');var newCaption = activeChart.getAttribute('data-caption');var currentChartType = activeChart.getAttribute('data-chart-type');var hideGlobalCaption = currentChartType === 'Countdown' || currentChartType === 'Image Comparison' || currentChartType === 'Shop the Collection';if (subheadEl) subheadEl.textContent = newSubhead || '';if (captionEl) {captionEl.textContent = newCaption || '';fallbackCaptionHtml = newCaption || '';}if (footerContentEl) {if (newCaption && newCaption.trim().length > 0 && !hideGlobalCaption) {footerContentEl.style.display = 'block';if (bottomBarEl) bottomBarEl.style.display = 'flex';} else {footerContentEl.style.display = 'none';if (bottomBarEl && !logoEl) {bottomBarEl.style.display = 'none';}}}}}if (dropdown) dropdown.addEventListener('change', function(e) { showInternalChart(parseInt(e.target.value)); });if (prevBtn) prevBtn.addEventListener('click', function() { showInternalChart(currentChartIndex - 1); });if (nextBtn) nextBtn.addEventListener('click', function() { showInternalChart(currentChartIndex + 1); });}var imageCompareWrappers = chartWrapper.querySelectorAll('.fv-image-compare-wrapper');imageCompareWrappers.forEach(function(wrapper) {var inner = wrapper.querySelector('.fv-image-compare-inner') || wrapper;var slider = wrapper.querySelector('.fv-image-compare-slider');var fgImage = wrapper.querySelector('.fv-image-compare-fg');var bgImage = wrapper.querySelector('.fv-image-compare-bg');var labelLeft = wrapper.querySelector('.fv-image-compare-label-left');var labelRight = wrapper.querySelector('.fv-image-compare-label-right');var isDragging = false;var scale = 1;var panX = 0;var panY = 0;var isPanning = false;var hasPanned = false;var lastClientX = 0;var lastClientY = 0;var initialDistance = null;var lastCenterX = null;var lastCenterY = null;function updateTransform() {if (wrapper.classList.contains('fv-image-compare-fullscreen')) {inner.style.setProperty('transform', 'translate(' + panX + 'px, ' + panY + 'px) scale(' + scale + ')', 'important');} else {inner.style.removeProperty('transform');scale = 1;panX = 0;panY = 0;}}function constrainPan() {var rect = wrapper.getBoundingClientRect();var maxPanX = Math.max(0, (rect.width * scale - rect.width) / 2);var maxPanY = Math.max(0, (rect.height * scale - rect.height) / 2);panX = Math.max(-maxPanX, Math.min(panX, maxPanX));panY = Math.max(-maxPanY, Math.min(panY, maxPanY));}wrapper.addEventListener('wheel', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;e.preventDefault();var zoomSensitivity = 0.005;var zoomFactor = Math.exp(-e.deltaY * zoomSensitivity);var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));if (newScale === scale) return;var rect = wrapper.getBoundingClientRect();var mouseX = e.clientX - rect.left - rect.width / 2;var mouseY = e.clientY - rect.top - rect.height / 2;var ratio = newScale / scale;panX = mouseX - (mouseX - panX) * ratio;panY = mouseY - (mouseY - panY) * ratio;scale = newScale;constrainPan();updateTransform();}, { passive: false });wrapper.addEventListener('mousedown', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen') || scale <= 1) return;if (e.target.closest('.fv-image-compare-slider') || e.target.closest('button')) return;isPanning = true;hasPanned = false;lastClientX = e.clientX;lastClientY = e.clientY;});window.addEventListener('mousemove', function(e) {if (!isPanning) return;var dx = e.clientX - lastClientX;var dy = e.clientY - lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.clientX;lastClientY = e.clientY;panX += dx;panY += dy;constrainPan();updateTransform();});window.addEventListener('mouseup', function() {isPanning = false;});wrapper.addEventListener('touchstart', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;if (e.touches.length === 2) {e.preventDefault();var dx = e.touches[0].clientX - e.touches[1].clientX;var dy = e.touches[0].clientY - e.touches[1].clientY;initialDistance = Math.sqrt(dx * dx + dy * dy);var rect = wrapper.getBoundingClientRect();lastCenterX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left - rect.width / 2;lastCenterY = (e.touches[0].clientY + e.touches[1].clientY) / 2 - rect.top - rect.height / 2;hasPanned = true;} else if (e.touches.length === 1 && scale > 1) {if (e.target.closest('.fv-image-compare-slider') || e.target.closest('button')) return;isPanning = true;hasPanned = false;lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;}}, { passive: false });wrapper.addEventListener('touchmove', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;if (e.touches.length === 2 && initialDistance !== null) {e.preventDefault();var dx = e.touches[0].clientX - e.touches[1].clientX;var dy = e.touches[0].clientY - e.touches[1].clientY;var distance = Math.sqrt(dx * dx + dy * dy);if (initialDistance > 0) {var zoomFactor = distance / initialDistance;var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));var rect = wrapper.getBoundingClientRect();var centerX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left - rect.width / 2;var centerY = (e.touches[0].clientY + e.touches[1].clientY) / 2 - rect.top - rect.height / 2;var ratio = newScale / scale;panX = centerX - (centerX - panX) * ratio;panY = centerY - (centerY - panY) * ratio;if (lastCenterX !== null && lastCenterY !== null) {panX += (centerX - lastCenterX);panY += (centerY - lastCenterY);}scale = newScale;lastCenterX = centerX;lastCenterY = centerY;constrainPan();updateTransform();}initialDistance = distance;} else if (e.touches.length === 1 && isPanning) {e.preventDefault();var dx = e.touches[0].clientX - lastClientX;var dy = e.touches[0].clientY - lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;panX += dx;panY += dy;constrainPan();updateTransform();}}, { passive: false });wrapper.addEventListener('touchend', function(e) {if (e.touches.length < 2) {initialDistance = null;}if (e.touches.length === 0) {isPanning = false;}});function handleMove(clientX) {var rect = inner.getBoundingClientRect();var x = Math.max(0, Math.min(clientX - rect.left, rect.width));var percent = Math.max(0, Math.min((x / rect.width) * 100, 100));if (slider) slider.style.setProperty('left', percent + '%', 'important');if (fgImage) fgImage.style.setProperty('clip-path', 'polygon(0 0, ' + percent + '% 0, ' + percent + '% 100%, 0 100%)', 'important');if (labelLeft) {if (percent < 10) {labelLeft.style.setProperty('opacity', '0', 'important');} else {labelLeft.style.setProperty('opacity', '1', 'important');}}if (labelRight) {if (percent > 90) {labelRight.style.setProperty('opacity', '0', 'important');} else {labelRight.style.setProperty('opacity', '1', 'important');}}}function onMouseMove(e) {if (!isDragging) return;handleMove(e.clientX);}function onTouchMove(e) {if (!isDragging) return;e.preventDefault();handleMove(e.touches[0].clientX);}function stopDragging() {isDragging = false;window.removeEventListener('mousemove', onMouseMove);window.removeEventListener('mouseup', stopDragging);window.removeEventListener('touchmove', onTouchMove);window.removeEventListener('touchend', stopDragging);}if (slider) {var startDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener('mousemove', onMouseMove);window.addEventListener('mouseup', stopDragging);};var startTouchDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener('touchmove', onTouchMove, { passive: false });window.addEventListener('touchend', stopDragging);};slider.addEventListener('mousedown', function(e) {e.preventDefault();startDrag(e.clientX);});slider.addEventListener('touchstart', function(e) {e.preventDefault();startTouchDrag(e.touches[0].clientX);}, { passive: false });}var expandBtn = wrapper.querySelector('.fv-image-compare-expand-btn');var closeBtn = wrapper.querySelector('.fv-image-compare-close-btn');if (expandBtn) {if (window !== window.parent) {expandBtn.style.display = 'none';} else {expandBtn.addEventListener('click', function(e) {e.stopPropagation();wrapper.classList.add('fv-image-compare-fullscreen');document.body.style.overflow = 'hidden';if (fgImage && fgImage.dataset.highresSrc) {fgImage.src = fgImage.dataset.highresSrc;fgImage.removeAttribute('srcset');fgImage.removeAttribute('sizes');}if (bgImage && bgImage.dataset.highresSrc) {bgImage.src = bgImage.dataset.highresSrc;bgImage.removeAttribute('srcset');bgImage.removeAttribute('sizes');}});}}if (closeBtn) {closeBtn.addEventListener('click', function(e) {e.stopPropagation();wrapper.classList.remove('fv-image-compare-fullscreen');document.body.style.overflow = '';updateTransform();});}document.addEventListener('keydown', function(e) {if (e.key === 'Escape' && wrapper.classList.contains('fv-image-compare-fullscreen')) {wrapper.classList.remove('fv-image-compare-fullscreen');document.body.style.overflow = '';updateTransform();}});});var hotspots = chartWrapper.querySelectorAll('.fv-stl-hotspot-btn');var allProductsModal = chartWrapper.querySelector('.fv-stl-all-products-modal');var shopAllBtn = chartWrapper.querySelector('.fv-stl-shop-all-btn');var allProductsList = chartWrapper.querySelector('.fv-stl-all-products-list');var stlContainer = chartWrapper.querySelector('.fv-stl-container');function closeAllModals() {if (allProductsModal) {allProductsModal.classList.remove('is-active');var items = allProductsModal.querySelectorAll('.fv-stl-all-products-item');items.forEach(function(item) {item.classList.remove('is-highlighted');});if (stlContainer) {setTimeout(function() {if (!allProductsModal.classList.contains('is-active')) {stlContainer.style.minHeight = '';if ('parentIFrame' in window) {window.parentIFrame.size();}}}, 300);}}hotspots.forEach(function(btn) { btn.setAttribute('aria-expanded', 'false'); });if ('parentIFrame' in window) {window.parentIFrame.size();}}hotspots.forEach(function(btn) {btn.addEventListener('click', function(e) {e.stopPropagation();var hotspotId = btn.getAttribute('data-hotspot-id');var isExpanded = btn.getAttribute('aria-expanded') === 'true';closeAllModals();if (!isExpanded && allProductsModal) {btn.setAttribute('aria-expanded', 'true');allProductsModal.classList.add('is-active');var container = btn.closest('.fv-stl-container');if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}var targetItem = allProductsModal.querySelector('.fv-stl-all-products-item[data-product-id="' + hotspotId + '"]');if (targetItem) {targetItem.classList.add('is-highlighted');setTimeout(function() {targetItem.scrollIntoView({ behavior: 'smooth', block: 'center' });}, 100);}if ('parentIFrame' in window) {window.parentIFrame.size();}}});});if (shopAllBtn && allProductsModal) {shopAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();allProductsModal.classList.add('is-active');var container = shopAllBtn.closest('.fv-stl-container');if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}if ('parentIFrame' in window) {window.parentIFrame.size();}});}if (allProductsModal) {var closeAllBtn = allProductsModal.querySelector('.fv-stl-all-products-close');if (closeAllBtn) {closeAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();});}}chartWrapper.addEventListener('click', function(e) {if (!e.target.closest('.fv-stl-all-products-content')) {closeAllModals();}});if (allProductsModal) {allProductsModal.addEventListener('click', function(e) {if (!e.target.closest('.fv-stl-all-products-content')) {closeAllModals();}});}var iaNodes = chartWrapper.querySelectorAll('.fv-ia-node-button');var iaWrapper = chartWrapper.querySelector('.fv-ia-wrapper');var originalCaption = chartWrapper.querySelector('.fv-original-caption') || captionEl;var dynamicCaption = chartWrapper.querySelector('.fv-ia-dynamic-caption');var exploreBtn = chartWrapper.querySelector('.fv-ia-explore-btn');var currentIaIndex = -1;function closeAllIANodes() {iaNodes.forEach(function(btn) { btn.classList.remove('is-active'); });if (originalCaption) originalCaption.style.display = 'block';if (dynamicCaption) dynamicCaption.style.display = 'none';}function resetExploreBtn() {currentIaIndex = -1;if (exploreBtn) {var exploreSpan = exploreBtn.querySelector('span');if (exploreSpan) exploreSpan.textContent = 'Explore';}}iaNodes.forEach(function(btn, index) {btn.addEventListener('click', function(e) {e.stopPropagation();var isActive = btn.classList.contains('is-active');closeAllIANodes();if (!isActive) {currentIaIndex = index;if (exploreBtn) {var exploreSpan = exploreBtn.querySelector('span');if (exploreSpan) exploreSpan.textContent = 'Next';}btn.classList.add('is-active');if (dynamicCaption) {var title = btn.getAttribute('data-title') || '';var desc = btn.getAttribute('data-desc') || '';dynamicCaption.innerHTML = '';var strongTag = document.createElement('strong');strongTag.textContent = title;dynamicCaption.appendChild(strongTag);if (desc) {dynamicCaption.appendChild(document.createTextNode(' - ' + desc));}if (originalCaption) originalCaption.style.display = 'none';dynamicCaption.style.display = 'block';if (footerContentEl) footerContentEl.style.display = 'block';}} else {resetExploreBtn();}});});if (exploreBtn) {exploreBtn.addEventListener('click', function(e) {e.stopPropagation();if (iaNodes.length === 0) return;var nextIndex = currentIaIndex + 1;if (nextIndex >= iaNodes.length) {closeAllIANodes();resetExploreBtn();} else {currentIaIndex = nextIndex;var targetBtn = iaNodes[currentIaIndex];if (targetBtn) {if(targetBtn.classList.contains('is-active')) {targetBtn.click();}targetBtn.click();}}});}if (iaWrapper) {iaWrapper.addEventListener('click', function(e) {if (!e.target.closest('.fv-ia-node-button') && !e.target.closest('.fv-ia-explore-btn')) {closeAllIANodes();resetExploreBtn();}});}window.fvAnimateCharts(chartWrapper);var countdownContainer = chartWrapper.querySelector('.fv-countdown-container');if (countdownContainer) {var targetDateAttr = countdownContainer.getAttribute('data-target-date');if (targetDateAttr) {var targetDate = new Date(targetDateAttr);var primaryColor = countdownContainer.getAttribute('data-primary-color') || '#f97316';var subheadColor = countdownContainer.getAttribute('data-subhead-color') || '#ffffff';var pad = function(n) { return (n < 10 ? '0' : '') + n; };var updateCountdown = function() {var difference = +targetDate - +new Date();var d = 0, h = 0, m = 0, s = 0;if (difference > 0) {d = Math.floor(difference / (1000 * 60 * 60 * 24));h = Math.floor((difference / (1000 * 60 * 60)) % 24);m = Math.floor((difference / 1000 / 60) % 60);s = Math.floor((difference / 1000) % 60);}var daysEl = countdownContainer.querySelector('[data-time="days"]');var hoursEl = countdownContainer.querySelector('[data-time="hours"]');var minsEl = countdownContainer.querySelector('[data-time="minutes"]');var secsEl = countdownContainer.querySelector('[data-time="seconds"]');if (daysEl) daysEl.textContent = d;if (hoursEl) hoursEl.textContent = pad(h);if (minsEl) minsEl.textContent = pad(m);if (secsEl) secsEl.textContent = pad(s);};updateCountdown();setInterval(updateCountdown, 1000);}}}if (false) {var slideshowContainer = document.getElementById(uniqueId + '-slideshow');if (slideshowContainer) {var slides = slideshowContainer.querySelectorAll('.fv-slide');slides.forEach(function(slide) {setupWrapper(slide.querySelector('.fv-chart-wrapper'));});}} else {setupWrapper(root);}}if (document.readyState === 'loading') {document.addEventListener('DOMContentLoaded', function() { initialize('fv-chart-1784294155314-yqci7jgyv', false); });} else {initialize('fv-chart-1784294155314-yqci7jgyv', false);}})();

During these tests I found the quickest, least powerful mode, called Quiet, was indeed very quiet (just 55 decibels on carpet), but the S2 performs best when suction is upped to the Standard or Turbo modes, cleaning intensity is increased from Fast to Standard, and the S2 is asked to perform two passes of the target zone or room, instead of one.

A crumb mix made of flour and crushed biscuit was completely lifted from a wooden kitchen floor using the S2’s standard intensity and suction settings, while on carpet I found Turbo or Cyclone (the most powerful suction mode) was best.

@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap');@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap');#fv-chart-1784294463899-v6ki3xaut *, #fv-chart-1784294463899-v6ki3xaut *:before, #fv-chart-1784294463899-v6ki3xaut *:after, #fv-chart-1784294463899-v6ki3xaut-slideshow *, #fv-chart-1784294463899-v6ki3xaut-slideshow *:before, #fv-chart-1784294463899-v6ki3xaut-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1784294463899-v6ki3xaut, #fv-chart-1784294463899-v6ki3xaut-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1784294463899-v6ki3xaut {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1784294463899-v6ki3xaut .fv-inner-wrapper {color: #1F2937 !important; background-color: #ffffff !important;padding: 1.5rem 1.5rem 2rem !important; border-radius: 0.5rem !important;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1) !important;margin: 1rem 0 !important; display: flex !important; flex-direction: column !important;overflow: hidden !important;}#fv-chart-1784294463899-v6ki3xaut .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1784294463899-v6ki3xaut.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1784294463899-v6ki3xaut.fv-full-bleed .fv-inner-wrapper {padding: 0 !important;border-radius: 0 !important;box-shadow: none !important;margin: 0 !important;background-color: transparent !important;}#fv-chart-1784294463899-v6ki3xaut .fv-inner-wrapper.fv-is-shop-the-look {padding: 0 !important;border-radius: 0 !important;box-shadow: none !important;margin: 0 !important;background-color: transparent !important;}#fv-chart-1784294463899-v6ki3xaut-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1784294463899-v6ki3xaut-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut-slideshow .fv-slide {width: 100% !important;animation: fv-fade-in 0.3s ease-in-out;}@keyframes fv-fade-in {from { opacity: 0; }to { opacity: 1; }}#fv-chart-1784294463899-v6ki3xaut-slideshow .fv-slideshow-nav-row {position: relative !important;display: flex !important;justify-content: space-between !important;align-items: center !important;padding: 0 0 16px 0 !important;width: 100% !important;z-index: 20 !important;}#fv-chart-1784294463899-v6ki3xaut-slideshow .fv-nav-btn {background-color: var(--riv-primary) !important;color: #ffffff !important;border: none !important;border-radius: 4px !important;padding: 8px 16px !important;font-size: 14px !important;font-weight: 700 !important;cursor: pointer !important;display: flex !important;align-items: center !important;justify-content: center !important;gap: 6px !important;transition: opacity 0.2s, background-color 0.2s !important;height: 36px !important;text-transform: none !important;box-shadow: 0 1px 2px rgba(0,0,0,0.1) !important;}#fv-chart-1784294463899-v6ki3xaut-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1784294463899-v6ki3xaut-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1784294463899-v6ki3xaut-slideshow .fv-nav-btn.disabled {background-color: #E5E7EB !important;color: #9CA3AF !important;cursor: default !important;pointer-events: none !important;box-shadow: none !important;}#fv-chart-1784294463899-v6ki3xaut-slideshow .fv-slide-counter {font-family: 'Poppins', sans-serif !important;font-size: 14px !important;font-weight: 600 !important;color: #374151 !important;text-align: center !important;min-width: 40px !important;background-color: rgba(255,255,255,0.8) !important;padding: 2px 8px !important;border-radius: 10px !important;}#fv-chart-1784294463899-v6ki3xaut-slideshow .fv-slideshow-select {position: absolute !important;top: 10px !important;right: 10px !important;z-index: 20 !important;appearance: none !important;-webkit-appearance: none !important;-moz-appearance: none !important;background-color: white !important;border: 1px solid #d1d5db !important;color: #1F2937 !important;font-family: 'Open Sans', sans-serif !important;font-size: 14px !important;font-weight: 600 !important;padding: 6px 32px 6px 12px !important;border-radius: 4px !important;cursor: pointer !important;box-shadow: 0 1px 2px rgba(0,0,0,0.05) !important;background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e") !important;background-position: right 0.5rem center !important;background-repeat: no-repeat !important;background-size: 1.5em 1.5em !important;}#fv-chart-1784294463899-v6ki3xaut-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-chart-title {font-weight: bold !important;text-align: center !important;margin-bottom: 0.5rem !important;color: var(--riv-primary) !important;font-size: 20px !important;line-height: 1.2 !important;font-family: 'Open Sans', sans-serif !important;text-transform: none !important;white-space: normal !important;overflow-wrap: break-word !important;padding: 0 20px !important;}#fv-chart-1784294463899-v6ki3xaut .fv-chart-subhead {font-size: 18px !important;font-weight: 500 !important;text-align: center !important;margin-bottom: 2rem !important;color: #374151 !important;line-height: 1.7 !important;font-family: 'Open Sans', sans-serif !important;display: block !important;text-transform: none !important;padding: 0 20px !important;}#fv-chart-1784294463899-v6ki3xaut .rv-chart-caption { font-size: 15px !important; color: #374151 !important; text-align: center !important; font-style: normal !important; font-weight: normal !important; line-height: 1.7 !important; font-family: 'Open Sans', sans-serif !important; display: block !important; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-select { background: transparent; border: none; border-bottom: 2px solid; font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; padding: 0.25rem 0; cursor: pointer; outline: none; appearance: none; -webkit-appearance: none; -moz-appearance: none; max-width: 100%; width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-select option { font-family: 'Open Sans', sans-serif; font-weight: 400; font-size: 14px; color: #374151; direction: ltr; text-align: left; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-vs { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; color: #374151; letter-spacing: 0.1em; padding: 0 1rem; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-bar { height: 32px; width: var(--target-width); transition: width 0.8s ease-out; animation: fv-grow-max-width 0.8s ease-out forwards; display: flex; align-items: center; overflow: hidden; color: #ffffff; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-bar-right { border-radius: 0 4px 4px 0; justify-content: flex-start; padding: 0 8px; }@keyframes fv-grow-max-width {from { max-width: 0; }to { max-width: 100%; }}#fv-chart-1784294463899-v6ki3xaut .fv-versus-center-line { position: absolute; left: 50%; top: 0; bottom: 0; width: 4px; background-color: #ffffff; transform: translateX(-50%); z-index: 1; }#fv-chart-1784294463899-v6ki3xaut .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1784294463899-v6ki3xaut .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1784294463899-v6ki3xaut .fv-versus-label { position: absolute; left: 50%; transform: translateX(-50%); top: 0; background-color: transparent; border: none; box-shadow: none; padding: 0; font-family: 'Open Sans', sans-serif; font-weight: 700; font-size: 14px; color: #374151; white-space: nowrap; }#fv-chart-1784294463899-v6ki3xaut .sr-only { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; border: 0 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1784294463899-v6ki3xaut.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-wrapper { position: relative !important; width: 100% !important; overflow: hidden !important; border-radius: 0 !important; background-color: #000 !important; touch-action: pan-y !important; user-select: none !important; -webkit-user-select: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-inner { position: relative !important; width: 100% !important; height: 100% !important; display: block !important; transform-origin: center center !important; transition: transform 0.1s ease-out !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-bg { display: block !important; width: 100% !important; height: auto !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-fg { position: absolute !important; top: 0 !important; left: 0 !important; width: 100% !important; height: 100% !important; object-fit: cover !important; clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%) !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-slider { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 32px !important; transform: translateX(-50%) !important; cursor: ew-resize !important; z-index: 10 !important; user-select: none !important; -webkit-user-select: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-slider-line { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 4px !important; background-color: white !important; transform: translateX(-50%) !important; box-shadow: 0 0 10px rgba(0,0,0,0.5) !important; pointer-events: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-handle { position: absolute !important; top: 50% !important; left: 50% !important; transform: translate(-50%, -50%) !important; width: 32px !important; height: 32px !important; background-color: white !important; border-radius: 50% !important; box-shadow: 0 2px 6px rgba(0,0,0,0.3) !important; display: flex !important; align-items: center !important; justify-content: center !important; gap: 4px !important; pointer-events: none !important; z-index: 11 !important; overflow: hidden !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-arrow-left { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-right: 4px solid #4b5563 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-arrow-right { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-left: 4px solid #4b5563 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-label { position: absolute !important; top: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; padding: 0.25rem 0.75rem !important; border-radius: 0.25rem !important; font-size: 0.875rem !important; font-weight: 500 !important; pointer-events: none !important; backdrop-filter: blur(4px) !important; z-index: 5 !important; transition: right 0.3s ease, opacity 0.2s ease !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-expand-btn, #fv-chart-1784294463899-v6ki3xaut .fv-image-compare-close-btn { position: absolute !important; bottom: 1rem !important; right: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; border: none !important; border-radius: 0.25rem !important; padding: 0.5rem !important; cursor: pointer !important; z-index: 20 !important; display: flex !important; align-items: center !important; justify-content: center !important; backdrop-filter: blur(4px) !important; transition: background-color 0.2s !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-expand-btn:hover, #fv-chart-1784294463899-v6ki3xaut .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-wrapper.fv-image-compare-fullscreen { position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; width: 100% !important; height: 100% !important; z-index: 999999 !important; display: flex !important; align-items: center !important; justify-content: center !important; background-color: rgba(0, 0, 0, 0.9) !important; margin: 0 !important; touch-action: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner { width: 100% !important; height: 100% !important; display: flex !important; align-items: center !important; justify-content: center !important; cursor: grab !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-bg { position: absolute !important; top: 0 !important; left: 0 !important; max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-fg { max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1784294463899-v6ki3xaut .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1784294463899-v6ki3xaut .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1784294463899-v6ki3xaut .fv-logo {display: block !important;margin: 0 auto !important;width: 120px !important;min-width: 120px !important;max-width: 120px !important;height: auto !important;object-fit: contain !important;flex-shrink: 0 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1784294463899-v6ki3xaut .fv-dropdown-title {appearance: none !important;-webkit-appearance: none !important;-moz-appearance: none !important;background: transparent !important;border: none !important;font-size: 18px !important;font-weight: 600 !important;color: var(--riv-primary) !important;padding-right: 28px !important;padding-left: 10px !important;cursor: pointer !important;text-align: center !important;text-align-last: center !important;width: auto !important;max-width: 100% !important;font-family: 'Open Sans', sans-serif !important;line-height: 1.3 !important;margin: 0 !important;text-overflow: ellipsis !important;overflow: hidden !important;white-space: nowrap !important;}#fv-chart-1784294463899-v6ki3xaut .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-dropdown-chevron {position: absolute !important;right: 0 !important;top: 50% !important;transform: translateY(-50%) !important;pointer-events: none !important;color: var(--riv-primary) !important;display: flex !important;align-items: center !important;}#fv-chart-1784294463899-v6ki3xaut .fv-carousel-title-controls { display: flex !important; justify-content: space-between !important; align-items: center !important; margin-bottom: 16px !important; width: 100% !important; gap: 12px !important; }#fv-chart-1784294463899-v6ki3xaut .fv-carousel-nav-btn {background: transparent !important; border: 1px solid #d1d5db !important; border-radius: 6px !important; padding: 6px 10px !important;cursor: pointer !important; font-size: 14px !important; color: #374151 !important; display: flex !important; align-items: center !important; gap: 4px !important; font-family: 'Open Sans', sans-serif !important;}#fv-chart-1784294463899-v6ki3xaut .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1784294463899-v6ki3xaut .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1784294463899-v6ki3xaut .fv-legend { display: flex !important; justify-content: center !important; flex-wrap: wrap !important; gap: 8px 16px !important; margin: 0 !important; padding: 0 !important; margin-top: 1rem !important; }#fv-chart-1784294463899-v6ki3xaut .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1784294463899-v6ki3xaut .fv-multi-value-legend {display: flex !important;justify-content: center !important;flex-wrap: wrap !important;gap: 12px 24px !important;margin-bottom: 1.5rem !important;padding: 0 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-multi-legend-item { display: flex !important; align-items: center !important; gap: 8px !important; font-size: 14px !important; color: #374151 !important; font-weight: 500 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1784294463899-v6ki3xaut .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1784294463899-v6ki3xaut .fv-benchmark-title {font-size: 18px !important; font-weight: 600 !important; margin-bottom: 16px !important; margin-top: 0 !important; padding: 0 !important;text-align: center !important; color: var(--riv-primary) !important; flex: 1 !important; min-width: 0 !important;font-family: 'Open Sans', sans-serif !important; line-height: 1.3 !important;text-transform: none !important;white-space: normal !important;overflow-wrap: break-word !important;word-wrap: break-word !important;max-width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut .fv-bar-row, #fv-chart-1784294463899-v6ki3xaut .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-label { width: 150px !important; flex-shrink: 0 !important; font-size: 14px !important; color: #374151 !important; padding-right: 10px !important; text-align: right !important; font-weight: 500 !important; display: block !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-container { flex-grow: 1 !important; background-color: #E5E7EB !important; border-radius: 4px !important; min-height: 25px !important; border: 1px solid #D1D5DB !important; position: relative !important; display: flex !important; align-items: center !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-commentary-inline { display: none !important; position: absolute !important; left: 150px !important; top: 0 !important; bottom: 0 !important; right: 0 !important; width: calc(100% - 150px) !important; margin: 0 !important; padding: 0 8px !important; font-size: 13px !important; color: #fff !important; background: rgba(0,0,0,0.8) !important; border-radius: 4px !important; line-height: 1.4 !important; font-weight: normal !important; text-transform: none !important; word-wrap: break-word !important; z-index: 10 !important; align-items: center !important; overflow-y: auto !important; }#fv-chart-1784294463899-v6ki3xaut.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1784294463899-v6ki3xaut.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1784294463899-v6ki3xaut.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar { height: 100% !important; border-radius: 3px !important; display: flex !important; align-items: center !important; transition: opacity 0.2s ease, width 0.8s ease-out !important; min-height: 23px !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-inner-content { display: flex !important; justify-content: space-between !important; align-items: center !important; width: 100% !important; height: 100% !important; padding: 0 8px !important; font-size: 14px !important; font-weight: bold !important; overflow: hidden !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-value-outside { padding-left: 8px !important; font-size: 14px !important; font-weight: bold !important; color: #374151 !important; white-space: nowrap !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1784294463899-v6ki3xaut .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1784294463899-v6ki3xaut .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1784294463899-v6ki3xaut .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1784294463899-v6ki3xaut .fv-stacked-segment { height: 100% !important; display: flex !important; align-items: center !important; justify-content: flex-end !important; padding-right: 8px !important; border-right: 1px solid rgba(255,255,255,0.3) !important; }#fv-chart-1784294463899-v6ki3xaut .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1784294463899-v6ki3xaut .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1784294463899-v6ki3xaut .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1784294463899-v6ki3xaut .fv-grouped-product-title { width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.5rem !important; font-weight: 700 !important; font-size: 14px !important; color: #374151 !important; text-transform: none !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1784294463899-v6ki3xaut .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1784294463899-v6ki3xaut .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-ticks { display: flex !important; justify-content: space-between !important; padding-top: 4px !important; font-size: 13px !important; color: #374151 !important; }#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-ticks span::before { content: '' !important; position: absolute !important; top: -6px !important; left: 50% !important; transform: translateX(-50%) !important; width: 2px !important; height: 4px !important; background-color: #D1D5DB !important; border-radius: 1px !important; }#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-title { text-align: center !important; font-size: 15px !important; color: #374151 !important; margin-top: 8px !important; margin-bottom: 16px !important; line-height: 1.5 !important; padding: 0 1rem !important; display: block !important; font-weight: bold !important; }#fv-chart-1784294463899-v6ki3xaut .fv-y-axis-title {font-size: 15px !important;color: #374151 !important;line-height: 1.5 !important;text-align: left !important;padding-left: 5.83% !important;margin-bottom: 4px !important;display: block !important;font-weight: bold !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-pie-container,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-row,#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-stacked-product,#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-grouped-bar-product,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-bar-row,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-stacked-product,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-bar-label:not(.fv-grouped-product-title) {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-label,#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-grouped-product-title,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-bar-label,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-grouped-product-title {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-container,#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-cluster,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-bar-container,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus-within {position: static !important; display: block !important; width: 100% !important; margin: 4px 0 0 0 !important; padding: 0 !important; background: transparent !important; color: #6B7280 !important; font-size: 12px !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-x-axis-wrapper,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-x-axis-label-space,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-x-axis-chart-space,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-benchmark-title,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-dropdown-title,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-carousel-nav-btn,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-chart-title,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-chart-subhead,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-versus-header,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-versus-select-wrapper,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-versus-vs,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-versus-select-container,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-versus-select,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-stl-shop-all-btn,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-stl-shop-all-btn {bottom: 0.5rem !important; right: 0.5rem !important; height: 2rem !important; font-size: 0.75rem !important; padding: 0 0.75rem 0 2.5rem !important; max-width: calc(100% - 1rem) !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-stl-shop-all-logo,#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-stl-shop-all-icon,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-bar-commentary-inline,#fv-chart-1784294463899-v6ki3xaut.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1784294463899-v6ki3xaut.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1784294463899-v6ki3xaut .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1784294463899-v6ki3xaut .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-bar-row,#fv-chart-1784294463899-v6ki3xaut .fv-stacked-product,#fv-chart-1784294463899-v6ki3xaut .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1784294463899-v6ki3xaut .fv-bar-label:not(.fv-grouped-product-title) {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-bar-label,#fv-chart-1784294463899-v6ki3xaut .fv-grouped-product-title {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-bar-container,#fv-chart-1784294463899-v6ki3xaut .fv-bar-cluster {width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294463899-v6ki3xaut .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294463899-v6ki3xaut .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294463899-v6ki3xaut .fv-bar-row .fv-bar-commentary-inline:focus-within {position: static !important; display: block !important; width: 100% !important; margin: 4px 0 0 0 !important; padding: 0 !important; background: transparent !important; color: #6B7280 !important; font-size: 12px !important;}#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-label-space {display: none !important;}#fv-chart-1784294463899-v6ki3xaut .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1784294463899-v6ki3xaut .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1784294463899-v6ki3xaut .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1784294463899-v6ki3xaut .fv-chart-title {padding: 0 8px !important;}#fv-chart-1784294463899-v6ki3xaut .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1784294463899-v6ki3xaut .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1784294463899-v6ki3xaut .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1784294463899-v6ki3xaut .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1784294463899-v6ki3xaut .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1784294463899-v6ki3xaut .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut .fv-stl-shop-all-btn {bottom: 0.5rem !important; right: 0.5rem !important; height: 2rem !important; font-size: 0.75rem !important; padding: 0 0.75rem 0 2.5rem !important; max-width: calc(100% - 1rem) !important;}#fv-chart-1784294463899-v6ki3xaut .fv-stl-shop-all-logo,#fv-chart-1784294463899-v6ki3xaut .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1784294463899-v6ki3xaut .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1784294463899-v6ki3xaut .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1784294463899-v6ki3xaut .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1784294463899-v6ki3xaut.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Overall Chart Title","description": "Subhead to describe the test and what's being measured and why","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-07-17T13:21:03.899Z","citation": "Add your caption to explain the data, the learnings and the key takeaways of the data being visualized","keywords": ["Image Comparison","benchmark","comparison","performance","review","TechRadar"],"measurementTechnique": "Performance Benchmarking","variableMeasured": []}Crumb mix before first passCrumb mix after first passwindow.iFrameResizer = {heightCalculationMethod: 'taggedElement'};(function() {window.fvAnimateCharts = function(chartWrapper) {if (!chartWrapper) return;function animateBars(chartElement) {if (!chartElement) return;var bars = chartElement.querySelectorAll('.fv-bar, .fv-stacked-segment');bars.forEach(function(bar, index) {bar.style.setProperty('width', '0%', 'important');bar.style.setProperty('transition', 'none', 'important');var targetWidth = bar.dataset.targetWidth;if (targetWidth === undefined) return;void bar.offsetWidth;var targetMargin = bar.dataset.targetMargin;var baseMargin = bar.dataset.baseMargin;if (baseMargin !== undefined) {bar.style.setProperty('margin-left', baseMargin + '%', 'important');}setTimeout(function() {var marginTransition = baseMargin !== undefined ? ', margin-left 0.8s ease-out' : '';bar.style.setProperty('transition', 'opacity 0.2s ease, width 0.8s ease-out' + marginTransition, 'important');bar.style.setProperty('width', targetWidth + '%', 'important');if (targetMargin !== undefined && baseMargin !== undefined) {bar.style.setProperty('margin-left', targetMargin + '%', 'important');}}, index * 50 + 50);});}function animateLineChart(chartElement) {if (!chartElement) return;var lineSvg = chartElement.querySelector('svg');if (!lineSvg) return;var paths = lineSvg.querySelectorAll('.riv-line-path');paths.forEach(function(p, i) {if (typeof p.getTotalLength === 'function') {var len = p.getTotalLength();p.style.transition = 'none';p.style.strokeDasharray = len;p.style.strokeDashoffset = len;p.getBoundingClientRect();setTimeout(function() {p.style.transition = 'stroke-dashoffset 1s ease-out ' + (i * 0.1) + 's, stroke-width 0.2s, opacity 0.2s';p.style.strokeDashoffset = '0';}, 100);}});var dots = lineSvg.querySelectorAll('.riv-dot');dots.forEach(function(dot, i) {dot.style.opacity = '0';setTimeout(function() {dot.style.transition = 'opacity 0.3s ease';dot.style.opacity = '1';}, 500 + i * 10);});}var charts = chartWrapper.querySelectorAll('.fv-chart-item');charts.forEach(function(chart) {if (window.getComputedStyle(chart).display === 'none') return;var chartType = chart.dataset.chartType;if (chartType === 'Line') {animateLineChart(chart);} else if (chartType !== 'Pie') {animateBars(chart);}});};function initialize(uniqueId, isSlideshow) {var root = document.getElementById(uniqueId);if (!root && !isSlideshow) return;function setupWrapper(chartWrapper) {if (!chartWrapper) return;function checkMobileView() {var width = chartWrapper.getBoundingClientRect().width;var isMobileDevice = window.screen && Math.min(window.screen.width, window.screen.height) <= 599;var isMobile;if (width === 0) {isMobile = isMobileDevice || window.matchMedia('(max-width: 599px)').matches;} else {isMobile = isMobileDevice || width < 600;}if (isMobile) {chartWrapper.classList.add('mobile-view');} else {chartWrapper.classList.remove('mobile-view');}}checkMobileView();if (typeof ResizeObserver !== 'undefined') {var ro = new ResizeObserver(function() {checkMobileView();});ro.observe(chartWrapper);}window.addEventListener('resize', checkMobileView);var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true';if (labelsOnTop) {var charts = chartWrapper.querySelectorAll('.fv-chart-item');var hasVisibleBarChart = false;charts.forEach(function(c) {if (window.getComputedStyle(c).display !== 'none') {var cType = c.dataset.chartType;if (cType === 'Bar' || cType === 'Stacked Bar' || cType === 'Versus') {hasVisibleBarChart = true;}}});if (hasVisibleBarChart) {chartWrapper.classList.add('labels-on-top');} else {chartWrapper.classList.remove('labels-on-top');}} else {chartWrapper.classList.remove('labels-on-top');}chartWrapper.querySelectorAll('.riv-line-legend').forEach(function(legend) {var chartId = legend.dataset.chart;var chart = chartWrapper.querySelector('[id="' + chartId + '"]');if (!chart) return;var lines = chart.querySelectorAll('.riv-line-path');var dots = chart.querySelectorAll('.riv-dot');var legendItems = legend.querySelectorAll('.riv-legend-item');legendItems.forEach(function(item) {var productName = item.dataset.product;var safeProductName = productName.replace(/"/g, '\"');var line = chart.querySelector('.riv-line-path[data-product="' + safeProductName + '"]');var productDots = chart.querySelectorAll('.riv-dot[data-product="' + safeProductName + '"]');if (line && !line.dataset.origStroke) {line.dataset.origStroke = line.getAttribute('stroke-width') || '2';}var highlight = function() {if (legend.querySelector('.isolated')) return;lines.forEach(function(l) { l.style.opacity = '0.2'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '0.2'; });legendItems.forEach(function(i) { i.style.opacity = '0.3'; i.style.transition = 'opacity 0.2s'; });if (line) {line.style.opacity = '1';line.setAttribute('stroke-width', '4');}productDots.forEach(function(d) { d.style.opacity = '1'; });item.style.opacity = '1';};var clearHighlight = function() {if (legend.querySelector('.isolated')) return;lines.forEach(function(l) { l.style.opacity = '1'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '1'; });legendItems.forEach(function(i) { i.style.opacity = '1'; });};var toggleIsolate = function() {var isIsolated = item.classList.contains('isolated');legendItems.forEach(function(i) { i.classList.remove('isolated'); });if (isIsolated) {lines.forEach(function(l) { l.style.opacity = '1'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '1'; });legendItems.forEach(function(i) { i.style.opacity = '1'; });} else {item.classList.add('isolated');lines.forEach(function(l) { l.style.opacity = '0.2'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '0.2'; });legendItems.forEach(function(i) { i.style.opacity = '0.3'; i.style.transition = 'opacity 0.2s'; });if (line) {line.style.opacity = '1';line.setAttribute('stroke-width', '4');}productDots.forEach(function(d) { d.style.opacity = '1'; });item.style.opacity = '1';}};item.addEventListener('mouseenter', highlight);item.addEventListener('focus', highlight);item.addEventListener('mouseleave', clearHighlight);item.addEventListener('blur', clearHighlight);item.addEventListener('click', toggleIsolate);if (line) {line.style.cursor = 'pointer';line.addEventListener('mouseenter', highlight);line.addEventListener('mouseleave', clearHighlight);line.addEventListener('click', toggleIsolate);}});});var versusCharts = chartWrapper.querySelectorAll('.fv-versus-chart');versusCharts.forEach(function(vc) {var dataJson = vc.getAttribute('data-versus-data');var leftColor = vc.getAttribute('data-left-color') || '#E53935';var rightColor = vc.getAttribute('data-right-color') || '#FFB300';if (!dataJson) return;var versusData = JSON.parse(dataJson);var leftSelect = vc.querySelector('.fv-select-left');var rightSelect = vc.querySelector('.fv-select-right');var rows = vc.querySelectorAll('.fv-versus-row');function updateVersusChart() {var leftProduct = leftSelect.value;var rightProduct = rightSelect.value;leftSelect.style.color = leftColor;leftSelect.style.borderColor = leftColor;rightSelect.style.color = rightColor;rightSelect.style.borderColor = rightColor;rows.forEach(function(row) {var index = parseInt(row.getAttribute('data-index'));var data = versusData[index];if (!data) return;var leftVal = data.productData[leftProduct] ? data.productData[leftProduct].value : undefined;var rightVal = data.productData[rightProduct] ? data.productData[rightProduct].value : undefined;var leftIsNum = typeof leftVal === 'number';var rightIsNum = typeof rightVal === 'number';var leftNum = leftIsNum ? leftVal : 0;var rightNum = rightIsNum ? rightVal : 0;var maxVal = Math.max(leftNum, rightNum, 0.0001);var leftWidth = leftIsNum ? (leftNum / maxVal) * 95 : 0;var rightWidth = rightIsNum ? (rightNum / maxVal) * 85 : 0;var winner = null;var pctDiffStr = null;if (leftIsNum && rightIsNum) {if (leftNum > rightNum) {winner = 'left';if (rightNum > 0) {var diff = Math.round(((leftNum - rightNum) / rightNum) * 100);pctDiffStr = '+' + diff.toLocaleString() + '%';}} else if (rightNum > leftNum) {winner = 'right';if (leftNum > 0) {var diff = Math.round(((rightNum - leftNum) / leftNum) * 100);pctDiffStr = '+' + diff.toLocaleString() + '%';}}}var leftDisplay = data.productData[leftProduct] && data.productData[leftProduct].displayValue !== undefined ? data.productData[leftProduct].displayValue : (leftIsNum ? leftNum.toLocaleString() : (leftVal !== undefined ? leftVal : '-'));var rightDisplay = data.productData[rightProduct] && data.productData[rightProduct].displayValue !== undefined ? data.productData[rightProduct].displayValue : (rightIsNum ? rightNum.toLocaleString() : (rightVal !== undefined ? rightVal : '-'));var unit = (data.productData[leftProduct] && data.productData[leftProduct].unit) ||(data.productData[rightProduct] && data.productData[rightProduct].unit) || '';var leftTextStr = leftDisplay;var rightTextStr = rightDisplay;var leftBar = row.querySelector('.fv-versus-bar-left');var rightBar = row.querySelector('.fv-versus-bar-right');var leftText = row.querySelector('.fv-inside-left');var rightText = row.querySelector('.fv-inside-right');var labelText = row.querySelector('.fv-versus-label span');var leftWrapper = row.querySelector('.fv-versus-bar-left-wrapper');var rightWrapper = row.querySelector('.fv-versus-bar-right-wrapper');var existingPctDiffs = row.querySelectorAll('.fv-versus-pct-diff');existingPctDiffs.forEach(function(el) { el.remove(); });if (winner === 'left' && pctDiffStr) {var pctSpan = document.createElement('span');pctSpan.className = 'fv-versus-pct-diff';pctSpan.style.color = 'rgba(255, 255, 255, 0.9)';pctSpan.textContent = pctDiffStr;if (leftBar) leftBar.insertBefore(pctSpan, leftBar.firstChild);} else if (winner === 'right' && pctDiffStr) {var pctSpan = document.createElement('span');pctSpan.className = 'fv-versus-pct-diff';pctSpan.style.color = 'rgba(255, 255, 255, 0.9)';pctSpan.textContent = pctDiffStr;if (rightBar) rightBar.appendChild(pctSpan);}if (leftBar) {leftBar.style.backgroundColor = leftColor;leftBar.dataset.targetWidth = leftWidth;leftBar.style.setProperty('--target-width', leftWidth + '%');leftBar.style.width = leftWidth + '%';}if (rightBar) {rightBar.style.backgroundColor = rightColor;rightBar.dataset.targetWidth = rightWidth;rightBar.style.setProperty('--target-width', rightWidth + '%');rightBar.style.width = rightWidth + '%';}if (leftText) {leftText.innerHTML = leftTextStr;}if (rightText) {rightText.innerHTML = rightTextStr;}if (labelText) {labelText.textContent = data.attribute + (unit ? ' (' + unit + ')' : '');}});}if (leftSelect) leftSelect.addEventListener('change', updateVersusChart);if (rightSelect) rightSelect.addEventListener('change', updateVersusChart);});var barRows = chartWrapper.querySelectorAll('.fv-bar-row');var globalCaptionEl = chartWrapper.querySelector('.rv-chart-caption');var fallbackCaptionHtml = globalCaptionEl ? globalCaptionEl.innerHTML : '';barRows.forEach(function(row) {var commentaryEl = row.querySelector('[data-commentary-key]');if (commentaryEl) {var commentaryText = commentaryEl.textContent;if (commentaryText && commentaryText.trim().length > 0) {row.addEventListener('mouseenter', function() {if (!chartWrapper.classList.contains('mobile-view') && globalCaptionEl) {globalCaptionEl.innerHTML = commentaryText;globalCaptionEl.classList.add('fv-bar-active-caption');}});row.addEventListener('mouseleave', function() {if (!chartWrapper.classList.contains('mobile-view') && globalCaptionEl) {globalCaptionEl.innerHTML = fallbackCaptionHtml;globalCaptionEl.classList.remove('fv-bar-active-caption');}});}}});var charts = chartWrapper.querySelectorAll('.fv-chart-item');var dropdown = chartWrapper.querySelector('.fv-dropdown-title');var prevBtn = chartWrapper.querySelector('.fv-carousel-nav-btn.prev');var nextBtn = chartWrapper.querySelector('.fv-carousel-nav-btn.next');var carouselTitle = chartWrapper.querySelector('.fv-carousel-title-controls .fv-benchmark-title');var counter = chartWrapper.querySelector('.fv-carousel-counter');var subheadEl = chartWrapper.querySelector('.fv-chart-subhead');var captionEl = chartWrapper.querySelector('.rv-chart-caption');var footerContentEl = chartWrapper.querySelector('.fv-footer-content');var bottomBarEl = chartWrapper.querySelector('.fv-bottom-bar');var logoEl = chartWrapper.querySelector('.fv-logo');if (charts.length > 1 && (dropdown || prevBtn)) {var currentChartIndex = 0;var titles = [];if (dropdown) {titles = Array.from(dropdown.options).map(function(o) { return o.text; });} else {charts.forEach(function(c) {titles.push(c.getAttribute('data-title') || '');});}function showInternalChart(index) {if (index < 0) index = charts.length - 1;if (index >= charts.length) index = 0;currentChartIndex = index;charts.forEach(function(c, i) {c.style.display = i === index ? 'block' : 'none';if (i === index) {var cType = c.dataset.chartType;if (cType === 'Line') {} else if (cType !== 'Pie') {window.fvAnimateCharts(chartWrapper);}var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true';if (labelsOnTop && (cType === 'Bar' || cType === 'Stacked Bar' || cType === 'Versus')) {chartWrapper.classList.add('labels-on-top');} else {chartWrapper.classList.remove('labels-on-top');}}});if (dropdown) dropdown.value = index;if (carouselTitle && titles[index]) carouselTitle.textContent = titles[index];if (counter) counter.textContent = (index + 1) + ' of ' + charts.length;var activeChart = charts[index];if (activeChart) {var newSubhead = activeChart.getAttribute('data-subhead');var newCaption = activeChart.getAttribute('data-caption');var currentChartType = activeChart.getAttribute('data-chart-type');var hideGlobalCaption = currentChartType === 'Countdown' || currentChartType === 'Image Comparison' || currentChartType === 'Shop the Collection';if (subheadEl) subheadEl.textContent = newSubhead || '';if (captionEl) {captionEl.textContent = newCaption || '';fallbackCaptionHtml = newCaption || '';}if (footerContentEl) {if (newCaption && newCaption.trim().length > 0 && !hideGlobalCaption) {footerContentEl.style.display = 'block';if (bottomBarEl) bottomBarEl.style.display = 'flex';} else {footerContentEl.style.display = 'none';if (bottomBarEl && !logoEl) {bottomBarEl.style.display = 'none';}}}}}if (dropdown) dropdown.addEventListener('change', function(e) { showInternalChart(parseInt(e.target.value)); });if (prevBtn) prevBtn.addEventListener('click', function() { showInternalChart(currentChartIndex - 1); });if (nextBtn) nextBtn.addEventListener('click', function() { showInternalChart(currentChartIndex + 1); });}var imageCompareWrappers = chartWrapper.querySelectorAll('.fv-image-compare-wrapper');imageCompareWrappers.forEach(function(wrapper) {var inner = wrapper.querySelector('.fv-image-compare-inner') || wrapper;var slider = wrapper.querySelector('.fv-image-compare-slider');var fgImage = wrapper.querySelector('.fv-image-compare-fg');var bgImage = wrapper.querySelector('.fv-image-compare-bg');var labelLeft = wrapper.querySelector('.fv-image-compare-label-left');var labelRight = wrapper.querySelector('.fv-image-compare-label-right');var isDragging = false;var scale = 1;var panX = 0;var panY = 0;var isPanning = false;var hasPanned = false;var lastClientX = 0;var lastClientY = 0;var initialDistance = null;var lastCenterX = null;var lastCenterY = null;function updateTransform() {if (wrapper.classList.contains('fv-image-compare-fullscreen')) {inner.style.setProperty('transform', 'translate(' + panX + 'px, ' + panY + 'px) scale(' + scale + ')', 'important');} else {inner.style.removeProperty('transform');scale = 1;panX = 0;panY = 0;}}function constrainPan() {var rect = wrapper.getBoundingClientRect();var maxPanX = Math.max(0, (rect.width * scale - rect.width) / 2);var maxPanY = Math.max(0, (rect.height * scale - rect.height) / 2);panX = Math.max(-maxPanX, Math.min(panX, maxPanX));panY = Math.max(-maxPanY, Math.min(panY, maxPanY));}wrapper.addEventListener('wheel', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;e.preventDefault();var zoomSensitivity = 0.005;var zoomFactor = Math.exp(-e.deltaY * zoomSensitivity);var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));if (newScale === scale) return;var rect = wrapper.getBoundingClientRect();var mouseX = e.clientX - rect.left - rect.width / 2;var mouseY = e.clientY - rect.top - rect.height / 2;var ratio = newScale / scale;panX = mouseX - (mouseX - panX) * ratio;panY = mouseY - (mouseY - panY) * ratio;scale = newScale;constrainPan();updateTransform();}, { passive: false });wrapper.addEventListener('mousedown', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen') || scale <= 1) return;if (e.target.closest('.fv-image-compare-slider') || e.target.closest('button')) return;isPanning = true;hasPanned = false;lastClientX = e.clientX;lastClientY = e.clientY;});window.addEventListener('mousemove', function(e) {if (!isPanning) return;var dx = e.clientX - lastClientX;var dy = e.clientY - lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.clientX;lastClientY = e.clientY;panX += dx;panY += dy;constrainPan();updateTransform();});window.addEventListener('mouseup', function() {isPanning = false;});wrapper.addEventListener('touchstart', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;if (e.touches.length === 2) {e.preventDefault();var dx = e.touches[0].clientX - e.touches[1].clientX;var dy = e.touches[0].clientY - e.touches[1].clientY;initialDistance = Math.sqrt(dx * dx + dy * dy);var rect = wrapper.getBoundingClientRect();lastCenterX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left - rect.width / 2;lastCenterY = (e.touches[0].clientY + e.touches[1].clientY) / 2 - rect.top - rect.height / 2;hasPanned = true;} else if (e.touches.length === 1 && scale > 1) {if (e.target.closest('.fv-image-compare-slider') || e.target.closest('button')) return;isPanning = true;hasPanned = false;lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;}}, { passive: false });wrapper.addEventListener('touchmove', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;if (e.touches.length === 2 && initialDistance !== null) {e.preventDefault();var dx = e.touches[0].clientX - e.touches[1].clientX;var dy = e.touches[0].clientY - e.touches[1].clientY;var distance = Math.sqrt(dx * dx + dy * dy);if (initialDistance > 0) {var zoomFactor = distance / initialDistance;var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));var rect = wrapper.getBoundingClientRect();var centerX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left - rect.width / 2;var centerY = (e.touches[0].clientY + e.touches[1].clientY) / 2 - rect.top - rect.height / 2;var ratio = newScale / scale;panX = centerX - (centerX - panX) * ratio;panY = centerY - (centerY - panY) * ratio;if (lastCenterX !== null && lastCenterY !== null) {panX += (centerX - lastCenterX);panY += (centerY - lastCenterY);}scale = newScale;lastCenterX = centerX;lastCenterY = centerY;constrainPan();updateTransform();}initialDistance = distance;} else if (e.touches.length === 1 && isPanning) {e.preventDefault();var dx = e.touches[0].clientX - lastClientX;var dy = e.touches[0].clientY - lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;panX += dx;panY += dy;constrainPan();updateTransform();}}, { passive: false });wrapper.addEventListener('touchend', function(e) {if (e.touches.length < 2) {initialDistance = null;}if (e.touches.length === 0) {isPanning = false;}});function handleMove(clientX) {var rect = inner.getBoundingClientRect();var x = Math.max(0, Math.min(clientX - rect.left, rect.width));var percent = Math.max(0, Math.min((x / rect.width) * 100, 100));if (slider) slider.style.setProperty('left', percent + '%', 'important');if (fgImage) fgImage.style.setProperty('clip-path', 'polygon(0 0, ' + percent + '% 0, ' + percent + '% 100%, 0 100%)', 'important');if (labelLeft) {if (percent < 10) {labelLeft.style.setProperty('opacity', '0', 'important');} else {labelLeft.style.setProperty('opacity', '1', 'important');}}if (labelRight) {if (percent > 90) {labelRight.style.setProperty('opacity', '0', 'important');} else {labelRight.style.setProperty('opacity', '1', 'important');}}}function onMouseMove(e) {if (!isDragging) return;handleMove(e.clientX);}function onTouchMove(e) {if (!isDragging) return;e.preventDefault();handleMove(e.touches[0].clientX);}function stopDragging() {isDragging = false;window.removeEventListener('mousemove', onMouseMove);window.removeEventListener('mouseup', stopDragging);window.removeEventListener('touchmove', onTouchMove);window.removeEventListener('touchend', stopDragging);}if (slider) {var startDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener('mousemove', onMouseMove);window.addEventListener('mouseup', stopDragging);};var startTouchDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener('touchmove', onTouchMove, { passive: false });window.addEventListener('touchend', stopDragging);};slider.addEventListener('mousedown', function(e) {e.preventDefault();startDrag(e.clientX);});slider.addEventListener('touchstart', function(e) {e.preventDefault();startTouchDrag(e.touches[0].clientX);}, { passive: false });}var expandBtn = wrapper.querySelector('.fv-image-compare-expand-btn');var closeBtn = wrapper.querySelector('.fv-image-compare-close-btn');if (expandBtn) {if (window !== window.parent) {expandBtn.style.display = 'none';} else {expandBtn.addEventListener('click', function(e) {e.stopPropagation();wrapper.classList.add('fv-image-compare-fullscreen');document.body.style.overflow = 'hidden';if (fgImage && fgImage.dataset.highresSrc) {fgImage.src = fgImage.dataset.highresSrc;fgImage.removeAttribute('srcset');fgImage.removeAttribute('sizes');}if (bgImage && bgImage.dataset.highresSrc) {bgImage.src = bgImage.dataset.highresSrc;bgImage.removeAttribute('srcset');bgImage.removeAttribute('sizes');}});}}if (closeBtn) {closeBtn.addEventListener('click', function(e) {e.stopPropagation();wrapper.classList.remove('fv-image-compare-fullscreen');document.body.style.overflow = '';updateTransform();});}document.addEventListener('keydown', function(e) {if (e.key === 'Escape' && wrapper.classList.contains('fv-image-compare-fullscreen')) {wrapper.classList.remove('fv-image-compare-fullscreen');document.body.style.overflow = '';updateTransform();}});});var hotspots = chartWrapper.querySelectorAll('.fv-stl-hotspot-btn');var allProductsModal = chartWrapper.querySelector('.fv-stl-all-products-modal');var shopAllBtn = chartWrapper.querySelector('.fv-stl-shop-all-btn');var allProductsList = chartWrapper.querySelector('.fv-stl-all-products-list');var stlContainer = chartWrapper.querySelector('.fv-stl-container');function closeAllModals() {if (allProductsModal) {allProductsModal.classList.remove('is-active');var items = allProductsModal.querySelectorAll('.fv-stl-all-products-item');items.forEach(function(item) {item.classList.remove('is-highlighted');});if (stlContainer) {setTimeout(function() {if (!allProductsModal.classList.contains('is-active')) {stlContainer.style.minHeight = '';if ('parentIFrame' in window) {window.parentIFrame.size();}}}, 300);}}hotspots.forEach(function(btn) { btn.setAttribute('aria-expanded', 'false'); });if ('parentIFrame' in window) {window.parentIFrame.size();}}hotspots.forEach(function(btn) {btn.addEventListener('click', function(e) {e.stopPropagation();var hotspotId = btn.getAttribute('data-hotspot-id');var isExpanded = btn.getAttribute('aria-expanded') === 'true';closeAllModals();if (!isExpanded && allProductsModal) {btn.setAttribute('aria-expanded', 'true');allProductsModal.classList.add('is-active');var container = btn.closest('.fv-stl-container');if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}var targetItem = allProductsModal.querySelector('.fv-stl-all-products-item[data-product-id="' + hotspotId + '"]');if (targetItem) {targetItem.classList.add('is-highlighted');setTimeout(function() {targetItem.scrollIntoView({ behavior: 'smooth', block: 'center' });}, 100);}if ('parentIFrame' in window) {window.parentIFrame.size();}}});});if (shopAllBtn && allProductsModal) {shopAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();allProductsModal.classList.add('is-active');var container = shopAllBtn.closest('.fv-stl-container');if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}if ('parentIFrame' in window) {window.parentIFrame.size();}});}if (allProductsModal) {var closeAllBtn = allProductsModal.querySelector('.fv-stl-all-products-close');if (closeAllBtn) {closeAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();});}}chartWrapper.addEventListener('click', function(e) {if (!e.target.closest('.fv-stl-all-products-content')) {closeAllModals();}});if (allProductsModal) {allProductsModal.addEventListener('click', function(e) {if (!e.target.closest('.fv-stl-all-products-content')) {closeAllModals();}});}var iaNodes = chartWrapper.querySelectorAll('.fv-ia-node-button');var iaWrapper = chartWrapper.querySelector('.fv-ia-wrapper');var originalCaption = chartWrapper.querySelector('.fv-original-caption') || captionEl;var dynamicCaption = chartWrapper.querySelector('.fv-ia-dynamic-caption');var exploreBtn = chartWrapper.querySelector('.fv-ia-explore-btn');var currentIaIndex = -1;function closeAllIANodes() {iaNodes.forEach(function(btn) { btn.classList.remove('is-active'); });if (originalCaption) originalCaption.style.display = 'block';if (dynamicCaption) dynamicCaption.style.display = 'none';}function resetExploreBtn() {currentIaIndex = -1;if (exploreBtn) {var exploreSpan = exploreBtn.querySelector('span');if (exploreSpan) exploreSpan.textContent = 'Explore';}}iaNodes.forEach(function(btn, index) {btn.addEventListener('click', function(e) {e.stopPropagation();var isActive = btn.classList.contains('is-active');closeAllIANodes();if (!isActive) {currentIaIndex = index;if (exploreBtn) {var exploreSpan = exploreBtn.querySelector('span');if (exploreSpan) exploreSpan.textContent = 'Next';}btn.classList.add('is-active');if (dynamicCaption) {var title = btn.getAttribute('data-title') || '';var desc = btn.getAttribute('data-desc') || '';dynamicCaption.innerHTML = '';var strongTag = document.createElement('strong');strongTag.textContent = title;dynamicCaption.appendChild(strongTag);if (desc) {dynamicCaption.appendChild(document.createTextNode(' - ' + desc));}if (originalCaption) originalCaption.style.display = 'none';dynamicCaption.style.display = 'block';if (footerContentEl) footerContentEl.style.display = 'block';}} else {resetExploreBtn();}});});if (exploreBtn) {exploreBtn.addEventListener('click', function(e) {e.stopPropagation();if (iaNodes.length === 0) return;var nextIndex = currentIaIndex + 1;if (nextIndex >= iaNodes.length) {closeAllIANodes();resetExploreBtn();} else {currentIaIndex = nextIndex;var targetBtn = iaNodes[currentIaIndex];if (targetBtn) {if(targetBtn.classList.contains('is-active')) {targetBtn.click();}targetBtn.click();}}});}if (iaWrapper) {iaWrapper.addEventListener('click', function(e) {if (!e.target.closest('.fv-ia-node-button') && !e.target.closest('.fv-ia-explore-btn')) {closeAllIANodes();resetExploreBtn();}});}window.fvAnimateCharts(chartWrapper);var countdownContainer = chartWrapper.querySelector('.fv-countdown-container');if (countdownContainer) {var targetDateAttr = countdownContainer.getAttribute('data-target-date');if (targetDateAttr) {var targetDate = new Date(targetDateAttr);var primaryColor = countdownContainer.getAttribute('data-primary-color') || '#f97316';var subheadColor = countdownContainer.getAttribute('data-subhead-color') || '#ffffff';var pad = function(n) { return (n < 10 ? '0' : '') + n; };var updateCountdown = function() {var difference = +targetDate - +new Date();var d = 0, h = 0, m = 0, s = 0;if (difference > 0) {d = Math.floor(difference / (1000 * 60 * 60 * 24));h = Math.floor((difference / (1000 * 60 * 60)) % 24);m = Math.floor((difference / 1000 / 60) % 60);s = Math.floor((difference / 1000) % 60);}var daysEl = countdownContainer.querySelector('[data-time="days"]');var hoursEl = countdownContainer.querySelector('[data-time="hours"]');var minsEl = countdownContainer.querySelector('[data-time="minutes"]');var secsEl = countdownContainer.querySelector('[data-time="seconds"]');if (daysEl) daysEl.textContent = d;if (hoursEl) hoursEl.textContent = pad(h);if (minsEl) minsEl.textContent = pad(m);if (secsEl) secsEl.textContent = pad(s);};updateCountdown();setInterval(updateCountdown, 1000);}}}if (false) {var slideshowContainer = document.getElementById(uniqueId + '-slideshow');if (slideshowContainer) {var slides = slideshowContainer.querySelectorAll('.fv-slide');slides.forEach(function(slide) {setupWrapper(slide.querySelector('.fv-chart-wrapper'));});}} else {setupWrapper(root);}}if (document.readyState === 'loading') {document.addEventListener('DOMContentLoaded', function() { initialize('fv-chart-1784294463899-v6ki3xaut', false); });} else {initialize('fv-chart-1784294463899-v6ki3xaut', false);}})();

With that enabled, plus the intensity increased to Deep and the number of passes upped to two, the robot did a superb job.

@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap');@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap');#fv-chart-1784294519188-pba2ojlaz *, #fv-chart-1784294519188-pba2ojlaz *:before, #fv-chart-1784294519188-pba2ojlaz *:after, #fv-chart-1784294519188-pba2ojlaz-slideshow *, #fv-chart-1784294519188-pba2ojlaz-slideshow *:before, #fv-chart-1784294519188-pba2ojlaz-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1784294519188-pba2ojlaz, #fv-chart-1784294519188-pba2ojlaz-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1784294519188-pba2ojlaz {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1784294519188-pba2ojlaz .fv-inner-wrapper {color: #1F2937 !important; background-color: #ffffff !important;padding: 1.5rem 1.5rem 2rem !important; border-radius: 0.5rem !important;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1) !important;margin: 1rem 0 !important; display: flex !important; flex-direction: column !important;overflow: hidden !important;}#fv-chart-1784294519188-pba2ojlaz .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1784294519188-pba2ojlaz.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1784294519188-pba2ojlaz.fv-full-bleed .fv-inner-wrapper {padding: 0 !important;border-radius: 0 !important;box-shadow: none !important;margin: 0 !important;background-color: transparent !important;}#fv-chart-1784294519188-pba2ojlaz .fv-inner-wrapper.fv-is-shop-the-look {padding: 0 !important;border-radius: 0 !important;box-shadow: none !important;margin: 0 !important;background-color: transparent !important;}#fv-chart-1784294519188-pba2ojlaz-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1784294519188-pba2ojlaz-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz-slideshow .fv-slide {width: 100% !important;animation: fv-fade-in 0.3s ease-in-out;}@keyframes fv-fade-in {from { opacity: 0; }to { opacity: 1; }}#fv-chart-1784294519188-pba2ojlaz-slideshow .fv-slideshow-nav-row {position: relative !important;display: flex !important;justify-content: space-between !important;align-items: center !important;padding: 0 0 16px 0 !important;width: 100% !important;z-index: 20 !important;}#fv-chart-1784294519188-pba2ojlaz-slideshow .fv-nav-btn {background-color: var(--riv-primary) !important;color: #ffffff !important;border: none !important;border-radius: 4px !important;padding: 8px 16px !important;font-size: 14px !important;font-weight: 700 !important;cursor: pointer !important;display: flex !important;align-items: center !important;justify-content: center !important;gap: 6px !important;transition: opacity 0.2s, background-color 0.2s !important;height: 36px !important;text-transform: none !important;box-shadow: 0 1px 2px rgba(0,0,0,0.1) !important;}#fv-chart-1784294519188-pba2ojlaz-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1784294519188-pba2ojlaz-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1784294519188-pba2ojlaz-slideshow .fv-nav-btn.disabled {background-color: #E5E7EB !important;color: #9CA3AF !important;cursor: default !important;pointer-events: none !important;box-shadow: none !important;}#fv-chart-1784294519188-pba2ojlaz-slideshow .fv-slide-counter {font-family: 'Poppins', sans-serif !important;font-size: 14px !important;font-weight: 600 !important;color: #374151 !important;text-align: center !important;min-width: 40px !important;background-color: rgba(255,255,255,0.8) !important;padding: 2px 8px !important;border-radius: 10px !important;}#fv-chart-1784294519188-pba2ojlaz-slideshow .fv-slideshow-select {position: absolute !important;top: 10px !important;right: 10px !important;z-index: 20 !important;appearance: none !important;-webkit-appearance: none !important;-moz-appearance: none !important;background-color: white !important;border: 1px solid #d1d5db !important;color: #1F2937 !important;font-family: 'Open Sans', sans-serif !important;font-size: 14px !important;font-weight: 600 !important;padding: 6px 32px 6px 12px !important;border-radius: 4px !important;cursor: pointer !important;box-shadow: 0 1px 2px rgba(0,0,0,0.05) !important;background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e") !important;background-position: right 0.5rem center !important;background-repeat: no-repeat !important;background-size: 1.5em 1.5em !important;}#fv-chart-1784294519188-pba2ojlaz-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-chart-title {font-weight: bold !important;text-align: center !important;margin-bottom: 0.5rem !important;color: var(--riv-primary) !important;font-size: 20px !important;line-height: 1.2 !important;font-family: 'Open Sans', sans-serif !important;text-transform: none !important;white-space: normal !important;overflow-wrap: break-word !important;padding: 0 20px !important;}#fv-chart-1784294519188-pba2ojlaz .fv-chart-subhead {font-size: 18px !important;font-weight: 500 !important;text-align: center !important;margin-bottom: 2rem !important;color: #374151 !important;line-height: 1.7 !important;font-family: 'Open Sans', sans-serif !important;display: block !important;text-transform: none !important;padding: 0 20px !important;}#fv-chart-1784294519188-pba2ojlaz .rv-chart-caption { font-size: 15px !important; color: #374151 !important; text-align: center !important; font-style: normal !important; font-weight: normal !important; line-height: 1.7 !important; font-family: 'Open Sans', sans-serif !important; display: block !important; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-select { background: transparent; border: none; border-bottom: 2px solid; font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; padding: 0.25rem 0; cursor: pointer; outline: none; appearance: none; -webkit-appearance: none; -moz-appearance: none; max-width: 100%; width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-select option { font-family: 'Open Sans', sans-serif; font-weight: 400; font-size: 14px; color: #374151; direction: ltr; text-align: left; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-vs { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; color: #374151; letter-spacing: 0.1em; padding: 0 1rem; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-bar { height: 32px; width: var(--target-width); transition: width 0.8s ease-out; animation: fv-grow-max-width 0.8s ease-out forwards; display: flex; align-items: center; overflow: hidden; color: #ffffff; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-bar-right { border-radius: 0 4px 4px 0; justify-content: flex-start; padding: 0 8px; }@keyframes fv-grow-max-width {from { max-width: 0; }to { max-width: 100%; }}#fv-chart-1784294519188-pba2ojlaz .fv-versus-center-line { position: absolute; left: 50%; top: 0; bottom: 0; width: 4px; background-color: #ffffff; transform: translateX(-50%); z-index: 1; }#fv-chart-1784294519188-pba2ojlaz .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1784294519188-pba2ojlaz .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1784294519188-pba2ojlaz .fv-versus-label { position: absolute; left: 50%; transform: translateX(-50%); top: 0; background-color: transparent; border: none; box-shadow: none; padding: 0; font-family: 'Open Sans', sans-serif; font-weight: 700; font-size: 14px; color: #374151; white-space: nowrap; }#fv-chart-1784294519188-pba2ojlaz .sr-only { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; border: 0 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1784294519188-pba2ojlaz.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-wrapper { position: relative !important; width: 100% !important; overflow: hidden !important; border-radius: 0 !important; background-color: #000 !important; touch-action: pan-y !important; user-select: none !important; -webkit-user-select: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-inner { position: relative !important; width: 100% !important; height: 100% !important; display: block !important; transform-origin: center center !important; transition: transform 0.1s ease-out !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-bg { display: block !important; width: 100% !important; height: auto !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-fg { position: absolute !important; top: 0 !important; left: 0 !important; width: 100% !important; height: 100% !important; object-fit: cover !important; clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%) !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-slider { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 32px !important; transform: translateX(-50%) !important; cursor: ew-resize !important; z-index: 10 !important; user-select: none !important; -webkit-user-select: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-slider-line { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 4px !important; background-color: white !important; transform: translateX(-50%) !important; box-shadow: 0 0 10px rgba(0,0,0,0.5) !important; pointer-events: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-handle { position: absolute !important; top: 50% !important; left: 50% !important; transform: translate(-50%, -50%) !important; width: 32px !important; height: 32px !important; background-color: white !important; border-radius: 50% !important; box-shadow: 0 2px 6px rgba(0,0,0,0.3) !important; display: flex !important; align-items: center !important; justify-content: center !important; gap: 4px !important; pointer-events: none !important; z-index: 11 !important; overflow: hidden !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-arrow-left { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-right: 4px solid #4b5563 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-arrow-right { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-left: 4px solid #4b5563 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-label { position: absolute !important; top: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; padding: 0.25rem 0.75rem !important; border-radius: 0.25rem !important; font-size: 0.875rem !important; font-weight: 500 !important; pointer-events: none !important; backdrop-filter: blur(4px) !important; z-index: 5 !important; transition: right 0.3s ease, opacity 0.2s ease !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-expand-btn, #fv-chart-1784294519188-pba2ojlaz .fv-image-compare-close-btn { position: absolute !important; bottom: 1rem !important; right: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; border: none !important; border-radius: 0.25rem !important; padding: 0.5rem !important; cursor: pointer !important; z-index: 20 !important; display: flex !important; align-items: center !important; justify-content: center !important; backdrop-filter: blur(4px) !important; transition: background-color 0.2s !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-expand-btn:hover, #fv-chart-1784294519188-pba2ojlaz .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-wrapper.fv-image-compare-fullscreen { position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; width: 100% !important; height: 100% !important; z-index: 999999 !important; display: flex !important; align-items: center !important; justify-content: center !important; background-color: rgba(0, 0, 0, 0.9) !important; margin: 0 !important; touch-action: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner { width: 100% !important; height: 100% !important; display: flex !important; align-items: center !important; justify-content: center !important; cursor: grab !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-bg { position: absolute !important; top: 0 !important; left: 0 !important; max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-fg { max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1784294519188-pba2ojlaz .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1784294519188-pba2ojlaz .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1784294519188-pba2ojlaz .fv-logo {display: block !important;margin: 0 auto !important;width: 120px !important;min-width: 120px !important;max-width: 120px !important;height: auto !important;object-fit: contain !important;flex-shrink: 0 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1784294519188-pba2ojlaz .fv-dropdown-title {appearance: none !important;-webkit-appearance: none !important;-moz-appearance: none !important;background: transparent !important;border: none !important;font-size: 18px !important;font-weight: 600 !important;color: var(--riv-primary) !important;padding-right: 28px !important;padding-left: 10px !important;cursor: pointer !important;text-align: center !important;text-align-last: center !important;width: auto !important;max-width: 100% !important;font-family: 'Open Sans', sans-serif !important;line-height: 1.3 !important;margin: 0 !important;text-overflow: ellipsis !important;overflow: hidden !important;white-space: nowrap !important;}#fv-chart-1784294519188-pba2ojlaz .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-dropdown-chevron {position: absolute !important;right: 0 !important;top: 50% !important;transform: translateY(-50%) !important;pointer-events: none !important;color: var(--riv-primary) !important;display: flex !important;align-items: center !important;}#fv-chart-1784294519188-pba2ojlaz .fv-carousel-title-controls { display: flex !important; justify-content: space-between !important; align-items: center !important; margin-bottom: 16px !important; width: 100% !important; gap: 12px !important; }#fv-chart-1784294519188-pba2ojlaz .fv-carousel-nav-btn {background: transparent !important; border: 1px solid #d1d5db !important; border-radius: 6px !important; padding: 6px 10px !important;cursor: pointer !important; font-size: 14px !important; color: #374151 !important; display: flex !important; align-items: center !important; gap: 4px !important; font-family: 'Open Sans', sans-serif !important;}#fv-chart-1784294519188-pba2ojlaz .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1784294519188-pba2ojlaz .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1784294519188-pba2ojlaz .fv-legend { display: flex !important; justify-content: center !important; flex-wrap: wrap !important; gap: 8px 16px !important; margin: 0 !important; padding: 0 !important; margin-top: 1rem !important; }#fv-chart-1784294519188-pba2ojlaz .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1784294519188-pba2ojlaz .fv-multi-value-legend {display: flex !important;justify-content: center !important;flex-wrap: wrap !important;gap: 12px 24px !important;margin-bottom: 1.5rem !important;padding: 0 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-multi-legend-item { display: flex !important; align-items: center !important; gap: 8px !important; font-size: 14px !important; color: #374151 !important; font-weight: 500 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1784294519188-pba2ojlaz .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1784294519188-pba2ojlaz .fv-benchmark-title {font-size: 18px !important; font-weight: 600 !important; margin-bottom: 16px !important; margin-top: 0 !important; padding: 0 !important;text-align: center !important; color: var(--riv-primary) !important; flex: 1 !important; min-width: 0 !important;font-family: 'Open Sans', sans-serif !important; line-height: 1.3 !important;text-transform: none !important;white-space: normal !important;overflow-wrap: break-word !important;word-wrap: break-word !important;max-width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz .fv-bar-row, #fv-chart-1784294519188-pba2ojlaz .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-label { width: 150px !important; flex-shrink: 0 !important; font-size: 14px !important; color: #374151 !important; padding-right: 10px !important; text-align: right !important; font-weight: 500 !important; display: block !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-container { flex-grow: 1 !important; background-color: #E5E7EB !important; border-radius: 4px !important; min-height: 25px !important; border: 1px solid #D1D5DB !important; position: relative !important; display: flex !important; align-items: center !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-commentary-inline { display: none !important; position: absolute !important; left: 150px !important; top: 0 !important; bottom: 0 !important; right: 0 !important; width: calc(100% - 150px) !important; margin: 0 !important; padding: 0 8px !important; font-size: 13px !important; color: #fff !important; background: rgba(0,0,0,0.8) !important; border-radius: 4px !important; line-height: 1.4 !important; font-weight: normal !important; text-transform: none !important; word-wrap: break-word !important; z-index: 10 !important; align-items: center !important; overflow-y: auto !important; }#fv-chart-1784294519188-pba2ojlaz.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1784294519188-pba2ojlaz.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1784294519188-pba2ojlaz.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar { height: 100% !important; border-radius: 3px !important; display: flex !important; align-items: center !important; transition: opacity 0.2s ease, width 0.8s ease-out !important; min-height: 23px !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-inner-content { display: flex !important; justify-content: space-between !important; align-items: center !important; width: 100% !important; height: 100% !important; padding: 0 8px !important; font-size: 14px !important; font-weight: bold !important; overflow: hidden !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-value-outside { padding-left: 8px !important; font-size: 14px !important; font-weight: bold !important; color: #374151 !important; white-space: nowrap !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1784294519188-pba2ojlaz .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1784294519188-pba2ojlaz .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1784294519188-pba2ojlaz .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1784294519188-pba2ojlaz .fv-stacked-segment { height: 100% !important; display: flex !important; align-items: center !important; justify-content: flex-end !important; padding-right: 8px !important; border-right: 1px solid rgba(255,255,255,0.3) !important; }#fv-chart-1784294519188-pba2ojlaz .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1784294519188-pba2ojlaz .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1784294519188-pba2ojlaz .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1784294519188-pba2ojlaz .fv-grouped-product-title { width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.5rem !important; font-weight: 700 !important; font-size: 14px !important; color: #374151 !important; text-transform: none !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1784294519188-pba2ojlaz .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1784294519188-pba2ojlaz .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-ticks { display: flex !important; justify-content: space-between !important; padding-top: 4px !important; font-size: 13px !important; color: #374151 !important; }#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-ticks span::before { content: '' !important; position: absolute !important; top: -6px !important; left: 50% !important; transform: translateX(-50%) !important; width: 2px !important; height: 4px !important; background-color: #D1D5DB !important; border-radius: 1px !important; }#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-title { text-align: center !important; font-size: 15px !important; color: #374151 !important; margin-top: 8px !important; margin-bottom: 16px !important; line-height: 1.5 !important; padding: 0 1rem !important; display: block !important; font-weight: bold !important; }#fv-chart-1784294519188-pba2ojlaz .fv-y-axis-title {font-size: 15px !important;color: #374151 !important;line-height: 1.5 !important;text-align: left !important;padding-left: 5.83% !important;margin-bottom: 4px !important;display: block !important;font-weight: bold !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-pie-container,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-row,#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-stacked-product,#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-grouped-bar-product,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-bar-row,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-stacked-product,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-bar-label:not(.fv-grouped-product-title) {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-label,#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-grouped-product-title,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-bar-label,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-grouped-product-title {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-container,#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-cluster,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-bar-container,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus-within {position: static !important; display: block !important; width: 100% !important; margin: 4px 0 0 0 !important; padding: 0 !important; background: transparent !important; color: #6B7280 !important; font-size: 12px !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-x-axis-wrapper,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-x-axis-label-space,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-x-axis-chart-space,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-benchmark-title,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-dropdown-title,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-carousel-nav-btn,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-chart-title,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-chart-subhead,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-versus-header,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-versus-select-wrapper,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-versus-vs,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-versus-select-container,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-versus-select,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-stl-shop-all-btn,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-stl-shop-all-btn {bottom: 0.5rem !important; right: 0.5rem !important; height: 2rem !important; font-size: 0.75rem !important; padding: 0 0.75rem 0 2.5rem !important; max-width: calc(100% - 1rem) !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-stl-shop-all-logo,#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-stl-shop-all-icon,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-bar-commentary-inline,#fv-chart-1784294519188-pba2ojlaz.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1784294519188-pba2ojlaz.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1784294519188-pba2ojlaz .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1784294519188-pba2ojlaz .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-bar-row,#fv-chart-1784294519188-pba2ojlaz .fv-stacked-product,#fv-chart-1784294519188-pba2ojlaz .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1784294519188-pba2ojlaz .fv-bar-label:not(.fv-grouped-product-title) {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-bar-label,#fv-chart-1784294519188-pba2ojlaz .fv-grouped-product-title {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-bar-container,#fv-chart-1784294519188-pba2ojlaz .fv-bar-cluster {width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294519188-pba2ojlaz .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294519188-pba2ojlaz .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294519188-pba2ojlaz .fv-bar-row .fv-bar-commentary-inline:focus-within {position: static !important; display: block !important; width: 100% !important; margin: 4px 0 0 0 !important; padding: 0 !important; background: transparent !important; color: #6B7280 !important; font-size: 12px !important;}#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-label-space {display: none !important;}#fv-chart-1784294519188-pba2ojlaz .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1784294519188-pba2ojlaz .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1784294519188-pba2ojlaz .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1784294519188-pba2ojlaz .fv-chart-title {padding: 0 8px !important;}#fv-chart-1784294519188-pba2ojlaz .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1784294519188-pba2ojlaz .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1784294519188-pba2ojlaz .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1784294519188-pba2ojlaz .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1784294519188-pba2ojlaz .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1784294519188-pba2ojlaz .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz .fv-stl-shop-all-btn {bottom: 0.5rem !important; right: 0.5rem !important; height: 2rem !important; font-size: 0.75rem !important; padding: 0 0.75rem 0 2.5rem !important; max-width: calc(100% - 1rem) !important;}#fv-chart-1784294519188-pba2ojlaz .fv-stl-shop-all-logo,#fv-chart-1784294519188-pba2ojlaz .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1784294519188-pba2ojlaz .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1784294519188-pba2ojlaz .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1784294519188-pba2ojlaz .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1784294519188-pba2ojlaz.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Overall Chart Title","description": "Subhead to describe the test and what's being measured and why","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-07-17T13:21:59.188Z","citation": "Add your caption to explain the data, the learnings and the key takeaways of the data being visualized","keywords": ["Image Comparison","benchmark","comparison","performance","review","TechRadar"],"measurementTechnique": "Performance Benchmarking","variableMeasured": []}Crumb mix after first passCrumb mix after second passwindow.iFrameResizer = {heightCalculationMethod: 'taggedElement'};(function() {window.fvAnimateCharts = function(chartWrapper) {if (!chartWrapper) return;function animateBars(chartElement) {if (!chartElement) return;var bars = chartElement.querySelectorAll('.fv-bar, .fv-stacked-segment');bars.forEach(function(bar, index) {bar.style.setProperty('width', '0%', 'important');bar.style.setProperty('transition', 'none', 'important');var targetWidth = bar.dataset.targetWidth;if (targetWidth === undefined) return;void bar.offsetWidth;var targetMargin = bar.dataset.targetMargin;var baseMargin = bar.dataset.baseMargin;if (baseMargin !== undefined) {bar.style.setProperty('margin-left', baseMargin + '%', 'important');}setTimeout(function() {var marginTransition = baseMargin !== undefined ? ', margin-left 0.8s ease-out' : '';bar.style.setProperty('transition', 'opacity 0.2s ease, width 0.8s ease-out' + marginTransition, 'important');bar.style.setProperty('width', targetWidth + '%', 'important');if (targetMargin !== undefined && baseMargin !== undefined) {bar.style.setProperty('margin-left', targetMargin + '%', 'important');}}, index * 50 + 50);});}function animateLineChart(chartElement) {if (!chartElement) return;var lineSvg = chartElement.querySelector('svg');if (!lineSvg) return;var paths = lineSvg.querySelectorAll('.riv-line-path');paths.forEach(function(p, i) {if (typeof p.getTotalLength === 'function') {var len = p.getTotalLength();p.style.transition = 'none';p.style.strokeDasharray = len;p.style.strokeDashoffset = len;p.getBoundingClientRect();setTimeout(function() {p.style.transition = 'stroke-dashoffset 1s ease-out ' + (i * 0.1) + 's, stroke-width 0.2s, opacity 0.2s';p.style.strokeDashoffset = '0';}, 100);}});var dots = lineSvg.querySelectorAll('.riv-dot');dots.forEach(function(dot, i) {dot.style.opacity = '0';setTimeout(function() {dot.style.transition = 'opacity 0.3s ease';dot.style.opacity = '1';}, 500 + i * 10);});}var charts = chartWrapper.querySelectorAll('.fv-chart-item');charts.forEach(function(chart) {if (window.getComputedStyle(chart).display === 'none') return;var chartType = chart.dataset.chartType;if (chartType === 'Line') {animateLineChart(chart);} else if (chartType !== 'Pie') {animateBars(chart);}});};function initialize(uniqueId, isSlideshow) {var root = document.getElementById(uniqueId);if (!root && !isSlideshow) return;function setupWrapper(chartWrapper) {if (!chartWrapper) return;function checkMobileView() {var width = chartWrapper.getBoundingClientRect().width;var isMobileDevice = window.screen && Math.min(window.screen.width, window.screen.height) <= 599;var isMobile;if (width === 0) {isMobile = isMobileDevice || window.matchMedia('(max-width: 599px)').matches;} else {isMobile = isMobileDevice || width < 600;}if (isMobile) {chartWrapper.classList.add('mobile-view');} else {chartWrapper.classList.remove('mobile-view');}}checkMobileView();if (typeof ResizeObserver !== 'undefined') {var ro = new ResizeObserver(function() {checkMobileView();});ro.observe(chartWrapper);}window.addEventListener('resize', checkMobileView);var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true';if (labelsOnTop) {var charts = chartWrapper.querySelectorAll('.fv-chart-item');var hasVisibleBarChart = false;charts.forEach(function(c) {if (window.getComputedStyle(c).display !== 'none') {var cType = c.dataset.chartType;if (cType === 'Bar' || cType === 'Stacked Bar' || cType === 'Versus') {hasVisibleBarChart = true;}}});if (hasVisibleBarChart) {chartWrapper.classList.add('labels-on-top');} else {chartWrapper.classList.remove('labels-on-top');}} else {chartWrapper.classList.remove('labels-on-top');}chartWrapper.querySelectorAll('.riv-line-legend').forEach(function(legend) {var chartId = legend.dataset.chart;var chart = chartWrapper.querySelector('[id="' + chartId + '"]');if (!chart) return;var lines = chart.querySelectorAll('.riv-line-path');var dots = chart.querySelectorAll('.riv-dot');var legendItems = legend.querySelectorAll('.riv-legend-item');legendItems.forEach(function(item) {var productName = item.dataset.product;var safeProductName = productName.replace(/"/g, '\"');var line = chart.querySelector('.riv-line-path[data-product="' + safeProductName + '"]');var productDots = chart.querySelectorAll('.riv-dot[data-product="' + safeProductName + '"]');if (line && !line.dataset.origStroke) {line.dataset.origStroke = line.getAttribute('stroke-width') || '2';}var highlight = function() {if (legend.querySelector('.isolated')) return;lines.forEach(function(l) { l.style.opacity = '0.2'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '0.2'; });legendItems.forEach(function(i) { i.style.opacity = '0.3'; i.style.transition = 'opacity 0.2s'; });if (line) {line.style.opacity = '1';line.setAttribute('stroke-width', '4');}productDots.forEach(function(d) { d.style.opacity = '1'; });item.style.opacity = '1';};var clearHighlight = function() {if (legend.querySelector('.isolated')) return;lines.forEach(function(l) { l.style.opacity = '1'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '1'; });legendItems.forEach(function(i) { i.style.opacity = '1'; });};var toggleIsolate = function() {var isIsolated = item.classList.contains('isolated');legendItems.forEach(function(i) { i.classList.remove('isolated'); });if (isIsolated) {lines.forEach(function(l) { l.style.opacity = '1'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '1'; });legendItems.forEach(function(i) { i.style.opacity = '1'; });} else {item.classList.add('isolated');lines.forEach(function(l) { l.style.opacity = '0.2'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '0.2'; });legendItems.forEach(function(i) { i.style.opacity = '0.3'; i.style.transition = 'opacity 0.2s'; });if (line) {line.style.opacity = '1';line.setAttribute('stroke-width', '4');}productDots.forEach(function(d) { d.style.opacity = '1'; });item.style.opacity = '1';}};item.addEventListener('mouseenter', highlight);item.addEventListener('focus', highlight);item.addEventListener('mouseleave', clearHighlight);item.addEventListener('blur', clearHighlight);item.addEventListener('click', toggleIsolate);if (line) {line.style.cursor = 'pointer';line.addEventListener('mouseenter', highlight);line.addEventListener('mouseleave', clearHighlight);line.addEventListener('click', toggleIsolate);}});});var versusCharts = chartWrapper.querySelectorAll('.fv-versus-chart');versusCharts.forEach(function(vc) {var dataJson = vc.getAttribute('data-versus-data');var leftColor = vc.getAttribute('data-left-color') || '#E53935';var rightColor = vc.getAttribute('data-right-color') || '#FFB300';if (!dataJson) return;var versusData = JSON.parse(dataJson);var leftSelect = vc.querySelector('.fv-select-left');var rightSelect = vc.querySelector('.fv-select-right');var rows = vc.querySelectorAll('.fv-versus-row');function updateVersusChart() {var leftProduct = leftSelect.value;var rightProduct = rightSelect.value;leftSelect.style.color = leftColor;leftSelect.style.borderColor = leftColor;rightSelect.style.color = rightColor;rightSelect.style.borderColor = rightColor;rows.forEach(function(row) {var index = parseInt(row.getAttribute('data-index'));var data = versusData[index];if (!data) return;var leftVal = data.productData[leftProduct] ? data.productData[leftProduct].value : undefined;var rightVal = data.productData[rightProduct] ? data.productData[rightProduct].value : undefined;var leftIsNum = typeof leftVal === 'number';var rightIsNum = typeof rightVal === 'number';var leftNum = leftIsNum ? leftVal : 0;var rightNum = rightIsNum ? rightVal : 0;var maxVal = Math.max(leftNum, rightNum, 0.0001);var leftWidth = leftIsNum ? (leftNum / maxVal) * 95 : 0;var rightWidth = rightIsNum ? (rightNum / maxVal) * 85 : 0;var winner = null;var pctDiffStr = null;if (leftIsNum && rightIsNum) {if (leftNum > rightNum) {winner = 'left';if (rightNum > 0) {var diff = Math.round(((leftNum - rightNum) / rightNum) * 100);pctDiffStr = '+' + diff.toLocaleString() + '%';}} else if (rightNum > leftNum) {winner = 'right';if (leftNum > 0) {var diff = Math.round(((rightNum - leftNum) / leftNum) * 100);pctDiffStr = '+' + diff.toLocaleString() + '%';}}}var leftDisplay = data.productData[leftProduct] && data.productData[leftProduct].displayValue !== undefined ? data.productData[leftProduct].displayValue : (leftIsNum ? leftNum.toLocaleString() : (leftVal !== undefined ? leftVal : '-'));var rightDisplay = data.productData[rightProduct] && data.productData[rightProduct].displayValue !== undefined ? data.productData[rightProduct].displayValue : (rightIsNum ? rightNum.toLocaleString() : (rightVal !== undefined ? rightVal : '-'));var unit = (data.productData[leftProduct] && data.productData[leftProduct].unit) ||(data.productData[rightProduct] && data.productData[rightProduct].unit) || '';var leftTextStr = leftDisplay;var rightTextStr = rightDisplay;var leftBar = row.querySelector('.fv-versus-bar-left');var rightBar = row.querySelector('.fv-versus-bar-right');var leftText = row.querySelector('.fv-inside-left');var rightText = row.querySelector('.fv-inside-right');var labelText = row.querySelector('.fv-versus-label span');var leftWrapper = row.querySelector('.fv-versus-bar-left-wrapper');var rightWrapper = row.querySelector('.fv-versus-bar-right-wrapper');var existingPctDiffs = row.querySelectorAll('.fv-versus-pct-diff');existingPctDiffs.forEach(function(el) { el.remove(); });if (winner === 'left' && pctDiffStr) {var pctSpan = document.createElement('span');pctSpan.className = 'fv-versus-pct-diff';pctSpan.style.color = 'rgba(255, 255, 255, 0.9)';pctSpan.textContent = pctDiffStr;if (leftBar) leftBar.insertBefore(pctSpan, leftBar.firstChild);} else if (winner === 'right' && pctDiffStr) {var pctSpan = document.createElement('span');pctSpan.className = 'fv-versus-pct-diff';pctSpan.style.color = 'rgba(255, 255, 255, 0.9)';pctSpan.textContent = pctDiffStr;if (rightBar) rightBar.appendChild(pctSpan);}if (leftBar) {leftBar.style.backgroundColor = leftColor;leftBar.dataset.targetWidth = leftWidth;leftBar.style.setProperty('--target-width', leftWidth + '%');leftBar.style.width = leftWidth + '%';}if (rightBar) {rightBar.style.backgroundColor = rightColor;rightBar.dataset.targetWidth = rightWidth;rightBar.style.setProperty('--target-width', rightWidth + '%');rightBar.style.width = rightWidth + '%';}if (leftText) {leftText.innerHTML = leftTextStr;}if (rightText) {rightText.innerHTML = rightTextStr;}if (labelText) {labelText.textContent = data.attribute + (unit ? ' (' + unit + ')' : '');}});}if (leftSelect) leftSelect.addEventListener('change', updateVersusChart);if (rightSelect) rightSelect.addEventListener('change', updateVersusChart);});var barRows = chartWrapper.querySelectorAll('.fv-bar-row');var globalCaptionEl = chartWrapper.querySelector('.rv-chart-caption');var fallbackCaptionHtml = globalCaptionEl ? globalCaptionEl.innerHTML : '';barRows.forEach(function(row) {var commentaryEl = row.querySelector('[data-commentary-key]');if (commentaryEl) {var commentaryText = commentaryEl.textContent;if (commentaryText && commentaryText.trim().length > 0) {row.addEventListener('mouseenter', function() {if (!chartWrapper.classList.contains('mobile-view') && globalCaptionEl) {globalCaptionEl.innerHTML = commentaryText;globalCaptionEl.classList.add('fv-bar-active-caption');}});row.addEventListener('mouseleave', function() {if (!chartWrapper.classList.contains('mobile-view') && globalCaptionEl) {globalCaptionEl.innerHTML = fallbackCaptionHtml;globalCaptionEl.classList.remove('fv-bar-active-caption');}});}}});var charts = chartWrapper.querySelectorAll('.fv-chart-item');var dropdown = chartWrapper.querySelector('.fv-dropdown-title');var prevBtn = chartWrapper.querySelector('.fv-carousel-nav-btn.prev');var nextBtn = chartWrapper.querySelector('.fv-carousel-nav-btn.next');var carouselTitle = chartWrapper.querySelector('.fv-carousel-title-controls .fv-benchmark-title');var counter = chartWrapper.querySelector('.fv-carousel-counter');var subheadEl = chartWrapper.querySelector('.fv-chart-subhead');var captionEl = chartWrapper.querySelector('.rv-chart-caption');var footerContentEl = chartWrapper.querySelector('.fv-footer-content');var bottomBarEl = chartWrapper.querySelector('.fv-bottom-bar');var logoEl = chartWrapper.querySelector('.fv-logo');if (charts.length > 1 && (dropdown || prevBtn)) {var currentChartIndex = 0;var titles = [];if (dropdown) {titles = Array.from(dropdown.options).map(function(o) { return o.text; });} else {charts.forEach(function(c) {titles.push(c.getAttribute('data-title') || '');});}function showInternalChart(index) {if (index < 0) index = charts.length - 1;if (index >= charts.length) index = 0;currentChartIndex = index;charts.forEach(function(c, i) {c.style.display = i === index ? 'block' : 'none';if (i === index) {var cType = c.dataset.chartType;if (cType === 'Line') {} else if (cType !== 'Pie') {window.fvAnimateCharts(chartWrapper);}var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true';if (labelsOnTop && (cType === 'Bar' || cType === 'Stacked Bar' || cType === 'Versus')) {chartWrapper.classList.add('labels-on-top');} else {chartWrapper.classList.remove('labels-on-top');}}});if (dropdown) dropdown.value = index;if (carouselTitle && titles[index]) carouselTitle.textContent = titles[index];if (counter) counter.textContent = (index + 1) + ' of ' + charts.length;var activeChart = charts[index];if (activeChart) {var newSubhead = activeChart.getAttribute('data-subhead');var newCaption = activeChart.getAttribute('data-caption');var currentChartType = activeChart.getAttribute('data-chart-type');var hideGlobalCaption = currentChartType === 'Countdown' || currentChartType === 'Image Comparison' || currentChartType === 'Shop the Collection';if (subheadEl) subheadEl.textContent = newSubhead || '';if (captionEl) {captionEl.textContent = newCaption || '';fallbackCaptionHtml = newCaption || '';}if (footerContentEl) {if (newCaption && newCaption.trim().length > 0 && !hideGlobalCaption) {footerContentEl.style.display = 'block';if (bottomBarEl) bottomBarEl.style.display = 'flex';} else {footerContentEl.style.display = 'none';if (bottomBarEl && !logoEl) {bottomBarEl.style.display = 'none';}}}}}if (dropdown) dropdown.addEventListener('change', function(e) { showInternalChart(parseInt(e.target.value)); });if (prevBtn) prevBtn.addEventListener('click', function() { showInternalChart(currentChartIndex - 1); });if (nextBtn) nextBtn.addEventListener('click', function() { showInternalChart(currentChartIndex + 1); });}var imageCompareWrappers = chartWrapper.querySelectorAll('.fv-image-compare-wrapper');imageCompareWrappers.forEach(function(wrapper) {var inner = wrapper.querySelector('.fv-image-compare-inner') || wrapper;var slider = wrapper.querySelector('.fv-image-compare-slider');var fgImage = wrapper.querySelector('.fv-image-compare-fg');var bgImage = wrapper.querySelector('.fv-image-compare-bg');var labelLeft = wrapper.querySelector('.fv-image-compare-label-left');var labelRight = wrapper.querySelector('.fv-image-compare-label-right');var isDragging = false;var scale = 1;var panX = 0;var panY = 0;var isPanning = false;var hasPanned = false;var lastClientX = 0;var lastClientY = 0;var initialDistance = null;var lastCenterX = null;var lastCenterY = null;function updateTransform() {if (wrapper.classList.contains('fv-image-compare-fullscreen')) {inner.style.setProperty('transform', 'translate(' + panX + 'px, ' + panY + 'px) scale(' + scale + ')', 'important');} else {inner.style.removeProperty('transform');scale = 1;panX = 0;panY = 0;}}function constrainPan() {var rect = wrapper.getBoundingClientRect();var maxPanX = Math.max(0, (rect.width * scale - rect.width) / 2);var maxPanY = Math.max(0, (rect.height * scale - rect.height) / 2);panX = Math.max(-maxPanX, Math.min(panX, maxPanX));panY = Math.max(-maxPanY, Math.min(panY, maxPanY));}wrapper.addEventListener('wheel', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;e.preventDefault();var zoomSensitivity = 0.005;var zoomFactor = Math.exp(-e.deltaY * zoomSensitivity);var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));if (newScale === scale) return;var rect = wrapper.getBoundingClientRect();var mouseX = e.clientX - rect.left - rect.width / 2;var mouseY = e.clientY - rect.top - rect.height / 2;var ratio = newScale / scale;panX = mouseX - (mouseX - panX) * ratio;panY = mouseY - (mouseY - panY) * ratio;scale = newScale;constrainPan();updateTransform();}, { passive: false });wrapper.addEventListener('mousedown', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen') || scale <= 1) return;if (e.target.closest('.fv-image-compare-slider') || e.target.closest('button')) return;isPanning = true;hasPanned = false;lastClientX = e.clientX;lastClientY = e.clientY;});window.addEventListener('mousemove', function(e) {if (!isPanning) return;var dx = e.clientX - lastClientX;var dy = e.clientY - lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.clientX;lastClientY = e.clientY;panX += dx;panY += dy;constrainPan();updateTransform();});window.addEventListener('mouseup', function() {isPanning = false;});wrapper.addEventListener('touchstart', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;if (e.touches.length === 2) {e.preventDefault();var dx = e.touches[0].clientX - e.touches[1].clientX;var dy = e.touches[0].clientY - e.touches[1].clientY;initialDistance = Math.sqrt(dx * dx + dy * dy);var rect = wrapper.getBoundingClientRect();lastCenterX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left - rect.width / 2;lastCenterY = (e.touches[0].clientY + e.touches[1].clientY) / 2 - rect.top - rect.height / 2;hasPanned = true;} else if (e.touches.length === 1 && scale > 1) {if (e.target.closest('.fv-image-compare-slider') || e.target.closest('button')) return;isPanning = true;hasPanned = false;lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;}}, { passive: false });wrapper.addEventListener('touchmove', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;if (e.touches.length === 2 && initialDistance !== null) {e.preventDefault();var dx = e.touches[0].clientX - e.touches[1].clientX;var dy = e.touches[0].clientY - e.touches[1].clientY;var distance = Math.sqrt(dx * dx + dy * dy);if (initialDistance > 0) {var zoomFactor = distance / initialDistance;var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));var rect = wrapper.getBoundingClientRect();var centerX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left - rect.width / 2;var centerY = (e.touches[0].clientY + e.touches[1].clientY) / 2 - rect.top - rect.height / 2;var ratio = newScale / scale;panX = centerX - (centerX - panX) * ratio;panY = centerY - (centerY - panY) * ratio;if (lastCenterX !== null && lastCenterY !== null) {panX += (centerX - lastCenterX);panY += (centerY - lastCenterY);}scale = newScale;lastCenterX = centerX;lastCenterY = centerY;constrainPan();updateTransform();}initialDistance = distance;} else if (e.touches.length === 1 && isPanning) {e.preventDefault();var dx = e.touches[0].clientX - lastClientX;var dy = e.touches[0].clientY - lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;panX += dx;panY += dy;constrainPan();updateTransform();}}, { passive: false });wrapper.addEventListener('touchend', function(e) {if (e.touches.length < 2) {initialDistance = null;}if (e.touches.length === 0) {isPanning = false;}});function handleMove(clientX) {var rect = inner.getBoundingClientRect();var x = Math.max(0, Math.min(clientX - rect.left, rect.width));var percent = Math.max(0, Math.min((x / rect.width) * 100, 100));if (slider) slider.style.setProperty('left', percent + '%', 'important');if (fgImage) fgImage.style.setProperty('clip-path', 'polygon(0 0, ' + percent + '% 0, ' + percent + '% 100%, 0 100%)', 'important');if (labelLeft) {if (percent < 10) {labelLeft.style.setProperty('opacity', '0', 'important');} else {labelLeft.style.setProperty('opacity', '1', 'important');}}if (labelRight) {if (percent > 90) {labelRight.style.setProperty('opacity', '0', 'important');} else {labelRight.style.setProperty('opacity', '1', 'important');}}}function onMouseMove(e) {if (!isDragging) return;handleMove(e.clientX);}function onTouchMove(e) {if (!isDragging) return;e.preventDefault();handleMove(e.touches[0].clientX);}function stopDragging() {isDragging = false;window.removeEventListener('mousemove', onMouseMove);window.removeEventListener('mouseup', stopDragging);window.removeEventListener('touchmove', onTouchMove);window.removeEventListener('touchend', stopDragging);}if (slider) {var startDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener('mousemove', onMouseMove);window.addEventListener('mouseup', stopDragging);};var startTouchDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener('touchmove', onTouchMove, { passive: false });window.addEventListener('touchend', stopDragging);};slider.addEventListener('mousedown', function(e) {e.preventDefault();startDrag(e.clientX);});slider.addEventListener('touchstart', function(e) {e.preventDefault();startTouchDrag(e.touches[0].clientX);}, { passive: false });}var expandBtn = wrapper.querySelector('.fv-image-compare-expand-btn');var closeBtn = wrapper.querySelector('.fv-image-compare-close-btn');if (expandBtn) {if (window !== window.parent) {expandBtn.style.display = 'none';} else {expandBtn.addEventListener('click', function(e) {e.stopPropagation();wrapper.classList.add('fv-image-compare-fullscreen');document.body.style.overflow = 'hidden';if (fgImage && fgImage.dataset.highresSrc) {fgImage.src = fgImage.dataset.highresSrc;fgImage.removeAttribute('srcset');fgImage.removeAttribute('sizes');}if (bgImage && bgImage.dataset.highresSrc) {bgImage.src = bgImage.dataset.highresSrc;bgImage.removeAttribute('srcset');bgImage.removeAttribute('sizes');}});}}if (closeBtn) {closeBtn.addEventListener('click', function(e) {e.stopPropagation();wrapper.classList.remove('fv-image-compare-fullscreen');document.body.style.overflow = '';updateTransform();});}document.addEventListener('keydown', function(e) {if (e.key === 'Escape' && wrapper.classList.contains('fv-image-compare-fullscreen')) {wrapper.classList.remove('fv-image-compare-fullscreen');document.body.style.overflow = '';updateTransform();}});});var hotspots = chartWrapper.querySelectorAll('.fv-stl-hotspot-btn');var allProductsModal = chartWrapper.querySelector('.fv-stl-all-products-modal');var shopAllBtn = chartWrapper.querySelector('.fv-stl-shop-all-btn');var allProductsList = chartWrapper.querySelector('.fv-stl-all-products-list');var stlContainer = chartWrapper.querySelector('.fv-stl-container');function closeAllModals() {if (allProductsModal) {allProductsModal.classList.remove('is-active');var items = allProductsModal.querySelectorAll('.fv-stl-all-products-item');items.forEach(function(item) {item.classList.remove('is-highlighted');});if (stlContainer) {setTimeout(function() {if (!allProductsModal.classList.contains('is-active')) {stlContainer.style.minHeight = '';if ('parentIFrame' in window) {window.parentIFrame.size();}}}, 300);}}hotspots.forEach(function(btn) { btn.setAttribute('aria-expanded', 'false'); });if ('parentIFrame' in window) {window.parentIFrame.size();}}hotspots.forEach(function(btn) {btn.addEventListener('click', function(e) {e.stopPropagation();var hotspotId = btn.getAttribute('data-hotspot-id');var isExpanded = btn.getAttribute('aria-expanded') === 'true';closeAllModals();if (!isExpanded && allProductsModal) {btn.setAttribute('aria-expanded', 'true');allProductsModal.classList.add('is-active');var container = btn.closest('.fv-stl-container');if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}var targetItem = allProductsModal.querySelector('.fv-stl-all-products-item[data-product-id="' + hotspotId + '"]');if (targetItem) {targetItem.classList.add('is-highlighted');setTimeout(function() {targetItem.scrollIntoView({ behavior: 'smooth', block: 'center' });}, 100);}if ('parentIFrame' in window) {window.parentIFrame.size();}}});});if (shopAllBtn && allProductsModal) {shopAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();allProductsModal.classList.add('is-active');var container = shopAllBtn.closest('.fv-stl-container');if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}if ('parentIFrame' in window) {window.parentIFrame.size();}});}if (allProductsModal) {var closeAllBtn = allProductsModal.querySelector('.fv-stl-all-products-close');if (closeAllBtn) {closeAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();});}}chartWrapper.addEventListener('click', function(e) {if (!e.target.closest('.fv-stl-all-products-content')) {closeAllModals();}});if (allProductsModal) {allProductsModal.addEventListener('click', function(e) {if (!e.target.closest('.fv-stl-all-products-content')) {closeAllModals();}});}var iaNodes = chartWrapper.querySelectorAll('.fv-ia-node-button');var iaWrapper = chartWrapper.querySelector('.fv-ia-wrapper');var originalCaption = chartWrapper.querySelector('.fv-original-caption') || captionEl;var dynamicCaption = chartWrapper.querySelector('.fv-ia-dynamic-caption');var exploreBtn = chartWrapper.querySelector('.fv-ia-explore-btn');var currentIaIndex = -1;function closeAllIANodes() {iaNodes.forEach(function(btn) { btn.classList.remove('is-active'); });if (originalCaption) originalCaption.style.display = 'block';if (dynamicCaption) dynamicCaption.style.display = 'none';}function resetExploreBtn() {currentIaIndex = -1;if (exploreBtn) {var exploreSpan = exploreBtn.querySelector('span');if (exploreSpan) exploreSpan.textContent = 'Explore';}}iaNodes.forEach(function(btn, index) {btn.addEventListener('click', function(e) {e.stopPropagation();var isActive = btn.classList.contains('is-active');closeAllIANodes();if (!isActive) {currentIaIndex = index;if (exploreBtn) {var exploreSpan = exploreBtn.querySelector('span');if (exploreSpan) exploreSpan.textContent = 'Next';}btn.classList.add('is-active');if (dynamicCaption) {var title = btn.getAttribute('data-title') || '';var desc = btn.getAttribute('data-desc') || '';dynamicCaption.innerHTML = '';var strongTag = document.createElement('strong');strongTag.textContent = title;dynamicCaption.appendChild(strongTag);if (desc) {dynamicCaption.appendChild(document.createTextNode(' - ' + desc));}if (originalCaption) originalCaption.style.display = 'none';dynamicCaption.style.display = 'block';if (footerContentEl) footerContentEl.style.display = 'block';}} else {resetExploreBtn();}});});if (exploreBtn) {exploreBtn.addEventListener('click', function(e) {e.stopPropagation();if (iaNodes.length === 0) return;var nextIndex = currentIaIndex + 1;if (nextIndex >= iaNodes.length) {closeAllIANodes();resetExploreBtn();} else {currentIaIndex = nextIndex;var targetBtn = iaNodes[currentIaIndex];if (targetBtn) {if(targetBtn.classList.contains('is-active')) {targetBtn.click();}targetBtn.click();}}});}if (iaWrapper) {iaWrapper.addEventListener('click', function(e) {if (!e.target.closest('.fv-ia-node-button') && !e.target.closest('.fv-ia-explore-btn')) {closeAllIANodes();resetExploreBtn();}});}window.fvAnimateCharts(chartWrapper);var countdownContainer = chartWrapper.querySelector('.fv-countdown-container');if (countdownContainer) {var targetDateAttr = countdownContainer.getAttribute('data-target-date');if (targetDateAttr) {var targetDate = new Date(targetDateAttr);var primaryColor = countdownContainer.getAttribute('data-primary-color') || '#f97316';var subheadColor = countdownContainer.getAttribute('data-subhead-color') || '#ffffff';var pad = function(n) { return (n < 10 ? '0' : '') + n; };var updateCountdown = function() {var difference = +targetDate - +new Date();var d = 0, h = 0, m = 0, s = 0;if (difference > 0) {d = Math.floor(difference / (1000 * 60 * 60 * 24));h = Math.floor((difference / (1000 * 60 * 60)) % 24);m = Math.floor((difference / 1000 / 60) % 60);s = Math.floor((difference / 1000) % 60);}var daysEl = countdownContainer.querySelector('[data-time="days"]');var hoursEl = countdownContainer.querySelector('[data-time="hours"]');var minsEl = countdownContainer.querySelector('[data-time="minutes"]');var secsEl = countdownContainer.querySelector('[data-time="seconds"]');if (daysEl) daysEl.textContent = d;if (hoursEl) hoursEl.textContent = pad(h);if (minsEl) minsEl.textContent = pad(m);if (secsEl) secsEl.textContent = pad(s);};updateCountdown();setInterval(updateCountdown, 1000);}}}if (false) {var slideshowContainer = document.getElementById(uniqueId + '-slideshow');if (slideshowContainer) {var slides = slideshowContainer.querySelectorAll('.fv-slide');slides.forEach(function(slide) {setupWrapper(slide.querySelector('.fv-chart-wrapper'));});}} else {setupWrapper(root);}}if (document.readyState === 'loading') {document.addEventListener('DOMContentLoaded', function() { initialize('fv-chart-1784294519188-pba2ojlaz', false); });} else {initialize('fv-chart-1784294519188-pba2ojlaz', false);}})();

The oat test is usually tougher, because robovacs tend to flick larger debris across hard floors with their spinning side brushes. The Omni S2 fell foul of this too, but as ever my advice is to set the robot to vacuum the entire room twice, instead of aiming for a target and kicking it everywhere.

With the right settings applied, the S2 picked up every single piece – and passed the same test with flying colors on carpet too, where flicking debris is less of an issue.

@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap');@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap');#fv-chart-1784294576158-jknu8qhxr *, #fv-chart-1784294576158-jknu8qhxr *:before, #fv-chart-1784294576158-jknu8qhxr *:after, #fv-chart-1784294576158-jknu8qhxr-slideshow *, #fv-chart-1784294576158-jknu8qhxr-slideshow *:before, #fv-chart-1784294576158-jknu8qhxr-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1784294576158-jknu8qhxr, #fv-chart-1784294576158-jknu8qhxr-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1784294576158-jknu8qhxr {position: relative !important; overflow: visible !important;--riv-primary: #AA1124;}#fv-chart-1784294576158-jknu8qhxr .fv-inner-wrapper {color: #1F2937 !important; background-color: #ffffff !important;padding: 1.5rem 1.5rem 2rem !important; border-radius: 0.5rem !important;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1) !important;margin: 1rem 0 !important; display: flex !important; flex-direction: column !important;overflow: hidden !important;}#fv-chart-1784294576158-jknu8qhxr .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1784294576158-jknu8qhxr.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1784294576158-jknu8qhxr.fv-full-bleed .fv-inner-wrapper {padding: 0 !important;border-radius: 0 !important;box-shadow: none !important;margin: 0 !important;background-color: transparent !important;}#fv-chart-1784294576158-jknu8qhxr .fv-inner-wrapper.fv-is-shop-the-look {padding: 0 !important;border-radius: 0 !important;box-shadow: none !important;margin: 0 !important;background-color: transparent !important;}#fv-chart-1784294576158-jknu8qhxr-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #AA1124;}#fv-chart-1784294576158-jknu8qhxr-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr-slideshow .fv-slide {width: 100% !important;animation: fv-fade-in 0.3s ease-in-out;}@keyframes fv-fade-in {from { opacity: 0; }to { opacity: 1; }}#fv-chart-1784294576158-jknu8qhxr-slideshow .fv-slideshow-nav-row {position: relative !important;display: flex !important;justify-content: space-between !important;align-items: center !important;padding: 0 0 16px 0 !important;width: 100% !important;z-index: 20 !important;}#fv-chart-1784294576158-jknu8qhxr-slideshow .fv-nav-btn {background-color: var(--riv-primary) !important;color: #ffffff !important;border: none !important;border-radius: 4px !important;padding: 8px 16px !important;font-size: 14px !important;font-weight: 700 !important;cursor: pointer !important;display: flex !important;align-items: center !important;justify-content: center !important;gap: 6px !important;transition: opacity 0.2s, background-color 0.2s !important;height: 36px !important;text-transform: none !important;box-shadow: 0 1px 2px rgba(0,0,0,0.1) !important;}#fv-chart-1784294576158-jknu8qhxr-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1784294576158-jknu8qhxr-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1784294576158-jknu8qhxr-slideshow .fv-nav-btn.disabled {background-color: #E5E7EB !important;color: #9CA3AF !important;cursor: default !important;pointer-events: none !important;box-shadow: none !important;}#fv-chart-1784294576158-jknu8qhxr-slideshow .fv-slide-counter {font-family: 'Poppins', sans-serif !important;font-size: 14px !important;font-weight: 600 !important;color: #374151 !important;text-align: center !important;min-width: 40px !important;background-color: rgba(255,255,255,0.8) !important;padding: 2px 8px !important;border-radius: 10px !important;}#fv-chart-1784294576158-jknu8qhxr-slideshow .fv-slideshow-select {position: absolute !important;top: 10px !important;right: 10px !important;z-index: 20 !important;appearance: none !important;-webkit-appearance: none !important;-moz-appearance: none !important;background-color: white !important;border: 1px solid #d1d5db !important;color: #1F2937 !important;font-family: 'Open Sans', sans-serif !important;font-size: 14px !important;font-weight: 600 !important;padding: 6px 32px 6px 12px !important;border-radius: 4px !important;cursor: pointer !important;box-shadow: 0 1px 2px rgba(0,0,0,0.05) !important;background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e") !important;background-position: right 0.5rem center !important;background-repeat: no-repeat !important;background-size: 1.5em 1.5em !important;}#fv-chart-1784294576158-jknu8qhxr-slideshow .fv-slideshow-select:focus {outline: 2px solid #AA1124 !important;border-color: #AA1124 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-chart-title {font-weight: bold !important;text-align: center !important;margin-bottom: 0.5rem !important;color: var(--riv-primary) !important;font-size: 20px !important;line-height: 1.2 !important;font-family: 'Open Sans', sans-serif !important;text-transform: none !important;white-space: normal !important;overflow-wrap: break-word !important;padding: 0 20px !important;}#fv-chart-1784294576158-jknu8qhxr .fv-chart-subhead {font-size: 18px !important;font-weight: 500 !important;text-align: center !important;margin-bottom: 2rem !important;color: #374151 !important;line-height: 1.7 !important;font-family: 'Open Sans', sans-serif !important;display: block !important;text-transform: none !important;padding: 0 20px !important;}#fv-chart-1784294576158-jknu8qhxr .rv-chart-caption { font-size: 15px !important; color: #374151 !important; text-align: center !important; font-style: normal !important; font-weight: normal !important; line-height: 1.7 !important; font-family: 'Open Sans', sans-serif !important; display: block !important; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-select { background: transparent; border: none; border-bottom: 2px solid; font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; padding: 0.25rem 0; cursor: pointer; outline: none; appearance: none; -webkit-appearance: none; -moz-appearance: none; max-width: 100%; width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-select option { font-family: 'Open Sans', sans-serif; font-weight: 400; font-size: 14px; color: #374151; direction: ltr; text-align: left; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-vs { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; color: #374151; letter-spacing: 0.1em; padding: 0 1rem; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-bar { height: 32px; width: var(--target-width); transition: width 0.8s ease-out; animation: fv-grow-max-width 0.8s ease-out forwards; display: flex; align-items: center; overflow: hidden; color: #ffffff; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-bar-right { border-radius: 0 4px 4px 0; justify-content: flex-start; padding: 0 8px; }@keyframes fv-grow-max-width {from { max-width: 0; }to { max-width: 100%; }}#fv-chart-1784294576158-jknu8qhxr .fv-versus-center-line { position: absolute; left: 50%; top: 0; bottom: 0; width: 4px; background-color: #ffffff; transform: translateX(-50%); z-index: 1; }#fv-chart-1784294576158-jknu8qhxr .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1784294576158-jknu8qhxr .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1784294576158-jknu8qhxr .fv-versus-label { position: absolute; left: 50%; transform: translateX(-50%); top: 0; background-color: transparent; border: none; box-shadow: none; padding: 0; font-family: 'Open Sans', sans-serif; font-weight: 700; font-size: 14px; color: #374151; white-space: nowrap; }#fv-chart-1784294576158-jknu8qhxr .sr-only { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; border: 0 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1784294576158-jknu8qhxr.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-wrapper { position: relative !important; width: 100% !important; overflow: hidden !important; border-radius: 0 !important; background-color: #000 !important; touch-action: pan-y !important; user-select: none !important; -webkit-user-select: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-inner { position: relative !important; width: 100% !important; height: 100% !important; display: block !important; transform-origin: center center !important; transition: transform 0.1s ease-out !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-bg { display: block !important; width: 100% !important; height: auto !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-fg { position: absolute !important; top: 0 !important; left: 0 !important; width: 100% !important; height: 100% !important; object-fit: cover !important; clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%) !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-slider { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 32px !important; transform: translateX(-50%) !important; cursor: ew-resize !important; z-index: 10 !important; user-select: none !important; -webkit-user-select: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-slider-line { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 4px !important; background-color: white !important; transform: translateX(-50%) !important; box-shadow: 0 0 10px rgba(0,0,0,0.5) !important; pointer-events: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-handle { position: absolute !important; top: 50% !important; left: 50% !important; transform: translate(-50%, -50%) !important; width: 32px !important; height: 32px !important; background-color: white !important; border-radius: 50% !important; box-shadow: 0 2px 6px rgba(0,0,0,0.3) !important; display: flex !important; align-items: center !important; justify-content: center !important; gap: 4px !important; pointer-events: none !important; z-index: 11 !important; overflow: hidden !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-arrow-left { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-right: 4px solid #4b5563 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-arrow-right { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-left: 4px solid #4b5563 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-label { position: absolute !important; top: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; padding: 0.25rem 0.75rem !important; border-radius: 0.25rem !important; font-size: 0.875rem !important; font-weight: 500 !important; pointer-events: none !important; backdrop-filter: blur(4px) !important; z-index: 5 !important; transition: right 0.3s ease, opacity 0.2s ease !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-expand-btn, #fv-chart-1784294576158-jknu8qhxr .fv-image-compare-close-btn { position: absolute !important; bottom: 1rem !important; right: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; border: none !important; border-radius: 0.25rem !important; padding: 0.5rem !important; cursor: pointer !important; z-index: 20 !important; display: flex !important; align-items: center !important; justify-content: center !important; backdrop-filter: blur(4px) !important; transition: background-color 0.2s !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-expand-btn:hover, #fv-chart-1784294576158-jknu8qhxr .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-wrapper.fv-image-compare-fullscreen { position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; width: 100% !important; height: 100% !important; z-index: 999999 !important; display: flex !important; align-items: center !important; justify-content: center !important; background-color: rgba(0, 0, 0, 0.9) !important; margin: 0 !important; touch-action: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner { width: 100% !important; height: 100% !important; display: flex !important; align-items: center !important; justify-content: center !important; cursor: grab !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-bg { position: absolute !important; top: 0 !important; left: 0 !important; max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-fg { max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1784294576158-jknu8qhxr .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1784294576158-jknu8qhxr .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1784294576158-jknu8qhxr .fv-logo {display: block !important;margin: 0 auto !important;width: 120px !important;min-width: 120px !important;max-width: 120px !important;height: auto !important;object-fit: contain !important;flex-shrink: 0 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1784294576158-jknu8qhxr .fv-dropdown-title {appearance: none !important;-webkit-appearance: none !important;-moz-appearance: none !important;background: transparent !important;border: none !important;font-size: 18px !important;font-weight: 600 !important;color: var(--riv-primary) !important;padding-right: 28px !important;padding-left: 10px !important;cursor: pointer !important;text-align: center !important;text-align-last: center !important;width: auto !important;max-width: 100% !important;font-family: 'Open Sans', sans-serif !important;line-height: 1.3 !important;margin: 0 !important;text-overflow: ellipsis !important;overflow: hidden !important;white-space: nowrap !important;}#fv-chart-1784294576158-jknu8qhxr .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-dropdown-chevron {position: absolute !important;right: 0 !important;top: 50% !important;transform: translateY(-50%) !important;pointer-events: none !important;color: var(--riv-primary) !important;display: flex !important;align-items: center !important;}#fv-chart-1784294576158-jknu8qhxr .fv-carousel-title-controls { display: flex !important; justify-content: space-between !important; align-items: center !important; margin-bottom: 16px !important; width: 100% !important; gap: 12px !important; }#fv-chart-1784294576158-jknu8qhxr .fv-carousel-nav-btn {background: transparent !important; border: 1px solid #d1d5db !important; border-radius: 6px !important; padding: 6px 10px !important;cursor: pointer !important; font-size: 14px !important; color: #374151 !important; display: flex !important; align-items: center !important; gap: 4px !important; font-family: 'Open Sans', sans-serif !important;}#fv-chart-1784294576158-jknu8qhxr .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1784294576158-jknu8qhxr .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1784294576158-jknu8qhxr .fv-legend { display: flex !important; justify-content: center !important; flex-wrap: wrap !important; gap: 8px 16px !important; margin: 0 !important; padding: 0 !important; margin-top: 1rem !important; }#fv-chart-1784294576158-jknu8qhxr .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1784294576158-jknu8qhxr .fv-multi-value-legend {display: flex !important;justify-content: center !important;flex-wrap: wrap !important;gap: 12px 24px !important;margin-bottom: 1.5rem !important;padding: 0 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-multi-legend-item { display: flex !important; align-items: center !important; gap: 8px !important; font-size: 14px !important; color: #374151 !important; font-weight: 500 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1784294576158-jknu8qhxr .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1784294576158-jknu8qhxr .fv-benchmark-title {font-size: 18px !important; font-weight: 600 !important; margin-bottom: 16px !important; margin-top: 0 !important; padding: 0 !important;text-align: center !important; color: var(--riv-primary) !important; flex: 1 !important; min-width: 0 !important;font-family: 'Open Sans', sans-serif !important; line-height: 1.3 !important;text-transform: none !important;white-space: normal !important;overflow-wrap: break-word !important;word-wrap: break-word !important;max-width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr .fv-bar-row, #fv-chart-1784294576158-jknu8qhxr .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-label { width: 150px !important; flex-shrink: 0 !important; font-size: 14px !important; color: #374151 !important; padding-right: 10px !important; text-align: right !important; font-weight: 500 !important; display: block !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-container { flex-grow: 1 !important; background-color: #E5E7EB !important; border-radius: 4px !important; min-height: 25px !important; border: 1px solid #D1D5DB !important; position: relative !important; display: flex !important; align-items: center !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-commentary-inline { display: none !important; position: absolute !important; left: 150px !important; top: 0 !important; bottom: 0 !important; right: 0 !important; width: calc(100% - 150px) !important; margin: 0 !important; padding: 0 8px !important; font-size: 13px !important; color: #fff !important; background: rgba(0,0,0,0.8) !important; border-radius: 4px !important; line-height: 1.4 !important; font-weight: normal !important; text-transform: none !important; word-wrap: break-word !important; z-index: 10 !important; align-items: center !important; overflow-y: auto !important; }#fv-chart-1784294576158-jknu8qhxr.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1784294576158-jknu8qhxr.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1784294576158-jknu8qhxr.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar { height: 100% !important; border-radius: 3px !important; display: flex !important; align-items: center !important; transition: opacity 0.2s ease, width 0.8s ease-out !important; min-height: 23px !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-inner-content { display: flex !important; justify-content: space-between !important; align-items: center !important; width: 100% !important; height: 100% !important; padding: 0 8px !important; font-size: 14px !important; font-weight: bold !important; overflow: hidden !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-value-outside { padding-left: 8px !important; font-size: 14px !important; font-weight: bold !important; color: #374151 !important; white-space: nowrap !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1784294576158-jknu8qhxr .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1784294576158-jknu8qhxr .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1784294576158-jknu8qhxr .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1784294576158-jknu8qhxr .fv-stacked-segment { height: 100% !important; display: flex !important; align-items: center !important; justify-content: flex-end !important; padding-right: 8px !important; border-right: 1px solid rgba(255,255,255,0.3) !important; }#fv-chart-1784294576158-jknu8qhxr .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1784294576158-jknu8qhxr .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1784294576158-jknu8qhxr .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1784294576158-jknu8qhxr .fv-grouped-product-title { width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.5rem !important; font-weight: 700 !important; font-size: 14px !important; color: #374151 !important; text-transform: none !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1784294576158-jknu8qhxr .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1784294576158-jknu8qhxr .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-ticks { display: flex !important; justify-content: space-between !important; padding-top: 4px !important; font-size: 13px !important; color: #374151 !important; }#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-ticks span::before { content: '' !important; position: absolute !important; top: -6px !important; left: 50% !important; transform: translateX(-50%) !important; width: 2px !important; height: 4px !important; background-color: #D1D5DB !important; border-radius: 1px !important; }#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-title { text-align: center !important; font-size: 15px !important; color: #374151 !important; margin-top: 8px !important; margin-bottom: 16px !important; line-height: 1.5 !important; padding: 0 1rem !important; display: block !important; font-weight: bold !important; }#fv-chart-1784294576158-jknu8qhxr .fv-y-axis-title {font-size: 15px !important;color: #374151 !important;line-height: 1.5 !important;text-align: left !important;padding-left: 5.83% !important;margin-bottom: 4px !important;display: block !important;font-weight: bold !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-pie-container,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-row,#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-stacked-product,#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-grouped-bar-product,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-bar-row,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-stacked-product,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-bar-label:not(.fv-grouped-product-title) {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-label,#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-grouped-product-title,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-bar-label,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-grouped-product-title {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-container,#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-cluster,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-bar-container,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus-within {position: static !important; display: block !important; width: 100% !important; margin: 4px 0 0 0 !important; padding: 0 !important; background: transparent !important; color: #6B7280 !important; font-size: 12px !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-x-axis-wrapper,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-x-axis-label-space,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-x-axis-chart-space,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-benchmark-title,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-dropdown-title,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-carousel-nav-btn,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-chart-title,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-chart-subhead,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-versus-header,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-versus-select-wrapper,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-versus-vs,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-versus-select-container,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-versus-select,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-stl-shop-all-btn,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-stl-shop-all-btn {bottom: 0.5rem !important; right: 0.5rem !important; height: 2rem !important; font-size: 0.75rem !important; padding: 0 0.75rem 0 2.5rem !important; max-width: calc(100% - 1rem) !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-stl-shop-all-logo,#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-stl-shop-all-icon,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-bar-commentary-inline,#fv-chart-1784294576158-jknu8qhxr.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1784294576158-jknu8qhxr.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1784294576158-jknu8qhxr .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1784294576158-jknu8qhxr .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-bar-row,#fv-chart-1784294576158-jknu8qhxr .fv-stacked-product,#fv-chart-1784294576158-jknu8qhxr .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1784294576158-jknu8qhxr .fv-bar-label:not(.fv-grouped-product-title) {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-bar-label,#fv-chart-1784294576158-jknu8qhxr .fv-grouped-product-title {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-bar-container,#fv-chart-1784294576158-jknu8qhxr .fv-bar-cluster {width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784294576158-jknu8qhxr .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784294576158-jknu8qhxr .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784294576158-jknu8qhxr .fv-bar-row .fv-bar-commentary-inline:focus-within {position: static !important; display: block !important; width: 100% !important; margin: 4px 0 0 0 !important; padding: 0 !important; background: transparent !important; color: #6B7280 !important; font-size: 12px !important;}#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-label-space {display: none !important;}#fv-chart-1784294576158-jknu8qhxr .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1784294576158-jknu8qhxr .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1784294576158-jknu8qhxr .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1784294576158-jknu8qhxr .fv-chart-title {padding: 0 8px !important;}#fv-chart-1784294576158-jknu8qhxr .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1784294576158-jknu8qhxr .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1784294576158-jknu8qhxr .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1784294576158-jknu8qhxr .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1784294576158-jknu8qhxr .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1784294576158-jknu8qhxr .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr .fv-stl-shop-all-btn {bottom: 0.5rem !important; right: 0.5rem !important; height: 2rem !important; font-size: 0.75rem !important; padding: 0 0.75rem 0 2.5rem !important; max-width: calc(100% - 1rem) !important;}#fv-chart-1784294576158-jknu8qhxr .fv-stl-shop-all-logo,#fv-chart-1784294576158-jknu8qhxr .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1784294576158-jknu8qhxr .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1784294576158-jknu8qhxr .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1784294576158-jknu8qhxr .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1784294576158-jknu8qhxr.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Overall Chart Title","description": "Subhead to describe the test and what's being measured and why","creator": {"@type": "Organization","name": "Default"},"isAccessibleForFree": true,"dateCreated": "2026-07-17T13:22:56.158Z","citation": "Add your caption to explain the data, the learnings and the key takeaways of the data being visualized","keywords": ["Image Comparison","benchmark","comparison","performance","review","Default"],"measurementTechnique": "Performance Benchmarking","variableMeasured": []}Before vacuumingAfter vacuumingwindow.iFrameResizer = {heightCalculationMethod: 'taggedElement'};(function() {window.fvAnimateCharts = function(chartWrapper) {if (!chartWrapper) return;function animateBars(chartElement) {if (!chartElement) return;var bars = chartElement.querySelectorAll('.fv-bar, .fv-stacked-segment');bars.forEach(function(bar, index) {bar.style.setProperty('width', '0%', 'important');bar.style.setProperty('transition', 'none', 'important');var targetWidth = bar.dataset.targetWidth;if (targetWidth === undefined) return;void bar.offsetWidth;var targetMargin = bar.dataset.targetMargin;var baseMargin = bar.dataset.baseMargin;if (baseMargin !== undefined) {bar.style.setProperty('margin-left', baseMargin + '%', 'important');}setTimeout(function() {var marginTransition = baseMargin !== undefined ? ', margin-left 0.8s ease-out' : '';bar.style.setProperty('transition', 'opacity 0.2s ease, width 0.8s ease-out' + marginTransition, 'important');bar.style.setProperty('width', targetWidth + '%', 'important');if (targetMargin !== undefined && baseMargin !== undefined) {bar.style.setProperty('margin-left', targetMargin + '%', 'important');}}, index * 50 + 50);});}function animateLineChart(chartElement) {if (!chartElement) return;var lineSvg = chartElement.querySelector('svg');if (!lineSvg) return;var paths = lineSvg.querySelectorAll('.riv-line-path');paths.forEach(function(p, i) {if (typeof p.getTotalLength === 'function') {var len = p.getTotalLength();p.style.transition = 'none';p.style.strokeDasharray = len;p.style.strokeDashoffset = len;p.getBoundingClientRect();setTimeout(function() {p.style.transition = 'stroke-dashoffset 1s ease-out ' + (i * 0.1) + 's, stroke-width 0.2s, opacity 0.2s';p.style.strokeDashoffset = '0';}, 100);}});var dots = lineSvg.querySelectorAll('.riv-dot');dots.forEach(function(dot, i) {dot.style.opacity = '0';setTimeout(function() {dot.style.transition = 'opacity 0.3s ease';dot.style.opacity = '1';}, 500 + i * 10);});}var charts = chartWrapper.querySelectorAll('.fv-chart-item');charts.forEach(function(chart) {if (window.getComputedStyle(chart).display === 'none') return;var chartType = chart.dataset.chartType;if (chartType === 'Line') {animateLineChart(chart);} else if (chartType !== 'Pie') {animateBars(chart);}});};function initialize(uniqueId, isSlideshow) {var root = document.getElementById(uniqueId);if (!root && !isSlideshow) return;function setupWrapper(chartWrapper) {if (!chartWrapper) return;function checkMobileView() {var width = chartWrapper.getBoundingClientRect().width;var isMobileDevice = window.screen && Math.min(window.screen.width, window.screen.height) <= 599;var isMobile;if (width === 0) {isMobile = isMobileDevice || window.matchMedia('(max-width: 599px)').matches;} else {isMobile = isMobileDevice || width < 600;}if (isMobile) {chartWrapper.classList.add('mobile-view');} else {chartWrapper.classList.remove('mobile-view');}}checkMobileView();if (typeof ResizeObserver !== 'undefined') {var ro = new ResizeObserver(function() {checkMobileView();});ro.observe(chartWrapper);}window.addEventListener('resize', checkMobileView);var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true';if (labelsOnTop) {var charts = chartWrapper.querySelectorAll('.fv-chart-item');var hasVisibleBarChart = false;charts.forEach(function(c) {if (window.getComputedStyle(c).display !== 'none') {var cType = c.dataset.chartType;if (cType === 'Bar' || cType === 'Stacked Bar' || cType === 'Versus') {hasVisibleBarChart = true;}}});if (hasVisibleBarChart) {chartWrapper.classList.add('labels-on-top');} else {chartWrapper.classList.remove('labels-on-top');}} else {chartWrapper.classList.remove('labels-on-top');}chartWrapper.querySelectorAll('.riv-line-legend').forEach(function(legend) {var chartId = legend.dataset.chart;var chart = chartWrapper.querySelector('[id="' + chartId + '"]');if (!chart) return;var lines = chart.querySelectorAll('.riv-line-path');var dots = chart.querySelectorAll('.riv-dot');var legendItems = legend.querySelectorAll('.riv-legend-item');legendItems.forEach(function(item) {var productName = item.dataset.product;var safeProductName = productName.replace(/"/g, '\"');var line = chart.querySelector('.riv-line-path[data-product="' + safeProductName + '"]');var productDots = chart.querySelectorAll('.riv-dot[data-product="' + safeProductName + '"]');if (line && !line.dataset.origStroke) {line.dataset.origStroke = line.getAttribute('stroke-width') || '2';}var highlight = function() {if (legend.querySelector('.isolated')) return;lines.forEach(function(l) { l.style.opacity = '0.2'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '0.2'; });legendItems.forEach(function(i) { i.style.opacity = '0.3'; i.style.transition = 'opacity 0.2s'; });if (line) {line.style.opacity = '1';line.setAttribute('stroke-width', '4');}productDots.forEach(function(d) { d.style.opacity = '1'; });item.style.opacity = '1';};var clearHighlight = function() {if (legend.querySelector('.isolated')) return;lines.forEach(function(l) { l.style.opacity = '1'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '1'; });legendItems.forEach(function(i) { i.style.opacity = '1'; });};var toggleIsolate = function() {var isIsolated = item.classList.contains('isolated');legendItems.forEach(function(i) { i.classList.remove('isolated'); });if (isIsolated) {lines.forEach(function(l) { l.style.opacity = '1'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '1'; });legendItems.forEach(function(i) { i.style.opacity = '1'; });} else {item.classList.add('isolated');lines.forEach(function(l) { l.style.opacity = '0.2'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '0.2'; });legendItems.forEach(function(i) { i.style.opacity = '0.3'; i.style.transition = 'opacity 0.2s'; });if (line) {line.style.opacity = '1';line.setAttribute('stroke-width', '4');}productDots.forEach(function(d) { d.style.opacity = '1'; });item.style.opacity = '1';}};item.addEventListener('mouseenter', highlight);item.addEventListener('focus', highlight);item.addEventListener('mouseleave', clearHighlight);item.addEventListener('blur', clearHighlight);item.addEventListener('click', toggleIsolate);if (line) {line.style.cursor = 'pointer';line.addEventListener('mouseenter', highlight);line.addEventListener('mouseleave', clearHighlight);line.addEventListener('click', toggleIsolate);}});});var versusCharts = chartWrapper.querySelectorAll('.fv-versus-chart');versusCharts.forEach(function(vc) {var dataJson = vc.getAttribute('data-versus-data');var leftColor = vc.getAttribute('data-left-color') || '#E53935';var rightColor = vc.getAttribute('data-right-color') || '#FFB300';if (!dataJson) return;var versusData = JSON.parse(dataJson);var leftSelect = vc.querySelector('.fv-select-left');var rightSelect = vc.querySelector('.fv-select-right');var rows = vc.querySelectorAll('.fv-versus-row');function updateVersusChart() {var leftProduct = leftSelect.value;var rightProduct = rightSelect.value;leftSelect.style.color = leftColor;leftSelect.style.borderColor = leftColor;rightSelect.style.color = rightColor;rightSelect.style.borderColor = rightColor;rows.forEach(function(row) {var index = parseInt(row.getAttribute('data-index'));var data = versusData[index];if (!data) return;var leftVal = data.productData[leftProduct] ? data.productData[leftProduct].value : undefined;var rightVal = data.productData[rightProduct] ? data.productData[rightProduct].value : undefined;var leftIsNum = typeof leftVal === 'number';var rightIsNum = typeof rightVal === 'number';var leftNum = leftIsNum ? leftVal : 0;var rightNum = rightIsNum ? rightVal : 0;var maxVal = Math.max(leftNum, rightNum, 0.0001);var leftWidth = leftIsNum ? (leftNum / maxVal) * 95 : 0;var rightWidth = rightIsNum ? (rightNum / maxVal) * 85 : 0;var winner = null;var pctDiffStr = null;if (leftIsNum && rightIsNum) {if (leftNum > rightNum) {winner = 'left';if (rightNum > 0) {var diff = Math.round(((leftNum - rightNum) / rightNum) * 100);pctDiffStr = '+' + diff.toLocaleString() + '%';}} else if (rightNum > leftNum) {winner = 'right';if (leftNum > 0) {var diff = Math.round(((rightNum - leftNum) / leftNum) * 100);pctDiffStr = '+' + diff.toLocaleString() + '%';}}}var leftDisplay = data.productData[leftProduct] && data.productData[leftProduct].displayValue !== undefined ? data.productData[leftProduct].displayValue : (leftIsNum ? leftNum.toLocaleString() : (leftVal !== undefined ? leftVal : '-'));var rightDisplay = data.productData[rightProduct] && data.productData[rightProduct].displayValue !== undefined ? data.productData[rightProduct].displayValue : (rightIsNum ? rightNum.toLocaleString() : (rightVal !== undefined ? rightVal : '-'));var unit = (data.productData[leftProduct] && data.productData[leftProduct].unit) ||(data.productData[rightProduct] && data.productData[rightProduct].unit) || '';var leftTextStr = leftDisplay;var rightTextStr = rightDisplay;var leftBar = row.querySelector('.fv-versus-bar-left');var rightBar = row.querySelector('.fv-versus-bar-right');var leftText = row.querySelector('.fv-inside-left');var rightText = row.querySelector('.fv-inside-right');var labelText = row.querySelector('.fv-versus-label span');var leftWrapper = row.querySelector('.fv-versus-bar-left-wrapper');var rightWrapper = row.querySelector('.fv-versus-bar-right-wrapper');var existingPctDiffs = row.querySelectorAll('.fv-versus-pct-diff');existingPctDiffs.forEach(function(el) { el.remove(); });if (winner === 'left' && pctDiffStr) {var pctSpan = document.createElement('span');pctSpan.className = 'fv-versus-pct-diff';pctSpan.style.color = 'rgba(255, 255, 255, 0.9)';pctSpan.textContent = pctDiffStr;if (leftBar) leftBar.insertBefore(pctSpan, leftBar.firstChild);} else if (winner === 'right' && pctDiffStr) {var pctSpan = document.createElement('span');pctSpan.className = 'fv-versus-pct-diff';pctSpan.style.color = 'rgba(255, 255, 255, 0.9)';pctSpan.textContent = pctDiffStr;if (rightBar) rightBar.appendChild(pctSpan);}if (leftBar) {leftBar.style.backgroundColor = leftColor;leftBar.dataset.targetWidth = leftWidth;leftBar.style.setProperty('--target-width', leftWidth + '%');leftBar.style.width = leftWidth + '%';}if (rightBar) {rightBar.style.backgroundColor = rightColor;rightBar.dataset.targetWidth = rightWidth;rightBar.style.setProperty('--target-width', rightWidth + '%');rightBar.style.width = rightWidth + '%';}if (leftText) {leftText.innerHTML = leftTextStr;}if (rightText) {rightText.innerHTML = rightTextStr;}if (labelText) {labelText.textContent = data.attribute + (unit ? ' (' + unit + ')' : '');}});}if (leftSelect) leftSelect.addEventListener('change', updateVersusChart);if (rightSelect) rightSelect.addEventListener('change', updateVersusChart);});var barRows = chartWrapper.querySelectorAll('.fv-bar-row');var globalCaptionEl = chartWrapper.querySelector('.rv-chart-caption');var fallbackCaptionHtml = globalCaptionEl ? globalCaptionEl.innerHTML : '';barRows.forEach(function(row) {var commentaryEl = row.querySelector('[data-commentary-key]');if (commentaryEl) {var commentaryText = commentaryEl.textContent;if (commentaryText && commentaryText.trim().length > 0) {row.addEventListener('mouseenter', function() {if (!chartWrapper.classList.contains('mobile-view') && globalCaptionEl) {globalCaptionEl.innerHTML = commentaryText;globalCaptionEl.classList.add('fv-bar-active-caption');}});row.addEventListener('mouseleave', function() {if (!chartWrapper.classList.contains('mobile-view') && globalCaptionEl) {globalCaptionEl.innerHTML = fallbackCaptionHtml;globalCaptionEl.classList.remove('fv-bar-active-caption');}});}}});var charts = chartWrapper.querySelectorAll('.fv-chart-item');var dropdown = chartWrapper.querySelector('.fv-dropdown-title');var prevBtn = chartWrapper.querySelector('.fv-carousel-nav-btn.prev');var nextBtn = chartWrapper.querySelector('.fv-carousel-nav-btn.next');var carouselTitle = chartWrapper.querySelector('.fv-carousel-title-controls .fv-benchmark-title');var counter = chartWrapper.querySelector('.fv-carousel-counter');var subheadEl = chartWrapper.querySelector('.fv-chart-subhead');var captionEl = chartWrapper.querySelector('.rv-chart-caption');var footerContentEl = chartWrapper.querySelector('.fv-footer-content');var bottomBarEl = chartWrapper.querySelector('.fv-bottom-bar');var logoEl = chartWrapper.querySelector('.fv-logo');if (charts.length > 1 && (dropdown || prevBtn)) {var currentChartIndex = 0;var titles = [];if (dropdown) {titles = Array.from(dropdown.options).map(function(o) { return o.text; });} else {charts.forEach(function(c) {titles.push(c.getAttribute('data-title') || '');});}function showInternalChart(index) {if (index < 0) index = charts.length - 1;if (index >= charts.length) index = 0;currentChartIndex = index;charts.forEach(function(c, i) {c.style.display = i === index ? 'block' : 'none';if (i === index) {var cType = c.dataset.chartType;if (cType === 'Line') {} else if (cType !== 'Pie') {window.fvAnimateCharts(chartWrapper);}var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true';if (labelsOnTop && (cType === 'Bar' || cType === 'Stacked Bar' || cType === 'Versus')) {chartWrapper.classList.add('labels-on-top');} else {chartWrapper.classList.remove('labels-on-top');}}});if (dropdown) dropdown.value = index;if (carouselTitle && titles[index]) carouselTitle.textContent = titles[index];if (counter) counter.textContent = (index + 1) + ' of ' + charts.length;var activeChart = charts[index];if (activeChart) {var newSubhead = activeChart.getAttribute('data-subhead');var newCaption = activeChart.getAttribute('data-caption');var currentChartType = activeChart.getAttribute('data-chart-type');var hideGlobalCaption = currentChartType === 'Countdown' || currentChartType === 'Image Comparison' || currentChartType === 'Shop the Collection';if (subheadEl) subheadEl.textContent = newSubhead || '';if (captionEl) {captionEl.textContent = newCaption || '';fallbackCaptionHtml = newCaption || '';}if (footerContentEl) {if (newCaption && newCaption.trim().length > 0 && !hideGlobalCaption) {footerContentEl.style.display = 'block';if (bottomBarEl) bottomBarEl.style.display = 'flex';} else {footerContentEl.style.display = 'none';if (bottomBarEl && !logoEl) {bottomBarEl.style.display = 'none';}}}}}if (dropdown) dropdown.addEventListener('change', function(e) { showInternalChart(parseInt(e.target.value)); });if (prevBtn) prevBtn.addEventListener('click', function() { showInternalChart(currentChartIndex - 1); });if (nextBtn) nextBtn.addEventListener('click', function() { showInternalChart(currentChartIndex + 1); });}var imageCompareWrappers = chartWrapper.querySelectorAll('.fv-image-compare-wrapper');imageCompareWrappers.forEach(function(wrapper) {var inner = wrapper.querySelector('.fv-image-compare-inner') || wrapper;var slider = wrapper.querySelector('.fv-image-compare-slider');var fgImage = wrapper.querySelector('.fv-image-compare-fg');var bgImage = wrapper.querySelector('.fv-image-compare-bg');var labelLeft = wrapper.querySelector('.fv-image-compare-label-left');var labelRight = wrapper.querySelector('.fv-image-compare-label-right');var isDragging = false;var scale = 1;var panX = 0;var panY = 0;var isPanning = false;var hasPanned = false;var lastClientX = 0;var lastClientY = 0;var initialDistance = null;var lastCenterX = null;var lastCenterY = null;function updateTransform() {if (wrapper.classList.contains('fv-image-compare-fullscreen')) {inner.style.setProperty('transform', 'translate(' + panX + 'px, ' + panY + 'px) scale(' + scale + ')', 'important');} else {inner.style.removeProperty('transform');scale = 1;panX = 0;panY = 0;}}function constrainPan() {var rect = wrapper.getBoundingClientRect();var maxPanX = Math.max(0, (rect.width * scale - rect.width) / 2);var maxPanY = Math.max(0, (rect.height * scale - rect.height) / 2);panX = Math.max(-maxPanX, Math.min(panX, maxPanX));panY = Math.max(-maxPanY, Math.min(panY, maxPanY));}wrapper.addEventListener('wheel', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;e.preventDefault();var zoomSensitivity = 0.005;var zoomFactor = Math.exp(-e.deltaY * zoomSensitivity);var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));if (newScale === scale) return;var rect = wrapper.getBoundingClientRect();var mouseX = e.clientX - rect.left - rect.width / 2;var mouseY = e.clientY - rect.top - rect.height / 2;var ratio = newScale / scale;panX = mouseX - (mouseX - panX) * ratio;panY = mouseY - (mouseY - panY) * ratio;scale = newScale;constrainPan();updateTransform();}, { passive: false });wrapper.addEventListener('mousedown', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen') || scale <= 1) return;if (e.target.closest('.fv-image-compare-slider') || e.target.closest('button')) return;isPanning = true;hasPanned = false;lastClientX = e.clientX;lastClientY = e.clientY;});window.addEventListener('mousemove', function(e) {if (!isPanning) return;var dx = e.clientX - lastClientX;var dy = e.clientY - lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.clientX;lastClientY = e.clientY;panX += dx;panY += dy;constrainPan();updateTransform();});window.addEventListener('mouseup', function() {isPanning = false;});wrapper.addEventListener('touchstart', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;if (e.touches.length === 2) {e.preventDefault();var dx = e.touches[0].clientX - e.touches[1].clientX;var dy = e.touches[0].clientY - e.touches[1].clientY;initialDistance = Math.sqrt(dx * dx + dy * dy);var rect = wrapper.getBoundingClientRect();lastCenterX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left - rect.width / 2;lastCenterY = (e.touches[0].clientY + e.touches[1].clientY) / 2 - rect.top - rect.height / 2;hasPanned = true;} else if (e.touches.length === 1 && scale > 1) {if (e.target.closest('.fv-image-compare-slider') || e.target.closest('button')) return;isPanning = true;hasPanned = false;lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;}}, { passive: false });wrapper.addEventListener('touchmove', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;if (e.touches.length === 2 && initialDistance !== null) {e.preventDefault();var dx = e.touches[0].clientX - e.touches[1].clientX;var dy = e.touches[0].clientY - e.touches[1].clientY;var distance = Math.sqrt(dx * dx + dy * dy);if (initialDistance > 0) {var zoomFactor = distance / initialDistance;var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));var rect = wrapper.getBoundingClientRect();var centerX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left - rect.width / 2;var centerY = (e.touches[0].clientY + e.touches[1].clientY) / 2 - rect.top - rect.height / 2;var ratio = newScale / scale;panX = centerX - (centerX - panX) * ratio;panY = centerY - (centerY - panY) * ratio;if (lastCenterX !== null && lastCenterY !== null) {panX += (centerX - lastCenterX);panY += (centerY - lastCenterY);}scale = newScale;lastCenterX = centerX;lastCenterY = centerY;constrainPan();updateTransform();}initialDistance = distance;} else if (e.touches.length === 1 && isPanning) {e.preventDefault();var dx = e.touches[0].clientX - lastClientX;var dy = e.touches[0].clientY - lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;panX += dx;panY += dy;constrainPan();updateTransform();}}, { passive: false });wrapper.addEventListener('touchend', function(e) {if (e.touches.length < 2) {initialDistance = null;}if (e.touches.length === 0) {isPanning = false;}});function handleMove(clientX) {var rect = inner.getBoundingClientRect();var x = Math.max(0, Math.min(clientX - rect.left, rect.width));var percent = Math.max(0, Math.min((x / rect.width) * 100, 100));if (slider) slider.style.setProperty('left', percent + '%', 'important');if (fgImage) fgImage.style.setProperty('clip-path', 'polygon(0 0, ' + percent + '% 0, ' + percent + '% 100%, 0 100%)', 'important');if (labelLeft) {if (percent < 10) {labelLeft.style.setProperty('opacity', '0', 'important');} else {labelLeft.style.setProperty('opacity', '1', 'important');}}if (labelRight) {if (percent > 90) {labelRight.style.setProperty('opacity', '0', 'important');} else {labelRight.style.setProperty('opacity', '1', 'important');}}}function onMouseMove(e) {if (!isDragging) return;handleMove(e.clientX);}function onTouchMove(e) {if (!isDragging) return;e.preventDefault();handleMove(e.touches[0].clientX);}function stopDragging() {isDragging = false;window.removeEventListener('mousemove', onMouseMove);window.removeEventListener('mouseup', stopDragging);window.removeEventListener('touchmove', onTouchMove);window.removeEventListener('touchend', stopDragging);}if (slider) {var startDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener('mousemove', onMouseMove);window.addEventListener('mouseup', stopDragging);};var startTouchDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener('touchmove', onTouchMove, { passive: false });window.addEventListener('touchend', stopDragging);};slider.addEventListener('mousedown', function(e) {e.preventDefault();startDrag(e.clientX);});slider.addEventListener('touchstart', function(e) {e.preventDefault();startTouchDrag(e.touches[0].clientX);}, { passive: false });}var expandBtn = wrapper.querySelector('.fv-image-compare-expand-btn');var closeBtn = wrapper.querySelector('.fv-image-compare-close-btn');if (expandBtn) {if (window !== window.parent) {expandBtn.style.display = 'none';} else {expandBtn.addEventListener('click', function(e) {e.stopPropagation();wrapper.classList.add('fv-image-compare-fullscreen');document.body.style.overflow = 'hidden';if (fgImage && fgImage.dataset.highresSrc) {fgImage.src = fgImage.dataset.highresSrc;fgImage.removeAttribute('srcset');fgImage.removeAttribute('sizes');}if (bgImage && bgImage.dataset.highresSrc) {bgImage.src = bgImage.dataset.highresSrc;bgImage.removeAttribute('srcset');bgImage.removeAttribute('sizes');}});}}if (closeBtn) {closeBtn.addEventListener('click', function(e) {e.stopPropagation();wrapper.classList.remove('fv-image-compare-fullscreen');document.body.style.overflow = '';updateTransform();});}document.addEventListener('keydown', function(e) {if (e.key === 'Escape' && wrapper.classList.contains('fv-image-compare-fullscreen')) {wrapper.classList.remove('fv-image-compare-fullscreen');document.body.style.overflow = '';updateTransform();}});});var hotspots = chartWrapper.querySelectorAll('.fv-stl-hotspot-btn');var allProductsModal = chartWrapper.querySelector('.fv-stl-all-products-modal');var shopAllBtn = chartWrapper.querySelector('.fv-stl-shop-all-btn');var allProductsList = chartWrapper.querySelector('.fv-stl-all-products-list');var stlContainer = chartWrapper.querySelector('.fv-stl-container');function closeAllModals() {if (allProductsModal) {allProductsModal.classList.remove('is-active');var items = allProductsModal.querySelectorAll('.fv-stl-all-products-item');items.forEach(function(item) {item.classList.remove('is-highlighted');});if (stlContainer) {setTimeout(function() {if (!allProductsModal.classList.contains('is-active')) {stlContainer.style.minHeight = '';if ('parentIFrame' in window) {window.parentIFrame.size();}}}, 300);}}hotspots.forEach(function(btn) { btn.setAttribute('aria-expanded', 'false'); });if ('parentIFrame' in window) {window.parentIFrame.size();}}hotspots.forEach(function(btn) {btn.addEventListener('click', function(e) {e.stopPropagation();var hotspotId = btn.getAttribute('data-hotspot-id');var isExpanded = btn.getAttribute('aria-expanded') === 'true';closeAllModals();if (!isExpanded && allProductsModal) {btn.setAttribute('aria-expanded', 'true');allProductsModal.classList.add('is-active');var container = btn.closest('.fv-stl-container');if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}var targetItem = allProductsModal.querySelector('.fv-stl-all-products-item[data-product-id="' + hotspotId + '"]');if (targetItem) {targetItem.classList.add('is-highlighted');setTimeout(function() {targetItem.scrollIntoView({ behavior: 'smooth', block: 'center' });}, 100);}if ('parentIFrame' in window) {window.parentIFrame.size();}}});});if (shopAllBtn && allProductsModal) {shopAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();allProductsModal.classList.add('is-active');var container = shopAllBtn.closest('.fv-stl-container');if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}if ('parentIFrame' in window) {window.parentIFrame.size();}});}if (allProductsModal) {var closeAllBtn = allProductsModal.querySelector('.fv-stl-all-products-close');if (closeAllBtn) {closeAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();});}}chartWrapper.addEventListener('click', function(e) {if (!e.target.closest('.fv-stl-all-products-content')) {closeAllModals();}});if (allProductsModal) {allProductsModal.addEventListener('click', function(e) {if (!e.target.closest('.fv-stl-all-products-content')) {closeAllModals();}});}var iaNodes = chartWrapper.querySelectorAll('.fv-ia-node-button');var iaWrapper = chartWrapper.querySelector('.fv-ia-wrapper');var originalCaption = chartWrapper.querySelector('.fv-original-caption') || captionEl;var dynamicCaption = chartWrapper.querySelector('.fv-ia-dynamic-caption');var exploreBtn = chartWrapper.querySelector('.fv-ia-explore-btn');var currentIaIndex = -1;function closeAllIANodes() {iaNodes.forEach(function(btn) { btn.classList.remove('is-active'); });if (originalCaption) originalCaption.style.display = 'block';if (dynamicCaption) dynamicCaption.style.display = 'none';}function resetExploreBtn() {currentIaIndex = -1;if (exploreBtn) {var exploreSpan = exploreBtn.querySelector('span');if (exploreSpan) exploreSpan.textContent = 'Explore';}}iaNodes.forEach(function(btn, index) {btn.addEventListener('click', function(e) {e.stopPropagation();var isActive = btn.classList.contains('is-active');closeAllIANodes();if (!isActive) {currentIaIndex = index;if (exploreBtn) {var exploreSpan = exploreBtn.querySelector('span');if (exploreSpan) exploreSpan.textContent = 'Next';}btn.classList.add('is-active');if (dynamicCaption) {var title = btn.getAttribute('data-title') || '';var desc = btn.getAttribute('data-desc') || '';dynamicCaption.innerHTML = '';var strongTag = document.createElement('strong');strongTag.textContent = title;dynamicCaption.appendChild(strongTag);if (desc) {dynamicCaption.appendChild(document.createTextNode(' - ' + desc));}if (originalCaption) originalCaption.style.display = 'none';dynamicCaption.style.display = 'block';if (footerContentEl) footerContentEl.style.display = 'block';}} else {resetExploreBtn();}});});if (exploreBtn) {exploreBtn.addEventListener('click', function(e) {e.stopPropagation();if (iaNodes.length === 0) return;var nextIndex = currentIaIndex + 1;if (nextIndex >= iaNodes.length) {closeAllIANodes();resetExploreBtn();} else {currentIaIndex = nextIndex;var targetBtn = iaNodes[currentIaIndex];if (targetBtn) {if(targetBtn.classList.contains('is-active')) {targetBtn.click();}targetBtn.click();}}});}if (iaWrapper) {iaWrapper.addEventListener('click', function(e) {if (!e.target.closest('.fv-ia-node-button') && !e.target.closest('.fv-ia-explore-btn')) {closeAllIANodes();resetExploreBtn();}});}window.fvAnimateCharts(chartWrapper);var countdownContainer = chartWrapper.querySelector('.fv-countdown-container');if (countdownContainer) {var targetDateAttr = countdownContainer.getAttribute('data-target-date');if (targetDateAttr) {var targetDate = new Date(targetDateAttr);var primaryColor = countdownContainer.getAttribute('data-primary-color') || '#f97316';var subheadColor = countdownContainer.getAttribute('data-subhead-color') || '#ffffff';var pad = function(n) { return (n < 10 ? '0' : '') + n; };var updateCountdown = function() {var difference = +targetDate - +new Date();var d = 0, h = 0, m = 0, s = 0;if (difference > 0) {d = Math.floor(difference / (1000 * 60 * 60 * 24));h = Math.floor((difference / (1000 * 60 * 60)) % 24);m = Math.floor((difference / 1000 / 60) % 60);s = Math.floor((difference / 1000) % 60);}var daysEl = countdownContainer.querySelector('[data-time="days"]');var hoursEl = countdownContainer.querySelector('[data-time="hours"]');var minsEl = countdownContainer.querySelector('[data-time="minutes"]');var secsEl = countdownContainer.querySelector('[data-time="seconds"]');if (daysEl) daysEl.textContent = d;if (hoursEl) hoursEl.textContent = pad(h);if (minsEl) minsEl.textContent = pad(m);if (secsEl) secsEl.textContent = pad(s);};updateCountdown();setInterval(updateCountdown, 1000);}}}if (false) {var slideshowContainer = document.getElementById(uniqueId + '-slideshow');if (slideshowContainer) {var slides = slideshowContainer.querySelectorAll('.fv-slide');slides.forEach(function(slide) {setupWrapper(slide.querySelector('.fv-chart-wrapper'));});}} else {setupWrapper(root);}}if (document.readyState === 'loading') {document.addEventListener('DOMContentLoaded', function() { initialize('fv-chart-1784294576158-jknu8qhxr', false); });} else {initialize('fv-chart-1784294576158-jknu8qhxr', false);}})();

I tested the mopping system with a dried smear of ketchup, which was promptly removed from the wooden floor. The cylindrical mop spins and pivots outwards to reach into the edges of the room, while the robot scrapes it clean and washes it while driving. The mop is then dried with hot air at the base station, which takes several hours but is very quiet.

@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;700&display=swap');@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap');#fv-chart-1784293750108-vrhlpw5yh *, #fv-chart-1784293750108-vrhlpw5yh *:before, #fv-chart-1784293750108-vrhlpw5yh *:after, #fv-chart-1784293750108-vrhlpw5yh-slideshow *, #fv-chart-1784293750108-vrhlpw5yh-slideshow *:before, #fv-chart-1784293750108-vrhlpw5yh-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1784293750108-vrhlpw5yh, #fv-chart-1784293750108-vrhlpw5yh-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1784293750108-vrhlpw5yh {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1784293750108-vrhlpw5yh .fv-inner-wrapper {color: #1F2937 !important; background-color: #ffffff !important;padding: 1.5rem 1.5rem 2rem !important; border-radius: 0.5rem !important;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1) !important;margin: 1rem 0 !important; display: flex !important; flex-direction: column !important;overflow: hidden !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1784293750108-vrhlpw5yh.fv-full-bleed .fv-inner-wrapper {padding: 0 !important;border-radius: 0 !important;box-shadow: none !important;margin: 0 !important;background-color: transparent !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-inner-wrapper.fv-is-shop-the-look {padding: 0 !important;border-radius: 0 !important;box-shadow: none !important;margin: 0 !important;background-color: transparent !important;}#fv-chart-1784293750108-vrhlpw5yh-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1784293750108-vrhlpw5yh-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh-slideshow .fv-slide {width: 100% !important;animation: fv-fade-in 0.3s ease-in-out;}@keyframes fv-fade-in {from { opacity: 0; }to { opacity: 1; }}#fv-chart-1784293750108-vrhlpw5yh-slideshow .fv-slideshow-nav-row {position: relative !important;display: flex !important;justify-content: space-between !important;align-items: center !important;padding: 0 0 16px 0 !important;width: 100% !important;z-index: 20 !important;}#fv-chart-1784293750108-vrhlpw5yh-slideshow .fv-nav-btn {background-color: var(--riv-primary) !important;color: #ffffff !important;border: none !important;border-radius: 4px !important;padding: 8px 16px !important;font-size: 14px !important;font-weight: 700 !important;cursor: pointer !important;display: flex !important;align-items: center !important;justify-content: center !important;gap: 6px !important;transition: opacity 0.2s, background-color 0.2s !important;height: 36px !important;text-transform: none !important;box-shadow: 0 1px 2px rgba(0,0,0,0.1) !important;}#fv-chart-1784293750108-vrhlpw5yh-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1784293750108-vrhlpw5yh-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1784293750108-vrhlpw5yh-slideshow .fv-nav-btn.disabled {background-color: #E5E7EB !important;color: #9CA3AF !important;cursor: default !important;pointer-events: none !important;box-shadow: none !important;}#fv-chart-1784293750108-vrhlpw5yh-slideshow .fv-slide-counter {font-family: 'Poppins', sans-serif !important;font-size: 14px !important;font-weight: 600 !important;color: #374151 !important;text-align: center !important;min-width: 40px !important;background-color: rgba(255,255,255,0.8) !important;padding: 2px 8px !important;border-radius: 10px !important;}#fv-chart-1784293750108-vrhlpw5yh-slideshow .fv-slideshow-select {position: absolute !important;top: 10px !important;right: 10px !important;z-index: 20 !important;appearance: none !important;-webkit-appearance: none !important;-moz-appearance: none !important;background-color: white !important;border: 1px solid #d1d5db !important;color: #1F2937 !important;font-family: 'Open Sans', sans-serif !important;font-size: 14px !important;font-weight: 600 !important;padding: 6px 32px 6px 12px !important;border-radius: 4px !important;cursor: pointer !important;box-shadow: 0 1px 2px rgba(0,0,0,0.05) !important;background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e") !important;background-position: right 0.5rem center !important;background-repeat: no-repeat !important;background-size: 1.5em 1.5em !important;}#fv-chart-1784293750108-vrhlpw5yh-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-chart-title {font-weight: bold !important;text-align: center !important;margin-bottom: 0.5rem !important;color: var(--riv-primary) !important;font-size: 20px !important;line-height: 1.2 !important;font-family: 'Open Sans', sans-serif !important;text-transform: none !important;white-space: normal !important;overflow-wrap: break-word !important;padding: 0 20px !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-chart-subhead {font-size: 18px !important;font-weight: 500 !important;text-align: center !important;margin-bottom: 2rem !important;color: #374151 !important;line-height: 1.7 !important;font-family: 'Open Sans', sans-serif !important;display: block !important;text-transform: none !important;padding: 0 20px !important;}#fv-chart-1784293750108-vrhlpw5yh .rv-chart-caption { font-size: 15px !important; color: #374151 !important; text-align: center !important; font-style: normal !important; font-weight: normal !important; line-height: 1.7 !important; font-family: 'Open Sans', sans-serif !important; display: block !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select { background: transparent; border: none; border-bottom: 2px solid; font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; padding: 0.25rem 0; cursor: pointer; outline: none; appearance: none; -webkit-appearance: none; -moz-appearance: none; max-width: 100%; width: 100%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select option { font-family: 'Open Sans', sans-serif; font-weight: 400; font-size: 14px; color: #374151; direction: ltr; text-align: left; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-vs { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; color: #374151; letter-spacing: 0.1em; padding: 0 1rem; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-bar { height: 32px; width: var(--target-width); transition: width 0.8s ease-out; animation: fv-grow-max-width 0.8s ease-out forwards; display: flex; align-items: center; overflow: hidden; color: #ffffff; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-bar-right { border-radius: 0 4px 4px 0; justify-content: flex-start; padding: 0 8px; }@keyframes fv-grow-max-width {from { max-width: 0; }to { max-width: 100%; }}#fv-chart-1784293750108-vrhlpw5yh .fv-versus-center-line { position: absolute; left: 50%; top: 0; bottom: 0; width: 4px; background-color: #ffffff; transform: translateX(-50%); z-index: 1; }#fv-chart-1784293750108-vrhlpw5yh .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1784293750108-vrhlpw5yh .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1784293750108-vrhlpw5yh .fv-versus-label { position: absolute; left: 50%; transform: translateX(-50%); top: 0; background-color: transparent; border: none; box-shadow: none; padding: 0; font-family: 'Open Sans', sans-serif; font-weight: 700; font-size: 14px; color: #374151; white-space: nowrap; }#fv-chart-1784293750108-vrhlpw5yh .sr-only { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; border: 0 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1784293750108-vrhlpw5yh.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-wrapper { position: relative !important; width: 100% !important; overflow: hidden !important; border-radius: 0 !important; background-color: #000 !important; touch-action: pan-y !important; user-select: none !important; -webkit-user-select: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-inner { position: relative !important; width: 100% !important; height: 100% !important; display: block !important; transform-origin: center center !important; transition: transform 0.1s ease-out !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-bg { display: block !important; width: 100% !important; height: auto !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-fg { position: absolute !important; top: 0 !important; left: 0 !important; width: 100% !important; height: 100% !important; object-fit: cover !important; clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%) !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-slider { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 32px !important; transform: translateX(-50%) !important; cursor: ew-resize !important; z-index: 10 !important; user-select: none !important; -webkit-user-select: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-slider-line { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 4px !important; background-color: white !important; transform: translateX(-50%) !important; box-shadow: 0 0 10px rgba(0,0,0,0.5) !important; pointer-events: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-handle { position: absolute !important; top: 50% !important; left: 50% !important; transform: translate(-50%, -50%) !important; width: 32px !important; height: 32px !important; background-color: white !important; border-radius: 50% !important; box-shadow: 0 2px 6px rgba(0,0,0,0.3) !important; display: flex !important; align-items: center !important; justify-content: center !important; gap: 4px !important; pointer-events: none !important; z-index: 11 !important; overflow: hidden !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-arrow-left { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-right: 4px solid #4b5563 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-arrow-right { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-left: 4px solid #4b5563 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-label { position: absolute !important; top: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; padding: 0.25rem 0.75rem !important; border-radius: 0.25rem !important; font-size: 0.875rem !important; font-weight: 500 !important; pointer-events: none !important; backdrop-filter: blur(4px) !important; z-index: 5 !important; transition: right 0.3s ease, opacity 0.2s ease !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-expand-btn, #fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-close-btn { position: absolute !important; bottom: 1rem !important; right: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; border: none !important; border-radius: 0.25rem !important; padding: 0.5rem !important; cursor: pointer !important; z-index: 20 !important; display: flex !important; align-items: center !important; justify-content: center !important; backdrop-filter: blur(4px) !important; transition: background-color 0.2s !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-expand-btn:hover, #fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-wrapper.fv-image-compare-fullscreen { position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; width: 100% !important; height: 100% !important; z-index: 999999 !important; display: flex !important; align-items: center !important; justify-content: center !important; background-color: rgba(0, 0, 0, 0.9) !important; margin: 0 !important; touch-action: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner { width: 100% !important; height: 100% !important; display: flex !important; align-items: center !important; justify-content: center !important; cursor: grab !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-bg { position: absolute !important; top: 0 !important; left: 0 !important; max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-fg { max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-logo {display: block !important;margin: 0 auto !important;width: 120px !important;min-width: 120px !important;max-width: 120px !important;height: auto !important;object-fit: contain !important;flex-shrink: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-dropdown-title {appearance: none !important;-webkit-appearance: none !important;-moz-appearance: none !important;background: transparent !important;border: none !important;font-size: 18px !important;font-weight: 600 !important;color: var(--riv-primary) !important;padding-right: 28px !important;padding-left: 10px !important;cursor: pointer !important;text-align: center !important;text-align-last: center !important;width: auto !important;max-width: 100% !important;font-family: 'Open Sans', sans-serif !important;line-height: 1.3 !important;margin: 0 !important;text-overflow: ellipsis !important;overflow: hidden !important;white-space: nowrap !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-dropdown-chevron {position: absolute !important;right: 0 !important;top: 50% !important;transform: translateY(-50%) !important;pointer-events: none !important;color: var(--riv-primary) !important;display: flex !important;align-items: center !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-carousel-title-controls { display: flex !important; justify-content: space-between !important; align-items: center !important; margin-bottom: 16px !important; width: 100% !important; gap: 12px !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-carousel-nav-btn {background: transparent !important; border: 1px solid #d1d5db !important; border-radius: 6px !important; padding: 6px 10px !important;cursor: pointer !important; font-size: 14px !important; color: #374151 !important; display: flex !important; align-items: center !important; gap: 4px !important; font-family: 'Open Sans', sans-serif !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-legend { display: flex !important; justify-content: center !important; flex-wrap: wrap !important; gap: 8px 16px !important; margin: 0 !important; padding: 0 !important; margin-top: 1rem !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-multi-value-legend {display: flex !important;justify-content: center !important;flex-wrap: wrap !important;gap: 12px 24px !important;margin-bottom: 1.5rem !important;padding: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-multi-legend-item { display: flex !important; align-items: center !important; gap: 8px !important; font-size: 14px !important; color: #374151 !important; font-weight: 500 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-benchmark-title {font-size: 18px !important; font-weight: 600 !important; margin-bottom: 16px !important; margin-top: 0 !important; padding: 0 !important;text-align: center !important; color: var(--riv-primary) !important; flex: 1 !important; min-width: 0 !important;font-family: 'Open Sans', sans-serif !important; line-height: 1.3 !important;text-transform: none !important;white-space: normal !important;overflow-wrap: break-word !important;word-wrap: break-word !important;max-width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-bar-row, #fv-chart-1784293750108-vrhlpw5yh .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-label { width: 150px !important; flex-shrink: 0 !important; font-size: 14px !important; color: #374151 !important; padding-right: 10px !important; text-align: right !important; font-weight: 500 !important; display: block !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-container { flex-grow: 1 !important; background-color: #E5E7EB !important; border-radius: 4px !important; min-height: 25px !important; border: 1px solid #D1D5DB !important; position: relative !important; display: flex !important; align-items: center !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-commentary-inline { display: none !important; position: absolute !important; left: 150px !important; top: 0 !important; bottom: 0 !important; right: 0 !important; width: calc(100% - 150px) !important; margin: 0 !important; padding: 0 8px !important; font-size: 13px !important; color: #fff !important; background: rgba(0,0,0,0.8) !important; border-radius: 4px !important; line-height: 1.4 !important; font-weight: normal !important; text-transform: none !important; word-wrap: break-word !important; z-index: 10 !important; align-items: center !important; overflow-y: auto !important; }#fv-chart-1784293750108-vrhlpw5yh.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1784293750108-vrhlpw5yh.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1784293750108-vrhlpw5yh.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar { height: 100% !important; border-radius: 3px !important; display: flex !important; align-items: center !important; transition: opacity 0.2s ease, width 0.8s ease-out !important; min-height: 23px !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-inner-content { display: flex !important; justify-content: space-between !important; align-items: center !important; width: 100% !important; height: 100% !important; padding: 0 8px !important; font-size: 14px !important; font-weight: bold !important; overflow: hidden !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-value-outside { padding-left: 8px !important; font-size: 14px !important; font-weight: bold !important; color: #374151 !important; white-space: nowrap !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-stacked-segment { height: 100% !important; display: flex !important; align-items: center !important; justify-content: flex-end !important; padding-right: 8px !important; border-right: 1px solid rgba(255,255,255,0.3) !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-grouped-product-title { width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.5rem !important; font-weight: 700 !important; font-size: 14px !important; color: #374151 !important; text-transform: none !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1784293750108-vrhlpw5yh .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-ticks { display: flex !important; justify-content: space-between !important; padding-top: 4px !important; font-size: 13px !important; color: #374151 !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-ticks span::before { content: '' !important; position: absolute !important; top: -6px !important; left: 50% !important; transform: translateX(-50%) !important; width: 2px !important; height: 4px !important; background-color: #D1D5DB !important; border-radius: 1px !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-title { text-align: center !important; font-size: 15px !important; color: #374151 !important; margin-top: 8px !important; margin-bottom: 16px !important; line-height: 1.5 !important; padding: 0 1rem !important; display: block !important; font-weight: bold !important; }#fv-chart-1784293750108-vrhlpw5yh .fv-y-axis-title {font-size: 15px !important;color: #374151 !important;line-height: 1.5 !important;text-align: left !important;padding-left: 5.83% !important;margin-bottom: 4px !important;display: block !important;font-weight: bold !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-pie-container,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-row,#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-stacked-product,#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-grouped-bar-product,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-bar-row,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-stacked-product,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-bar-label:not(.fv-grouped-product-title) {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-label,#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-grouped-product-title,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-bar-label,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-grouped-product-title {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-container,#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-cluster,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-bar-container,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus-within {position: static !important; display: block !important; width: 100% !important; margin: 4px 0 0 0 !important; padding: 0 !important; background: transparent !important; color: #6B7280 !important; font-size: 12px !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-x-axis-wrapper,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-x-axis-label-space,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-x-axis-chart-space,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-benchmark-title,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-dropdown-title,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-carousel-nav-btn,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-chart-title,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-chart-subhead,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-versus-header,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-versus-select-wrapper,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-versus-vs,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-versus-select-container,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-versus-select,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-stl-shop-all-btn,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-stl-shop-all-btn {bottom: 0.5rem !important; right: 0.5rem !important; height: 2rem !important; font-size: 0.75rem !important; padding: 0 0.75rem 0 2.5rem !important; max-width: calc(100% - 1rem) !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-stl-shop-all-logo,#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-stl-shop-all-icon,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-bar-commentary-inline,#fv-chart-1784293750108-vrhlpw5yh.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1784293750108-vrhlpw5yh.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1784293750108-vrhlpw5yh .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-bar-row,#fv-chart-1784293750108-vrhlpw5yh .fv-stacked-product,#fv-chart-1784293750108-vrhlpw5yh .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-bar-label:not(.fv-grouped-product-title) {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-bar-label,#fv-chart-1784293750108-vrhlpw5yh .fv-grouped-product-title {width: 100% !important; text-align: left !important; padding-right: 0 !important; margin-bottom: 0.25rem !important; font-size: 14px !important; font-weight: 700 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-bar-container,#fv-chart-1784293750108-vrhlpw5yh .fv-bar-cluster {width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1784293750108-vrhlpw5yh .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1784293750108-vrhlpw5yh .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1784293750108-vrhlpw5yh .fv-bar-row .fv-bar-commentary-inline:focus-within {position: static !important; display: block !important; width: 100% !important; margin: 4px 0 0 0 !important; padding: 0 !important; background: transparent !important; color: #6B7280 !important; font-size: 12px !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-label-space {display: none !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-chart-title {padding: 0 8px !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-stl-shop-all-btn {bottom: 0.5rem !important; right: 0.5rem !important; height: 2rem !important; font-size: 0.75rem !important; padding: 0 0.75rem 0 2.5rem !important; max-width: calc(100% - 1rem) !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-stl-shop-all-logo,#fv-chart-1784293750108-vrhlpw5yh .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1784293750108-vrhlpw5yh .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1784293750108-vrhlpw5yh.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Overall Chart Title","description": "Subhead to describe the test and what's being measured and why","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-07-17T13:09:10.108Z","citation": "Add your caption to explain the data, the learnings and the key takeaways of the data being visualized","keywords": ["Image Comparison","benchmark","comparison","performance","review","TechRadar"],"measurementTechnique": "Performance Benchmarking","variableMeasured": []}Before moppingAfter moppingwindow.iFrameResizer = {heightCalculationMethod: 'taggedElement'};(function() {window.fvAnimateCharts = function(chartWrapper) {if (!chartWrapper) return;function animateBars(chartElement) {if (!chartElement) return;var bars = chartElement.querySelectorAll('.fv-bar, .fv-stacked-segment');bars.forEach(function(bar, index) {bar.style.setProperty('width', '0%', 'important');bar.style.setProperty('transition', 'none', 'important');var targetWidth = bar.dataset.targetWidth;if (targetWidth === undefined) return;void bar.offsetWidth;var targetMargin = bar.dataset.targetMargin;var baseMargin = bar.dataset.baseMargin;if (baseMargin !== undefined) {bar.style.setProperty('margin-left', baseMargin + '%', 'important');}setTimeout(function() {var marginTransition = baseMargin !== undefined ? ', margin-left 0.8s ease-out' : '';bar.style.setProperty('transition', 'opacity 0.2s ease, width 0.8s ease-out' + marginTransition, 'important');bar.style.setProperty('width', targetWidth + '%', 'important');if (targetMargin !== undefined && baseMargin !== undefined) {bar.style.setProperty('margin-left', targetMargin + '%', 'important');}}, index * 50 + 50);});}function animateLineChart(chartElement) {if (!chartElement) return;var lineSvg = chartElement.querySelector('svg');if (!lineSvg) return;var paths = lineSvg.querySelectorAll('.riv-line-path');paths.forEach(function(p, i) {if (typeof p.getTotalLength === 'function') {var len = p.getTotalLength();p.style.transition = 'none';p.style.strokeDasharray = len;p.style.strokeDashoffset = len;p.getBoundingClientRect();setTimeout(function() {p.style.transition = 'stroke-dashoffset 1s ease-out ' + (i * 0.1) + 's, stroke-width 0.2s, opacity 0.2s';p.style.strokeDashoffset = '0';}, 100);}});var dots = lineSvg.querySelectorAll('.riv-dot');dots.forEach(function(dot, i) {dot.style.opacity = '0';setTimeout(function() {dot.style.transition = 'opacity 0.3s ease';dot.style.opacity = '1';}, 500 + i * 10);});}var charts = chartWrapper.querySelectorAll('.fv-chart-item');charts.forEach(function(chart) {if (window.getComputedStyle(chart).display === 'none') return;var chartType = chart.dataset.chartType;if (chartType === 'Line') {animateLineChart(chart);} else if (chartType !== 'Pie') {animateBars(chart);}});};function initialize(uniqueId, isSlideshow) {var root = document.getElementById(uniqueId);if (!root && !isSlideshow) return;function setupWrapper(chartWrapper) {if (!chartWrapper) return;function checkMobileView() {var width = chartWrapper.getBoundingClientRect().width;var isMobileDevice = window.screen && Math.min(window.screen.width, window.screen.height) <= 599;var isMobile;if (width === 0) {isMobile = isMobileDevice || window.matchMedia('(max-width: 599px)').matches;} else {isMobile = isMobileDevice || width < 600;}if (isMobile) {chartWrapper.classList.add('mobile-view');} else {chartWrapper.classList.remove('mobile-view');}}checkMobileView();if (typeof ResizeObserver !== 'undefined') {var ro = new ResizeObserver(function() {checkMobileView();});ro.observe(chartWrapper);}window.addEventListener('resize', checkMobileView);var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true';if (labelsOnTop) {var charts = chartWrapper.querySelectorAll('.fv-chart-item');var hasVisibleBarChart = false;charts.forEach(function(c) {if (window.getComputedStyle(c).display !== 'none') {var cType = c.dataset.chartType;if (cType === 'Bar' || cType === 'Stacked Bar' || cType === 'Versus') {hasVisibleBarChart = true;}}});if (hasVisibleBarChart) {chartWrapper.classList.add('labels-on-top');} else {chartWrapper.classList.remove('labels-on-top');}} else {chartWrapper.classList.remove('labels-on-top');}chartWrapper.querySelectorAll('.riv-line-legend').forEach(function(legend) {var chartId = legend.dataset.chart;var chart = chartWrapper.querySelector('[id="' + chartId + '"]');if (!chart) return;var lines = chart.querySelectorAll('.riv-line-path');var dots = chart.querySelectorAll('.riv-dot');var legendItems = legend.querySelectorAll('.riv-legend-item');legendItems.forEach(function(item) {var productName = item.dataset.product;var safeProductName = productName.replace(/"/g, '\"');var line = chart.querySelector('.riv-line-path[data-product="' + safeProductName + '"]');var productDots = chart.querySelectorAll('.riv-dot[data-product="' + safeProductName + '"]');if (line && !line.dataset.origStroke) {line.dataset.origStroke = line.getAttribute('stroke-width') || '2';}var highlight = function() {if (legend.querySelector('.isolated')) return;lines.forEach(function(l) { l.style.opacity = '0.2'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '0.2'; });legendItems.forEach(function(i) { i.style.opacity = '0.3'; i.style.transition = 'opacity 0.2s'; });if (line) {line.style.opacity = '1';line.setAttribute('stroke-width', '4');}productDots.forEach(function(d) { d.style.opacity = '1'; });item.style.opacity = '1';};var clearHighlight = function() {if (legend.querySelector('.isolated')) return;lines.forEach(function(l) { l.style.opacity = '1'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '1'; });legendItems.forEach(function(i) { i.style.opacity = '1'; });};var toggleIsolate = function() {var isIsolated = item.classList.contains('isolated');legendItems.forEach(function(i) { i.classList.remove('isolated'); });if (isIsolated) {lines.forEach(function(l) { l.style.opacity = '1'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '1'; });legendItems.forEach(function(i) { i.style.opacity = '1'; });} else {item.classList.add('isolated');lines.forEach(function(l) { l.style.opacity = '0.2'; l.setAttribute('stroke-width', l.dataset.origStroke); });dots.forEach(function(d) { d.style.opacity = '0.2'; });legendItems.forEach(function(i) { i.style.opacity = '0.3'; i.style.transition = 'opacity 0.2s'; });if (line) {line.style.opacity = '1';line.setAttribute('stroke-width', '4');}productDots.forEach(function(d) { d.style.opacity = '1'; });item.style.opacity = '1';}};item.addEventListener('mouseenter', highlight);item.addEventListener('focus', highlight);item.addEventListener('mouseleave', clearHighlight);item.addEventListener('blur', clearHighlight);item.addEventListener('click', toggleIsolate);if (line) {line.style.cursor = 'pointer';line.addEventListener('mouseenter', highlight);line.addEventListener('mouseleave', clearHighlight);line.addEventListener('click', toggleIsolate);}});});var versusCharts = chartWrapper.querySelectorAll('.fv-versus-chart');versusCharts.forEach(function(vc) {var dataJson = vc.getAttribute('data-versus-data');var leftColor = vc.getAttribute('data-left-color') || '#E53935';var rightColor = vc.getAttribute('data-right-color') || '#FFB300';if (!dataJson) return;var versusData = JSON.parse(dataJson);var leftSelect = vc.querySelector('.fv-select-left');var rightSelect = vc.querySelector('.fv-select-right');var rows = vc.querySelectorAll('.fv-versus-row');function updateVersusChart() {var leftProduct = leftSelect.value;var rightProduct = rightSelect.value;leftSelect.style.color = leftColor;leftSelect.style.borderColor = leftColor;rightSelect.style.color = rightColor;rightSelect.style.borderColor = rightColor;rows.forEach(function(row) {var index = parseInt(row.getAttribute('data-index'));var data = versusData[index];if (!data) return;var leftVal = data.productData[leftProduct] ? data.productData[leftProduct].value : undefined;var rightVal = data.productData[rightProduct] ? data.productData[rightProduct].value : undefined;var leftIsNum = typeof leftVal === 'number';var rightIsNum = typeof rightVal === 'number';var leftNum = leftIsNum ? leftVal : 0;var rightNum = rightIsNum ? rightVal : 0;var maxVal = Math.max(leftNum, rightNum, 0.0001);var leftWidth = leftIsNum ? (leftNum / maxVal) * 95 : 0;var rightWidth = rightIsNum ? (rightNum / maxVal) * 85 : 0;var winner = null;var pctDiffStr = null;if (leftIsNum && rightIsNum) {if (leftNum > rightNum) {winner = 'left';if (rightNum > 0) {var diff = Math.round(((leftNum - rightNum) / rightNum) * 100);pctDiffStr = '+' + diff.toLocaleString() + '%';}} else if (rightNum > leftNum) {winner = 'right';if (leftNum > 0) {var diff = Math.round(((rightNum - leftNum) / leftNum) * 100);pctDiffStr = '+' + diff.toLocaleString() + '%';}}}var leftDisplay = data.productData[leftProduct] && data.productData[leftProduct].displayValue !== undefined ? data.productData[leftProduct].displayValue : (leftIsNum ? leftNum.toLocaleString() : (leftVal !== undefined ? leftVal : '-'));var rightDisplay = data.productData[rightProduct] && data.productData[rightProduct].displayValue !== undefined ? data.productData[rightProduct].displayValue : (rightIsNum ? rightNum.toLocaleString() : (rightVal !== undefined ? rightVal : '-'));var unit = (data.productData[leftProduct] && data.productData[leftProduct].unit) ||(data.productData[rightProduct] && data.productData[rightProduct].unit) || '';var leftTextStr = leftDisplay;var rightTextStr = rightDisplay;var leftBar = row.querySelector('.fv-versus-bar-left');var rightBar = row.querySelector('.fv-versus-bar-right');var leftText = row.querySelector('.fv-inside-left');var rightText = row.querySelector('.fv-inside-right');var labelText = row.querySelector('.fv-versus-label span');var leftWrapper = row.querySelector('.fv-versus-bar-left-wrapper');var rightWrapper = row.querySelector('.fv-versus-bar-right-wrapper');var existingPctDiffs = row.querySelectorAll('.fv-versus-pct-diff');existingPctDiffs.forEach(function(el) { el.remove(); });if (winner === 'left' && pctDiffStr) {var pctSpan = document.createElement('span');pctSpan.className = 'fv-versus-pct-diff';pctSpan.style.color = 'rgba(255, 255, 255, 0.9)';pctSpan.textContent = pctDiffStr;if (leftBar) leftBar.insertBefore(pctSpan, leftBar.firstChild);} else if (winner === 'right' && pctDiffStr) {var pctSpan = document.createElement('span');pctSpan.className = 'fv-versus-pct-diff';pctSpan.style.color = 'rgba(255, 255, 255, 0.9)';pctSpan.textContent = pctDiffStr;if (rightBar) rightBar.appendChild(pctSpan);}if (leftBar) {leftBar.style.backgroundColor = leftColor;leftBar.dataset.targetWidth = leftWidth;leftBar.style.setProperty('--target-width', leftWidth + '%');leftBar.style.width = leftWidth + '%';}if (rightBar) {rightBar.style.backgroundColor = rightColor;rightBar.dataset.targetWidth = rightWidth;rightBar.style.setProperty('--target-width', rightWidth + '%');rightBar.style.width = rightWidth + '%';}if (leftText) {leftText.innerHTML = leftTextStr;}if (rightText) {rightText.innerHTML = rightTextStr;}if (labelText) {labelText.textContent = data.attribute + (unit ? ' (' + unit + ')' : '');}});}if (leftSelect) leftSelect.addEventListener('change', updateVersusChart);if (rightSelect) rightSelect.addEventListener('change', updateVersusChart);});var barRows = chartWrapper.querySelectorAll('.fv-bar-row');var globalCaptionEl = chartWrapper.querySelector('.rv-chart-caption');var fallbackCaptionHtml = globalCaptionEl ? globalCaptionEl.innerHTML : '';barRows.forEach(function(row) {var commentaryEl = row.querySelector('[data-commentary-key]');if (commentaryEl) {var commentaryText = commentaryEl.textContent;if (commentaryText && commentaryText.trim().length > 0) {row.addEventListener('mouseenter', function() {if (!chartWrapper.classList.contains('mobile-view') && globalCaptionEl) {globalCaptionEl.innerHTML = commentaryText;globalCaptionEl.classList.add('fv-bar-active-caption');}});row.addEventListener('mouseleave', function() {if (!chartWrapper.classList.contains('mobile-view') && globalCaptionEl) {globalCaptionEl.innerHTML = fallbackCaptionHtml;globalCaptionEl.classList.remove('fv-bar-active-caption');}});}}});var charts = chartWrapper.querySelectorAll('.fv-chart-item');var dropdown = chartWrapper.querySelector('.fv-dropdown-title');var prevBtn = chartWrapper.querySelector('.fv-carousel-nav-btn.prev');var nextBtn = chartWrapper.querySelector('.fv-carousel-nav-btn.next');var carouselTitle = chartWrapper.querySelector('.fv-carousel-title-controls .fv-benchmark-title');var counter = chartWrapper.querySelector('.fv-carousel-counter');var subheadEl = chartWrapper.querySelector('.fv-chart-subhead');var captionEl = chartWrapper.querySelector('.rv-chart-caption');var footerContentEl = chartWrapper.querySelector('.fv-footer-content');var bottomBarEl = chartWrapper.querySelector('.fv-bottom-bar');var logoEl = chartWrapper.querySelector('.fv-logo');if (charts.length > 1 && (dropdown || prevBtn)) {var currentChartIndex = 0;var titles = [];if (dropdown) {titles = Array.from(dropdown.options).map(function(o) { return o.text; });} else {charts.forEach(function(c) {titles.push(c.getAttribute('data-title') || '');});}function showInternalChart(index) {if (index < 0) index = charts.length - 1;if (index >= charts.length) index = 0;currentChartIndex = index;charts.forEach(function(c, i) {c.style.display = i === index ? 'block' : 'none';if (i === index) {var cType = c.dataset.chartType;if (cType === 'Line') {} else if (cType !== 'Pie') {window.fvAnimateCharts(chartWrapper);}var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true';if (labelsOnTop && (cType === 'Bar' || cType === 'Stacked Bar' || cType === 'Versus')) {chartWrapper.classList.add('labels-on-top');} else {chartWrapper.classList.remove('labels-on-top');}}});if (dropdown) dropdown.value = index;if (carouselTitle && titles[index]) carouselTitle.textContent = titles[index];if (counter) counter.textContent = (index + 1) + ' of ' + charts.length;var activeChart = charts[index];if (activeChart) {var newSubhead = activeChart.getAttribute('data-subhead');var newCaption = activeChart.getAttribute('data-caption');var currentChartType = activeChart.getAttribute('data-chart-type');var hideGlobalCaption = currentChartType === 'Countdown' || currentChartType === 'Image Comparison' || currentChartType === 'Shop the Collection';if (subheadEl) subheadEl.textContent = newSubhead || '';if (captionEl) {captionEl.textContent = newCaption || '';fallbackCaptionHtml = newCaption || '';}if (footerContentEl) {if (newCaption && newCaption.trim().length > 0 && !hideGlobalCaption) {footerContentEl.style.display = 'block';if (bottomBarEl) bottomBarEl.style.display = 'flex';} else {footerContentEl.style.display = 'none';if (bottomBarEl && !logoEl) {bottomBarEl.style.display = 'none';}}}}}if (dropdown) dropdown.addEventListener('change', function(e) { showInternalChart(parseInt(e.target.value)); });if (prevBtn) prevBtn.addEventListener('click', function() { showInternalChart(currentChartIndex - 1); });if (nextBtn) nextBtn.addEventListener('click', function() { showInternalChart(currentChartIndex + 1); });}var imageCompareWrappers = chartWrapper.querySelectorAll('.fv-image-compare-wrapper');imageCompareWrappers.forEach(function(wrapper) {var inner = wrapper.querySelector('.fv-image-compare-inner') || wrapper;var slider = wrapper.querySelector('.fv-image-compare-slider');var fgImage = wrapper.querySelector('.fv-image-compare-fg');var bgImage = wrapper.querySelector('.fv-image-compare-bg');var labelLeft = wrapper.querySelector('.fv-image-compare-label-left');var labelRight = wrapper.querySelector('.fv-image-compare-label-right');var isDragging = false;var scale = 1;var panX = 0;var panY = 0;var isPanning = false;var hasPanned = false;var lastClientX = 0;var lastClientY = 0;var initialDistance = null;var lastCenterX = null;var lastCenterY = null;function updateTransform() {if (wrapper.classList.contains('fv-image-compare-fullscreen')) {inner.style.setProperty('transform', 'translate(' + panX + 'px, ' + panY + 'px) scale(' + scale + ')', 'important');} else {inner.style.removeProperty('transform');scale = 1;panX = 0;panY = 0;}}function constrainPan() {var rect = wrapper.getBoundingClientRect();var maxPanX = Math.max(0, (rect.width * scale - rect.width) / 2);var maxPanY = Math.max(0, (rect.height * scale - rect.height) / 2);panX = Math.max(-maxPanX, Math.min(panX, maxPanX));panY = Math.max(-maxPanY, Math.min(panY, maxPanY));}wrapper.addEventListener('wheel', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;e.preventDefault();var zoomSensitivity = 0.005;var zoomFactor = Math.exp(-e.deltaY * zoomSensitivity);var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));if (newScale === scale) return;var rect = wrapper.getBoundingClientRect();var mouseX = e.clientX - rect.left - rect.width / 2;var mouseY = e.clientY - rect.top - rect.height / 2;var ratio = newScale / scale;panX = mouseX - (mouseX - panX) * ratio;panY = mouseY - (mouseY - panY) * ratio;scale = newScale;constrainPan();updateTransform();}, { passive: false });wrapper.addEventListener('mousedown', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen') || scale <= 1) return;if (e.target.closest('.fv-image-compare-slider') || e.target.closest('button')) return;isPanning = true;hasPanned = false;lastClientX = e.clientX;lastClientY = e.clientY;});window.addEventListener('mousemove', function(e) {if (!isPanning) return;var dx = e.clientX - lastClientX;var dy = e.clientY - lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.clientX;lastClientY = e.clientY;panX += dx;panY += dy;constrainPan();updateTransform();});window.addEventListener('mouseup', function() {isPanning = false;});wrapper.addEventListener('touchstart', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;if (e.touches.length === 2) {e.preventDefault();var dx = e.touches[0].clientX - e.touches[1].clientX;var dy = e.touches[0].clientY - e.touches[1].clientY;initialDistance = Math.sqrt(dx * dx + dy * dy);var rect = wrapper.getBoundingClientRect();lastCenterX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left - rect.width / 2;lastCenterY = (e.touches[0].clientY + e.touches[1].clientY) / 2 - rect.top - rect.height / 2;hasPanned = true;} else if (e.touches.length === 1 && scale > 1) {if (e.target.closest('.fv-image-compare-slider') || e.target.closest('button')) return;isPanning = true;hasPanned = false;lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;}}, { passive: false });wrapper.addEventListener('touchmove', function(e) {if (!wrapper.classList.contains('fv-image-compare-fullscreen')) return;if (e.touches.length === 2 && initialDistance !== null) {e.preventDefault();var dx = e.touches[0].clientX - e.touches[1].clientX;var dy = e.touches[0].clientY - e.touches[1].clientY;var distance = Math.sqrt(dx * dx + dy * dy);if (initialDistance > 0) {var zoomFactor = distance / initialDistance;var newScale = Math.max(1, Math.min(scale * zoomFactor, 5));var rect = wrapper.getBoundingClientRect();var centerX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left - rect.width / 2;var centerY = (e.touches[0].clientY + e.touches[1].clientY) / 2 - rect.top - rect.height / 2;var ratio = newScale / scale;panX = centerX - (centerX - panX) * ratio;panY = centerY - (centerY - panY) * ratio;if (lastCenterX !== null && lastCenterY !== null) {panX += (centerX - lastCenterX);panY += (centerY - lastCenterY);}scale = newScale;lastCenterX = centerX;lastCenterY = centerY;constrainPan();updateTransform();}initialDistance = distance;} else if (e.touches.length === 1 && isPanning) {e.preventDefault();var dx = e.touches[0].clientX - lastClientX;var dy = e.touches[0].clientY - lastClientY;if (Math.abs(dx) > 2 || Math.abs(dy) > 2) {hasPanned = true;}lastClientX = e.touches[0].clientX;lastClientY = e.touches[0].clientY;panX += dx;panY += dy;constrainPan();updateTransform();}}, { passive: false });wrapper.addEventListener('touchend', function(e) {if (e.touches.length < 2) {initialDistance = null;}if (e.touches.length === 0) {isPanning = false;}});function handleMove(clientX) {var rect = inner.getBoundingClientRect();var x = Math.max(0, Math.min(clientX - rect.left, rect.width));var percent = Math.max(0, Math.min((x / rect.width) * 100, 100));if (slider) slider.style.setProperty('left', percent + '%', 'important');if (fgImage) fgImage.style.setProperty('clip-path', 'polygon(0 0, ' + percent + '% 0, ' + percent + '% 100%, 0 100%)', 'important');if (labelLeft) {if (percent < 10) {labelLeft.style.setProperty('opacity', '0', 'important');} else {labelLeft.style.setProperty('opacity', '1', 'important');}}if (labelRight) {if (percent > 90) {labelRight.style.setProperty('opacity', '0', 'important');} else {labelRight.style.setProperty('opacity', '1', 'important');}}}function onMouseMove(e) {if (!isDragging) return;handleMove(e.clientX);}function onTouchMove(e) {if (!isDragging) return;e.preventDefault();handleMove(e.touches[0].clientX);}function stopDragging() {isDragging = false;window.removeEventListener('mousemove', onMouseMove);window.removeEventListener('mouseup', stopDragging);window.removeEventListener('touchmove', onTouchMove);window.removeEventListener('touchend', stopDragging);}if (slider) {var startDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener('mousemove', onMouseMove);window.addEventListener('mouseup', stopDragging);};var startTouchDrag = function(clientX) {isDragging = true;handleMove(clientX);window.addEventListener('touchmove', onTouchMove, { passive: false });window.addEventListener('touchend', stopDragging);};slider.addEventListener('mousedown', function(e) {e.preventDefault();startDrag(e.clientX);});slider.addEventListener('touchstart', function(e) {e.preventDefault();startTouchDrag(e.touches[0].clientX);}, { passive: false });}var expandBtn = wrapper.querySelector('.fv-image-compare-expand-btn');var closeBtn = wrapper.querySelector('.fv-image-compare-close-btn');if (expandBtn) {if (window !== window.parent) {expandBtn.style.display = 'none';} else {expandBtn.addEventListener('click', function(e) {e.stopPropagation();wrapper.classList.add('fv-image-compare-fullscreen');document.body.style.overflow = 'hidden';if (fgImage && fgImage.dataset.highresSrc) {fgImage.src = fgImage.dataset.highresSrc;fgImage.removeAttribute('srcset');fgImage.removeAttribute('sizes');}if (bgImage && bgImage.dataset.highresSrc) {bgImage.src = bgImage.dataset.highresSrc;bgImage.removeAttribute('srcset');bgImage.removeAttribute('sizes');}});}}if (closeBtn) {closeBtn.addEventListener('click', function(e) {e.stopPropagation();wrapper.classList.remove('fv-image-compare-fullscreen');document.body.style.overflow = '';updateTransform();});}document.addEventListener('keydown', function(e) {if (e.key === 'Escape' && wrapper.classList.contains('fv-image-compare-fullscreen')) {wrapper.classList.remove('fv-image-compare-fullscreen');document.body.style.overflow = '';updateTransform();}});});var hotspots = chartWrapper.querySelectorAll('.fv-stl-hotspot-btn');var allProductsModal = chartWrapper.querySelector('.fv-stl-all-products-modal');var shopAllBtn = chartWrapper.querySelector('.fv-stl-shop-all-btn');var allProductsList = chartWrapper.querySelector('.fv-stl-all-products-list');var stlContainer = chartWrapper.querySelector('.fv-stl-container');function closeAllModals() {if (allProductsModal) {allProductsModal.classList.remove('is-active');var items = allProductsModal.querySelectorAll('.fv-stl-all-products-item');items.forEach(function(item) {item.classList.remove('is-highlighted');});if (stlContainer) {setTimeout(function() {if (!allProductsModal.classList.contains('is-active')) {stlContainer.style.minHeight = '';if ('parentIFrame' in window) {window.parentIFrame.size();}}}, 300);}}hotspots.forEach(function(btn) { btn.setAttribute('aria-expanded', 'false'); });if ('parentIFrame' in window) {window.parentIFrame.size();}}hotspots.forEach(function(btn) {btn.addEventListener('click', function(e) {e.stopPropagation();var hotspotId = btn.getAttribute('data-hotspot-id');var isExpanded = btn.getAttribute('aria-expanded') === 'true';closeAllModals();if (!isExpanded && allProductsModal) {btn.setAttribute('aria-expanded', 'true');allProductsModal.classList.add('is-active');var container = btn.closest('.fv-stl-container');if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}var targetItem = allProductsModal.querySelector('.fv-stl-all-products-item[data-product-id="' + hotspotId + '"]');if (targetItem) {targetItem.classList.add('is-highlighted');setTimeout(function() {targetItem.scrollIntoView({ behavior: 'smooth', block: 'center' });}, 100);}if ('parentIFrame' in window) {window.parentIFrame.size();}}});});if (shopAllBtn && allProductsModal) {shopAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();allProductsModal.classList.add('is-active');var container = shopAllBtn.closest('.fv-stl-container');if (container && container.offsetHeight < 450) {container.style.minHeight = '450px';}if ('parentIFrame' in window) {window.parentIFrame.size();}});}if (allProductsModal) {var closeAllBtn = allProductsModal.querySelector('.fv-stl-all-products-close');if (closeAllBtn) {closeAllBtn.addEventListener('click', function(e) {e.stopPropagation();closeAllModals();});}}chartWrapper.addEventListener('click', function(e) {if (!e.target.closest('.fv-stl-all-products-content')) {closeAllModals();}});if (allProductsModal) {allProductsModal.addEventListener('click', function(e) {if (!e.target.closest('.fv-stl-all-products-content')) {closeAllModals();}});}var iaNodes = chartWrapper.querySelectorAll('.fv-ia-node-button');var iaWrapper = chartWrapper.querySelector('.fv-ia-wrapper');var originalCaption = chartWrapper.querySelector('.fv-original-caption') || captionEl;var dynamicCaption = chartWrapper.querySelector('.fv-ia-dynamic-caption');var exploreBtn = chartWrapper.querySelector('.fv-ia-explore-btn');var currentIaIndex = -1;function closeAllIANodes() {iaNodes.forEach(function(btn) { btn.classList.remove('is-active'); });if (originalCaption) originalCaption.style.display = 'block';if (dynamicCaption) dynamicCaption.style.display = 'none';}function resetExploreBtn() {currentIaIndex = -1;if (exploreBtn) {var exploreSpan = exploreBtn.querySelector('span');if (exploreSpan) exploreSpan.textContent = 'Explore';}}iaNodes.forEach(function(btn, index) {btn.addEventListener('click', function(e) {e.stopPropagation();var isActive = btn.classList.contains('is-active');closeAllIANodes();if (!isActive) {currentIaIndex = index;if (exploreBtn) {var exploreSpan = exploreBtn.querySelector('span');if (exploreSpan) exploreSpan.textContent = 'Next';}btn.classList.add('is-active');if (dynamicCaption) {var title = btn.getAttribute('data-title') || '';var desc = btn.getAttribute('data-desc') || '';dynamicCaption.innerHTML = '';var strongTag = document.createElement('strong');strongTag.textContent = title;dynamicCaption.appendChild(strongTag);if (desc) {dynamicCaption.appendChild(document.createTextNode(' - ' + desc));}if (originalCaption) originalCaption.style.display = 'none';dynamicCaption.style.display = 'block';if (footerContentEl) footerContentEl.style.display = 'block';}} else {resetExploreBtn();}});});if (exploreBtn) {exploreBtn.addEventListener('click', function(e) {e.stopPropagation();if (iaNodes.length === 0) return;var nextIndex = currentIaIndex + 1;if (nextIndex >= iaNodes.length) {closeAllIANodes();resetExploreBtn();} else {currentIaIndex = nextIndex;var targetBtn = iaNodes[currentIaIndex];if (targetBtn) {if(targetBtn.classList.contains('is-active')) {targetBtn.click();}targetBtn.click();}}});}if (iaWrapper) {iaWrapper.addEventListener('click', function(e) {if (!e.target.closest('.fv-ia-node-button') && !e.target.closest('.fv-ia-explore-btn')) {closeAllIANodes();resetExploreBtn();}});}window.fvAnimateCharts(chartWrapper);var countdownContainer = chartWrapper.querySelector('.fv-countdown-container');if (countdownContainer) {var targetDateAttr = countdownContainer.getAttribute('data-target-date');if (targetDateAttr) {var targetDate = new Date(targetDateAttr);var primaryColor = countdownContainer.getAttribute('data-primary-color') || '#f97316';var subheadColor = countdownContainer.getAttribute('data-subhead-color') || '#ffffff';var pad = function(n) { return (n < 10 ? '0' : '') + n; };var updateCountdown = function() {var difference = +targetDate - +new Date();var d = 0, h = 0, m = 0, s = 0;if (difference > 0) {d = Math.floor(difference / (1000 * 60 * 60 * 24));h = Math.floor((difference / (1000 * 60 * 60)) % 24);m = Math.floor((difference / 1000 / 60) % 60);s = Math.floor((difference / 1000) % 60);}var daysEl = countdownContainer.querySelector('[data-time="days"]');var hoursEl = countdownContainer.querySelector('[data-time="hours"]');var minsEl = countdownContainer.querySelector('[data-time="minutes"]');var secsEl = countdownContainer.querySelector('[data-time="seconds"]');if (daysEl) daysEl.textContent = d;if (hoursEl) hoursEl.textContent = pad(h);if (minsEl) minsEl.textContent = pad(m);if (secsEl) secsEl.textContent = pad(s);};updateCountdown();setInterval(updateCountdown, 1000);}}}if (false) {var slideshowContainer = document.getElementById(uniqueId + '-slideshow');if (slideshowContainer) {var slides = slideshowContainer.querySelectorAll('.fv-slide');slides.forEach(function(slide) {setupWrapper(slide.querySelector('.fv-chart-wrapper'));});}} else {setupWrapper(root);}}if (document.readyState === 'loading') {document.addEventListener('DOMContentLoaded', function() { initialize('fv-chart-1784293750108-vrhlpw5yh', false); });} else {initialize('fv-chart-1784293750108-vrhlpw5yh', false);}})();

Meanwhile, the S2’s obstacle avoidance saw it drive neatly around a shoe, a sock and a USB cable strewn across the floor. I was impressed by how close it got to each, with moving or ingesting anything.

Overall, the Eufy Omni S2 performed brilliantly. I would recommend using Standard intensity and Standard suction with two passes most of the time, then up the suction to Turbo or Cyclone for a deeper clean. The latter hitting just 70 decibels was also impressive — for context, my Dyson V10 stick vacuum is 90 dB at medium power.

FutureFutureFuture

I only encountered one serious problem with the S2, and unfortunately it led to a replacement unit being provided by Eufy. The first S2 performed perfectly for a month, but developed a fault where the robot and docking station lost their connection. Several reboots and lots of advice from customer services failed to find a solution, so a second S2 was delivered and the original went back to Eufy for an inspection.

Naturally, this is disappointing for such an expensive product. But I was impressed by Eufy’s customer service department — which I approached as a customer and not a journalist — and how quickly the problem was resolved. The second unit performed perfectly throughout the rest of my test.

  • Performance score: 4.5/5
Eufy Omni S2: app
  • Easy to use
  • Lots of configurability
  • Also handles Eufy security products
  • Option to charge at night — great if you have an EV tariff

The Eufy app gets better with every revision, and today it’s one of the best robovac apps I’ve ever used. Everything is logically laid out, with just the right amount of adjustability on offer to keep both newcomers and power users happy. The app is quick, responsive and presents everything in a way that’s easy to understand.

I especially like how it adds virtual furniture to your floor maps, which makes it easier to understand the layout and visualize where the robot is. Editing floor plans also works well, with simple tools for splitting, combining and renaming rooms after the robot has created an initial (but not always accurate) map of your home. Multiple floormaps can also be created, making it easy to save a second map for your bedrooms upstairs, for example.

FutureFuture

Another feature I like is how pre-defined tasks can be created. I have one called “After dinner”, which tells the S2 to vacuum and mop my kitchen a certain way. A single tap of this from the Eufy app home screen, and the robot gets to work.

Since getting a puppy I’ve come to value Eufy’s child lock function, which disables the buttons on top of the robot – handy for both inquisitive children and dogs alike. I also like the off-peak charging function, where you can configure the S2 to only charge its battery at certain times of day. Since I have an electric car and an EV tariff, I’ve set the robovac to only charge at night, when my electricity is much cheaper.

  • App score: 4.5/5
Should you buy the Eufy Omni S2?Eufy Omni S2 score card

Attribute

Notes

Score

Value

The Eufy Omni S2 really is very expensive indeed. It isn’t the most expensive robovac of all time, but it’s right up there. And while its lofty price makes alternatives look like excellent value, the S2 doesn’t necessarily feel like a rip-off. It’s a high-quality appliance that performs brilliantly and looks good too.

3.5/5

Design

Eufy knocked it out of the park with the S2’s design. It’s aesthetically pleasing, has a smaller footprint than some rivals, and the robot slips beneath most furniture. It also drives over raised rugs and thresholds better than before and keeps itself incredibly clean. All I wish is for a way to prevent the waste water tank from getting quite so pungent — frequent empties are a must!

5/5

Performance

The Omni S2 is much better at vacuuming than the S1 was, while being just as good at mopping and navigation. All of these attributes are now top-notch, while the onboard fragrance system is a lovely extra touch and the improved ability to clamber over raised thresholds is very welcome

4.5/5

App

Eufy’s app is great. Its robovac section is simpler to navigate than the slightly cluttered security section, with an excellent mapping system, handy shortcuts for frequently used cleaning chores, and some little features that are massively useful — like off-peak charging and the child/pet lock.

5/5

Buy it if

You want the best, regardless of price

Yes, it’s very expensive. But if you want the best this might well be it. Everything about the Omni S2 contributes to a premium ownership experience, from the app and the hardware, to the fragrance, cleaning performance and self-cleaning.

Mopping and vacuuming are equally important

Many robovacs are better at one task than the other — Eufy’s own Omni S1 mopped far better than it vacuumed — but with the S2 excellent mopping is paired with powerful vacuuming.

Self-cleaning is a must

The S2’s self-cleaning abilities are the best I’ve seen. Even after weeks of use in a busy home with a puppy, the robot’s dust bin, brushes, rollers and mop are like new. My only advice is to empty the waste water tank frequently, since older dirty water really does stink when poured away.

Don't buy it if

You're on a budget

There are a lot of very good robovacs that cost significantly less than the Omni S2. They don’t perform quite as well, but if you value vacuuming oliver mopping, for example, your money could be better spent (and saved!) elsewhere. If you have a lot of stairs, consider spending the same on a robovac and a conventional stick vacuum instead of splurging it all on the S2.

You don't want ongoing costs

This is a factor for all robovacs, since they mostly use dust bags and their brushes and rollers eventually need replacing. But the S2’s running costs are greater than most because Eufy sells its own mopping detergent in a specially-shaped bottle, and you’ll have to buy fragrance refills from Eufy too. Eufy’s official replacement parts kit is £80, three fragrance refills are £25 and the detergent is £20.

How I tested the Eufy Omni S2

I lived with the Eufy Omni S2 for several weeks before writing this review. During that time it was used exclusively to vacuum the carpets and mop the floors of my house. I tested its cleaning abilities, tried some of the included fragrance diffusers, and noted how its self-cleaning systems fared after many hours of use.

I then carried out a number of specific tests to understand how well it cleans different types of debris from carpet and hard floors, how effective its mopping system is, how good it is at avoiding obstacles, and how loud it is.

First reviewed July 2026

Categories: Technology

Ukraine confirms it will produce 10 million drones in 2026, rising to 20 million, as it signs a massive $1.1 billion 'drone deal' with the EU

Sun, 07/19/2026 - 06:05
  • Ukraine plans millions of drones annually after dramatic production growth claims
  • European $1.1 billion funding strengthens Kyiv’s push for expanded drone manufacturing capacity
  • Ukraine’s battlefield experience accelerates demand for larger drone production

Ukraine says its drone manufacturing capacity has expanded to 10 million units annually, with plans already underway to double production to 20 million.

President Volodymyr Zelensky confirmed the report, claiming that Ukraine has already surpassed its earlier objective of producing one million drones annually, despite widespread skepticism.

"I remember when I first publicly announced the state's plan: 1 million drones per year," Zelensky said. "There was a lot of skepticism everywhere — both inside and outside... We make 10 million drones a year. Ten, and it will be 20."

Production ambitions expand alongside European support

Zelensky said achieving this next production milestone would depend upon continued cooperation with international partners supporting Ukraine's expanding defense manufacturing sector.

The announcement coincided with a new defense cooperation arrangement between Ukraine and the European Union valued at $1.1 billion, placing drone production at the center of Kyiv's long-term military planning.

European Commission President Ursula von der Leyen also confirmed the new defense-industrial arrangement known as the Drone Deal

The agreement builds upon earlier efforts already underway between Ukraine and its European partners in the defense sector.

Ukraine's National Security and Defense Council Secretary Rustem Umerov said six separate agreements have already been completed under the Drone Deal framework.

He also claims that more than 20 countries are working toward joining the same cooperation model, potentially expanding financial backing and industrial participation beyond current European partners.

Drone warfare drives industrial expansion

Ukraine's growing production goals follow extensive battlefield reliance on unmanned systems throughout the conflict, where drones have increasingly supported surveillance, reconnaissance, and precision strike operations.

Defense Minister Mykhailo Fedorov said Ukrainian forces struck more than 800,000 verified Russian targets during 2026 using drones alone.

Those targets included personnel, artillery, air defense systems, multiple-launch rocket systems, headquarters, transport assets, depots, electronic warfare equipment, and ground robotic systems.

Fedorov also stated those operations contributed to about 167,000 Russian troops being killed or seriously wounded during the same period.

However, such battlefield figures remain difficult to verify independently during active conflict.

Beyond immediate military requirements, Ukrainian officials have repeatedly described much broader ambitions for domestic manufacturing.

They argue that the country could eventually become the world's largest producer of drones and robotic systems.

Ukraine’s drone production output could exceed that of China, Russia, and the United States put together, surpassing 30 million units annually within several years.

Whether Ukraine achieves these production goals will depend on financing, manufacturing capacity, component access, and continued international support.

However, recent announcements suggest Ukrainian officials believe drone output has already surpassed expectations set only a few years ago.

Via Interfax (originally in Ukrainian)

Categories: Technology

'People are choosing to be a walking Flock camera': the smart glasses backlash hits new heights as celebrities blast 'creep goggles' — and activists install fake Meta Glasses ads at London bus stops

Sun, 07/19/2026 - 06:00

Tech companies large and small — including the likes of Meta, Samsung, and Google (and perhaps even Apple) — are betting that smart glasses become one of the leading device form factors of the future. But this week it became clear that they're facing an increasingly strong backlash against the technology.

There's one problem in particular: cameras. These tiny, embedded recording devices make it easier to record your kids' cute mishaps, your latest mountain bike ride, and a first-person view of anything without needing to get your phone out, but they also enable a certain level of surreptitious photo and video capturing that isn't possible with a phone.

And there's no doubt that bad actors are using these smart glasses for unwholesome purposes: some glasses owners have been paying modders to disable the warning light that should appear whenever recording is actively happening.

We're now at the stage where smart glasses owners are worried about wearing them in public, such is the growing negativity around them. Here's what we've learned in the last few days, and what might happen next.

An inevitable 'collapse into surveillance tech'

Smart glasses with cameras are nothing new of course, but stories around these devices being modded to operate without recording lights (something Meta has now moved to block), as well as reports that future Meta Ray-Bans could be recording all the time, seems to have prompted a new wave of anti-smart glasses sentiment.

Even the celebrities are weighing in: pop icon Lorde was less than complimentary about smart specs on stage recently, leaving her audience in no doubt about her feelings about the tech, while rapper and producer Tyler, the Creator has declared that "anyone who uses these glasses is a real weirdo".

lorde saying fuck meta glasses in a festival that was sponsored by rayban meta AI glasses how can you not love her pic.twitter.com/HWsHZHP9AEJuly 10, 2026

Some of the rich and famous are still on board — you can actually buy Kylie Jenner-branded Meta Glasses, if you want — but most of the online reaction is critical of the technology. A quick peek at Reddit reveals comments like "all internet and computer tech seems to inevitably collapse into surveillance tech" and "people are choosing to be a walking Flock camera" (if you don't get the reference, read this).

Users are referencing Black Mirror and calling for the technology to be banned outright, and using terms like "creep goggles" to describe the devices. While a ban is unlikely at this point, there are some legal changes happening: Illinois looks set to be the first US state to ban smart glasses while driving, not because of any sneaky recording capabilities, but because they might prove to be a distraction to drivers.

Over in South Korea, meanwhile, a man is facing criminal charges after admitting to using smart glasses to cheat on a test. The camera captures the questions, on-board AI figures out what the answers are, and the person sitting the exam writes down the answers. There's more than one way to misuse the camera technology.

However, lawmakers don't yet seem convinced that these AI-powered glasses represent a privacy threat. Regulators in the European Union have reportedly bowed to US pressure in deciding that wearables were exempt from having to include removable batteries, like some other gadget types are when sold in the EU.

What happens next?

While there are some limited efforts to curb the use of smart glasses then, at this stage they're small scale and localized. To try and nudge things along, activists in London have been busy putting up fake Meta Glasses ads on bus stops (below), making a point about surveillance. One of the ads uses an optical illusion to turn the face of Kylie Jenner into a creepy skeleton, with the tagline "we're always watching".

Recording everything we see and do constantly? It’s giving fascism, not fashion It’s just been revealed Meta is planning to make the glasses “continuously record audio while taking photos every few seconds” without any warning light*Literally NO ONE asked for this#noncegoggles*Source: the FT

— @everyonehateselon.bsky.social (@everyonehateselon.bsky.social.bsky.social) 2026-07-17T18:40:05.934Z

Cast your mind back to 2012 when Google Glass launched, and you'll remember that we've been debating these issues for years. There are clearly benefits to wearable specs that can give you hands-free directions, translations, and information without you having to take your phone out, but it seems the concerns over covert surveillance are outweighing the positives in the public's mind.

Remember Google Glass? (Image credit: Future)

Given the growing influence of AI tech and how well-suited these wearables are to taking in and processing information, it doesn't seem likely that the tech will be restricted any time soon. For several years now we've been seeing demos of smart glasses that can see and understand the world around them, and those capabilities are on the way whether we like it or not.

If, as rumored, Apple does make its own version of smart glasses, it's going to be interesting to see how this famously privacy-focused company deals with the issues of surveillance. A recording light that cannot be switched off is a good start, but as we've already mentioned, existing users are already cautious of wearing their smart specs around other people.

Glasses from Samsung and Google are on the way (Image credit: Google )

Later this year we're going to see more smart glasses from Google and Samsung, with Gemini AI ready and waiting to tell you everything you need to know about what you're looking at — which of course requires a camera. As per Google, the company is aware that people won't wear these specs if the privacy concerns are too great, and its solution is mostly to make sure the recording light is noticeable and cannot be tampered with.

"If people don't feel comfortable wearing these glasses, and privacy is part of this, they just won't wear the glasses," Google's Juston Payne told Tom's Guide this week. "It’s as simple as that." The new Google and Samsung wearables are scheduled to arrive later this year, but the companies involved still have a way to go when it comes to shifting user opinion.

Categories: Technology

The TCL NXTPAPER 70 Pro proved to me that budget smartphones can still be great — but I won't be ditching my aging Samsung just yet

Sun, 07/19/2026 - 05:00
Two-minute review

The TCL NXTPAPER 70 Pro is an affordable smartphone at $379.99 / £269 for the 256GB device. The US market also gets a cheaper 128GB model.

Its design is sleek and attractive, giving the air of a phone that costs a far more. The biggest selling point is the NXTPAPER 70 Pro's large 6.9in screen with epaper-like NXTPAPER 4.0 display technology.

The tech gives the screen a matte finish that minimises reflections and glare, and makes the TCL NXTPAPER 70 Pro extremely comfortable to read and work on. It features a variety of options for reducing eye-strain, and you can turn on various display modes with just a quick flick of a switch. These include Color Paper mode, which is perfect for reading digital comics, and Ink Paper mode, a black-and-white paper-like setting that’s great for ebooks and text-heavy websites.

(Image credit: Future)

As an avid reader of both books and comics, I was a huge fan of the TCL NXTPAPER 70 Pro's screen — but there are a few compromises which meant it wasn't a device I'd be happy to switch to full-time. Performance is fine, but multitasking with lots of different apps open at once isn’t as smooth as it is on devices with more RAM (the TCL NXTPAPER 70 Pro comes with 8GB, although that can be expanded later). In addition, taking photos at the main camera's maximum 50MP resolution introduces a slight pause as the phone processes your images.

Speaking of the camera, it does a decent job of taking high-resolution shots by default, but the digital zoom quickly displays its limits when you try zooming in too much. For day-to-day shots, though, it's fine; but anyone wanting to be more ambitious with their photography should look elsewhere.

(Image credit: Future)

TCL has made quite a big deal of the TCL NXTPAPER 70 Pro's AI features, and while it’s good to see the tech included in a budget device, I didn’t have much cause to use features such as live transcription, or AI-assisted note-taking. However, I can imagine they'll be useful for some, especially for accessibility — and on a positive note, they're not obnoxiously pushed onto you like they can be by other brands.

Overall, the TCL NXTPAPER 70 Pro is a stylish and dependable budget smartphone that offers plenty for the price, but its performance compromises can niggle. Nevertheless, its NXTPAPER 4.0 screen really is a standout feature, so for voracious readers, it could be their dream phone.

Meanwhile, I’m looking forward to seeing NXTPAPER 4.0 come to more powerful phones from TCL.

TCL NXTPAPER 70 Pro review: Price & release date
  • Starts at $379.99 / £269 for 256GB model
  • US also gets cheaper 128GB model
  • Available in Europe, North America, butnot officially in Australia

It might be because I’ve become used to the ever-increasing price of flagship phones from the likes of Apple and Samsung, but when I was told the price of the TCL NXTPAPER 70 Pro, I was genuinely impressed. For a smartphone with the word "Pro" in its name, a price of less than $400 is pleasing.

In the US and UK, the TCL NXTPAPER 70 Pro model with 256GB storage costs $379.99 / £269, which is a fair bit less than our current best cheap phone pick – the Samsung Galaxy A56 at $499 / £499. It actually undercuts pretty much all of the phones in that list, including the Poco X8 Pro Max, which starts at $469 / £469.

While a rock-bottom price isn’t the only measure of a good budget, in these financially uncertain times it’s certainly a major selling poin. If the TCL NXTPAPER 70 Pro can also match this with stellar performance, we could see a new budget champion.

In the UK, you can pick up the TCL NXTPAPER 70 Pro with a protective slipcase and stylus from Amazon for £369.98.

And for US customers, there's an even cheaper 128GB option that sells for $329.99. People in other markets might be disappointed to learn this isn't an option in their territory, but personally, I wouldn’t recommend opting for less than 256GB storage these days, especially if you take a lot of photos. Having said that, the TCL NXTPAPER 70 Pro supports microSD cards, so you can expand the storage up to 2TB.

Currently, if you’re in the US and buy the TCL NXTPAPER 70 Pro from TCL’s official store, you also get a free pair of TCL CrystalClip earbuds worth $95.99, making this already great-value handset even better value for money.

Storage

US Price

UK Price

256GB

$379.99

£269

512GB

$429.99

£319

  • Value score: 4.5/5
TCL NXTPAPER 70 Pro review: Specs

Dimensions:

169.4 x 80.05 x 7.98mm

Weight:

208g

Internal screen

6.9-inch NXTPAPER 4.0 display

Resolution:

1080 x 2340

Refresh rate:

120Hz

Peak brightness:

900 nits

CPU:

MediaTek Dimensity 7300

RAM:

8GB

Storage:

128GB / 256GB / 512GB

OS:

Android 16

Main cameras:

50MP 1.0UM OIS+8MP main

Selfie camera:

32MP

Battery:

5,200mAh

Charging:

33W

Colors:

Stellar Blue, Nebula Gold

(Image credit: Future)TCL NXTPAPER 70 Pro review: Design
  • Stylish and minimalist
  • Extra switch for changing display mode
  • Screen is a highlight

Design-wise, the TCL NXTPAPER 70 Pro certainly doesn’t feel budget. Available in two colors, Stellar Blue (the model I was sent) and Nebula Gold, the large 6.9-inch screen, thin bezels and modern design give the TCL NXTPAPER 70 Pro the appearance of a much more expensive phone at first glance.

The thin bezels keep the focus where it belongs: on the display. That's no bad thing, thanks to TCL's innovative NXTPAPER 4.0 technology, which gives the screen a matte, e-reader-like finish (more on that shortly). They also help prevent the TCL NXTPAPER 70 Pro from feeling even larger than it is — but make no mistake, this is a big phone, and it will stick out of plenty of pockets.

On the bottom of the TCL NXTPAPER 70 Pro is a USB-C port for charging, as well as a slot for your SIM card and SD card for expanding storage. On the right-hand side of the phone are the standard volume rocker, a power button with built-in fingerprint reader, and a unique NXTPAPER key. The latter is actually a physical switch, similar to the one found on older iPhones, to put the device into "Do not disturb" mode. Here, though, the NXTPAPER key switches been display modes: Color Paper mode, Ink Paper mode and Max Ink mode.

(Image credit: Future)

You can choose the mode each time, or set a default mode to turn on instantly when you flick the switch. A ripple transition effect plays as the screen switches to the mode you’ve chosen – I quite like it, but if you switch mode regularly, I can see how the animation might get a bit annoying.

I’ll go into each mode in a moment, but the default setting’s matte effect and vibrant colors makes the TCL NXTPAPER 70 Pro stand out from rivals, especially those that sell for a similar price — and the default wallpaper, which is a painting of flowers, looks fantastic.

(Image credit: Future)

Overall, the TCL NXTPAPER 70 Pro's design — aside from its standout display — isn't revolutionary, but it doesn’t need to be. It's a well-built, attractive phone that looks and feels more premium than its affordable price suggests.

  • Design score: 4.5/5
TCL NXTPAPER 70 Pro review: Performance and Display
  • Display is great for reading on
  • Can also play videos and games
  • Overall performance is solid, if unremarkable

The TCL NXTPAPER 70 Pro’s design does a decent job of making you forget that this is a budget phone, then — but the specs don’t do such a good job. Don’t get me wrong: it works fine, but when you're coming from a flagship handset — even one that’s now a few years old — it's a bit of a wake-up call to keep your expectations in check.

Android 16 runs smoothly, and even when using the various screen modes, the phone is responsive, with no annoying full-screen refreshes of the type that happen with some ebook readers. The display's matte finish keeps images looking crisp, even at extreme viewing angles, with vibrant colors and no distracting reflections.

Turning the screen to Color Paper mode mutes the colors and drops the background wallpaper. It makes the TCL NXTPAPER 70 Pro more comfortable to use in low-light conditions, and preserves battery life, too.

(Image credit: Future)

It works particularly well when reading comics (I tried it with Marvel Unlimited), as well as browsing the internet at night. The muted colors, paper-like display and lack of blue light mean a quick doomscroll before bed won't disrupt your sleep too much (although it doesn’t do anything for my general anxiety about the state of the world).

Impressively, the screen remains responsive, although rapidly scrolling through long passages of text causes the text to shift in colour slightly as it moves. You can watch videos, too, but you’ll want to switch back to normal mode for the best picture quality.

There’s also Ink Paper mode, which reduces colors to just black and white, removes the background wallpaper, and simplifies icons. This more basic mode is great for reading ebooks and websites; the interface is clean, easy to read, and free from distractions. It helps prolong battery life as well, yet still feels responsive.

Finally, there’s Max Ink mode, which limits the apps that can be run, futher extending battery life (with just 21% of battery life, the TCL NXTPAPER 70 Pro claimed to have around 46 hours left).

(Image credit: Future)

The screen really is a treat, and if you don’t mind the impact on image quality, switching between modes is a great way to boost the battery life if you’re away from a power supply. I found reading websites particularly comfortable in Ink Paper mode — although for image- and video-heavy websites, you’ll probably want to switch to a color mode.

Color Paper mode is also excellent for reading digital comics. As an X-Men fan, I found the TCL NXTPAPER 70 Pro’s large paper-like display ideal for reading on Marvel Unlimited and Kindle. The matte finish dramatically reduces glare, and. unlike some early color e-readers I’ve tested, both apps remain as fast and responsive as they do on other smartphones.

So, Color Paper mode is great for those who wish to get through their large digital comic libraries while on long trips. Personally, I prefer reading the comics in the default display mode, as colors are more vibrant.

The TCL NXTPAPER 70 Pro overall performance is solid, and about what you’d expect for the price. I didn’t have any issues using any of my regular daily driver apps, and the games I tested ran perfectly fine as well — although, if you’re looking for a smartphone on which to mainly play games, you might want to look for a device with a standard display and more graphical power.

Powering the TCL NXTPAPER 70 Pro is a MediaTek Dimensity 7300, an octa-core processor with four performance and four efficiency cores. It can't match Qualcomm’s latest Snapdragon chips, but at this price it's hard to fault, delivering smooth everyday performance. The 8GB of RAM comfortably handles multitasking, although it doesn't feel quite as snappy as more expensive handsets with more memory. TCL does let you allocate up to 16GB of virtual RAM from the phone's storage, increasing the total to a very healthy 24GB, and proving a little more headroom for the future.

(Image credit: Future)

The phone features two SIM card slots, and supports eSIM, and network speeds up to 5G. However, the TCL NXTPAPER 70 Pro only supports Wi-Fi 5, which is now quite outdated. It meant I couldn't take full advantage of my home router’s Wi-Fi 7 connectivity, and this led to a noticeable reduction in speed when using Wi-Fi.

To be fair to the TCL NXTPAPER 70 Pro, this was the only time its budget roots really showed.

The screen is definitely a standout feature for anyone who spends a lot of time reading on their phone. However, if you spend more time watching movies or playing games, a device with a more traditional display will be a better choice.

  • Performance score: 3.5/5
TCL NXTPAPER 70 Pro review: Camera
  • 50MP main camera
  • 32MP selfie camera
  • Good detail at high resolutions
FutureFutureFutureFutureFutureFutureFutureFutureFutureFutureFutureFutureFutureFuture

The TCL NXTPAPER 70 Pro features a 50MP rear camera with OIS (Optical Image Stabilization) and a 32MP front-facing camera. It also uses TCL’s own MuseFilm imaging technology, which the manufacturer says combines hardware and software enhancements to deliver more visually impressive photos.

I didn’t really notice much difference when comparing photos taken on similar phones. Having said that, images taken with the 50MP camera are bright, vibrant and full of detail.

While zooming in reveals some loss of sharpness, photos look impressive at full resolution, with even busy scenes retaining plenty of detail. If you’ve previously dismissed budget smartphones because of their lack of photo-taking prowess, then the TCL NXTPAPER 70 Pro proves that affordable handsets can deliver.

However, note that taking photos at the full 50MP resolution (which at the default 4:3 aspect ratio leads to image resolutions of 8192 × 6144) does put pressure on the TCL NXTPAPER 70 Pro’s hardware: there's a slight pause between pressing the shutter button and image capture (a message pops up asking you to hold the phone still while the image is being processed). It’s another reminder about the TCL NXTPAPER 70 Pro’s budget price, and while it didn’t appear to make any of the photos I took with moving subjects blurry, if you want to take a series of fast images, you’ll need to lower the resolution — or buy a more powerful phone.

Reducing the resolution speeds up the whole process, and when images are viewed on the phone’s screen they still look sharp. Viewing them on a larger screen, or printing them out, makes the reduced resolution more noticeable, though.

FutureFuture

When shooting below the full 50MP resolution, the TCL offers up to 2x optical zoom and 10x digital zoom. However, pushing the digital zoom too far reveals the limitations of the hardware, with considerable loss in detail and the addition of image artefacts.

You can also switch to the ultra-wide lens, which produces some nice results, although it does occasionally introduce distortion around the edges. There’s also a macro setting for taking close-up shots, and while the results are fine, they lack detail.

(Image credit: Future)

For best results, then, you’ll want to stick to the standard settings without zooming in.

(Image credit: Future)

The front-facing camera captures good-quality selfies with plenty of detail, and there are plenty of settings to experiment with, including the often questionable "beauty" modes found on many smartphones.

Overall, photography isn't the TCL NXTPAPER 70 Pro's main strength, so it isn't for you if camera performance is a priority. However, for day-to-day snaps, it does the job.

  • Camera score: 3/5
TCL NXTPAPER 70 Pro review: Battery life
  • 5200mAh capacity
  • 33W fast charging
  • Over 10 hours of continuous video playback

The TCL NXTPAPER 70 Pro doesn’t have the largest battery, nor does it charge as quickly as other budget rivals, with its fast charging capped at 33W (the Xiaomi Redmi Note 15 Pro 5G can charge at 45W). Still, it powered up to 56% (from empty) after just 30 minutes.

During tests, the TCL NXTPAPER 70 Pro lasted well over a day of standard use with a single charge, and in our benchmark tests, it hit 10 hours and 55 minutes of continuous video playback. Turning on the Max Ink mode boosted battery life in the same tests by around 50 minutes.

Considering the limitations of Max Ink mode, I was expecting a bigger difference in battery life, but that could be a testament to how efficient the default screen mode is at prolonging battery life.

As with other phones around this price point, there’s no wireless charging support, which was a blow coming from a handset that has the ability to charge over wireless. If you’re not bothered about the tech, this won’t be an issue, but for people like myself who have wireless charging accessories (including in my car), it does limit the appeal of the TCL NXTPAPER 70 Pro.

  • Battery life: 3.5/5
Should I buy the TCL NXTPAPER 70 Pro?TCL NXTPAPER 70 Pro Scorecard

Attribute

Notes

Score

Value

Starting at $379.99 / £269 for 256GB model, this is a great-value smartphone — although compromises have been made to keep the price low.

4.5/5

Design

A smart, minimalist design makes the TCL NXTPAPER 70 Pro look more expensive than it is. The matte display is easily the highlight.

4.5/5

Performance

The TCL NXTPAPER 70 Pro offers solid performance for its price, but keep your expectations in check — this is a budget phone, after all. Reading on the TCL NXTPAPER 70 Pro’s unique screen is an absolute joy, however.

3.5/5

Battery life

The TCL NXTPAPER 70 Pro's battery life is good, and with careful use you could get two days of use on a single charge. The slower charge speed and lack of wireless charging is disappointing, however; but considering the price, it's understandable.

3.5/5

Buy it if…

You read a lot on your phone
The TCL NXTPAPER 70 Pro's screen is ideal for reading, with its paper-like display making it comfortable to read everything from ebooks and digital comics, to websites and apps.View Deal

You don’t want to spend a lot of money
Starting at just $379.99 / £269 for the 256GB model, the TCL NXTPAPER 70 Pro is a great alternative for people who don’t want to shell out the high prices for flagship smartphones.View Deal

You only take the odd photo
The 50MP camera offers a decent amount of detail and vibrancy for day-to-day snaps, but if photography is a passion, then you won’t be that impressed by the TCL NXTPAPER 70 Pro's camera performance .View Deal

Don’t buy it if…

You want a phone for mainly watching films and playing games on
The TCL NXTPAPER 70 Pro paper-like screen is fine for watching films, TV shows and playing games, but for the best image quality you’ll want a more traditional smartphone.View Deal

Photography is important to you
The camera on the TCL NXTPAPER 70 Pro is fine for basic snaps, but will quickly show its limitations to those who are more ambitious with their photography.View Deal

You like the convenience of wireless charging
The TCL NXTPAPER 70 Pro doesn't support wireless charging, and it was very much missed during the testing period. If you have wireless chargers dotted around your home (and vehicle), then you’ll want to pay a bit more for a phone that can make use of them.View Deal

Also consider

Xiaomi Redmi Note 15 Pro 5G
This is another budget phone for around the same price, with a bright display and surprisingly impressive cameras. If you want a cheap phone for watching films, the more traditional (yet still bright and vibrant) screen of the Xiaomi Redmi Note 15 Pro 5G is better suited.

Read our full Xiaomi Redmi Note 15 Pro 5G reviewView Deal

Google Pixel 10a
Starting at $499 / £499 / AU$849, the Google Pixel 10a is slightly more expensive than the TCL NXTPAPER 70 Pro, but you get longer battery life and better photo quality, so if those are two important priorities for you, then it’s worth the extra investment. As a Pixel handset from Google, Android comes with very little extra bloat, which is another strong selling point.

Read our full Google Pixel 10a reviewView Deal

(Image credit: Future)How I tested the TCL NXTPAPER 70 Pro
  • Used it on and off for around a month
  • Used the various display modes to read ebooks and digital comics

Due to a busy few months, I’ve been using the TCL NXTPAPER 70 Pro on and off as my main phone during the time I’ve had it. This is longer than our usual testing process, and meant I got a good idea of overall performance of the handset.

I used the TCL NXTPAPER 70 Pro not just to make calls and browse the internet, but also loaded several ebooks to read using the handset’s variety of screen modes. I also read digital comics via the Android versions of the Marvel Unlimited and Kindle apps. I also took photos and watched videos.

Categories: Technology

Chinese company BrainCo unveils first 'brain-to-robot' interface for controlling robots with your thoughts

Sun, 07/19/2026 - 04:30
  • A new 'brain-to-robot' interface has been unveiled in China
  • It uses non-invasive EEG technology
  • The system will supply much-needed real-world AI training data

We're seeing brain-computer interfaces (BCI) continue to get more advanced and more practical, and Chinese company BrainCo has now announced another first: a BCI that enables robots to be controlled by thoughts.

As reported by the South China Morning Post, BrainCo says the system works through EEG (electroencephalogram) headsets worn by human operators, which translate neural activity into instructions for robots to follow.

Like other similar 'mind reading' devices, it's based on vast amounts of training data that associate specific neuron activity with specific commands as they're imagined in the brain. AI algorithms then manage the job of finding the right action for the right thought.

It's called the Brain-Controlled Robot AI Platform, and it was unveiled at the World Artificial Intelligence Conference (WAIC) in Shanghai —the biggest and most important AI tech event on the calendar in China.

Think it into reality

You might soon not even need to talk to a robot to get it working (Image credit: Shutterstock)

BrainCo says that as well as being used to control robots, the system can also act as an interface to connect to robotic arms and other devices. A robotic arm could be instructed to pick up a cup through thoughts alone, for example.

As the Brain-Controlled Robot AI Platform becomes more widely used, it will also be collecting data — data that can then be applied to refine the underlying algorithms further. High-quality training data is currently one of the major bottlenecks in the industry.

"The embodied AI industry has made remarkable progress on what robots can do on their own," said Nyx He, a partner and senior vice-president at BrainCo. "We believe the next decisive frontier is about how robots understand the humans they work with."

With AI models continuing to get smarter and more sophisticated, this is going to feed into the 'physical AI' of robotics — giving these machines greater flexibility, more dexterity, and as we've seen here, thought-controlled inputs.

Categories: Technology

Apple is putting up prices on Apple Music and Apple One, and says 'rising licensing costs' are to blame — here's how much you'll pay now

Sat, 07/18/2026 - 09:30
  • Prices are going up across almost all the Apple Music tiers
  • There are some bumps in Apple Music prices too
  • These are the first price hikes we've seen since October 2022

Apple Music is the latest subscription package to get a bump in price, leaving users with the choice between paying more or losing access to the streaming part of their library. The bundled Apple One package that includes Apple Music now costs more as well.

As reported by Music Business Worldwide (via Engadget), the reason cited by Apple is "rising licensing costs". It's the first price hike for this particular subscription we've seen since October 2022. The new monthly prices are below:

New Apple Music prices

US

UK

Australia

Individual

$11.99 (up $1)

£11.99 (up £1)

AU$14.99 (up AU$2)

Family

$19.99 (up $3)

£19.99 (up £3)

AU$23.99 (up AU$4)

Student

$6.99 (up $1)

£5.99 (unchanged)

AU$7.99 (up $1)

The Apple One price increases are less clear, as they're not as easily available on the Apple website. It appears the Apple One Family plan is now $27.95 (up $2) / AU$24.95 (unchanged) per month and the Apple One Premier plan is now $39.95 (also up $2) / AU$52.95 (up AU$3), though the Apple One Individual plan has stayed at $19.95 / AU$24.95. Internationally, similar price rises are likely.

This comes at a time when everything tech-related is getting more expensive, from laptops to streaming services. Exploding AI resource demand has sent the price of memory and storage rocketing, and that continues to have a knock-on effect everywhere.

Loss of controlApple raises prices for Apple Music and Apple One subscriptions from r/apple

Apple is of course by no means the first company to put up its subscription prices, but it's a reminder of the pitfalls of the digital rental model. As soon as you stop paying, you lose access — so if you need a service, you have no choice but to accept the higher price.

The online reaction has mostly focused on this too: "It's not even about the cost sometimes," writes one Redditor. "It's about loss of control over your finances. Companies can jack up their prices whenever they want." Few commenters seem ready to quit Apple Music, though many are pointing out the billions that Apple has in the bank.

Apple Music doesn't have a free tier like Spotify does, but it beats every other music streaming service in the support it gives you for local files. If you have enough MP3s and ripped CDs, you can use it perfectly well without a subscription.

As we've written about recently, Apple is selling more and more of its software products through recurring payments rather than a flat one-off fee, and one of the reasons is that it's more profitable — and makes it more likely that users will continue to pay up.

Categories: Technology

ICYMI: the 7 biggest tech stories of the week, from the world's techiest e-bike to Apple vs OpenAI drama

Sat, 07/18/2026 - 08:48

Every week here at TechRadar we publish a whole host of technology stories — it would be a seriously impressive feat if you managed to keep up with all of them, what with everything else happening going on (was there a World Cup?).

The aim of this ICYMI (In Case You Missed It) round-up is to help you quickly catch up on the biggest stories and the most important headlines in tech. These are the articles that mattered most over the past seven days.

We've got news on Apple, OpenAI, OnePlus, Volkswagen, and Microsoft, as well as a behind-the-scenes look at Samsung and an important GoPro review. But before we dive in, see how much of last week's ICYMI news round-up you remember first by taking the quiz below.

7. Volkswagen revealed the world's techiest e-bike

The new eBikes being used (Image credit: Volkswagen/n+)

Volkswagen has a brand new electric bicycle to show off: the new Smart eBike range has been developed in partnership with n+, and goes big on the tech and the safety features. You'll find radar-assisted traffic monitoring here, as well as a high-definition rear view camera, so while you're pedaling (or not) you'll have a better idea of what's around you.

There's an expanded safety ecosystem too, with an optional smart helmet for syncing turn signals and making them more visible, and a pair of smart glasses that are perhaps the most cutting edge part of the whole package. You can use the smart specs to get journey information and navigation instructions put in front of your eyes when they're needed.

6. We reviewed GoPro’s premium action cam

The GoPro Mission 1 (Image credit: Future / Hamish Hector)

GoPro is being a little bit more ambitious with its new Mission 1 Pro, a flagship action camera that builds on the classic form factor while adding some premium extras. Our Senior Staff Writer Hamish Hector has been giving the camera a thorough TechRadar test, and came away impressed with just about everything the Mission 1 Pro has to offer.

Special praise was given to the high-resolution video recording, the choice of recording modes, and the tweaked design choices that make the Mission 1 Pro different to its predecessors. Click through to see what the premium camera is capable of in terms of photo and video performance, and to find out whether it's the right upgrade for you.

5. We went inside Samsung Display’s secret labs

We enjoyed our factory tour (Image credit: Future)

Samsung phones and tablets are known for the quality of their screens, so of course we jumped at the chance when we were invited to take a behind-the-scenes tour of a Samsung Display factory. This is where current displays are made and tested, and where next-gen models are tested (though sadly we didn't get to see the Galaxy Z Fold 8).

From advanced stress tests to upcoming displays with optical illusions built in, there was a lot to look at on the tour, reading through our write-up is the next best thing to actually getting access yourself. Of course, we also had to ask Samsung Display representatives about the rumored iPhone Fold, but they didn't seem too worried by the competition...

4. The iOS 27 public beta landed with the new Siri

The public beta of iOS 27 is here (Image credit: Apple)

The upcoming iOS 27 software update gives iPhone owners a lot to look forward to, not least the new and improved Siri AI app (or Siri 2.0, effectively). This week the public beta dropped, which means that anyone who wants to can try out the new features early — assuming they don't mind putting up with a few bugs or random crashes along the way.

Whether you're a veteran at running betas or thinking about dipping your toe in for the first time, our guide will explain how to download and install iOS 27 on your phone. We've also highlighted three of the new features you should test out first, including the improved photo editing tools that use a bit of AI magic to make your pictures look better than ever.

3. Windows 11 got a major update

There are upgrades for Windows 11 users to look forward to (Image credit: Surface/Unsplash)

There have been some missteps along the way, but generally speaking Microsoft is on something of a roll when it comes to improving Windows 11 this year. The latest July update continues that trend, and if you're a user of the desktop operating system then you should be happy: there are some smart new features, and some important bug fixes.

One of the stand-out upgrades this time is a feature we've been waiting a while for: a proper pause function for Windows 11 updates, so if you don't want to install the latest patches right away, you don't feel like you're being pestered to get them applied as soon as possible. We've got details on how the feature works, plus what else is new this time.

2. A bombshell Apple vs OpenAI lawsuit landed

It's Tim Cook vs Sam Altman (Image credit: Lance Ulanoff)

It's fair to say Apple and OpenAI aren't on as good terms as they used to be, what with staff being poached and confidential information being stolen... allegedly. Apple has now filed a lawsuit against OpenAI, claiming that the ChatGPT developer has pinched trade secrets through ex-Apple employees — and the case could have serious long-term repercussions.

Depending on what the courts and judges decide, this could impact OpenAI's nascent plans to launch hardware devices, as well as having an influence on how Apple develops its software — remember that ChatGPT is still embedded in Siri, at the time of writing. We're likely to hear much more about this astonishing case in the months to come.

1. OnePlus officially quit the US and Europe

The OnePlus 15 (Image credit: Future)

OnePlus has finally run out of road — in the US and Europe at least. Parent company Oppo has decided the brand will withdraw from those markets, which means a large part of the world will be missing out on some great handsets. In recent years, some of our favorite phones have come from OnePlus, but availability will be much more limited from now on.

If you already own a OnePlus device in the US or Europe, then you'll continue to get support and software updates, but there won't be any new phone launches. "It wasn't a decision made in a rush," explained Oppo's Shuang Chen in a briefing. "Being a responsible brand means knowing when to go all in and when to make a choice."

Categories: Technology

Ukraine reveals secret strike squadron of civilian planes transformed into deadly reusable drone bombers that can drop 100Kg bombs 1200 miles deep inside Russia

Sat, 07/18/2026 - 08:10
  • Ukraine unveils reusable Horynych bomber drones built from civilian aircraft
  • Secret drone squadron expands Ukraine's long-range strike capability significantly
  • Modified ultralight aircraft now carry full-sized aerial bombs into combat

Ukraine has publicly revealed what appears to be a previously undisclosed squadron of Horynych reusable bomber drones converted from civilian light aircraft for long-range strike operations.

Official images show at least ten modified aircraft carrying Soviet-designed OFAB-100-120 aerial bombs, suggesting the program has expanded beyond isolated experimental missions.

The aircraft are based on SkyRanger Swift and Nynja ultralight airframes originally developed for civilian recreational flying before undergoing military conversion.

Civilian aircraft converted into reusable bomber drones

Engineers replaced conventional cockpit controls with remote piloting equipment and electro-optical cameras, allowing operators to guide the aircraft from the ground throughout bombing missions.

Each aircraft appears to carry one OFAB-100-120 bomb weighing approximately 100kg beneath the fuselage during long-range operations.

Unlike one-way attack drones that are destroyed after striking their objectives, these aircraft are designed to return safely for repeated missions after releasing their payloads.

The appearance of at least ten drones together indicates the capability may have developed into a larger operational force rather than remaining a limited experimental effort.

The absence of leaves on nearby trees suggests the images may have been taken several months before their public release.

If that assessment proves accurate, Ukraine may have maintained this reusable bomber fleet for an extended period before officially revealing its existence.

Reported strike focused attention on expanding deep attack capability

According to Serhii Sternenko, adviser to Ukraine's Defense Minister, the aircraft participated in an overnight strike against an underground Russian logistics facility near Armyansk in occupied Crimea.

Armyansk lies close to the Perekop Isthmus, an important land corridor linking occupied Crimea with Russian-controlled territory and supporting military supply movements across the region.

These underground facilities serve as hardened storage and distribution sites for fuel, ammunition, and military equipment supporting Russian military operations.

The strike was reportedly carried out jointly by Ukraine's Air Force, the Lazar Group, and the Venom Unmanned Systems Center.

Neither Ukraine's military nor its Ministry of Defense has officially confirmed the number of aircraft involved or the extent of damage.

Independent assessments of the reported attack have not yet been published, leaving several key operational details unverified by outside observers.

Ukraine has previously used modified civilian aircraft in long-range strikes, including a June 2025 attack using an A-22 Foxbat towing an unpowered glider.

That glider carried a 100-kilogram warhead and struck a Shahed drone production facility in Alabuga, marking an earlier tandem strike configuration.

Ukraine has also used converted SkyRanger aircraft since 2024, although earlier sightings typically involved individual aircraft rather than a larger operational group.

Whether this expanded Horynych fleet can sustain repeated missions deep inside Russian territory remains unverified without independent confirmation of results.

Ukrainian officials have offered no additional public timeline for when the broader Horynych program might expand its operations further significantly.

There is also no information on the size of the fleet or the extent of damage that it can cause.

Categories: Technology

Marvel's X-Men movie: cast rumors and everything we know so far about MCU's new mutant-starring comic book film

Sat, 07/18/2026 - 08:00
Marvel's X-Men movie: what we know

- In development at Marvel Studios
- Expected to be MCU 2.0's first film
- Release date yet to be announced
- Could come out some time in 2028
- No trailer or wider footage available
- Plenty of cast rumors circulating online
- Story synopsis yet to be publicly unveiled
- Nothing to report on possible sequels

The mutants are coming. Indeed, with Marvel hard at work on developing another X-Men movie — one that will officially introduce a new version of the superteam to the Marvel Cinematic Universe (MCU) — it won't be long before they return to the big screen. Well, providing you don't consider its potential 2028 launch to be a lengthy wait...

But I digress. With San Diego Comic-Con (SDCC) 2026 almost upon us, and speculation that some sort of X-Men announcement will be made at the fan expo, interest over the next live-action X-Men film couldn't be higher. Read on to discover everything we know so far about the movie that's likely to usher in version 2.0 of the MCU.

X-Men movie release date: what we know

Kevin Feige confirms that Jake Schreier's 'X-MEN' movie comes out after 'AVENGERS: SECRET WARS'"I can't wait for all of you to see 'Avengers: Doomsday', we have a movie after that called 'Avengers: Secret Wars', and after that the mutants are coming and the X-Men are coming and… pic.twitter.com/pw9u54BEEBJuly 11, 2026

Marvel is yet to confirm a release date for its X-Men movie. It's still in the early stages of development, after all, so unless a surprise announcement comes at SDCC 2026, it will be some time before we know more.

That said, this film is high on Marvel's list of priorities. Speaking in late 2024, company president Kevin Feige said that MCU's future will be all about the X-Men after the Multiverse Saga comes to an end with next year's Avengers: Secret Wars.

More recently, Feige hinted (see the X/Twitter post above) that the new X-Men movie will be the first film to arrive after the sixth Avengers installment. With that movie due out in December 2027, we shouldn't expect MCU's first mutant-led project until some time in 2028.

Marvel's X-Men movie trailer: is there one?

Cyclops didn't take this trailer news very well... (Image credit: Marvel Studios)

Unsurprisingly, no. In fact, assuming Marvel returns to Hall H panel at SDCC 2028, I'd be amazed if we get any official footage before then.

Once a teaser is released, I'll update this section – but you'll be waiting a long time for one!

Marvel's X-Men cast rumors

Sadie Sink (left) is believed to have been cast as a popular X-Men character in the MCU (Image credit: Netflix)

Possible spoilers follow for Marvel's X-Men movie.

Predictably, nobody has been confirmed to appear in Marvel's X-Men movie yet. However, plenty of rumors have surfaced – and continue to circulate – about who's involved, so let's take a look at some of the biggest ones.

For starters, one report that did the rounds in July 2025 suggested that Marvel was eyeing rising stars over established names for its X-Men reboot. The reason? The Disney subsidiary wants to make movies for less — and that means it isn't looking to pay over the odds for A-listers.

And yet, the vast majority of actors who have been linked with roles in Marvel's mutant-led flick are what I'd consider to be household names.

One such star is Stranger Things alumnus Sadie Sink. After being cast as a mystery character in Spider-Man: Brand New Day, the long-running rumor is that Sink will play Jean Grey. If that's true — and there's now plenty of evidence to suggest it is — we'll almost certainly see her in this film.

Adam Driver is circling Marvel's X-Men movie, according to numerous insiders (Image credit: Gareth Cattermole/Getty Images)

Who else could pop up? Last May, the rumour mill was buzzing with reports about other potential X-Men cast members, including speculation that Bryan Cranston would play Charles Xavier/Professor X, Cynthia Erivo would portray Ororo Munroe/Storm, and recent retiree Daniel Day-Lewis had held talks to take on the role of Erik Lehnsherr/Magneto.

However, other actors have since been linked with two of those roles. In mid-July, Adam Driver was said to have been cast as Magneto, while Patrick Wilson is supposedly in the frame as Professor X (per knightedgemedia). For what it's worth, reliable industry insider Apocalyptic Horseman said that the latter might not be true.

Inde Navarrette, the breakout movie star of 2026, has also been linked with this MCU flick (Image credit: Focus Features/Universal Pictures)

Elsewhere, Obsession star Inde Navarrette revealed that she'd recently met with new X-Men director Jake Schreier — prompting fans to cast her in a variety of mutant roles. Meanwhile, after unreliable leaker Jeff Sneider claimed that Avatar star Trinity Jo-Li Bliss had been tapped to play Jubilee, Bliss herself denied the report (via The Direct).

Lastly, Lee Sung Jin, one of this film's co-writers, told Collider that he's a huge fan of Remy LeBeau/Gambit. Don't be surprised, then, if we see a new iteration of the Ragin' Cajun as part of this movie's ensemble.

Marvel's X-Men movie plot rumors

Marvel's new X-Men film will be wildly different to what's come before, according to its creative team (Image credit: 20th Century Fox)

You already know what I'm going to say here, don't you? Surprise, surprise, Marvel's X-Men reboot doesn't have a story synopsis yet.

Thanks to Schreier and Jin, though, we've been given a glimpse into their creative process for the film, including the key inspiration behind the story they want to tell.

Schreier (via Collider) and Jin (via Men's Health) admitted that the literature penned by legendary scribe Chris Claremont, who's best known for working on the Uncanny X-Men comic book series for 16 years between 1975 and 1991, will be a major influence on their X-Men reboot. Jin also revealed (via The Watch podcast) that beloved Saturday morning cartoon X-Men: The Animated Series is also informing the narrative structure by way of its character-first and soap opera-esque elements.

Chatting to Deadline, Jin also explained that Feige wants him, co-writer Joanna Calo, and Schreier to " take a big swing and start anew, [and] not be beholden to any of the movies that have come before".

Expect an entirely new take — in a live-action sense, anyway — of the iconic Stan Lee and Jack Kirby-created supergroup when their next movie lands in theaters.

Where can I watch the X-Men movies?

Disney+ is home to every single live-action X-Men film and the group's two animated show (Image credit: 20th Century Fox)

You can watch every live-action X-Men movie on Disney+, aka one of the world's best streaming services. Disney's primary streamer has been home to these flicks since the House of Mouse bought 20th Century Fox in March 2019. You can even find out how to watch the X-Men movies in order with our help while you're here.

Additionally, X-Men: The Animated Series and its sequel show X-Men 97 are also available to watch on Disney+. Not a subscriber? Find out if a Disney+ free trial is available or the price of Disney+ in your area if you want to sign up.

What does the future hold for the X-Men in the MCU?

New seasons of MCU-adjacent program X-Men 97 will soon be released annually (Image credit: Marvel Television/Disney Plus)

In short: we have no idea. Marvel still has to get this movie off the ground, and as Schreier explained during an interview with Collider, it needs to be a major success if the franchise is to continue into Marvel Phase 7 and beyond.

If it succeeds, the X-Men could become one of the cornerstones of the MCU's next era. But if it doesn't? Frankly, that's a scenario that doesn't bear thinking about. The X-Men are one of the most popular superhero teams of all time, so if they can't help support Marvel's cinematic juggernaut in a post-Multiverse Saga world, who can?

While we wait for some much-needed news on Marvel's X-Men movie, find out what we know about Spider-Man: Brand New Day. Then, get the full lowdown on Avengers: Doomsday and learn everything we know so far about Avengers: Secret Wars.

Categories: Technology

Best speed camera detectors for UK drivers in 2026: dedicated GPS devices that help you stay on the right side of the law

Sat, 07/18/2026 - 06:00

Modern cars are becoming increasingly good at reminding drivers about speed limits, upcoming safety cameras and potential hazards. So much so, driving is now soundtracked by a cacophony of irritating bleeps and bloops.

But unless you've bought something new in the past few years, there's a good chance your car is missing many of these features altogether.

Even if it isn't, many factory-fitted systems are far from perfect. Speed camera databases aren't always comprehensive, speed limit recognition can be caught out by temporary signs, while built-in alerts often arrive too late or are buried beneath layers of infotainment menus.

That's where dedicated speed camera detectors come in. These discreet dashboard companions warn of fixed cameras, average-speed zones, changing speed limits and road hazards without requiring you to constantly glance at a navigation or smartphone screen.

(Image credit: Future/Leon Poultney)

Unlike apps such as Google Maps or Waze, most of these gadgets are designed to fade into the background. Once paired with your phone, they quietly monitor your journey, without the need to plumb a destination into the navigation, only piping up when there's something worth knowing about.

Some even integrate with Apple CarPlay and Android Auto, playing alerts through your car's speakers while leaving your preferred navigation app to handle directions.

It is worth noting that the tested and models (below) are available to purchase and are perfectly fine to use in the UK and much of Europe, but aren't widely available in the US and other regions. These are five of the best dedicated speed camera detectors we'd recommend.

You might also like to check out our best dash cams guide, which is packed with buying advice, FAQs and lists the top models available in all regions today, with links to the best deals. These on board cameras can record journeys and provide you with the assurance and legal evidence needed should you get into any incidents, plus act as a security camera for parked vehicles.

1. Ooono Co-Driver NO2

(Image credit: Future/Leon Poultney)
  • Price: £69.99 / $95 / AU$143
  • Rating: 5/5

Design

The Ooono Co-Driver NO2 sets the benchmark for one simple reason: it makes almost every rival feel unnecessarily complicated.

Designed in Denmark, the compact puck-shaped device looks more like a premium smart home accessory than a piece of automotive hardware. A subtle aluminum outer ring, bright wraparound LED indicator and minimalist styling mean it blends neatly into almost any dashboard without drawing attention to itself.

Its mounting system remains one of the smartest available. Rather than relying on a large adhesive pad, Ooono supplies two tiny magnetic mounting points with discreet 3M backing. Once installed, the device simply snaps into place magnetically and can be removed in seconds for charging or swapping between vehicles. An optional sun-visor mount also allows it to be positioned completely out of sight while remaining within easy reach.

Unlike the original Co-Driver, the second generation features a rechargeable battery that lasts around a month between charges and tops up via USB-C, eliminating the need for disposable batteries or permanent power cables.

(Image credit: Future/Leon Poultney)

The Ooono Co-Driver NO2 sets the benchmark for one simple reason: it makes almost every rival feel unnecessarily complicated

Setup

Getting started takes a few minutes. Download the free Ooono app, pair the device over Bluetooth and grant the necessary permissions. Once configured, it automatically wakes whenever it detects your smartphone nearby, meaning there's very little to think about before setting off.

The latest generation also adds native compatibility with both Apple CarPlay and Android Auto, allowing alerts to play directly through the vehicle's audio system while your preferred navigation app continues handling directions. It feels like a small upgrade but makes a noticeable difference during longer journeys, especially if you prefer keeping your phone tucked away.

Perhaps best of all, there are no subscriptions or premium membership tiers to worry about. Once you've bought the hardware, everything else is included. Bonus.

(Image credit: Future/Leon Poultney)

Performance

Fixed speed camera alerts arrive with plenty of notice, accompanied by bright LED flashes and clear audible warnings that are difficult to miss without becoming too irritating. Optional speed limit notifications can also be enabled, providing a gentle reminder whenever you creep above the posted limit.

Now, these can get annoying, but there’s plenty of adjustability and personalization within the accompanying smartphone app, so you can get blend just right.

Reporting hazards is also dead easy. A couple of button presses allows drivers to report mobile speed cameras, accidents or broken-down vehicles, while a dedicated cancel button quickly dismisses false alerts. The controls become second nature after only a few journeys and, crucially, never require you to look away from the road.

The only area where Ooono still trails the biggest smartphone navigation apps is community reporting. While its network continues to grow rapidly across the UK, services such as Waze can still provide more comprehensive reports for temporary hazards and mobile enforcement in some regions.

That said, Ooono's verified speed camera database is very good and rarely got things wrong during testing. Plus, its combination of stylish design, thoughtful ergonomics and genuinely useful alerts makes it the easiest dedicated speed camera detector to recommend.

2. Tom by TomTom

(Image credit: Future/Leon Poultney)
  • Price: £69.99 / $95 / AU$143
  • Rating: 4/5

Design

If the Ooono is the minimalist Scandinavian option, the awkwardly-named Tom by TomTom is the slightly more extrovert cousin.

Build quality is decent, although the plastics don't feel quite as premium as the Ooono's aluminum-trimmed shell

The overall concept is basically the same: a small dashboard-mounted unit with LED alerts and physical buttons for reporting incidents. The TomTom device is a little larger and uses a full adhesive ring mount rather than Ooono's tiny magnetic points, which makes it feel more permanent once installed. There is no visor-mount option either, so it is clearly intended to live on the dashboard full-time.

The upside is visibility. The bright LEDs are among the easiest to spot while driving, particularly in strong sunlight, and the rechargeable battery lasts roughly a month between charges, meaning there is no need for a permanent power cable snaking across the cabin.

Build quality is decent, although the plastics don't feel quite as premium as the Ooono's aluminum-trimmed shell. Plus, there are fewer limited edition finishes like Ooono offers.

(Image credit: Future/Leon Poultney)

Setup

TomTom deserves credit for making the onboarding process almost foolproof. Again, it’s all handled through an app, where users create a free account, pair the device over Bluetooth and you're essentially ready to go. There are no subscription tiers, no payment details to enter and very little opportunity for things to go wrong.

The device automatically reconnects when you get in the car and, because it relies on your phone's data connection, camera and hazard information stays up to date without requiring manual downloads.

(Image credit: Future/Leon Poultney)

Performance

In daily use, the Tom by TomTom runs the Ooono devices surprisingly close. Fixed camera alerts are timely and accurate, average-speed zones are handled well and the visual warnings strike a good balance between noticeable and distracting.

The device also warns when you exceed the limit, using a combination of color changes and audible alerts that are difficult to ignore without becoming overbearing.

Reporting incidents is straightforward, with single and long presses assigned to different hazard types, although the button layout isn't quite as intuitive as Ooono's oversized top-mounted control. Finding the correct button by touch occasionally requires a little more finger fumbling than ideal.

TomTom's greatest strength remains its mapping and traffic data expertise. The camera database proved consistently accurate during testing, and the overall experience felt polished, reliable and refreshingly low-maintenance.

For many drivers, it will come down to a simple question: whether you prefer TomTom's brighter, LEDs or Ooono's more discreet industrial design and slick Apple CarPlay or Android Auto integration.

3. Road Angel Pure Sync

(Image credit: Future/Leon Poultney)
  • Price: £99.99 / $135 / AU$205
  • Rating: 3.5/5

Design

The Road Angel Pure Sync takes a very different approach from the puck-shaped devices above.

Instead of disappearing into the dashboard, it places a small color display front and center, showing GPS speed, speed limits and camera warnings at all times. The magnetic mount is neatly integrated with the USB-C power connection, helping to keep cable routing tidier than many older dashboard gadgets.

Unfortunately, the device still requires constant power, so there is always a cable to manage somewhere in the cabin. Build quality is also less convincing than the price suggests, with a noticeably plasticky shell and a screen that can become difficult to read in direct sunlight depending on where it is mounted.

(Image credit: Future/Leon Poultney)

Camera warnings arrive with plenty of notice, while the speed limit system is impossible to miss

Setup

This is, by far and away, the weakest link in the Road Angel's armor. Despite the included 12-month subscription, registration still requires payment details, which feels unnecessarily complicated when rivals simply ask you to download an app and pair a device.

Bluetooth pairing also proved temperamental during setup, requiring several attempts before the phone and hardware consistently connected. Once configured, however, the system generally behaved itself and reconnects automatically when you start the car.

(Image credit: Future/Leon Poultney)

Performance

Camera warnings arrive with plenty of notice, while the speed limit system is impossible to miss: the screen flashes red and the device emits a loud voice warning whenever you drift above the posted limit. In fact, the default volume is so aggressive that most drivers will probably dive into the settings menu and turn it down after the first journey.

The live GPS speed display is genuinely useful in older vehicles with optimistic analogue speedometers, although it feels less essential in modern cars that already provide accurate digital speed readouts.

Hazard reporting works well once you've memorized the controls, with incidents submitted to the Road Angel community for verification before being distributed to other users. As with all cloud-connected systems, coverage still depends on local user numbers, and Waze, Ooono and the TomTom device all remain stronger for temporary hazards in some parts of the UK.

The Pure Sync ultimately feels like a halfway house between a traditional sat-nav camera alert unit and the newer minimalist Bluetooth devices. If you value a permanent speed display and don't mind the subscription model, it remains a capable option. If simplicity is the priority, the Ooono and TomTom solutions are easier to live with.

4. Ooono Co-Driver NO1

(Image credit: Future/Leon Poultney)
  • Price: £19.99 / $27 / AU$41
  • Rating: 4/5

Design

The original Ooono Co-Driver remains available and, placed beside the newer NO2, it is immediately obvious how much the design has evolved.

The first-generation unit is noticeably smaller and arguably even more discreet, blending into the dashboard almost completely once installed. However, it uses a fixed adhesive mount rather than the newer magnetic system, making it less convenient to remove or transfer between vehicles.

It also relies on a coin-cell battery rather than a rechargeable pack, although Ooono claims around a year of battery life before replacement is needed.

(Image credit: Future/Leon Poultney)

Setup

As before, setup is very simple and anyone can have it up and running in a matter of minutes. The device pairs with the Ooono app over Bluetooth and then quietly runs in the background using the phone's data connection and GPS. There are no subscription fees and no complicated menus to navigate.

(Image credit: Future/Leon Poultney)

For the core job of warning about speed cameras, the NO1 still performs remarkably well

Performance

For the core job of warning about speed cameras, the NO1 still performs remarkably well. It uses the same Ooono camera database and community reporting network as the newer model, so alert accuracy remains strong.

What you lose are the convenience features: there is no Apple CarPlay or Android Auto integration, no rechargeable battery and no dedicated false-alert cancellation button.

For drivers who simply want reliable camera warnings in the smallest possible package, the original Co-Driver remains one of the cheapest and most discreet options on sale.

5. Snooper My-Speed Plus

(Image credit: Future/Leon Poultney)
  • Price: £199.99 / $270 / AU$410
  • Rating: 3/5

Design

After spending time with the smartphone-connected devices above, the Snooper My-Speed Plus feels like a product from a different era — and that is not necessarily a criticism.

Rather than a tiny puck on the dashboard, Snooper gives you a full 5-inch color display mounted to the windshield or dash, complete with speed readouts, camera warnings and traffic information. It looks more like a compact sat-nav than a modern Bluetooth accessory, and it occupies a lot more real estate as a result.

The larger screen does have advantages. Speed limits and GPS speed are visible at a glance, while the red-and-green graphics make it very obvious when you have drifted above the limit.

(Image credit: Future/Leon Poultney)

The Snooper My-Speed Plus feels like a product from a different era

Setup

Unlike the other products here, the Snooper operates independently of your smartphone. The device contains its own GPS receiver and uses Snooper's AURA camera database, so there is no need to keep a phone connected during journeys. Initial setup is straightforward, but keeping the database current requires occasional manual updates via USB using a Windows PC or Mac.

That feels decidedly old-school in 2026, but some drivers will appreciate the complete independence from apps, Bluetooth connections and mobile data.

(Image credit: Future/Leon Poultney)

Performance

Once updated, the Snooper's camera coverage is excellent. Fixed camera warnings are reliable, average-speed zones are handled well and the large display provides far more information than the minimalist LED-based rivals.

The trade-off is size and cost. At £199.99, it is by far the most expensive device in this guide, requires permanent power from a 12V socket and occupies a significant portion of the windshield compared with the almost invisible Ooono or TomTom units.

For drivers who want a dedicated, easy-to-read display without relying on a smartphone, the Snooper remains a compelling niche option. For everyone else, the newer Bluetooth-based devices generally deliver a cleaner, more modern experience.

Which should you buy?

(Image credit: Future/Leon Poultney)

If you simply want the best all-round experience, the Ooono Co-Driver NO2 remains the device I'd recommend. Its combination of elegant design, effortless setup, strong camera database and CarPlay and Android Auto integration makes it the easiest product here to live with every day.

The Tom by TomTom runs it surprisingly close and offers excellent value for drivers who prefer bright, visible alerts from the built-in LEDs. Road Angel Pure Sync will appeal to owners of older vehicles who value the permanent GPS speed display, while the Ooono NO1 remains a brilliant budget entry point.

The Snooper My-Speed Plus, meanwhile, occupies its own category entirely. It is larger, more expensive and more old-school than the others, but its standalone GPS operation means it doesn’t blitz data on your smartphone. Regardless, it’s absolutely massive and feels OTT compared to the others.

Categories: Technology

'We can no longer afford to be blind': Danish startup raises funds to build underwater CCTV-like tech to track drones and more

Sat, 07/18/2026 - 05:05
  • Copenhagen-based Triton Depth, founded in 2025 by three DTU engineering students, has raised €1 million in pre-seed funding
  • It aims to address one of the EU's most underserved security concerns: the seabed, as Baltic cable sabotage, shadow-fleet activity, and underwater drone warfare are increasingly growing concerns
  • Triton Depth intends to build a scalable network of passive acoustic sensors it calls 'Triton Nodes' to address the issue, leveraging AI to identify vessels and objects in real time

A three-man Danish company founded by students is venturing into a somewhat interesting industry for an EU-based startup: underwater defense.

Triton Depth has received €1 million in pre-seed funding from investors including London-based The Creator Fund and Denmark's state-owned Export and Investment Fund (EIFO), with aims to focus on acoustics to answer what is arguably Europe's biggest security threat in the days to come: drone-based naval warfare and sabotage.

With growing concerns about the vulnerability of the European Union, and by extension, Denmark, to a variety of sea-borne threats, EIFO's investment in Triton Depth might be more than just a value play, but a hallmark of a realization that it needs to tend to its own defense needs even as NATO continues to meander, with the US proving to be a volatile partner of late, to say the least.

Using affordable dual-use acoustic technology as the first line of defense

Triton Depth's approach is appealing for a domestic defense industry that does not share the budgets that larger naval players such as the US, Russia, or China possess: it is simple, yet elegant in its premise, and even partial wins when it comes to its claims would go a long way to safeguard Denmark and the EU's regional interests.

Triton Depth's approach centers around the use and deployment of its 'Triton Nodes', a scalable cluster of low-maintenance passive acoustic sensors that measure sound underwater before feeding information back to an AI model that assesses and classifies signatures it detects in real time.

The company intends to market its product line as a dual-use technology play, with CEO and Co-Founder Carl Borg stating that they aim to build "the intelligence layer for the ocean" for both civilian and defense use cases.

The focus on defense stems from Denmark's own vulnerabilities in the Baltic Sea, which has previously suffered significant economic damage from sabotage, including the destruction of Nord Stream 1 and 2.

With an increasing share of its critical infrastructure, including power interconnectors, data cables, and offshore wind, lying underwater, it could be argued that EIFO's investment is the Danish state safeguarding its own maritime security and intelligence interests by investing in an intelligent tripwire for the future.

Other European governments are also actively seeking scalable, affordable ways to monitor coastal and subsea infrastructure, even as Nordic defense budgets continue to rise, with Triton Depth among many defense infrastructure companies poised to benefit from a renewed focus on maritime security in the region, even as acoustics are seen as a reliable metric to monitor for a variety of infrastructure plays.

Categories: Technology

Pages