Sennheiser doesn’t rush its new products — especially within the best earbuds market. It’s been over two years since the launch of the Momentum True Wireless 4 and, even back then, I remember the brand saying at my product briefing that they were already at work planning ahead for potential EU regulations. Which regulations specifically? That the batteries within these tiny earpieces may well need to be user-replaceable in coming launches.
Those laws are still on the horizon… sort of. Other brands have had their complaints, saying the rules force tiny devices to be bulkier and less waterproof, so there are now various exceptions. Sennheiser, though, stuck to its plan. With the launch of the Momentum True Wireless 5, the company is proving that user-replaceable batteries are possible even in products as small as wireless earbuds.
Longevity is only one part of the story when it comes to these new buds though. Much like the new Momentum 5 over-ear headphones, they’re stuffed full of upgrades. They’ve now got a refreshed premium design, a different shape and fit, improved noise-cancelling and transparency, refined sound, and extra features, such as immersive Dolby Atmos audio and aptX Lossless high-res streaming. Spoiler alert for the rest of this review, but they’re the complete package.
After more than two weeks of use, the Momentum True Wireless 5 (or MTW5) have quickly become my new favorite wireless buds for just about anything and everything. They’re quite clearly the flagship to beat in 2026.
To my ears, they’re better-sounding than the top rivals from Technics and JBL, with an enjoyable, neutral, yet non-fatiguing sound that caters to critical listening. The improved ANC is now only a slight step behind Apple, Bose and Sony’s best, and that gap is close enough to barely matter for most of us.
Crucially, the Sennheiser buds are highly customizable with the Smart Control Plus app, an intuitive platform that I find to be one of the best companion apps in the business. Should you want to, you can adjust the sound, tap controls, ANC levels, codecs in use, battery preservation, and more.
The sustainability credentials and long-term usability make them easy to recommend. But once you add in their natural audio on a wide soundstage, high-end style, comfortable fit, and smart companion app features, the Momentum True Wireless 5 might just be the best buds out there for the money.
(Image credit: Future / Simon Cocks )Sennheiser Momentum True Wireless 5: price & release dateHow much money, though? For high-end earbuds, you expect a high cost, and the Sennheiser Momentum True Wireless 5 are launching at the competitive price of $300 / £250 / AU$499.
Unsurprisingly, that puts the MTW5 pretty much in the mix with the rest of the flagships. Apple’s AirPods Pro are $50 cheaper at $249, but these directly compete with Sony’s WF-1000XM6 — costing $329 / £250 / AU$499.95 — and the Bose QuietComfort Ultra (2nd Gen) – for $299 / £299 / AU$450. And, of course, luxury or boutique pairs such as the Bowers & Wilkins Pi8 ($399 / £349 / AU$599) or Master & Dynamic MW09 ($349 / £319 / AU$599) will still cost a fair chunk of cash more.
No matter how you look at it though, these are pricey for most of us. But once you factor in the replaceable batteries, it’s easy to see how these could keep you going for longer than others on the market. And these are the first premium buds from an audio brand to have this repairability feature, with Fairphone's Fairbuds being essentially the only other rival even attempting it. So, kudos there.
Future / Simon Cocks Future / Simon Cocks Future / Simon Cocks Sennheiser Momentum True Wireless 5 review: specsDrivers
7mm dynamic
Active noise cancellation
Yes
Battery life
Up to 12 hours per earbud, 40 hours in total
Weight
7g (per bud)
Connectivity
Bluetooth 6.0
Frequency range
5 Hz-21 kHz
Waterproofing
IP54
(Image credit: Future / Simon Cocks )Sennheiser Momentum True Wireless 5 review: FeaturesThe replaceable battery is the headline feature here, of course. It’s a big deal because the batteries are what's most likely to degrade first in your earphones. Until recently, the glued-in cells in wireless buds have meant that, one way or another, they’re destined to be e-waste in only a matter of years.
Sennheiser includes a battery replacement tool for the buds in the case, and you can access the case battery and the bud batteries with the help of a tiny screwdriver. Luckily, the required screwdriver is the one I have on hand to adjust my glasses. To do my due diligence for this review (even though these fresh buds would be a long way away from needing their batteries replaced) I’ve gone through the process of opening up both the case and buds, and can confirm it’s easy enough as long as you follow the instructions on how to use the included tool. Just be careful as you’re dealing with delicate, small parts.
I also spoke with Frank Foppe, the product manager for the MTW5, and I asked how long they’re made to last before a battery replacement might be needed. He confirmed that about 80-90% of the capacity should remain after 500 charge cycles. That’d mean you could use them every single day for two hours and get to four years of use before you notice much of a difference.
And, while Sennheiser isn’t yet able to confirm the cost of replacement batteries, once those are available, they should make a big difference to the longevity of the MTW5. You could realistically buy these earbuds, take care of them, replace the batteries and keep them working for well over five years or much more (as long as all other parts remain functional).
Right now, you should get 6 hours of playtime with ANC on, and up to 12 hours with it off. Sennheiser claims an ANC-off battery life totalling 40 hours once you factor in the charging case, which seems to be about right in my testing. I ran a test playing a Spotify playlist for three hours at 50% volume with ANC on, and had 60% remaining, which confirms a single-charge runtime of around 7.5 hours, a little better than Sennheiser’s estimate. Recharging is via the USB-C port on the case or wireless charging, and a quick charge of eight minutes gives you an hour of use.
(Image credit: Future / Simon Cocks )Much like the MTW4, Sennheiser has also made these a “future-proof” pair of earbuds when it comes to the feature set. They include several abilities other current launches still lack, and they have the brand’s excellent battery protection feature (to slow down charging and limit the charge level to 80%), which is another way they’re designed for long-term use.
You’ve got Bluetooth 6.0 with Snapdragon sound, a low-latency mode, support for lossless audio and 24-bit/96kHz streaming, Dolby Atmos head-tracked immersive audio, reliable wear detection, excellent multipoint switching, Google Fast Pair, Microsoft Swift Pair, and upgraded microphones for better noise-cancelling and transparency, along with LE audio and Auracast (not at launch, but promised for a future firmware update).
While I’d found ANC on the MTW4 “effective”, I’d say the new version definitely takes things a step further. We’ve now got four microphones per earbud (plus bone-conduction voice sensors for calls), which is up from three per bud on the predecessor. In all the environments where I’ve used noise-cancelling – including coffee shops, city streets and the London Underground – I’ve found my music or podcasts still audible at reasonable volumes without needing to turn it up to overpower the noise.
The wind-noise reduction kicks in quickly and is also excellent, and I should know, as it’s been particularly windy on my walks lately! Noise-cancelling, overall, feels quite natural while still being capable enough to silence a great range of outside sounds, adapting well to changes in your environment.
But it still isn’t quite the “bubble of silence” ANC that you can get from the AirPods Pro 3 or Bose QuietComfort Ultra earbuds! I don’t find that it’s a difference that matters that much anymore, but it’s worth knowing that there’s even more powerful ANC out there.
Transparency is brilliant, though, and up there with AirPod models for how natural its passthrough of the outside world is. I also love that turning on transparency pauses your audio. I listen to podcasts a lot, and having a one-tap way to pause and get awareness is fantastic for quickly saying hi to the cashier at my local corner shop. I also tested the microphones with calls and voice notes. They’re decent at isolating my voice when playing loud, busy cafe background noise, but with the occasional missed word or two. That said, they’re good for outdoor calls and great in a quiet room.
Sennheiser markets these as “engineered for serious listeners” and I don't disagree. They’re not really made with bass-heads in mind, and have more of a neutral approach when compared to some consumer sound profiles. But they’re also not sterile, offering warmth, depth and smoothness. You get just enough weight and control to the bass, a natural midrange and crisp highs, plus a lot of flexibility to adjust the sound to your liking.
If you know much about the previous generations of these earbuds, all that I’ve just said won’t come as a big surprise. While there are slight refinements to the sound, these essentially sound about the same as the MTW4 and MTW3 before them. They use the same 7mm TrueResponse dynamic drivers from the predecessors, and one notable benefit over rivals is a greater width to the soundstage and a palpable sense of instrumental separation.
Billie Eilish’s Oxytocin is a fantastic test track for these buds — with effects zipping across the mix, perfectly centered lead vocals, and breathy backing vocals coming at you from all sides. I played the spatial mix from Apple Music and switched on Dolby Atmos, and it’s definitely a convincing implementation of the processing. As my playlist went on, I began to encounter tracks not mixed for spatial audio, though, and you’d need to manually turn off Atmos so those don’t sound a bit weird.
I far prefer Dolby Atmos over most proprietary spatial options, so I appreciate its presence here, but I’d make sure you only use it when listening to playlists or albums full of tracks optimized for Atmos. It works best with Atmos-certified content, and in those cases much of the processing will be done on the source device.
Head tracking works, but it’s still not essential. The fixed spatial audio is plenty, and I still recommend mostly using this mode with films and TV shows designed for immersion, rather than music, which can be a little more hit-and-miss. I tested it with Severance on Apple TV and found it enhanced the eeriness of the quiet sound design and the dialogue clarity.
I tested bass with my go-to low-end thump test, the slow-burn sub-bass of Massive Attack’s Angel. The MTW5 excel, not coming off as overly bloated or boomy, but instead clear and textured. Vocal and midrange realism is where Sennheiser’s natural tuning pays off most. Listening to Coldplay’s Clocks reveals more detail and subtleties I don’t usually hear. And I moved on to the busy mix of Muse's Supermassive Black Hole, where every element feels defined, without the smearing you so often hear from lesser drivers. The width of the soundstage makes for a more engaging listen and, when combined with the tightness of the bass and detail in vocals, I’d say they’re a pair that’s ideal for a relaxed listening experience.
They’re so non-fatiguing that I can keep listening for hours and hours. The most intense audiophiles may still have their nitpicks, as these are tuned more for musical enjoyment than they are for being analytical, but I really think there’s very little that can’t be solved with the 8-band EQ. A full parametric equaliser (as on the HDB630 over-ears) would’ve been a great customization feature, but it’s also one that many users wouldn’t find intuitive.
Sennheiser’s Sound Personalization is a companion to EQ, and is a blend between a preference test and hearing evaluation, where you tweak the volume of different instruments to your liking, and then use a slider to find the lowest level at which you can hear the sample track. The result still sounded great for me, but I ultimately found that I prefer the default “Neutral” after comparing the two.
My honest view on the codec support is that it’s very easy to get lost in the weeds with it all, and far more of this is marketing than most of us tend to admit. The high-res aptX Lossless codec is present, but only kicks in with compatible Android sources, so you may not be able to engage this mode anyway.
I tested it with the Fairphone 6 Plus, which supports the full aptX suite, but it wouldn’t shift out of Adaptive. But this isn’t surprising given that “Lossless” is more of a “mode” hiding inside aptX Adaptive. Basically, this can all get a bit confusing, and there isn’t a substantial difference. A competent codec like AAC will give you quality with virtually no audible difference from aptX, thanks to Sennheiser’s great tuning and driver design. If you have a phone supporting aptX Adaptive, you may hear a tiny difference, but I wouldn’t bet on it.
These sound superb, so you’re not losing anything by choosing “Robust connection” instead of the “Advanced sound quality” mode. You won’t be able to tell them apart, and you’ll get to use every feature (Atmos is unavailable if you turn on high-res, for example).
Fans of the fabric-wrapped case may be disappointed to see how Sennheiser changed things up with the MTW5. The buds now live in a slim and lightweight, textured plastic casing with a shiny circular logo on top. This case has a sturdy metal hinge, one of the best I’ve tried, and the USB-C port is now at the bottom left (it used to be on the front of the older design). On the case and buds, you’ll see the screws needed for changing batteries, but the earphones are still IP54 dust- and splash-resistant.
The fabric case of the MTW4 I tested quickly picked up a big scuff, so I’m hardly mourning its departure. In fact, everything about the MTW5 feels significantly more premium to me. Another added benefit? This svelte approach is far more pocket-friendly.
The buds themselves are very shiny, which I quite like but may divide opinions, and they’ve got a different form factor, at a similar size and weight (7g per bud vs 6.2g for the MTW4). They’re on the chunkier side, so are harder to recommend for those with the smallest ears. They now fit in a totally different way from the predecessor, too, with a much shallower fit and no stability fins. Despite lacking the fins, they actually fit me slightly better.
Even more than with other buds I’ve tried, you absolutely must double-check your ear tip sizes with the four options in the box (I needed a larger tip size in my right ear than in my left). And try not to twist them too much, as I’ve found that can break the seal and introduce friction noise when you walk while ANC is on. A gentle turn is all you need to lock them in place, and with the new thicker silicone tip material Sennheiser uses, they shouldn’t budge. With a good fit, it’s a secure seal that offers great passive noise isolation.
Aside from being shiny, the buds have a more curved look (a bit reminiscent of the Sony WF-1000XM5) and an “anti-wind” design, with a visible grille covering the mics at the front. They’re still controlled with customizable tap gestures, but the touch target is now noticeably smaller, and it’s one of my few (minor) negative points. I find you have to be pretty intentional about where you tap, because it’s easy to miss and do a single tap when you intend to double-tap.
Overall, I’m a big fan of the rounded, stylish new design, and I love that it comes in a more expansive range of colors (Graphite, Copper, Denim, Lavender and the Cream shade reviewed here) than the likes of AirPods or Sony buds. But you might find these distractingly shiny and not suit the shallow fit or chunky body. How much you like them will come down to personal preference.
Sennheiser is not short of competition. The key rivals are the AirPods Pro 3, Sony WF-1000XM6, Bose QuietComfort Ultra (2nd Gen), JBL Tour Pro 3 and Technics EAH-AZ100. In direct comparison, though, the MTW5 is packed full of features that some of these lack, and they deliver a natural and clear sound instead of the bass-forward sound of many other buds.
Ultimately, though, Sennheiser’s value argument comes down to how it offers user-replaceable batteries. Assuming these batteries are under $50, you won’t be forced to throw away your $300 pair when the cells naturally degrade in about three to four years or so. That’ll help if you consider them as a long-term investment.
With that said, the landscape won’t stay the same. New buds with replaceable batteries will eventually launch, and many will surely be cheaper than this too. For flagship quality in sound, design, comfort, and battery life, though, I’d bet Sennheiser’s Momentum True Wireless 5 will remain some of the best buds you can buy for years to come.
Section
Notes
Score
Features
The app gives you loads of ways to customize the buds to suit you, and they have all the features you could want.
5/5
Sound quality
These are a fantastic-sounding pair of buds, prioritizing detail, clarity and smoothness on a wide soundstage.
5/5
Design
I’m a fan of the new look and fit, which is sleeker and shinier, but may still be a little bulky for small ears.
4.5/5
Value
They’re an investment, but offer a lot to compete with flagship rivals, and have replaceable batteries that other pairs lack.
5/5
Buy them if…You want earbuds for the long run
Switching out batteries for fresh ones after years of use means you should be able to own these for far longer than others, so they’re ideal for anyone hoping to escape the upgrade cycle.
You like a balanced and natural sound
Sennheiser is known for its trademark natural sound, wide soundstage and relaxed listening experience – these impress on all counts.
You want a premium and comfortable design
The new subtly rounded bud design and slimmer charging case are much more premium than Sennheiser’s old buds and much of the competition.
You need the absolute best ANC around
This is a minor but notable shortcoming, so if you want top-tier noise-cancelling, you’ll still need to go with Apple, Bose or Sony, as these are still a step or two behind the class leaders.
You’re on a budget
I can argue that they’re good value and competitive with other flagship wireless earbuds, but this is still a lot to spend on buds, even if they’re some of the best around.
You don’t like shiny earbuds
There’s no getting around it; whichever color you pick, they’re eye-catching and shiny, and that’s an unavoidable aspect of the design.
Bose QuietComfort Ultra Earbuds (2nd Gen)
If superior noise-cancelling is your top requirement, these are some of the best options out there; it helps that they’re also comfortable, immersive, and offer dynamic and powerful audio that adapts to your unique ear anatomy. Read our full Bose QuietComfort Ultra Earbuds (2nd Gen) review.
Sennheiser Momentum True Wireless 4
The older model is still stacked with features even when compared to today’s rivals, so it’s worth considering if you can pick up the MTW4 at a discount – they’re great all-rounders with detailed and balanced sound, strong battery life and future-proof Bluetooth support including aptX Lossless, LE audio and Auracast. Read our full Sennheiser Momentum True Wireless 4 review.
Technics EAH-AZ100
Our current top pick for wireless earbuds overall, the Technics flagship won’t disappoint with its secure and comfortable fit, nuanced and customizable sound and control, and excellent triple-device multipoint connectivity. Read our full Technics EAH-AZ100 review.
I tested the Sennheiser Momentum True Wireless 5 for over two weeks, pairing them with my iPhone 17 Pro, MacBook Air, Fairphone 6 Plus and Activo P1 music player, all of which allowed me to thoroughly test different codecs and multipoint connectivity.
I took them with me everywhere and I used the earbuds while on the London Underground, at coffee shops and while walking on city streets to test the active noise-cancelling capabilities, and I used them for long listening sessions while working to evaluate battery life. I tested calls and microphone recordings, and ran a controlled battery test to see how much they drained over the course of three hours. While testing, I listened to podcasts and music from a wide variety of genres, mostly streamed from Apple Music but also on Spotify and Deezer.
I've been testing gadgets since 2020, and I've reviewed countless headphones and earbuds, including several flagship earbuds including those from Bose, Apple, Technics, JBL and Sennheiser, and I previously tested out the Sennheiser Momentum True Wireless 3 and Momentum True Wireless 4.
With Grand Theft Auto 6 right around the corner, I imagine that quite a few PlayStation players will be dusting off their PlayStation Portal — or even newly buying one — to enjoy 2026’s biggest game on the go. But if you’re planning to take your Portal on the go, it’s important to keep it safe, and the Venom PlayStation Portal Carry Case can do just that.
I’ve spent a few weeks using Venom’s PS Portal case, and honestly it impressed me. I used to be the type of person who would just wrap my Portal or Nintendo Switch in a sweater, throw it in my bag, and hope for the best — what can I say, I just didn’t want to spend my money on something as unexciting as a case.
But the Venom makes the outlay feel a bit easier to swallow, as it comes in at an exceptionally modest price of $25.99 / £14.99 / AU$49.95. Given that it also comes with a tempered glass screen protector, cleaning tools, and thumbstick grips, that’s really not bad, is it? Don’t be fooled, though, despite its low price tag, Venom’s case still rivals some of the very best PS5 accessories.
This comes down to one main thing: its durability. For such a cheap case, the Venom PlayStation Portal Carry Case is surprisingly rough and ready. It has a hard outer shell, and when dropping the case now and then, or throwing it into my bag, it never showed any signs of wear and tear, and my console survived without issue. The exterior was not damaged during a scratch test, either, and its textured look is pretty appealing.
My system also sat pretty snug inside the case, which has a molded interior to slide your PlayStation Portal into. There’s also a hook-and-loop strap which fastens it in place, and although it's a bit cheap, it serves its purpose well.
My only complaint is that there’s no fabric pad to sit over the screen, so the fastener rubs up against the screen. I’ve not seen any scratch marks or anything, but PowerA’s case — which I’ve slid into the ‘also consider’ section — offers more secure protection with fabric padding and dual fasteners.
(Image credit: Future)There’s a second compartment inside the case too, and this has a zip-locked net that can hold accessories like earbuds, cleaning tools, and cables. It was plenty big enough to house my accessories, although the zip isn’t very high quality, and it came undone at one point — though I was able to fix it very easily. Luckily, the zip on the exterior is a bit stronger, and I found it to be secure at all times.
The Venom case also has a solid handle which has a rubber grip, which is pleasant to the touch and tall enough to fit my relatively large hands.
In honesty, this model is more like a starter kit for PS Portal owners than just a case, though. It comes with a tempered glass screen protector, which is basic, sure, but easy to fit and decently durable. There are also a couple of cleaning wipes and some neat thumbstick grips which seamlessly fit on and feel satisfyingly textured.
So, should you buy the Venom PlayStation Portal Carry Case? If you don’t want to spend all too much, and want a durable piece of kit with some nice extras thrown in, then the answer is yes. I think PowerA’s case is marginally better, thanks to its stylish design, USB-C charging passthrough slot, and fabric padding.
But Venom’s case does offer a bit more storage. I’d argue that Venom’s model is on the bulky side, and it did take up a lot of room in my bag, but if that’s not a dealbreaker for you and you need a quality, affordable case, then look no further.
(Image credit: Future)Venom PlayStation Portal Carry Case review: price & specsPrice
$25.99 / £14.99 / AU$49.95
Dimensions
6.2 x 13.2 x 3.9in / 158 x 335 x 98mm
Weight
0.9lbs / 403g
Compartments
2
Handle
Yes
Color
Black
(Image credit: Future)Should I buy the Venom PlayStation Portal Carry Case?Attribute
Notes
Score
Design
Durable exterior, decent looks, solid extras thrown in, a bit bulky.
4/5
Storage
Good amount of space for accessories, net compartment zip a bit flimsy.
4/5
Value
Great price for the case and accessories combined.
4.5/5
Buy it if…You want an affordable protective bundle
With a case, screen protector, cleaning wipes, and thumbstick grips, this product has everything you need to keep your Portal safe when out and about. It's also available at a highly affordable price point, making it ideal for those on a budget.
You need storage space for accessories
Unlike some rivals, Venom included plenty of space here for you to store accessories like earbuds, cables, and cleaning gear. Just throw everything you need in the zip-locked compartment, and you’re good to go.
You want top-tier build quality
If you want a premium standard of build, then Venom’s case may not be for you. It's durable on the outside, sure, but the inside zip is a bit flimsy, and there’s no padding for your Portal’s screen.
You’re looking for something slim
Due to its storage compartment, Venom’s carrying case is a bit on the bulky side. Slimmer options are available if you don’t want to take up too much space in your bag — even PowerA’s option below is considerably flatter (though still pretty broad).
PowerA Protection Case for PlayStation Portal
I use PowerA’s PS Portal case all the time, and it's a truly brilliant model in all aspects. It has a hard, rugged exterior, a molded interior with fabric padding for the screen, and a charging slot so you can juice your portal up while it’s in the case. It's also stylized to look a bit like the PS Portal and is very affordable. You can’t really go wrong with this one.
Read my full PowerA Protection Case for PS Portal review.
How I tested the Venom PlayStation Portal Carry Case(Image credit: Future)I spent a couple of weeks testing the Venom PlayStation Portal Carry Case, using it as the main mode of transport for my precious remote player. I took it with me on the go and made sure to try housing it alongside various accessories and assess it for any damage afterward.
To judge how durable Venom’s case was, I tried dropping it from a controlled height, performed some scratch tests, and then checked for any signs of wear and tear. I also compared the Venom case against rivals, mainly the PowerA Protection Case for PS Portal, which is my usual go-to.
More generally, I’ve been reviewing gadgets for years here at TechRadar, where I serve as a Senior Reviews Writer. I’ve tested a whole lot of gaming accessories, including cases for the PS Portal and Nintendo Switch 2, as well as controllers, screen protectors, and audio gear.
Display: 7-inch OLED touchscreen
Brightness: 1,100 nits
Operating system: Android
Memory: 12GB LPDDR5 RAM
Internal storage: 256GB as standard
Storage expansion: Three M.2 slots, supporting up to 24TB total storage
Card slots: CFexpress Type B, SD and microSD
Connectivity: USB-A, USB-C, HDMI input, HDMI output, LAN and 3.5mm headphone jack
CFexpress transfer speed: Up to 800MB/s
Internal battery: 11,600mAh
External battery: Sony NP-F compatible
Dimensions: 104 x 195 x 25mm
Weight: 550g
If digital creatives, from photographers to videographers, were to design a piece of kit, it would be the PixelMob Pro. It’s essentially a fully featured asset manager that lets you plug in a variety of storage media from cameras or external hard drives, then organise and edit them onto its internal storage, all through its large touchscreen interface.
The system runs on Android, and much of the interface and usability will feel familiar to many. Still, dedicated apps such as Lightbox, Sequence, Cones, and Framebox let you manage and edit all the files, and in addition to these there are a few familiar apps that you can download as well, such as CapCut, Lightroom and a selection from DJI; there’s even a direct connection to Cloud Storage for additional backup.
Getting started was straightforward, with a few small workflow issues, such as setting up a lightbox, before things really started to make sense.
Before getting properly started, I downloaded and updated the firmware, which took a good hour. However, after a restart and refresh, the device was finally set and ready to go.
When I plugged in my first SD card, it took about 5 to 10 seconds for it to appear, ready for the files within to be either partially or fully downloaded and backed up to the internal drive. The whole process is relatively straightforward. However, you do need to set up a Lightbox before you start, which took me a while to figure out.
If you download the files directly without first creating a Lightbox, you won't be able to navigate or manage them, so it's an integral part of the workflow, and throughout there are small workflow points like this, but updates through the test have addressed most. It would have been helpful to have a few tooltips at the start when you first use the PixelMob, just to point you in the right direction.
However, once you get used to how the workflow goes, it's all easy enough, and there are plenty of input options, including USB, USB-C, SD, microSD and CFexpress Type B. They've even included a Type B to Type A adaptor in the box, which is handy for anyone using a Sony camera.
Once you get into the flow and work out how to use Lightbox, Sequence, and Cones, things start to make sense. If you're out in the field as a photographer or videographer looking for a decent way to back up all your image and video files, then while asset managers have been available for years, the PixelMob takes everything up a notch or two.
However, while the form and function of this device are superb for the most part, it would be good if some small workflow issues could be addressed, I'll cover those in the Performance section.
There are also certain build-quality issues. The outer casing doesn't feel as high quality as it could and feels more like a prototype than a finished product.
The fact that it takes a standard Sony NP-F battery at the back is superb for battery longevity. However, the battery doesn't fit neatly and, although it has a securing lock to keep the battery in place, the fit just isn't quite right, so it rests in place rather than locking firmly.
One thing I did like about my NP-F battery plugged into the back is that it makes a very nifty stand.
Another point is that some CFexpress Type B cards took a long time to be recognised, and a couple of the larger 1TB and 2TB models weren't recognised at all. In those cases, I had to use a card reader plugged into the USB-C port for them to connect.
However, aside from build quality and a few workflow issues, this is a solid unit. What I really liked was that, while it comes with 256GB of internal storage ready to go, it's in the form of an M.2 2280 module.
The internal storage can be upgraded, with three M.2 slots available and support for up to 8TB modules, potentially giving you up to 24TB of internal storage.
Since this is from UniDrive, it comes with UniDrive NAS software. It also has features like cloud backup, and it even has a LAN port on the back. Essentially, if you ask any photographer what they want for a backup solution on site and back in the studio, this small touchscreen box has it all.
Once the workflow issues are resolved, along with possibly slightly better build quality for the outer casing, this will be a must-have for many professional photographers or videographers.
PixelMob Portable AI Workstation: Price & availability(Image credit: Alastair Jennings)At present, the PixelMob has launched through Kickstarter as the PixelMob Portable AI Workstation for Creators. The full listing can be seen at Kickstarter here, while the official website is regularly updated with additional information here.
The PixelMob's design and build look very outdoorsy. It looks like a tough tablet or oversized mobile phone, and the screen size sits somewhere in between at seven inches with an OLED screen.
It has a brightness of 1,100 nits, which is impressive, and it runs on Android, so it supports many Android apps. In fact, you can install apps from DJI and other manufacturers if you want to connect it to a drone, your mobile phone or even your camera.
What I also liked was that you can connect it directly to the Sony A7 IV; in my case, you can use it as a professional monitoring system, essentially as a second screen and as a way to back up full-resolution files to the device.
In terms of size and weight, it measures 104 x 195 x 25mm and weighs 550g, putting it somewhere between a large mobile phone and a small tablet.
A quick look around the body shows plenty of input options, including CFexpress Type B, which enables up to 800MB/s transfer speeds, SD, microSD, USB-A, and USB-C. On the side are another USB-C port and the power button.
On the top, there are two HDMI ports, one input and one output, another USB-C port and the LAN port. On the base, there's a connector, and on the back there's an NP-F mount so you can add standard NP-F batteries.
For memory, it comes with 12GB of LPDDR5 RAM and 256GB of internal storage. The internal SSD can be upgraded, and there are two additional M.2 slots so you can add up to three at 8TB a piece, for 24TB of internal storage in this one small unit.
Inside, an 11,600mAh battery powers the device and, under extreme loads, this will last two to three hours, or around six hours with lighter use. In standby mode, you'll get over a week. Then, of course, you can plug in the NP-F battery for extended working time.
When I unpacked the PixelMob, I wasn’t so impressed by the overall design. It looked OK and had the same sort of look that you expect from a tough phone or tablet, but this just isn’t backed up by the build quality.
The slightly plasticky exterior feels a little cheap and not very robust. Through the test, the outer casing did stand up to life in my backpack, although I’ll admit to being a little more careful with it than I would usually be.
I also found a few other bits and pieces as I went around the build, such as access to the back panel where you can install additional drives. It felt a little light and was held in by just one crosshead screw. If you shake the device, it also has a rattle, which is from the power button area.
Most notably, the battery holder for an external NP-F battery wasn't quite the right fit. Still, these issues detract from what is potentially an extraordinary piece of kit.
When I picked up the PixelMob, I was struck by the sheer volume of features available. Essentially, the main point is it’s designed to back up your camera storage media quickly while you're on the move, then let you download everything to a machine or NAS as soon as you get home. But then it does more, enabling you to manage and edit the content, tether to a camera and even take control to capture different styles of images.
Thanks to the intelligent onboard software and its Android platform, it's easy to adapt it to a professional workflow. Even if you're a keen enthusiast, there's plenty here to get everything organised.
So whether you're a photographer, videographer or just somebody who needs to transfer and display data in various locations, the PixelMob is a superb option.
In terms of features, it has internal storage that lets you transfer data from cameras and other devices directly onto the unit. From there, you can edit and manage those files and assets. You can even use it as a media player with HDMI output to a larger screen.
The content you save to the device is managed by built-in AI that scans the files and offers smart subject recognition and other AI features for file organisation.
If you're a photographer or videographer, you can use that large seven-inch screen to monitor your camera. You simply plug it in through HDMI, and you can use it as a link between your camera and larger monitoring and recording systems.
You can even use it for tethered shooting or as a video-review device. It includes a huge range of creative options that photographers and videographers will inevitably find useful.
In my testing, one of the best features for photography and video was the ability to get quick on-site previews, and I could store files on the device to edit them directly while out and about. Essentially, I had everything stored in one location that I could then use to start the file organisation.
For backups, all storage media I use is compatible with slots for CFexpress Type B cards from my Canon EOS R5 C. My two Sony A7 IVs both use CFexpress Type A, and with the adaptor, I could plug those into the CFexpress Type B port and back them up as well. It also has slots for SD UHS-II and microSD.
I could also plug in a USB-A 3.2 or USB-C device and download further data to the machine. The only issue is that the standard 256GB is quite small, so for this test I added an extra M.2 drive to expand storage by 1TB.
Inside, it has a relatively large internal battery which provides plenty of power for around two hours of heavy use. However, if you're out and about with large cards, especially if you max out the internal storage, you'll want a bit more battery power.
The great thing is that the company has decided to use the NP-F battery format, which is used by a huge amount of photography equipment, monitors, and other accessories. I have a stack of them in my kit bag, so they plug directly into the back of the unit, further extending battery power.
Essentially, that internal storage gives you an extra layer of protection, letting you back up all your storage media on a shoot and preview it. Where this one differs is that it also plugs directly into your camera and, with features like time-lapse video, star trails, HDR bracketing, focus bracketing, and panorama merging, gives you additional tools to use with your camera.
What's more, you can back everything up to the cloud if and when you need.
So when it comes to features, this is one of the most feature-packed devices that I've ever looked at. Essentially, it looks like they've taken photographers' full wish list and combined it into one small, handy-to-carry box.
When the PixelMob Pro arrived, I was surprised to find its size and weight somewhere between a mobile phone and a tablet, as previous devices of this type, not going back to those made by Epson, are generally rather small.
However, this is a lot more involved and getting started was all easy, if slightly time-consuming. First, after fully charging the internal battery to 100%, I ran through the updates, making sure everything was on the latest version.
The first stage of updating took around 30 minutes. Once the main bulk of the Android and hardware firmware updates finished, there were further updates for the AI processing and many of the pre-installed apps. Altogether, getting everything completely up to date can take a long time.
The system is essentially based on Android, and it's great to see that you can install many familiar apps if you want. As you drag left on the screen, for instance, it shows a list of standard apps. While the Play Store isn't part of the system, if you click Apps and then Third Party, you'll see a list of pre-approved apps that have been added for download and are fully compatible with the system.
These include DJI apps, Instagram, Adobe Lightroom, Pinterest and Snapseed, amongst others. Importantly for further testing, Sony's Monitor & Control app is also available, which lets me control my Sony A7 IV.
Hopefully, as this system develops, we'll see equal compatibility for Canon, Nikon, Panasonic, Fujifilm and others. Once you've applied all updates and restarted the system, you can start copying data to it or use the PixelMob Pro as a tethering device for your camera systems.
Before I went into the main review and checked out what it could do on the performance side, I also looked at the internal storage. As standard, it comes with 256GB; however, as I flipped open the back and removed the back panel that’s secured with a crosshead screw, I noticed two additional M.2 ports.
That means that if I removed the 256GB drive that was already in and replaced it with an 8TB option, then I could potentially have up to 24TB of internal storage, which is the same amount as my NAS drive that I use in the studio.
Potentially, I could have everything from my NAS, image-wise, on this device and still have room to back up images and video on every shoot I go on.
However, 8TB M.2 SSDs are hugely expensive, so for this test I just popped in a 1TB drive alongside the 256GB drive that was already installed.
I formatted it into the system using the UniDrive application, which I've used in the past for previous UniDrive products. It was extremely straightforward, and I was pleased to see the app has developed along with the workflow, which is now much easier to progress through than it was when I looked at UniDrive well over a year ago.
Once the drive format was complete, I was able to start downloading my files from CFexpress cards, SD cards, and microSD cards.
The cameras I used were the Canon EOS R5 C, using CFexpress Type B cards, and the Sony A7 IV, using CFexpress Type A cards with the adaptor supplied with the device.
With each, you take the card out of your camera, plug it into the side of the PixelMob Pro, and after around five seconds, the system recognises the card. A simple tap will then download it to the machine. However, as I found, before you do that on the first run, it's important to set up a Lightbox.
One of the apps at the bottom of the screen is the Lightbox app. Essentially, tap it, click New, and add your new Lightbox. Once that's done, you can simply click to import all of the files from your SD or CFexpress card directly to that folder, and then a few interesting things happen. First, the files transfer, then the internal AI processes them. This gives you a full set of auto-tagged options and highlights whether the file is JPEG or RAW.
Clicking the folder shows a thumbnail, and the rendering is exceptionally quick. To be honest, it's faster than when I try to review stuff using Adobe Bridge. As you scroll through, you can see each file; once you find a picture you like, just tap it, and it'll open.
If you've taken several images that are very similar, say you've taken three iterations of the same point, then it'll recognise those images as a burst and group them. This makes scrolling through hundreds of images, which photographers often have to do, that much easier.
It also shows you similar files. If you've got lots of similar files, it also does face recognition, so if there are people you know, you can add them, as you do with many online photo applications.
As you go through the different functions and features, it'll also show you images that are overexposed or underexposed. If you want, you can go into the AI settings and switch on options such as Basic Assist, Similar Photos, portrait detection (where you can upload specific people), bird recognition, and empty-scene detection, which are all exceptionally useful.
If you do have an image, you can select it and apply star ratings and flags, check the colour, or take it through to Cones, where you can start editing the image with the built-in image editor.
Again, it gives you plenty of options and control. With some of the larger JPEG files that I started to manipulate, it can be a little slower initially to load the image. Still, once you start applying filters, each filter and adjustment applies extremely quickly. For an on-the-move solution, it's really very slick.
Alongside the more standard enhancement edits, there's also a whole bunch of stacking edits. So if you've been out taking star trails, astro time-lapses, focus or exposure sequences, which you can all do tethered, Cones gives you all of the functions and features to edit those pictures within the confines of this small box, and that is very clever, especially with the touch screen.
Likewise, alongside Cones you also have Framebox, which is essentially a built-in video editor, but personally I downloaded CapCut and utilised that as it's a much better application.
These applications are all exceptionally clever, and many enable either a wired or wireless connection to your mirrorless camera, which I found incredibly useful and well beyond anything I've used before. For the most part, I used the tethered connection to the Sony A7 IV, and the initial setup took a bit of to-and-fro, but was simple enough once the right options on the camera were selected.
Connecting with the Sony A7 IV, all I needed to do was click the option that I wanted from the Sequence modes, make sure that I had a USB-C cable connecting the Sony to the PixelMob Pro and, after a few seconds, with PC Remote switched on in the camera, I was then able to see a live-stream feed directly on the PixelMob from the camera.
With simulated long exposure, I could select the capture interval and simulated exposure, then click Next and start capture. It then ran through the sequence, capturing 30 images and triggering the camera for each one. While I've seen small devices that enable this sort of triggering, I haven't seen anything quite as advanced work so seamlessly.
The resulting image combines all 30 pictures the camera takes. It processes them to create a simulated long-exposure shot, something you can normally only do with an ND or variable ND attached to your camera.
You can also go through to the standard tethered shooting modes. Open the Tether app, click the camera you want to connect, then select the Lightbox. Again, it's a good idea to create a new Lightbox. Here, you don't get the live feed from the camera. Instead, you use the camera tethered to the box, and every time you take a picture, it instantly appears on the device, saved and ready to review.
You can keep taking pictures, and they'll download directly from the camera to the device's internal storage. It's an absolutely superb option for stills. However, when you switch your camera to video, that tethered option doesn't work, and you'll have to go back to the more normal monitoring option and to record video you switch to another application.
Video is handled by Deck. With this mode selected, essentially the entire device becomes a monitor for the camera. You've got your HDMI running from the camera straight into the device, and a simple record button lets you record directly onto the PixelMob. You can record at either 5, 10, 20, 30 or 50Mbps.
It's not comparable with an Atomos Shinobi or Ninja, but it's a great device for creators. You can even add LUTs for different colour-grading effects at the same time, making it a really flexible device.
Ultimately, the PixelMob is one of the most feature-packed devices that I’ve ever looked at for photographers, videographers and creators. It enables complete image management, but it goes well beyond storing image files and becomes a bigger part of your workflow.
You can use it for tethering, video recording and, obviously, organising, editing and sharing your video and image files while you’re out and about. It combines portable storage, AI-assisted organisation, tethered shooting, image editing and video monitoring in one compact device, and the ability to expand the internal storage makes it even more useful.
Some areas still need refinement. Some workflow issues mean you have to duck in and out of various apps, and while you can do a lot, some of them are a little simplistic in certain ways. CFexpress compatibility is also inconsistent, and the outer casing feels quite plasticky compared with the quality of everything else.
However, these applications are there to support your creative media, and what the PixelMob enables is far more than any other device that I’ve seen. The system's flexibility and how well it fits into a professional creative workflow make it an extremely capable device and one that I will be using going forward.
Value
Packed feature set that goes well beyond most asset managers, but at a price.
4
Design
Practical design, but build needs refinement, especially the choice of plastics.
3
Features
Exceptional range of creative workflow tools with some small refinement needed.
5
Performance
Fast, with plenty of flexibility in its use from storage to capture.
4.5
Overall
One of the most exciting products for photographers available despite small build quality issues.
4.5
(Image credit: Alastair Jennings)Buy it if...You need to back up media while you're on location.
The PixelMob lets you back up CFexpress, SD, microSD, and USB storage directly to its internal storage while you're out in the field.
You want more than a simple backup device.
You can use it for tethered shooting, image editing, video monitoring and recording, AI-assisted file organisation, and specialist shooting sequences.
Don't buy it if...You want a completely polished workflow.
Some workflows require you to move between different apps, and the importance of setting up a Lightbox isn't immediately obvious when you first start using the device.
You expect premium build quality.
The outer casing feels slightly plasticky, and the rear panel and NP-F battery mount don't feel as refined as the rest of the device.
The JBL Live Flex 4 might be the perfect option for you if you want earbuds that put comfort first. Their lightweight, relaxed fit is perfect for listening on the go, meaning that, unlike some earbuds with a tight in-ear seal, they won't get tiresome or irritating after a while. And yet you can use them with ANC or transparency modes, giving you the option to shut the outside world out, or stay aware of your surroundings to impressive effect.
But perhaps the real draw of the JBL Live Flex 4 is their smart charging case. It has a touchscreen equipped, enabling you to adjust ANC, EQ, playback and more, all without having to whip out your source device. If your phone or music streamer is in your bag or if you don’t want to go to the hassle of opening up the JBL Headphones app, this is pretty convenient.
Is the smart case gimmicky? Maybe a bit, but I like a good gimmick from time to time. And it's super-responsive, with a massive quantity of features onboard. Other than those I mentioned above, the Flex 4 case lets you alter speech for calling, toggle spatial audio, switch audio source, and even use tools such as a timer and flashlight. As a result, these earbuds easily rival the very best wireless earbuds when it comes to features and usability.
The JBL Headphones app does offer a bit more functionality, though. For example, it gives you the ability to set a custom wallpaper for your earbuds case, and activate the higher-resolution codec, LDAC, which can provide better quality playback if your source device is compatible. Most Android phones support LDAC, though iPhone users won’t be able to make use of it.
(Image credit: Future)I’ve mentioned ANC a few times, and I have to say, it’s surprisingly effective here. You see, the JBL Live Buds 4 and JBL Live Beam 4 offer an in-ear seal, so I expected a lot from them in terms of noise-cancelling — but they ended up being fairly middling in this area for me. Compared to the competition, however, I found the Live Flex 4 to be pretty adept at muffling my surroundings.
Sure, the open architecture means that harsher sounds will seep in, but when on walks and working in the office, sounds like cars passing by and colleagues typing were subdued to decent effect. Again, the open design has its limitations, but the improved ‘True Adaptive Noise Cancelling 2.0’ on the Flex 4 proved to be a hit on this model.
The six-microphone system of the Flex 4 also means that calls are clear — and although my voice wasn’t always the most defined against background noise, I found my speech to be perfectly comprehensible, especially when making a recording and listening back to my voice.
What’s more, these buds offer pretty solid battery life. You get seven hours from the Flex 4 with ANC on, up to 10 hours with ANC off, and a maximum of 48 hours with the case. That’s a lot better than the new AirPods 5 with Wireless Charging, which sits at a similar price-point (although Apple's offering is just slightly cheaper). The Flex 4 also support wireless charging, which is always nice to have.
But here comes the crucial question: do the JBL Live Flex 4 sound any good? Well, let me begin by saying that the Live Buds 4 and Live Beam 4 perform better than these — and this comes down solely to the more relaxed fit, which means that sound is less concentrated in your ear canals, and low frequencies especially are less impactful.
This is why I typically steer clear of open-fit earbuds like the non-pro variants of the AirPods, for example. But actually, the Flex 4 ended up performing admirably, despite the limitations of the design.
They conjure up a relatively wide, spacious soundstage and, despite being open-fit earbuds, have pretty impactful bass too. With the default Studio EQ, the Flex 4 offer decent balance across the frequency range, although I did find that they were a little lacking in the low-end, but that was nothing that a swift EQ tweak in the 32-250Hz range couldn’t fix.
When tuning into Take Five by Dave Brubeck, I was treated to an expansive listen. Drums in the treble range sounded beautifully weighted and expressive, keys and lead saxophone were separated neatly, and double bass came through with a rich, full-bodied quality. Making use of LDAC took the experience to the next level too, with some added intricacies in the mid-range and finer detailing in percussion.
With Hallelujah by Jeff Buckley, guitar in the opening and vocals didn’t quite have the texture or resolution that more premium earbuds can supply, but still sounded clear and well-defined in the mix, even at the highest volumes.
And the earbuds performed well with just about every genre I threw at them. Even with the tech house track, Fascinator by Max Dean, pumping bass hit with phenomenal impact, and never seemed lethargic or overbearing. Vocal chops came through with clarity, and sub-bass — though not the most regimented or powerful I’ve heard — was prominent and didn’t muddy sounds elsewhere in the frequency range.
One thing I wasn’t so keen on, though, was the spatial audio mode. You have to switch LDAC off to access this (which is normal), but it doesn’t sound anywhere near as clean or precise as the standard tuning, so I decided to leave it off the vast majority of the time.
(Image credit: Future)I also want to touch on the look and design of the JBL Live Flex 4. Again, the buds are very comfortable in use, and although they offer a relaxed fit, I never felt as if they would fall out of my ears or leak excessive amounts of sound. The buds are also IP54-rated, meaning they’re protected against dust ingress and splashes of water, so it was never an issue if I wanted to use them on a rainy day.
Are the Flex 4 the most premium looking earbuds around? Perhaps not. They have a bit of a plasticky look, and don’t feel particularly luxurious. But their curved design is fairly attractive, and the case itself is finished to a high standard. The Flex 4 are also available in a wide range of colors, with plenty of vibrant options to choose from for those seeking a stand-out aesthetic.
Let’s conclude, then, by discussing price. The JBL Live Flex 4 come in at £179.99 (about $240 / AU$340), which means they cost about the same as their predecessors, the JBL Live Flex 3. Are they worth it? Well, for me, the answer is yes. They provide very solid sound quality, a fun and feature-rich smart case, genuinely good ANC for open-fit earbuds, and decent battery life to boot.
As a result, I consider the JBL Live Flex 4 to be a great pair of wireless earbuds that are more than worthy of my recommendation. They’re not perfect, and the open design comes with its ups and downs, but for the cost you’re getting great all-rounders that feel like a great alternative to the AirPods 5 with Wireless Charging — especially for Android users who want advanced features and higher-res Bluetooth streaming.
(Image credit: Future)JBL Live Flex 4 review: price & release dateThe JBL Live Flex 4 were revealed in May 2026, alongside their siblings, the JBL Live Beam 4 and JBL Live Buds 4. They arrived on the market about two years after their predecessor, the JBL Live Flex 3, was released.
JBL’s new open-fit earbuds come in at £179.99 (about $240 / AU$340), about the same as their predecessors cost when they launched (in the UK, that is). I’ve seen some limited availability in Australia, but there’s no news of a release date or pricing for the US just yet — we’ll update this review if and when further details emerge, though.
In terms of competition, the Live Flex 4 have one clear rival: the AirPods 5 with Wireless Charging. This model comes in at $149 / £149 / AU$219. And while we've yet to finalise our full review there, AirPods are stylish, offer impressive sound, a range of perks for iPhone owners and surprisingly effective ANC — but, of course, they don’t have the Flex 4’s nifty smart charging case.
JBL Live Flex 4 review: specsDrivers
12mm dynamic
Active noise cancellation
Yes
Battery life
7 hours (buds, with ANC on); 10 hours (buds, with ANC off); up to 48 hours (with charging case)
Weight
4.8g (per bud)
Connectivity
Bluetooth 6.0
Frequency range
20Hz-40kHz
Waterproofing
IP54
(Image credit: Future)Should I buy the JBL Live Flex 4?Attribute
Notes
Score
Features
Nifty smart case has no shortage of options, ANC good given limitations of open-fit earbuds.
4.5/5
Sound quality
Solid performance across the frequency range, with a spacious soundstage to match.
4/5
Design
Not the most premium-looking buds, but relaxed fit and customizable case are a hit.
4.5/5
Value
A fitting price for the sound and features on board.
4.5/5
Buy them if…You prefer a more open-style earbud
What makes the Live Flex 4 stand out from their siblings is their open-style design. Their more relaxed, low-key fit is ideal for anyone who dislikes the sensation of earbuds that require a proper in-ear seal, which can become irritating for some listeners after a while.
You’re enticed by the smart charging case
If you’re intrigued by the Flex 4’s interactive, touchscreen-fitted charging case, then I’ve got good news: it works really well. Sure, it’s a bit gimmicky, and you can perform all of the functions it provides (and more) with the JBL Headphones app, but it’s a convenient option if you have your source device in a bag, or want ultra-quick access to settings.
Premium sound is a must for you
While the Flex 4 sound good for a pair of open-fit earbuds, their design architecture is inherently limiting as far as audio fidelity goes. Their siblings, the Live Beam 4 and Live Buds 4, provide a proper in-ear seal, allowing them to deliver a bit more low-end thump and detail.
You want amazing noise cancelling
While I actually think that the Live Flex 4 perform well in the ANC department — especially considering that they’re open-style earbuds — they’re still not going to give you that layer of the silence that proper in-ear models can give you. Of course, if you want the best of the best in the noise-crushing world, then it's worth checking out the Bose QuietComfort Ultra Earbuds Gen 2.
JBL Live Flex 4
AirPods 5 with Wireless Charging
Huawei Freebuds Pro 5
Price
£179.99 (about $240 / AU$340)
$149 / £149 / AU$219
£179.99 (about $240 / AU$340)
Drivers
12mm dynamic
High-excursion dynamic
11mm dynamic woofer and micro-planar tweeter
Active noise cancellation
Yes
Yes
Yes
Battery life
7 hours (buds, with ANC on); 10 hours (buds, with ANC off); up to 48 hours (with charging case)
5 hours (buds, with ANC on); (buds, with ANC off); 22 hours (with charging case)
6 hours (buds, with ANC on); 9 hours (buds, with ANC off); up to 38 hours (with charging case)
Weight
4.8g (per bud)
4.3g (per bud)
5.5g (per bud)
Connectivity
Bluetooth 6.0
Bluetooth 5.3
Bluetooth 6.0
Frequency range
20Hz-40kHz
Not stated
10Hz-48kHz
Waterproofing
IP54
IP57
IP57 (buds); IP54 (case)
AirPods 5 with Wireless Charging
Could there be a clearer competitor for the Live Flex 4? The AirPoids 5 with Wireless Charging take up an open-fit design but pair it with noise-cancelling capabilities, and are also priced very similarly to their JBL rival, albeit a little cheaper. If you’ve got an Apple device, these are bound to be a strong option, with impressive sound quality, solid ANC, and gorgeous looks — though Android users may find them to be limited, features-wise, and they leave a lot to be desired when it comes to battery life. While our AirPods 5 reviews are still in progress, you can read our full AirPods 4 with ANC review (and look for discounts on the older model).
Huawei Freebuds Pro 5
OK, these are a little different, as they provide an actual seal — more like the JBL Live Beam 4. But if that’s all good with you, then the Huawei Freebuds Pro 5 are certainly worth checking out. We awarded them the elusive five-star rating, thanks to their impeccable noise cancelling, ultra-comfortable fit, and broad set of features — oh, and they sound pretty good as well. Read our full Huawei Freebuds Pro 5 review.
I spent two weeks testing the JBL Live Flex 4, testing them out at home, in an office environment, and while out on walks. This enabled me to get a strong grasp of their ANC capabilities, and understand what it’s like to live with them over a sustained period.
When listening to music, I typically streamed tracks over Tidal on my Xiaomi 17 phone, which supports LDAC, enabling me to get the highest quality listen out of the Flex 4 that I could. As always, I sifted through the TechRadar reference playlist to begin with, but I also bumped a bunch of tracks from my personal library.
More generally, I’ve spent years testing audio gear here at TechRadar, where I serve as a Senior Reviews Writer. I’ve put all sorts of audio tech to the test, be that premium wireless headphones like the Sony 1000X The Collexion or party speakers such as the Marshall Bromley 450. I’ve also reviewed a wide range of earbuds, including open-ear models like the Anker Soundcore AeroClip and the Edifier LolliClip.
Doorbell brands usually sell you the hardware cheap and charge you monthly for the privilege of seeing the footage. Aosu has gone the other way, and for that alone the R1 Ultra is worth your attention.
Video clips go to the AosuBase Mini, a small plug-in box that lives inside your house and does three jobs at once — Wi-Fi bridge, indoor chime, and storage. It holds 8GB and keeps a rolling 60 days of footage.
There is an optional cloud subscription, AosuProtect+, but unlike Ring's arrangement, the doorbell isn't hobbled without it. You get alerts, live view, two-way talk, custom detection zones, and full playback for nothing other than the purchase price.
(Image credit: Future)Detection is another strength. Rather than relying on a passive infrared sensor and hoping, Aosu layers radar and AI human recognition on top, which lets it judge distance and intent — approaching versus passing, lingering versus walking through.
There's also a Tone button hiding in the two-way talk screen. Tap it, and you can answer the door as either 'uncle' or 'clown', with Aosu's straight-faced explanation that this disguises your voice for privacy.
The uncle setting artificially deepens voices, transitioning women and children to something resembling a man to deter would-be intruders. Clown goes all high-pitched and distorted to mask your identity.
(Image credit: Future)Fortunately, the latter falls on the right side of sinister, so you can forget scaring off trick-or-treaters with imitations of South Park’s Mickey Mouse.
Where Aosu gets ahead of itself is resolution and framing. The sensor is 2560 x 1920, which is 4.9 megapixels in a 4:3 frame. That’s sharp, and a step up from 2K doorbells at this price, but not the claimed ‘UHD’, which would be 3,840 x 2,160.
The asserted 60% improvement over standard 2K only holds if the 2K you're comparing against is Aosu's own 3MP doorbell. An earlier version of the identical claim, on the identical camera, said 40%.
(Image credit: Future)Field of view should be taken with a pinch of salt, too. Aosu says 166 degrees, but that's the corner-to-corner measurement. In reality, it's 133 horizontal by 103 vertical, shot in a shallow 4:3 aspect ratio and no head-to-toe image tricks.
With realistic use, the battery should last six months between charges. The kicker is the cell isn’t quick-release, and juicing it from flat to full takes six hours. So that means unclipping the entire doorbell and going without it for quite a while.
Aosu Video Doorbell R1 Ultra: price & availabilityWith a list price of $135.99 / £139.99 (about AU$190), but usually discounted, the R1 Ultra is filed under ‘affordable’ and veers towards bargain territory if you find one hovering around the £100 mark.
At that price, the value case is strong, because the base station is in the box rather than a £50 upsell, and the 60 days of local recording would cost you a subscription almost anywhere else.
Over three years, that's the difference between a hundred pounds and several hundred more.
The R1 Ultra is fully functional without a subscription. Alerts, live view, two-way talk, detection zones, and 60 days of local playback are all included.
AosuProtect+ is the optional cloud add-on. In the UK, it's advertised at £9.99 (about $10 / AU$20) a month or £122.99 (about $160 / AU$230) a year, currently discounted to £3.49 (about $5 / AU$10) and £39.99 (about $50 / AU$80). Treat the higher figures with the same suspicion as the hardware list price.
The annual price is simply the monthly rate multiplied by twelve, so there's no built-in saving for paying up front, and £3.49 lands within pennies of what Aosu charges in dollars in the US. There’s a 30-day free trial if you wish to dip your toe.
(Image credit: Future)What it buys you is cloud backup rather than capability: 14 or 30 days of event recordings, playback from anywhere, faster scrubbing, and bulk downloads. AI facial recognition sits on the top tier and is offered for video doorbells only.
The argument for paying is that local storage is bound to the base station like Bilbo Baggins is bound to the ring in The Lord of The Rings. If it fails, someone takes it, or you inexplicably drop it in the fires of Mount Doom, your footage dies with it.
Aosu Video Doorbell R1 Ultra: specsFeature
Specification
Type
Battery-powered or hardwired video doorbell; base station required
Resolution
5MP (2560 x 1920) with WDR
Zoom
6 x digital
View
4:3 aspect ratio
Field of view
166 degrees diagonal [133 x 103 degrees]
Night vision
Infrared up to 6 feet / 10m
Audio
Two-way talk with voice disguise features
Motion detection
Radar, PIR and AI human recognition; customizable zones
Power
Rechargeable battery 5,000mAh, non-removable; USB-C cable included; 6 hours from flat; hardwire (8–24VAC)
Connectivity
Doorbell 2.4GHz only; AosuBase Mini dual-band 2.4GHz / 5GHz
Smart detection
AI human recognition; facial recognition requires AosuProtect+
Storage
Local, 8GB on AosuBase Mini, 60-day loop, no subscription; optional cloud with AosuProtect+
Smart home
Amazon Alexa, Google Assistant
Tamper protection
Pry detection with chime alert; footage retained locally
Weather
IP65
Finish
Black/silver
Dimensions
5 x 2 x 3 inches / 12.7 x 5.1 x 7.6cm
Aosu Video Doorbell R1 Ultra: design and installationThe R1 Ultra is a black plastic slab with silver flourishes similar to a Ring, and very little design ambition beyond flattering imitation.
Installation is straightforward and takes about half an hour all in. Bracket on the wall, doorbell clipped on top, base station plugged in somewhere central.
(Image credit: Future)Aosu recommends mounting at 4 feet / 1.2 meters rather than eye-level, which is lower than instinct suggests but necessary if you want the frame to reach the doorstep. Worth getting right the first time rather than re-drilling.
A 15-degree wedge is included if you need to angle it towards a path or a gate, along with a screwdriver, extension wires and wire nuts for anyone hardwiring to existing 8–24V doorbell wiring.
The base station isn't optional, and it isn't outdoors-rated. It's the storage, the chime, and the Wi-Fi bridge in one. It needs a mains socket permanently, and it's rated only to 14°F / −10°C, so it lives in the hall or the cupboard under the stairs and stays there.
(Image credit: Future)Detaching the whole unit from the wall for a full six-hour recharge via USB-C is a weak point, but a cable is bundled in the box.
A neat addition is pry detection. Try to lever the unit off its bracket, and it sounds a chime and pushes an alert, with footage on the base station indoors rather than on what’s being stolen.
Daylight is this doorbell’s happy place, with 5MP more than most similarly-priced rivals offer. Faces, delivery uniforms and parcel labels are legible rather than merely present.
Radar handles distance and movement, PIR picks up body heat, and the AI layer decides whether what it's looking at is a person. During testing, alerts felt instantaneous once someone reached the door.
After dark, expectations need managing. There is no color night vision and no spotlight.
FutureFutureFutureEight 850nm infrared LEDs offer monochrome up to 33 feet / 10 meters, and the manual warns mounting too close to a side wall will bounce IR back into the lens and fog the image. I’d pair the R1 Ultra with an outdoor light to make up for the shortfall.
Answering the door is well handled. Notifications arrive with a thumbnail of whatever triggered them, so you can tell a courier from a cat without opening the app, and tapping through starts a proper two-way video call rather than a one-way stream.
The 6x digital zoom lets you crop into a face or a label, though at 15fps and with a wide lens, it softens quickly.
FutureFutureQuick Reply issues an audible preset message when you can't talk. Somewhat boringly, they’re fixed, so you can’t edit the wording or add your own.
On connectivity, the doorbell itself is 2.4GHz only; the dual-band capability belongs to the AosuBase Mini, which talks to your router on 2.4 or 5GHz.
That's a sensible design for a battery device, but it means the camera-to-base link is on the crowded band and placement of the base matters more than usual. Plugged in 33 feet / 10 meters from my front door with the broadband router halfway, all was fine.
Live view includes a UHD/SD toggle to drop the quality when the connection struggles, and you can save a clip or a still straight to your phone's camera roll if you ever need to hand something to a neighbor or the police.
The six-month battery figure assumes up to ten events a day at 20 seconds each — about three-and-a-half minutes of recording daily. On a busy porch with a path or pavement in frame, expect considerably less.
Attribute
Notes
Score
Value
Local storage, included base station, and no monthly fee at around £100 make the maths hard to argue with.
4/5
Design
Solid and easy to install, but the base station needs a permanent socket, and recharging equals doorbell removal.
3.5/5
Performance
Sharp daylight video and excellent multi-sensor detection, let down by infrared-only night vision and overstated specs.
3/5
Buy it ifYou're sick of subscriptions
Sixty days of local recording on the included base, with nothing important behind a paywall, is undoubtedly attractive.
You'd rather not be yourself
Uncle and clown voice settings let anyone home alone answer the door sounding like someone else.
You want fewer useless alerts
The radar, PIR, and AI combination is a real step up from the single-sensor budget crowd, and it shows in your notification tray.
You have existing doorbell wiring
Hardwiring to 8–24V takes the recharging problem off the table entirely, and this is one of the cheaper doorbells that supports it.
Don't buy it ifYou need to see faces after dark
Infrared monochrome to 33 feet / 10 meters is all you get. There's no spotlight and no color low-light mode, so a night clip tells you someone was there, but not necessarily who.
You don’t want to remove the doorbell
No quick-release battery means every recharge is a six-hour outage with the unit off the wall and on your kitchen counter.
Aosu Video Doorbell R1 Ultra: also considerRing Battery Video Doorbell (2nd Gen)
Cheaper, shoots Retinal 2K with a genuine head-to-toe 1:1 view and color night vision, and installs without a hub. The trade-off is Ring's subscription model and Amazon's data record.
Eufy Video Doorbell C31
The closest like-for-like on the no-monthly-fee promise, with 2K video and a quick-release battery, though you'll want a HomeBase to get the most from it.
How I tested the Aosu Video Doorbell R1 Ultra
I mounted the R1 Ultra on my own front door and used it as the household's main entry camera for a fortnight, deliberately running it on local storage alone so the no-subscription claim could be tested as most buyers will experience it.
I checked live-view responsiveness and alert latency, reviewed clips in daylight and after dark, and tracked battery drain against Aosu's 180-day claim.
First reviewed September 2026
I probably shouldn't have told Dominic West that he plays punchable characters incredibly well when I interviewed him a few weeks ago, but it's painfully true. From The Affair to his Nationwide adverts (sorry, but that guy needs a slap), West has the sub-genre ingeniously sewn up.
As of October 2, we can add War to the list. Streaming on Sky TV (UK) and HBO Max (internationally), we follow the high-profile divorce of British celebrities Morgan (West) and Carla (Sienna Miller) after Carla sets up a honeytrap to expose Morgan's infidelity throughout their marriage.
They're not the only two who have beef, though. Morgan's law firm, Cathcarts, is a stalwart of the legal world, with Carla's firm, Taylor & Byrne, co-founded by an old Cathcarts employee who was refused partnership. Think old money meets nouveau riche, if this was a reality TV show.
What we're left with is the kind of delicious legal drama that only the unique complexities of British culture could pull off this well. The legal system, our consumption of popular celebrity culture and our continued fascination with people's private lives are eviscerated at every turn, and I frankly love being reminded that collectively, we're getting so much wrong.
But nobody is real here, so we can happily get stuck into berating them — and by God, do they give us a lot of ammunition. From Carla and Morgan's sneaky manoeuvres behind closed doors to new legal assistant Johnny (Archie Renaux), who thinks he's outwitting everyone around him when he's really ten steps behind, there's something for every armchair gossip.
War is the ultimate game of celebrity tennis — with no winnersNot only is the above trailer possibly one of the strongest of the year, but it aptly sets the scene for our modern Shakespeare tragedy without giving too much away. Unsurprisingly, Miller and West are our focal points, and as punchable as West makes Morgan, I'm actually floored by how much the pair is able to give these roles.
When you take a step back, the level of public scrutiny both Carla and Morgan receive is incredibly true to life. Both are mercilessly hounded by the press through relentless front-page tabloid articles, uncomfortable questions at events, and even lawyer-up red carpet premieres. It's a situation that I can vividly remember both actors being in before, and I applaud their remarkable level of personal and professional separation.
If it were me, I'd have had a major chip on my shoulder having to fictionally revisit the things that made me the most miserable over the last few decades of my life. But that's the beauty of good actors — being willing to put themselves on the line to allow viewers to engage as critically as possible. Trust me... I think you'll learn a lot from its premise.
The structure, overall, has one fatal flaw. From War's opening seconds, we're booted into the trenches of doomed marriage with such severity that we could collectively get a headache. But fast-forward seven episodes and the stakes are exactly the same. Think of the eight-episode season as a flatlining heart monitor... It's not a good result for a patient on The Pitt, and not entirely successful for us, either.
Celia Imrie and Nina Sosanya, take a bow (Image credit: HBO Max/Sky TV)But when things are good, they're golden (with the exception of the very underwhelming theme song). Biting, cutting, and scheming at every turn, War is a British legal drama at its best. None of this is possible without a cracking ensemble cast, of course, and there are two standouts in particular.
The first, which shouldn't be surprising, is Celia Imrie. From the trailer, you'd have guessed that she plays the High Court Judge overseeing the trial, but she's actually "freelance lawyer" Budgie working under Taylor & Byrne. I'm wording that generously, seeing as the minute she enters the room, all decisions pay deference to her presence. That's exactly how it should be, and if anyone was going to represent me in court, I'd want it to be Imrie.
After her epically infamous fart on The Celebrity Traitors season 1, I'm glad that Imrie's back on the international stage, proving that she's always been a world-class esteemed performer, don't you know. Seth Rogen's reference to her at the 2026 TV BAFTAs annoyed me endlessly... Calendar Girls was my favorite film at eight years old for good reason, man.
Then there's Nina Sosanya, a woman I have been parasocially in love with for decades. I can guarantee that you'll recognise her immediately thanks to her quiet commitment to making TV shows and movies infinitely better just by turning up in them. As head Cathcart's lawyer Bea, she's the Miranda Priestly of the British legal world, and her razor-sharp tongue provides lashings of delectable dialogue. Let's get her on Celebrity Traitors season 3, BBC.
With shortcomings so small, you'd be a fool to miss out on War next month. Even better: it's an anthology series, so expect a gripping defamation case to hit our screens in the future.
Ace Combat 8, the latest installment in Project Aces' long-running arcade flight sim series, is here. Packed inside this game's cargo hold is a medley of melodrama, mission types, and a beautiful new look, but it's somewhat over capacity when it comes to cutscenes.
Review infoPlatform reviewed: PC
Available on: PS5, Xbox Series X|S, PC
Release date: October 2, 2026
You'll discover this right from the off: Ace Combat 8 is the first game in the series where its cutscenes are entirely from a first-person perspective.
You step into the shoes of Rex, a pilot in service with the navy of the Federation of Central Usea (FCU). Sotoa, a nation of former nomads, has decided to emulate the Mongols of our reality and has conquest in mind, with the FCU already almost completely subjugated at the start of the game. Said shoes are likely very damp, with events kicking off on a life raft after the helicopter you were in went down.
Soon, you're back in the sky as a navigator for Jan "Rex" Cope, the original Rex, who is the mythical Wings of Theve of the game's subtitle. This strongly evokes the Ghost of Kyiv, a mythical pilot heavily propagandized early in the ongoing Russo-Ukrainian War, but Cope soon comes a cropper and gets killed, forcing you to take over his role.
A huge part of the game's narrative is about propaganda and the role that social media plays in modern warfare. Wings, as a pilot, can't be allowed to die, so you need to fill in and lead his Joker Flight unit. The former Rex, however, doesn't disappear; his spirit serves as a near-omniscient narrator for the rest of the game's escapades.
Flying without wings(Image credit: Bandai Namco Entertainment)What escapades they are, too. Over the course of the game, which is significantly longer than Ace Combat 7 (with my playthrough clocking in at around 18 hours to complete all 30 missions), you'll do almost everything you could reasonably expect a pilot to do. Dogfights, close air support, attacks on enemy ships, and more.
Best bit(Image credit: Bandai Namco Entertainment)Engaging the afterburners, breaking through the clouds, and shaking off an enemy missile never loses its charm.
Joker Flight will accompany you through most of it, and happily, every member has a well-fleshed-out personality. There's Ellington "Professor" Baxter, an easy-going and ever-professional former university lecturer; Tasha Severskaya, an ex-stunt pilot; and William "Noise" Coster, a taciturn musician who provides soundtracks to some of your battles.
While this lineup gets chopped and changed as you progress through the story, it's these three at your side for the vast majority of the game. They're great, and they make the entire squadron feel cohesive, and the stakes feel real when one of them gets in trouble.
The same can't be said for the wider crew of the Carrier Endurance, your home away from home. Your commander and D.D., a propaganda officer of the shadowy Enso Order corporation, are broadly cliched, and spending time with them feels tedious.
Unfortunately, you'll be watching a series of lengthy cutscenes before you're actually flying a plane, and the prologue mission is effectively another cutscene as you escape the vexatious aim of The Shadows, Sotoa's elite pilots.
(Image credit: Bandai Namco Entertainment)There's occasionally mild participation encouraged of you, such as standing up at attention or shaking someone's hand by pressing a button. I'm genuinely somewhat surprised that the series is bold enough to give us QTEs again, after the infamous tragicomedy of the "press triangle to fist pump" moment in Ace Combat: Assault Horizon.
You're not out of the woods when you're done with the first mission, though. Scattered throughout the game like little narrative landmines are cutscenes that go on for far too long and rarely give you a payoff worth your time. It feels like an Ace Combat game that was co-developed by Hideo Kojima at several points. But for all of this opera, the ending feels remarkably flat.
Without spoiling anything, the game spends hours building up a foe who then crumbles within a few minutes of dogfighting. Then it does it again! It makes the stakes feel wasted.
Cloudy with a chance of missiles(Image credit: Bandai Namco Entertainment)None of that matters, though, when you throttle up, break the sound barrier, and punch through the clouds in pursuit of an enemy, or dive, shrieking, towards a tank that you're about to remind about the superiority of being able to move in three dimensions. What clouds, too.
If I may digress for a moment, Ace Combat 8 has by far the best-looking clouds in any game I've played. They rely on proprietary software called Cloudly, and it leads to them feeling far more lifelike than ever before. Beautiful and light on the outside, dense in the middle, like an inverse cookie, they look and feel absolutely stupendous.
Ace Combat has always had a knack for making you feel like an ace, and this new entry is no exception. Wheeling around the sky like Maverick, pulling off impossible maneuvers in a plane like an A-10 Thunderbolt, and pulling up from a collision course at the last possible moment all fulfil the fantasy that the title promises.
Here, you are the greatest pilot to ever live. Difficulty is very well-balanced, too, with the Shadows feeling noticeably tougher, harking back to the days of facing off against enemy aces in F-22 Interceptor on the Mega Drive, if you're as old as I am.
(Image credit: Bandai Namco Entertainment)The problem is, spectacular clouds aside, there doesn't seem to be all that much that separates this game from Ace Combat 7. It harkens back to Ace Combat 5 in a lot of ways: for instance, you can give wingmen commands again and pick their aircraft, but it doesn't seem to make a ton of difference in-game.
Missions are broadly successful or unsuccessful regardless of how you command your wingmen, while loadouts only really matter to the extent of picking roughly the right aircraft for the mission. This leads to the issue of wondering why you'd choose to play this game rather than Ace Combat 7, other than the clouds looking nicer, especially as you can buy it with all DLC for a fraction of the price.
I'm realising how negative a lot of this sounds, and that really does just come down to how cumbersomely crowbarred in a lot of the story is. Once you've been through it and are willing to skip cutscenes, you're left with a brisk, exciting, fun game. It is perhaps emblematic of both the best and worst aspects of the Ace Combat series, with a narrative that feels it has earned plaudits that it doesn't deserve, while the meat of the game is absolutely fantastic.
One key measure of this is that I've been going back to it since I beat it, unlocking new aircraft from the large Aircraft Tree and replaying missions with different loadouts. I'll likely lose a lot of hours to the multiplayer, too, because, once again, it lacks a lot of what there is to dislike.
It's a game that is infuriating in its bloviation, but when you soar above the clouds and take down enemy jets, hearing their cries of confusion over the radio, you won't care anymore. A great, gorgeous game, but one that likes the sound of its own voice just a little too much.
Should you play Ace Combat 8: Wings of Theve?Play it if…You're jonesing for a new arcade flight sim
There’s really nothing else quite like a new Ace Combat game, and it’s well worth getting if you want an exciting, more arcade-like flying experience.
You want to live out all your Top Gun fantasies
There’s no official Top Gun crossover like the Ace Combat 7 DLC, but that doesn’t mean the game doesn’t deliver the same high-octane excitement as the film series.
You want to see the prettiest clouds in gaming
The Cloudly tech behind Ace Combat 8’s fluffy clouds is the real deal. They’re beautiful, realistic, and honestly the best I’ve ever seen in a game.
You're not a fan of melodrama worthy of a Telenovela
The storytelling here is easily the weakest part of the package. It sets up a lot that doesn’t land and is told through overly long, melodramatic cutscenes.
Accessibility settings are limited, but are present. The game features a colorblind mode that changes the green HUD to violet. There are also text-to-speech settings present.
In addition to these, you can also choose between two flight models: one that gives you more granular control over your aircraft and one that makes the game handle much more simply, making it more like After Burner.
How I reviewed Ace Combat 8: Wings of TheveTo review Ace Combat 8, I finished the entire main storyline and then went back to play several missions in Free Mission mode.
I ran the game at high graphics settings on my Nvidia RTX 4070-powered gaming PC and had a generally solid 60 fps that only dipped during particularly hectic moments. I’m yet to go online, but I'm looking forward to trying it out once the servers are populated.
I played the game using a standard Xbox Wireless Controller, which worked perfectly throughout.
Picking the Samsung Galaxy S26 FE to be your next phone would be a good decision. But whether it’s the best decision is the chewier question.
As has been the case for the past several years, Samsung has launched one final version of its Galaxy S flagship phones just before summer is out (in the US and UK, at least). This “Fan Edition” device aims to provide a more streamlined experience, focused on camera capabilities and AI, at a more approachable price.
However, Samsung has this all backwards. The Galaxy S26 FE’s cameras range from OK to weak, and the AI tools will soon be available on older models. Plus, the price hike this year makes the phone a little less of a bargain.
Arguably, the real reasons you’ll want a Galaxy S26 FE are its big screen, fast charging, strong battery life, and surprisingly good gaming performance. But then, if those are your priorities, you may still be better off looking elsewhere.
Confused yet? Hopefully the rest of my Galaxy S26 FE review will clear things up.
Samsung Galaxy S26 FE review: Price and availabilityThe Galaxy S26 FE first went on sale on September 4, 2026. It costs $699 / £699 / AU$1,149 for the standard version, which is $50 / £50 / AU$50 more than the Galaxy S25 FE cost when it launched.
As a result, it means there’s a $200 / £180 / AU$400 difference between this phone and the cheapest full-fat Samsung Galaxy S26, or a $400 / £400 / AU$700 gap if you compare it to the similarly-sized Galaxy S26 Plus. However, those Galaxy S26 models have twice as much storage as the S26 FE by default, which makes direct comparison a little complicated.
Also, keep in mind that you get six free months of Google AI Pro (worth about $120 / £114 / AU$200 at current subscription prices) with the purchase of the S26 FE. It’s an offer worth taking advantage of for the 5TB of cloud storage capacity alone, let alone the extra Gemini powers.
Samsung Galaxy S26 FE pricingUS price
UK price
AU price
128GB
$699
£699
AU$1,149
256GB
$799
£799
AU$1,299
512GB
Not available
£949
AU$1,599
Before we continue, here’s a rundown of the Galaxy S26 FE’s hardware.
Dimensions:
161.6 x 76.9 x 7.4mm
Weight:
193g
Display:
6.7-inch FHD+ Dynamic AMOLED 2X
Resolution:
1080 x 2340
Refresh rate:
60/120Hz
Peak brightness:
1,900 nits
CPU:
Exynos 2500
RAM:
8GB
Storage:
128GB / 256GB / 512GB
OS:
Android 17 with One UI 9, 7 years of updates
Cameras:
50MP wide (f/1.8), 12MP ultra-wide (f/2.2), 8MP 3x telephoto (f/2.4)
Selfie Camera:
12MP front camera (f/2.2)
Battery:
4,900mAh
Charging:
45W wired, 15W wireless
Colors:
Blueberry, Graphite, Pistachio
Samsung Galaxy S26 FE review: Design(Image credit: Richard Priday / TechRadar)Looks-wise, there are no major body changes between the Galaxy S26 FE and the S25 FE — not that Samsung really needed to make any.
You still have three camera lenses embedded directly into the back of the phone, then flat rails with rounded corners around the sides, leading to a big display with a single centered selfie camera on the front.
Unless you’re able to tell the S26 FE apart from a regular S26 by the color of the handset, the big telltales that you’re holding an FE are the shiny back panel, instead of a matte texture, and the larger chin bezel under the display.
(Image credit: Richard Priday / TechRadar)Speaking of colors, Samsung’s three offerings are Graphite, Blueberry and Pistachio (pictured). The gray option will satisfy anyone who isn’t fussed about the color of their phone, or who knows they’ll be using a case to add some style to their new handset, but I do like both the blue and pale green options for the balance they strike between boldness and subtlety.
Like the other Galaxy S26 models, the S26 FE is rated IP68 for water/dust-resistance, which we expect from any flagship phone launching today. However, it uses Gorilla Glass Victus Plus on both sides to protect against scratches and smashes, which is a generation behind what you get on the S26 or S26 Plus.
The 6.7-inch AMOLED display of the Galaxy S26 FE matches the size of the Galaxy S26 Plus’ display, but that’s where the similarities end. The FE’s panel only reaches an FHD resolution, rather than the Plus’ more detailed QHD, and peaks at 1,900 nits of brightness according to Samsung’s testing, rather than the 2,600-nit rating of the other S26 models.
Even though the S26 FE can’t deliver as much brightness or as many pixels as Samsung’s top-tier displays, the detail and the colors of the FE’s panel are still strong, and the screen remains fairly legible even out in what remains of the summer sun.
The bezels around the Galaxy S26 FE’s display are thicker than they are on the Galaxy S26 Plus or other premium Samsung phones, which is an understandable limitation given the FE’s lower price. It doesn’t interfere with whatever you want to watch on the screen, but it’s a difference you’ll notice if you have used other recent Galaxy S phones.
The Galaxy S26 FE comes pre-installed with OneUI 9, Samsung’s take on Android 17. That actually puts it ahead of the other Galaxy S26 models, which currently can only access OneUI 9 as a beta version.
OneUI 9 gives the FE a lot of tools to play with. My FanCam — the video subject tracking tool which just debuted on the much more expensive Galaxy Z Fold 8/ Galaxy Flip 8 series — is here and works just as capably. That’s joined by other AI-powered editing features like Photo Assist and Audio Eraser.
(Image credit: Richard Priday / TechRadar)Meanwhile, for productivity, you have Now Brief and its new custom cards option to give you even more personalized updates all in one place, more supported apps for Now Nudge, plus expanded cross-app functions and Gemini.
Perhaps most importantly for the Galaxy S26 FE, it comes with Samsung’s full seven generations of Android and seven years of security updates promise. That’s the same as other Galaxy S models, and one additional year over what the cheaper Galaxy A57 gets, which is crucial for the value proposition of the S26 FE.
The Galaxy S26 FE’s camera loadout has a 50MP main rear lens as its centerpiece. You also have 12MP ultra-wide and 8MP 3x telephoto cameras on the back, as well as a 12MP selfie camera embedded in the display. This is the same basic setup as the Galaxy S25 FE, and also what you'll find on the Galaxy S26 and Galaxy S26 Plus, except that the more expensive phones get a higher-resolution 10MP zoom camera instead.
Richard Priday / TechRadarRichard Priday / TechRadarRichard Priday / TechRadarRichard Priday / TechRadarRichard Priday / TechRadarRichard Priday / TechRadarOur first example is a main camera shot of some brightly colored buildings in London’s Soho neighborhood. It’s a tricky one for any camera to balance due to the shaded shopfronts on the left side and the sky and brightly lit building in the center and right side. The Galaxy S26 FE still has some detail to offer in the shadowed brickwork, but Samsung’s strength in bright colors is on full display on the other half of this particular image.
Keeping with the main camera but looking out at the London Eye at night, we see another strong attempt from the Galaxy S26 FE. There’s some softness in the details, but the balance of colors between the lights and the night sky still makes for an appealing shot.
Looking across a sun-scorched park with the ultra-wide camera, we see a shot with plenty of scenery in it, with little to no distortion at the edges. The brightness and colors could use work, though, as even accounting for the patchy grass and overcast sky, things look overly drab.
The two shots of the church bell tower, one at 2x magnification using the S26 FE’s main camera and the other using the 3x telephoto camera, reveal how best to zoom in with this phone’s particular cameras. The in-sensor 2x zoom still keeps the subtleties of the colors and markings within the brickwork and foliage of the shot, thanks to the 50MP main sensor having plenty of pixels to spare even when zoomed in. However, while the telephoto camera has greater reach, the resulting image is darker and flatter, as you might expect from the lower-resolution sensor. It’s more of a trade-off than I’d like to see on a flagship phone’s zoom camera.
I’m normally a fan of Samsung selfies, but I’m not sure I like how the highlights are exposed in this particular shot. Samsung’s excellent portrait algorithm has applied the perfect level of bokeh to this image, however, cutting around my head, and especially my glasses, accurately and applying a gentle blur to the leaves behind.
Having gone through these samples, you’ll see that the Galaxy S26 FE’s photography potential is reasonable, at least for what are arguably the two most important cameras. For future generations of S FE, though, Samsung could do with upping its game if it wants to continue claiming this is a flagship product.
Here’s an area where I was pleasantly surprised by the Galaxy S26 FE. Samsung’s own Exynos 2500 chipset sits inside the S26 FE, rather than the Snapdragon 8 Elite Gen 5 chip that basically all the other top Samsungs of 2026 are using. But that hasn’t stopped the S26 FE from turning in some decent scores.
As the table below reveals, the Exynos 2500 lags behind slightly in CPU single-core results, but is on par with or ahead of the pack on the rest of the tests. It’s a long way out in front on the Solar Bay benchmark, no doubt thanks to the Exynos’ GPU, which is well-suited to the ray-tracing graphics that this test focuses on.
Samsung Galaxy S26 FE benchmark scoresSamsung Galaxy S26 FE
Geekbench 6 single-core
2,361
Geekbench 6 multi-core
7,831
3DMark Wild Life Extreme Stress Test best
5,116
3DMark Wild Life Extreme Stress Test low
3,456
3DMark Solar Bay
10,526
Bearing only 8GB of RAM compared to the 12GB in other premium Samsung phones, the Galaxy S26 FE does struggle with multitasking or intensive apps. While you can still game on this phone happily, it’s not a handset you’ll want to do anything more practical on than standard browsing and messaging.
Samsung offers the same 4,900mAh battery capacity in the Galaxy S26 FE as it does in the Galaxy S26 Plus. However, according to Samsung’s official battery estimates, the S26 FE doesn’t offer the same battery life, managing 29 hours of video playback compared to the S26 Plus’ 31 hours or the S26’s 30 hours.
For me, I used about 40% of the phone’s battery during a typical day’s use. This included some work, some photography, and some social media scrolling and video watching. The Galaxy S26 FE could definitely survive two days of regular use before needing to charge, as you would hope from a phone with this size of battery.
The Galaxy S26 FE is still equipped for 45W wired charging and 15W wireless charging. That’s the same wired speed as the S26 Plus and Ultra, but the wireless charging is slower, since the FE is not Qi2 compatible.
Using a 45W charger, Samsung estimates a 69% refill for the S26 FE in half an hour. In my own test, I found the S26 FE managed to fill to 43% in 15 minutes and to 100% in 58 minutes. Considering the battery life this phone can manage, a complete refuel in under an hour and getting over two-fifths full in a quarter-hour isn’t bad at all, even if faster options are out there.
Attributes
Notes
Rating
Value
The cheapest Galaxy S26 model, although not by much post-price hike.
3.5/5
Design
Looks like any other Galaxy S26, except with some fun, unique colors and slightly less durable materials.
4/5
Display
Big and colorful, but lacking detail.
3.5/5
Software
Samsung’s best features come pre-installed, but will soon be available on older phones too.
4/5
Camera
The main and selfie cameras produce strong photos, but the phone’s let down by its ultra-wide and telephoto lenses.
3/5
Performance
A below average RAM capacity is understandable for the price, and the phone still plays games really well.
4/5
Battery
Less efficient than other S26 models, but still long-lasting and fairly fast-charging.
4/5
Buy it if…You want the big premium Samsung experience for the smallest possible price
The Galaxy S26 FE is the cheapest Galaxy S26, and joint second largest. If you want a big display and long battery life from Samsung for less, then this is the model for you.
Exclusive software and AI features don’t interest you
You do get some excellent tools and toys to play with within One UI 9, but since this update will come to older Samsungs soon enough, this isn’t a phone to buy for this reason alone.
Your performance needs are about average
If you like to play games on your phone, or know you’ll spend long days away from a charger, the S26 FE will suit you well. It doesn’t offer the very best in either power or battery life, but arguably it’s a case of diminishing returns if you spend any more than this.
You care about photography
Taking snaps with the main and selfie cameras on the S26 FE is easy and results in great photos. But if you want more detail or know you like taking ultra-wide or zoom shots, there are many other phones that will suit you better.
You want the best long-term value
While the S26 FE is cheaper to buy right now, we’d recommend looking at one of Samsung’s more expensive S26 models, or those of another Android brand, if you’re hoping to get as many happy years out of your new phone as possible.
If you’re willing to spend even a few dollars/pounds more
The Galaxy S26 FE sits just below the starting price of typical flagship phones. That means you could save yourself 100 bucks or so, or you can spend the extra and unlock the next tier of hardware and features that could provide far more value to you.
Samsung Galaxy S26 Plus
It’s quite a bit more expensive, but as an investment, it may be worth spending the extra money over the Galaxy S26 FE’s price to secure a phone that outperforms it on every important metric.
Read our full Samsung Galaxy S26 Plus review
Samsung Galaxy S26
Costing only two hundred bucks more than the S26 FE, the standard S26 gives you the premium Samsung experience at the best possible price, even if the display is quite a bit smaller.
Read our full Samsung Galaxy S26 review
Samsung Galaxy S26 FE
Samsung Galaxy S26 Plus
Samsung Galaxy S26
Price (at launch):
$699 / £699 / AU$1,149
$1,099 / £1,099 / AU$1,849
$899 / £879 / AU$1,349
Dimensions:
161.6 x 76.9 x 7.4mm
158.4 x 75.8 x 7.3mm
149.6 x 71.7 x 7.2mm
Weight:
193g
190g
167g
Display:
6.7-inch Dynamic AMOLED 2X
6.7-inch Dyanmic AMOLED 2X
6.3-inch Dynamic AMOLED 2x
Resolution:
1080 x 2340
3,120 x 1,440
2340 x 1080
Refresh rate:
60/120Hz
120 Hz adaptive
120 Hz adaptive
Peak brightness:
1,900 nits
2,600 nits
2,600 nits
Processor:
Exynos 2500
Qualcomm Snapdragon 8 Elite Gen 5 for Galaxy
Qualcomm Snapdragon 8 Elite Gen 5 for Galaxy
RAM:
8GB
12GB
12GB
Storage:
128GB / 256GB / 512GB
256GB, 512GB
256GB, 512GB
OS:
Android 17 with One UI 9, 7 years of updates
Android 16 with One UI 8.5, 7 years of updates
Android 16 with One UI 8.5, 7 years of updates
Cameras:
50MP wide (f/1.8), 12MP ultra-wide (f/2.2), 8MP 3x telephoto (f/2.4)
50MP main (f/1.8), 12MP ultra-wide (f/2.2), 10MP telephoto with 3x optical zoom (f/2.4)
50MP main (f/1.8), 12MP ultra-wide (f/2.2), 10MP telephoto with 3x optical zoom (f/2.4)
Selfie cameras:
12MP front camera (f/2.2)
12MP (f/2.2)
12MP (f/2.2)
Battery:
4,900 mAh
4,900 mAh
4,300mAh
Charging:
45W wired, 15W wireless
45W wired, 15W wireless
25W wired, 15W wireless
Colors:
Blueberry, Graphite, Pistachio
Cobalt Violet, Sky Blue, White, Black, Silver Shadow, Pink Gold
Cobalt Violet, Sky Blue, White, Black, Silver Shadow, Pink Gold
How I tested the Samsung Galaxy S26 FEWhy you can trust TechRadar☑️ 100s of smartphones reviewed
☑️ 15 years of product testing
☑️ Over 16,000 products reviewed in total
☑️ Nearly 200,000 hours testing tech
I reviewed the Samsung Galaxy S26 FE over the course of two weeks as a work phone, using it for writing stories, answering emails and messages, watching video and playing games. I did this both at home and on the move with a SIM card installed.
Specific tests included running Geekbench 6 CPU benchmarks and 3DMark graphics benchmarks, a charging speed test using a compatible third-party charger, the taking of hundreds of photos across all of the S26 FE’s cameras to test image quality, and the careful monitoring of battery drain during use to figure out how reasonable the manufacturer’s battery life promises are.
First reviewed: September 2026
It’s been two years since the release of the Huawei Watch D2, and the Chinese brand has decided it’s time to offer an upgraded model, aptly named the D3. With the D range, Huawei was the first to introduce blood pressure monitoring capabilities in a smartwatch, providing a simple way to track the important health metric without needing a dedicated monitor.
In my Huawei Watch D2 review I gave the smartwatch an impressive 4.5 stars. I had high praise for the blood pressure monitoring and clever strap but was left underwhelmed by the bulky design, high price tag, and lack of smartwatch features. Huawei has gone some way to address these concerns, but not universally and in some ways not enough. As a result, the D3 isn’t yet one of the best smartwatches around, but as a medical-first device, it approaches and blends the lifestyle and medical aspects well.
The D3 is primarily a medical device rather than one of the best fitness trackers or running watches. That’s evidenced by its CE-MDR certification that is proudly presented on the watch’s product page. Its commitment to medical reporting means that at times Huawei is forced to prioritize function over form. This is the case with the blood pressure monitoring.
(Image credit: Future / Paul Hatton)To be able to offer ambulatory blood pressure monitoring, the D3 has to feature a mechanical airbag and pressure sensor. This is attached to the inside of the strap, and even though Huawei has narrowed the thickness of the airbag compared to the D2, it still lacks the comfort of most other smartwatches that don’t have this onboard hardware.
In testing I didn’t have time to compare the D3 against a dedicated blood pressure cuff, but I was able to check it was in the same range as my expectations. The watch takes less than a minute to carry out the check, and all you have to do is place the watch at the same height as your heart and remain still.
Because single measurements are insufficient to determine trends, I used the auto-reminder feature to alert me so I didn’t forget to capture regular measurements. After doing this for several days, I was able to see how my blood pressure changed depending on the time of day and what my average performance was. In addition to this, it’s possible to easily generate a report to share with your GP from within the Huawei Health app.
(Image credit: Future / Paul Hatton)Blood pressure monitoring is the D3’s magic trick, but the watch offers other health tracking, including pulse wave arrhythmia analysis and beat-by-beat ECG. During testing, I experienced repeated poor signal issues with the ECG measurements, but the arrhythmia analysis worked perfectly.
While I was working through the health metrics, I strapped on a dedicated heart rate monitor so I could carry out an independent comparison. Both devices reported identical rates, although the D3 was slightly slower to adjust to changes. Finding each health metric is simple and straightforward thanks to the rotating crown control, and the interface clearly guides you through the required steps to perform each one.
Huawei has worked hard to reduce the bulk of the watch, stripping off 2mm from the watch thickness and bringing it down to just 11.3mm. That’s pretty impressive, but unfortunately this measurement doesn’t take into consideration the sensor, which protrudes out the bottom, and despite its smooth surface, feels a little uncomfortable on the wrist.
(Image credit: Future / Paul Hatton)The watch features an enlarged 1.92-inch AMOLED display with 3000 nits of peak brightness. It is colorful, vibrant, and looks fantastic, offering the same excellent visibility when used both inside and out. Unfortunately, there’s still a significant black strip between the edge of the display and the surrounding case, which results in a lot of dead space. An edge-to-edge display would look far better.
The D3 prioritizes medical reporting, but it also offers over 100 workout modes and a generous range of smart features, including notifications, Bluetooth calling, NFC payments, and voice note recording. These elevate the usefulness of the watch and make it a handy companion for everyday life.
I said earlier that I had an issue with the price of the D2, and Huawei has done nothing to make the D3 more affordable. In fact, it’s £50 more than its predecessor was at launch. The only thing that softens the blow is that if you purchase the watch before September 22, 2027, then you’ll get 10 months of Bupa Well+ health services.
It’s hard to get away from the fact that the D3 is focused on a very niche market. If you’re concerned about your blood pressure or would simply like to keep an eye on it, then the D3 is the perfect solution. The trade-off is a watch that is bulkier and slightly more uncomfortable than most other smartwatches of this size, but we have to give the D3 credit: when even Apple Watches are focused on hypertension detection via LEDs, Huawei continues to back its unique cuff-based solution.
(Image credit: Future / Paul Hatton)Huawei Watch D3: SpecificationsComponent
Huawei Watch D3
Price
£399
Dimensions
46.5 × 41mm and 11.3mm thick
Weight
40g without strap
Case/bezel
Aluminium alloy
Display
1.92 inch AMOLED (408 × 480 pixels, PPI 328)
GPS
No
Battery life
1 day with the ABPM feature enabled or 6 days without
Connection
Bluetooth and NFC
Water resistance
No
Huawei Watch D3: ScorecardCategory
Comment
Score
Value
A mid-range smartwatch where you’re paying for the advanced blood pressure monitoring feature.
4/5
Design
A modern, good-looking smartwatch that is only let down by its bulk.
4/5
Features
Capable of recording an impressive set of medical-related metrics with workout modes and smart features to boot.
4/5
Performance
Reliably accurate results with blood pressure recordings within my expected range. Heart rate measurements were spot on.
4/5
(Image credit: Future / Paul Hatton)Huawei Watch D3: Should I buy?Buy it if...You need a convenient way to track your blood pressure at home
It takes just one minute per test, and the app generates an exportable report that you can take to your GP.
You’re interested in more medical-related metrics
With pulse wave arrhythmia analysis and beat-by-beat ECG, the Huawei D3 offers more than most watches in this area.
Don't buy it if...You have no interest in blood pressure monitoring
There are better smartwatches at this price point that offer a more well-rounded smartwatch experience.
You want a fitness tracker
If you’re a fitness enthusiast or runner, then a dedicated watch for these purposes will serve you better.
Also considerHuawei Band 11 Pro
A better all-round fitness tracker that’s significantly more affordable. It also offers some medical measurements, including arrhythmia analysis and sleep apnea monitoring, but no blood pressure.
Read our Huawei Band 11 Pro reviewView Deal
Apple Watch Series 11
Apple Watches feature a 'hypertension detection' feature, that can indicate trends over 30 days, but not instant blood pressure readings like Huawei's cuff.
Read our Apple Watch Series 11 reviewView Deal
How I tested the Huawei Watch D3I wore the D3 for 72 hours, and during this time I performed every medical test that the watch offers. Despite not having time to compare the blood pressure results to a dedicated monitor, I was able to compare the heart rate readings to a heart rate monitor. I also used the D3 to keep on top of my notifications, check the weather, and record some voice notifications.
First reviewed: September 2026
The Eufy Omni E35 is a near-perfect robot vacuum cleaner and mop. It fits into the Eufy range below its flagship S series, but above the cheaper C and older X series. The headline figure of 35,000 Pa suction is seriously impressive, and so too is the E35’s ability to keep itself clean by cleverly preventing fine dust from blocking the filter.
The charge dock empties the dust bin, replenishes the mopping water tank, then washes and dries the mop with hot water and warm air, for truly hands-off cleaning. Navigation is also strong, the Eufy app works very well, and the E35’s overall cleaning performance fully justifies the four-figure price tag.
(Image credit: Future)The E35 lacks the fragrance diffuser, water ozonator and more advanced, AI-powered navigation tech of the pricier Omni S2, but by cutting those Eufy has created a robovac that focuses on what really matters — cleaning your floors and, crucially, keeping itself clean too.
It’s the self-cleaning that impresses most here, with the mop still looking brand-new after weeks of use, the roller free from tangled hair, and the dust bin filter not caked in dust. Add that to the E35’s strong suction and pivoting mop that stretches into the edges of every room while pushing down to scrub stains and scraping itself clean as it goes, and this is truly a set-it-and-forget-it robovac.
Eufy Omni E35: price and availabilityThe Omni E35 is the new flagship of Eufy’s E series of robotic vacuum cleaners. It sits above the E25 and E38, but below the company’s top-end S tier and overall flagship, the Omni S2.
At £999 (or $1,299.99 in the US; Australian price to be confirmed), the E35 is £100 more than the E28, but sits comfortably below the older £1,299 S1 and £1,599 S2.
Interestingly, the E35 has slightly more suction power than the range-topping S2, and features much of the same self-cleaning and anti-tangle tech. But it misses out on the S2’s fragrance system, water electrolysis function, and more advanced vision system — all of which helps explain the price difference, and also why the newer model’s base station is more compact.
Announced at the IFA technology trade show in September 2026, the Eufy Omni E35 is available now.
Feature
Specification
Max suction
35,000 Pa
Robot diameter
14.2 in (360 mm)
Robot height
4.6 in (116 mm)
Dock dimensions
14.6 x 17.6 x 16.2 in / 270 x 447 x 411 mm
Dust bin volume (base)
2.5 liters
Water tank volume (base)
2.5 liters clean / 2.4 liters dirty
Base type
Charging self-emptying, refilling, hot-water mop washing, hot-water drying
Max threshold clearance
1.2 in (30 mm)
Mop type
Self-cleaning roller
Mop pad lifting
Automatic on carpet
Max runtime
180 minutes
Eufy Omni E35: designThe Omni E35 continues Eufy’s trend of making its robotic vacuums more compact, while increasing performance. The robot itself is broadly similar to most other members of the Omni family — more on that in a moment — but the docking station is where a reduction in bulk is most obvious. It makes the X10 Pro, my go-to recommendation from just a couple of years ago, look ancient.
The E35 dock is shorter and sleeker, with a glossy plastic front, a neat bit of silver trim above the robot’s parking space, and a couple of discreet integrated handles for lifting out the clean and dirty water tanks. At about 16 inches (around 40cm) tall, and about the same depth front to back, including the robot when parked, the whole system is pleasingly compact. So much so, you’d be forgiven for wrongly thinking this is an entry-level robovac with limited performance.
FutureFutureFutureFutureFutureInside that compact dock there’s a charger and dust bag, two tanks for clean and dirty water, and a system that washes the mop with 60C (140F) hot water then dries it with 55C (131F) hot air. There’s also a compartment for installing Eufy’s own floor detergent (one bottle is included in the box), and Eufy says the system can operate entirely hands-free for up to 60 days. This will depend on the size of your home and how frequently you clean, of course, but it’s an impressive claim nonetheless.
The robot itself measures 4.6 in (116mm) tall and 14.2 in (360mm) in diameter, making it slightly larger in both directions than the Eufy S2, and fractionally taller than the Dyson Spot+Scrub AI. It’s also slightly taller than my trusty Eufy X10 Pro, and while the E35 managed to clean beneath all of my furniture, you’ll want to check it against yours to be sure it’ll fit.
FutureFutureFutureFutureEufy claims a maximum threshold clearance of 1.2 inches (30.5mm), which isn’t as impressive as the Omni S2, but I’ve had no issues with it driving up from wooden floors onto carpeting.
A clever piece of design sees fine dust separated and ushered into the robot’s onboard bin before it reaches the filter. Eufy claims this ensures the E35 retains its headline 35,000 Pa suction power for longer, since the filter doesn’t get clogged up quite so quickly. After testing I found dust had started to settle in the filter, but this was easily cleaned and didn’t appear to affect performance. There’s also an anti-tangle comb to stop hair wrapping around the roller brush.
Eufy’s E series of robotic vacuums has impressed for a few years now, so my expectations were high when the E35 arrived. Thankfully, the E35 delivered. The setup process will be familiar to anyone who has used a Eufy Omni, or really any robotic vacuum cleaner, before.
Assembly takes just a couple of minutes, then it’s just a case of filling the clean water tank, installing the included detergent bottle, switching it on and following the instructions of the Eufy app. The E35 then completed a mapping expedition, driving into every room and quickly using its vision system to map the walls, floors and doorways.
Furniture isn’t automatically added to the map, as it is with the pricier Omni S2, but I’ve never cared much for that feature and would rather see the floor plan unobscured.
@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-1789662423095-ng0fonoi0 *, #fv-chart-1789662423095-ng0fonoi0 *:before, #fv-chart-1789662423095-ng0fonoi0 *:after, #fv-chart-1789662423095-ng0fonoi0-slideshow *, #fv-chart-1789662423095-ng0fonoi0-slideshow *:before, #fv-chart-1789662423095-ng0fonoi0-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1789662423095-ng0fonoi0, #fv-chart-1789662423095-ng0fonoi0-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1789662423095-ng0fonoi0 {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1789662423095-ng0fonoi0.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1789662423095-ng0fonoi0.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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1789662423095-ng0fonoi0-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0-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-1789662423095-ng0fonoi0-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-1789662423095-ng0fonoi0-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-1789662423095-ng0fonoi0-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1789662423095-ng0fonoi0-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1789662423095-ng0fonoi0-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-1789662423095-ng0fonoi0-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-1789662423095-ng0fonoi0-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-1789662423095-ng0fonoi0-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789662423095-ng0fonoi0 .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1789662423095-ng0fonoi0 .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1789662423095-ng0fonoi0.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-image-compare-expand-btn, #fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-image-compare-expand-btn:hover, #fv-chart-1789662423095-ng0fonoi0 .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-bar-row, #fv-chart-1789662423095-ng0fonoi0 .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789662423095-ng0fonoi0.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1789662423095-ng0fonoi0.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1789662423095-ng0fonoi0 .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1789662423095-ng0fonoi0 .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0.mobile-view .fv-pie-container,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-row,#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-stacked-product,#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-grouped-bar-product,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-bar-row,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-stacked-product,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1789662423095-ng0fonoi0.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-1789662423095-ng0fonoi0.mobile-view .fv-bar-label,#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-grouped-product-title,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-bar-label,#fv-chart-1789662423095-ng0fonoi0.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-1789662423095-ng0fonoi0.mobile-view .fv-bar-container,#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-cluster,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-bar-container,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662423095-ng0fonoi0.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-1789662423095-ng0fonoi0.mobile-view .fv-x-axis-wrapper,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-x-axis-label-space,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-x-axis-chart-space,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-benchmark-title,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-dropdown-title,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-carousel-nav-btn,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-chart-title,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-chart-subhead,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-versus-header,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-versus-select-wrapper,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-versus-vs,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-versus-select-container,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-versus-select,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-stl-shop-all-btn,#fv-chart-1789662423095-ng0fonoi0.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-1789662423095-ng0fonoi0.mobile-view .fv-stl-shop-all-logo,#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-stl-shop-all-icon,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-bar-commentary-inline,#fv-chart-1789662423095-ng0fonoi0.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789662423095-ng0fonoi0.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1789662423095-ng0fonoi0 .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-bar-row,#fv-chart-1789662423095-ng0fonoi0 .fv-stacked-product,#fv-chart-1789662423095-ng0fonoi0 .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-bar-label,#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-bar-container,#fv-chart-1789662423095-ng0fonoi0 .fv-bar-cluster {width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662423095-ng0fonoi0 .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662423095-ng0fonoi0 .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-x-axis-label-space {display: none !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0 .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-1789662423095-ng0fonoi0 .fv-stl-shop-all-logo,#fv-chart-1789662423095-ng0fonoi0 .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789662423095-ng0fonoi0 .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789662423095-ng0fonoi0.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Carpet cleaning test 1","description": "Vacuuming crumbs from carpeted floor using Eufy Omni E35","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-09-17T16:27:03.095Z","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": []}BeforeAfterwindow.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-1789662423095-ng0fonoi0', false); });} else {initialize('fv-chart-1789662423095-ng0fonoi0', false);}})();As with all robotic vacuums, I had to manually adjust the E35’s map slightly, repositioning some walls and naming each of the rooms. It’s not really a failing of the vision system, just a part of the setup process. That said, the robot mistakenly added an enormous room to the sides of my kitchen and living room that doesn’t really exist. I imagine it saw through to the garden and decided that was part of the floor plan, but frustratingly phantom rooms can’t be deleted, so I binned the entire map and started again. The second map was created accurately, and remained so throughout the rest of my month-long test.
The headline figure for this robot is its 35,000 Pa of maximum suction power. This is actually 5,000 Pa more than the flagship Omni S2, and provides fantastic results on carpet and hard floors alike. Going back to my X10 Pro again – a vacuum that I awarded four stars just two years ago, and launched at £800 / $800 – and that manages just 8,000 Pa, a quarter of the new E35.
The result of all that power is deeply impressive cleaning performance. The vacuuming is especially good, with carpets visibly cleaner after using Max mode. It’s probably overkill for a little-and-often cleaning schedule, but if the battery can survive a full carpet vacuum in Max mode, why wouldn’t you use it?
@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-1789662435817-p844seqfk *, #fv-chart-1789662435817-p844seqfk *:before, #fv-chart-1789662435817-p844seqfk *:after, #fv-chart-1789662435817-p844seqfk-slideshow *, #fv-chart-1789662435817-p844seqfk-slideshow *:before, #fv-chart-1789662435817-p844seqfk-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1789662435817-p844seqfk, #fv-chart-1789662435817-p844seqfk-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1789662435817-p844seqfk {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1789662435817-p844seqfk.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1789662435817-p844seqfk.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-1789662435817-p844seqfk .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-1789662435817-p844seqfk-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1789662435817-p844seqfk-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1789662435817-p844seqfk-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-1789662435817-p844seqfk-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-1789662435817-p844seqfk-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-1789662435817-p844seqfk-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1789662435817-p844seqfk-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1789662435817-p844seqfk-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-1789662435817-p844seqfk-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-1789662435817-p844seqfk-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-1789662435817-p844seqfk-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1789662435817-p844seqfk .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1789662435817-p844seqfk .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1789662435817-p844seqfk .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1789662435817-p844seqfk .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1789662435817-p844seqfk .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1789662435817-p844seqfk .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1789662435817-p844seqfk .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1789662435817-p844seqfk .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1789662435817-p844seqfk .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1789662435817-p844seqfk .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1789662435817-p844seqfk .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1789662435817-p844seqfk .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1789662435817-p844seqfk .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789662435817-p844seqfk .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789662435817-p844seqfk .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1789662435817-p844seqfk .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1789662435817-p844seqfk.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1789662435817-p844seqfk .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1789662435817-p844seqfk .fv-image-compare-expand-btn, #fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-image-compare-expand-btn:hover, #fv-chart-1789662435817-p844seqfk .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1789662435817-p844seqfk .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1789662435817-p844seqfk .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1789662435817-p844seqfk .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1789662435817-p844seqfk .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1789662435817-p844seqfk .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1789662435817-p844seqfk .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1789662435817-p844seqfk .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1789662435817-p844seqfk .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1789662435817-p844seqfk .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1789662435817-p844seqfk .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-bar-row, #fv-chart-1789662435817-p844seqfk .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789662435817-p844seqfk.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1789662435817-p844seqfk.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1789662435817-p844seqfk .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1789662435817-p844seqfk .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1789662435817-p844seqfk .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1789662435817-p844seqfk .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1789662435817-p844seqfk .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1789662435817-p844seqfk .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1789662435817-p844seqfk .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1789662435817-p844seqfk .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1789662435817-p844seqfk .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1789662435817-p844seqfk .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1789662435817-p844seqfk .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1789662435817-p844seqfk .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1789662435817-p844seqfk .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1789662435817-p844seqfk .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1789662435817-p844seqfk .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .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-1789662435817-p844seqfk.mobile-view .fv-pie-container,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-row,#fv-chart-1789662435817-p844seqfk.mobile-view .fv-stacked-product,#fv-chart-1789662435817-p844seqfk.mobile-view .fv-grouped-bar-product,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-bar-row,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-stacked-product,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1789662435817-p844seqfk.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-1789662435817-p844seqfk.mobile-view .fv-bar-label,#fv-chart-1789662435817-p844seqfk.mobile-view .fv-grouped-product-title,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-bar-label,#fv-chart-1789662435817-p844seqfk.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-1789662435817-p844seqfk.mobile-view .fv-bar-container,#fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-cluster,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-bar-container,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662435817-p844seqfk.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-1789662435817-p844seqfk.mobile-view .fv-x-axis-wrapper,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-x-axis-label-space,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-x-axis-chart-space,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-benchmark-title,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-dropdown-title,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-carousel-nav-btn,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-chart-title,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-chart-subhead,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-versus-header,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-versus-select-wrapper,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-versus-vs,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-versus-select-container,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-versus-select,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-stl-shop-all-btn,#fv-chart-1789662435817-p844seqfk.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-1789662435817-p844seqfk.mobile-view .fv-stl-shop-all-logo,#fv-chart-1789662435817-p844seqfk.mobile-view .fv-stl-shop-all-icon,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-bar-commentary-inline,#fv-chart-1789662435817-p844seqfk.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789662435817-p844seqfk.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789662435817-p844seqfk.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1789662435817-p844seqfk .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789662435817-p844seqfk .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789662435817-p844seqfk .fv-bar-row,#fv-chart-1789662435817-p844seqfk .fv-stacked-product,#fv-chart-1789662435817-p844seqfk .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-bar-label,#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-bar-container,#fv-chart-1789662435817-p844seqfk .fv-bar-cluster {width: 100% !important;}#fv-chart-1789662435817-p844seqfk .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662435817-p844seqfk .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662435817-p844seqfk .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789662435817-p844seqfk .fv-x-axis-label-space {display: none !important;}#fv-chart-1789662435817-p844seqfk .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789662435817-p844seqfk .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789662435817-p844seqfk .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789662435817-p844seqfk .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789662435817-p844seqfk .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789662435817-p844seqfk .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789662435817-p844seqfk .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789662435817-p844seqfk .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789662435817-p844seqfk .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789662435817-p844seqfk .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789662435817-p844seqfk .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789662435817-p844seqfk .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789662435817-p844seqfk .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789662435817-p844seqfk .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789662435817-p844seqfk .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789662435817-p844seqfk .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-1789662435817-p844seqfk .fv-stl-shop-all-logo,#fv-chart-1789662435817-p844seqfk .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789662435817-p844seqfk .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789662435817-p844seqfk .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789662435817-p844seqfk .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789662435817-p844seqfk.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Carpet cleaning test 2","description": "Vacuuming oats from carpeted floor using Eufy Omni E35","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-09-17T16:27:15.817Z","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": []}BeforeAfterwindow.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-1789662435817-p844seqfk', false); });} else {initialize('fv-chart-1789662435817-p844seqfk', false);}})();I often left it in Max for the kitchen and living room, or switched down to the middling Turbo mode for bigger cleans in a bid to avoid charging mid-task. It’s also worth noting how the robot automatically increases suction when carpet or rugs are detected.
After a fortnight of regular use — and being impressed by the E35’s performance – I began TechRadar’s specific robovac tests. Vacuuming is first tested with a crumb mix made of flour and crushed biscuit spread across both carpet and hard floors, then oats are scattered across the same areas to test its ability to pick up larger debris.
@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-1789662446064-xfo8dug44 *, #fv-chart-1789662446064-xfo8dug44 *:before, #fv-chart-1789662446064-xfo8dug44 *:after, #fv-chart-1789662446064-xfo8dug44-slideshow *, #fv-chart-1789662446064-xfo8dug44-slideshow *:before, #fv-chart-1789662446064-xfo8dug44-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1789662446064-xfo8dug44, #fv-chart-1789662446064-xfo8dug44-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1789662446064-xfo8dug44 {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1789662446064-xfo8dug44.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1789662446064-xfo8dug44.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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1789662446064-xfo8dug44-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1789662446064-xfo8dug44-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-1789662446064-xfo8dug44-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-1789662446064-xfo8dug44-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-1789662446064-xfo8dug44-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1789662446064-xfo8dug44-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1789662446064-xfo8dug44-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-1789662446064-xfo8dug44-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-1789662446064-xfo8dug44-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-1789662446064-xfo8dug44-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789662446064-xfo8dug44 .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1789662446064-xfo8dug44 .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1789662446064-xfo8dug44.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1789662446064-xfo8dug44 .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1789662446064-xfo8dug44 .fv-image-compare-expand-btn, #fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-image-compare-expand-btn:hover, #fv-chart-1789662446064-xfo8dug44 .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1789662446064-xfo8dug44 .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1789662446064-xfo8dug44 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1789662446064-xfo8dug44 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1789662446064-xfo8dug44 .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1789662446064-xfo8dug44 .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1789662446064-xfo8dug44 .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1789662446064-xfo8dug44 .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1789662446064-xfo8dug44 .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1789662446064-xfo8dug44 .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1789662446064-xfo8dug44 .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-bar-row, #fv-chart-1789662446064-xfo8dug44 .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789662446064-xfo8dug44.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1789662446064-xfo8dug44.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1789662446064-xfo8dug44 .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1789662446064-xfo8dug44 .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1789662446064-xfo8dug44 .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1789662446064-xfo8dug44 .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1789662446064-xfo8dug44 .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1789662446064-xfo8dug44 .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1789662446064-xfo8dug44 .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1789662446064-xfo8dug44 .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1789662446064-xfo8dug44 .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1789662446064-xfo8dug44 .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1789662446064-xfo8dug44 .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1789662446064-xfo8dug44 .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1789662446064-xfo8dug44 .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1789662446064-xfo8dug44 .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1789662446064-xfo8dug44 .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44.mobile-view .fv-pie-container,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-row,#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-stacked-product,#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-grouped-bar-product,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-bar-row,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-stacked-product,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1789662446064-xfo8dug44.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-1789662446064-xfo8dug44.mobile-view .fv-bar-label,#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-grouped-product-title,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-bar-label,#fv-chart-1789662446064-xfo8dug44.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-1789662446064-xfo8dug44.mobile-view .fv-bar-container,#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-cluster,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-bar-container,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662446064-xfo8dug44.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-1789662446064-xfo8dug44.mobile-view .fv-x-axis-wrapper,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-x-axis-label-space,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-x-axis-chart-space,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-benchmark-title,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-dropdown-title,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-carousel-nav-btn,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-chart-title,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-chart-subhead,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-versus-header,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-versus-select-wrapper,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-versus-vs,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-versus-select-container,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-versus-select,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-stl-shop-all-btn,#fv-chart-1789662446064-xfo8dug44.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-1789662446064-xfo8dug44.mobile-view .fv-stl-shop-all-logo,#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-stl-shop-all-icon,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-bar-commentary-inline,#fv-chart-1789662446064-xfo8dug44.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789662446064-xfo8dug44.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789662446064-xfo8dug44.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1789662446064-xfo8dug44 .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789662446064-xfo8dug44 .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789662446064-xfo8dug44 .fv-bar-row,#fv-chart-1789662446064-xfo8dug44 .fv-stacked-product,#fv-chart-1789662446064-xfo8dug44 .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-bar-label,#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-bar-container,#fv-chart-1789662446064-xfo8dug44 .fv-bar-cluster {width: 100% !important;}#fv-chart-1789662446064-xfo8dug44 .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662446064-xfo8dug44 .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662446064-xfo8dug44 .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789662446064-xfo8dug44 .fv-x-axis-label-space {display: none !important;}#fv-chart-1789662446064-xfo8dug44 .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789662446064-xfo8dug44 .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789662446064-xfo8dug44 .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789662446064-xfo8dug44 .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789662446064-xfo8dug44 .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789662446064-xfo8dug44 .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789662446064-xfo8dug44 .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789662446064-xfo8dug44 .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789662446064-xfo8dug44 .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789662446064-xfo8dug44 .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789662446064-xfo8dug44 .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789662446064-xfo8dug44 .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789662446064-xfo8dug44 .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789662446064-xfo8dug44 .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789662446064-xfo8dug44 .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789662446064-xfo8dug44 .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-1789662446064-xfo8dug44 .fv-stl-shop-all-logo,#fv-chart-1789662446064-xfo8dug44 .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789662446064-xfo8dug44 .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789662446064-xfo8dug44 .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789662446064-xfo8dug44 .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789662446064-xfo8dug44.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Hard floor cleaning test 1","description": "Vacuuming crumbs from hard floor using Eufy Omni E35","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-09-17T16:27:26.064Z","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": []}BeforeAfterwindow.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-1789662446064-xfo8dug44', false); });} else {initialize('fv-chart-1789662446064-xfo8dug44', false);}})();The Omni E35’s quietest mode — which I recorded at just 60 decibels – was very fast, but left noticeable tracks of the crumb mix behind. The same happened when ramping up to Turbo mode (64 decibels) and switching to a more thorough clean. But, thankfully, the carpet was left absolutely flawless by using the ultra-powerful Max mode (67 decibels), along with the Deep intensity option and with two passes of the target area. This took longer, but the results absolutely justified the extra time and energy.
(While talking about noise levels, I recorded the dust bin emptying process at 85 dB from about two feet away.)
@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-1789662456772-bndieyrs9 *, #fv-chart-1789662456772-bndieyrs9 *:before, #fv-chart-1789662456772-bndieyrs9 *:after, #fv-chart-1789662456772-bndieyrs9-slideshow *, #fv-chart-1789662456772-bndieyrs9-slideshow *:before, #fv-chart-1789662456772-bndieyrs9-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1789662456772-bndieyrs9, #fv-chart-1789662456772-bndieyrs9-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1789662456772-bndieyrs9 {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1789662456772-bndieyrs9.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1789662456772-bndieyrs9.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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1789662456772-bndieyrs9-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1789662456772-bndieyrs9-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-1789662456772-bndieyrs9-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-1789662456772-bndieyrs9-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-1789662456772-bndieyrs9-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1789662456772-bndieyrs9-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1789662456772-bndieyrs9-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-1789662456772-bndieyrs9-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-1789662456772-bndieyrs9-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-1789662456772-bndieyrs9-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789662456772-bndieyrs9 .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1789662456772-bndieyrs9 .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1789662456772-bndieyrs9.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1789662456772-bndieyrs9 .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1789662456772-bndieyrs9 .fv-image-compare-expand-btn, #fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-image-compare-expand-btn:hover, #fv-chart-1789662456772-bndieyrs9 .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1789662456772-bndieyrs9 .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1789662456772-bndieyrs9 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1789662456772-bndieyrs9 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1789662456772-bndieyrs9 .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1789662456772-bndieyrs9 .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1789662456772-bndieyrs9 .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1789662456772-bndieyrs9 .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1789662456772-bndieyrs9 .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1789662456772-bndieyrs9 .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1789662456772-bndieyrs9 .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-bar-row, #fv-chart-1789662456772-bndieyrs9 .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789662456772-bndieyrs9.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1789662456772-bndieyrs9.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1789662456772-bndieyrs9 .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1789662456772-bndieyrs9 .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1789662456772-bndieyrs9 .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1789662456772-bndieyrs9 .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1789662456772-bndieyrs9 .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1789662456772-bndieyrs9 .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1789662456772-bndieyrs9 .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1789662456772-bndieyrs9 .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1789662456772-bndieyrs9 .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1789662456772-bndieyrs9 .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1789662456772-bndieyrs9 .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1789662456772-bndieyrs9 .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1789662456772-bndieyrs9 .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1789662456772-bndieyrs9 .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1789662456772-bndieyrs9 .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9.mobile-view .fv-pie-container,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-row,#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-stacked-product,#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-grouped-bar-product,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-bar-row,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-stacked-product,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1789662456772-bndieyrs9.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-1789662456772-bndieyrs9.mobile-view .fv-bar-label,#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-grouped-product-title,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-bar-label,#fv-chart-1789662456772-bndieyrs9.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-1789662456772-bndieyrs9.mobile-view .fv-bar-container,#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-cluster,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-bar-container,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662456772-bndieyrs9.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-1789662456772-bndieyrs9.mobile-view .fv-x-axis-wrapper,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-x-axis-label-space,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-x-axis-chart-space,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-benchmark-title,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-dropdown-title,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-carousel-nav-btn,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-chart-title,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-chart-subhead,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-versus-header,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-versus-select-wrapper,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-versus-vs,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-versus-select-container,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-versus-select,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-stl-shop-all-btn,#fv-chart-1789662456772-bndieyrs9.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-1789662456772-bndieyrs9.mobile-view .fv-stl-shop-all-logo,#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-stl-shop-all-icon,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-bar-commentary-inline,#fv-chart-1789662456772-bndieyrs9.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789662456772-bndieyrs9.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789662456772-bndieyrs9.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1789662456772-bndieyrs9 .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789662456772-bndieyrs9 .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789662456772-bndieyrs9 .fv-bar-row,#fv-chart-1789662456772-bndieyrs9 .fv-stacked-product,#fv-chart-1789662456772-bndieyrs9 .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-bar-label,#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-bar-container,#fv-chart-1789662456772-bndieyrs9 .fv-bar-cluster {width: 100% !important;}#fv-chart-1789662456772-bndieyrs9 .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662456772-bndieyrs9 .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662456772-bndieyrs9 .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789662456772-bndieyrs9 .fv-x-axis-label-space {display: none !important;}#fv-chart-1789662456772-bndieyrs9 .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789662456772-bndieyrs9 .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789662456772-bndieyrs9 .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789662456772-bndieyrs9 .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789662456772-bndieyrs9 .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789662456772-bndieyrs9 .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789662456772-bndieyrs9 .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789662456772-bndieyrs9 .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789662456772-bndieyrs9 .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789662456772-bndieyrs9 .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789662456772-bndieyrs9 .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789662456772-bndieyrs9 .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789662456772-bndieyrs9 .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789662456772-bndieyrs9 .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789662456772-bndieyrs9 .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789662456772-bndieyrs9 .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-1789662456772-bndieyrs9 .fv-stl-shop-all-logo,#fv-chart-1789662456772-bndieyrs9 .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789662456772-bndieyrs9 .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789662456772-bndieyrs9 .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789662456772-bndieyrs9 .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789662456772-bndieyrs9.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Hard floor cleaning test 2","description": "Vacuuming oats from hard floor using Eufy Omni E35","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-09-17T16:27:36.773Z","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": []}BeforeAfterwindow.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-1789662456772-bndieyrs9', false); });} else {initialize('fv-chart-1789662456772-bndieyrs9', false);}})();The oat test is usually more difficult, because robovacs tend to flick them across hard floors with their rotating side brushes. But the E35 performed surprisingly well, with Turbo mode paired with the Deep intensity and two passes being enough to completely clear the debris. The Max power option wasn’t required. Oats scattered on carpet were tackled even more successfully, as a single pass with the least power, least thorough setting did the job perfectly.
Moving to the mop, and the Omni E35 continues to impress. It’s a similar system to that of Eufy’s flagship Omni S2, with a roller that cleans itself during use, then is washed and dried when back at the docking station. Eufy claims its HydroJet 2.0 system removes 99.99 percent of bacteria “for a TÜV-certified baby-friendly clean” – in other words, it has been assessed and certified by a group of independent German testing organizations.
@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-1789662465216-rhj1ydqa6 *, #fv-chart-1789662465216-rhj1ydqa6 *:before, #fv-chart-1789662465216-rhj1ydqa6 *:after, #fv-chart-1789662465216-rhj1ydqa6-slideshow *, #fv-chart-1789662465216-rhj1ydqa6-slideshow *:before, #fv-chart-1789662465216-rhj1ydqa6-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1789662465216-rhj1ydqa6, #fv-chart-1789662465216-rhj1ydqa6-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1789662465216-rhj1ydqa6 {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1789662465216-rhj1ydqa6.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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1789662465216-rhj1ydqa6-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6-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-1789662465216-rhj1ydqa6-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-1789662465216-rhj1ydqa6-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-1789662465216-rhj1ydqa6-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1789662465216-rhj1ydqa6-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1789662465216-rhj1ydqa6-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-1789662465216-rhj1ydqa6-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-1789662465216-rhj1ydqa6-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-1789662465216-rhj1ydqa6-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789662465216-rhj1ydqa6 .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1789662465216-rhj1ydqa6.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-image-compare-expand-btn, #fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-image-compare-expand-btn:hover, #fv-chart-1789662465216-rhj1ydqa6 .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-bar-row, #fv-chart-1789662465216-rhj1ydqa6 .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789662465216-rhj1ydqa6.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1789662465216-rhj1ydqa6.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1789662465216-rhj1ydqa6 .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1789662465216-rhj1ydqa6 .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6.mobile-view .fv-pie-container,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-row,#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-stacked-product,#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-grouped-bar-product,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-bar-row,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-stacked-product,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1789662465216-rhj1ydqa6.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-1789662465216-rhj1ydqa6.mobile-view .fv-bar-label,#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-grouped-product-title,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-bar-label,#fv-chart-1789662465216-rhj1ydqa6.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-1789662465216-rhj1ydqa6.mobile-view .fv-bar-container,#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-cluster,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-bar-container,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662465216-rhj1ydqa6.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-1789662465216-rhj1ydqa6.mobile-view .fv-x-axis-wrapper,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-x-axis-label-space,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-x-axis-chart-space,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-benchmark-title,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-dropdown-title,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-carousel-nav-btn,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-chart-title,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-chart-subhead,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-versus-header,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-versus-select-wrapper,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-versus-vs,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-versus-select-container,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-versus-select,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-stl-shop-all-btn,#fv-chart-1789662465216-rhj1ydqa6.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-1789662465216-rhj1ydqa6.mobile-view .fv-stl-shop-all-logo,#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-stl-shop-all-icon,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-bar-commentary-inline,#fv-chart-1789662465216-rhj1ydqa6.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789662465216-rhj1ydqa6.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1789662465216-rhj1ydqa6 .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-bar-row,#fv-chart-1789662465216-rhj1ydqa6 .fv-stacked-product,#fv-chart-1789662465216-rhj1ydqa6 .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-bar-label,#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-bar-container,#fv-chart-1789662465216-rhj1ydqa6 .fv-bar-cluster {width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789662465216-rhj1ydqa6 .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789662465216-rhj1ydqa6 .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-x-axis-label-space {display: none !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6 .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-1789662465216-rhj1ydqa6 .fv-stl-shop-all-logo,#fv-chart-1789662465216-rhj1ydqa6 .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789662465216-rhj1ydqa6 .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789662465216-rhj1ydqa6.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Hard floor mopping test","description": "Mopping ketchup from hard floor using Eufy Omni E35","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-09-17T16:27:45.216Z","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": []}BeforeAfterwindow.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-1789662465216-rhj1ydqa6', false); });} else {initialize('fv-chart-1789662465216-rhj1ydqa6', false);}})();The 290 mm (11.4 inch) mop pushes down with 1.6 kg (3.53 lb) of pressure, so it isn’t merely wiping across the floor, but giving it a good scrub too, and is cleaned by a pair of scrapers eight times per second to stop dirt getting trapped in its fibers. The roller can slide outwards by 32 mm (1.26 inches), ensuring it cleans right up to the wall, while dirty water is moved away from the mop and into an onboard tank, ready to be deposited into the charge station.
Even without quantitative testing, I know the E35’s mop works extremely well, because the dirty water held in the charge station tank is properly filthy. As I found with the Eufy Omni S2, it’s worth emptying this tank quite frequently, because if you wait until it’s full you’ll be dealing with some seriously stinky water when you pour it down the sink.
During TechRadar’s standard mopping test – which involves a small amount of dried-on ketchup – the Omni E35 at first struggled to clean the stain from a wooden floor. But upping the water supply to 100 percent soon fixed this, and the ketchup was entirely lifted on the second pass.
Interestingly, the E35 does not have the ClearMind AI function of the pricier S2, which recognizes floor types, stains and different kinds of mess, then cleans appropriately. Instead, the E35 lets you decide what’s best – and, in my experience, that’s almost always a whole-room clean with the middle or most powerful suction, about 75 percent of the maximum water flow for mopping, the most intense cleaning pattern, and everything done twice.
The S2’s AI system is clever, and sees the robot work harder to clean messier areas, but the end result — at least on my carpets and wooden floors — was perfectly comparable between the two robots. It also lacks the S2’s water ozonization feature, but that’s by no means a dealbreaker.
(Image credit: Future)Finally, I tested the E35’s obstacle avoidance tech by having it clean an area littered with a shoe, a sock and a USB cable. The robot performed perfectly, driving neatly around each object but not touching any of them. I was particularly impressed by its ability to dodge the USB cable, since this is something even high-end robovacs can struggle with. Eufy says the robot can recognize over 280 common household objects, and can navigate fine in darkness as well as daylight.
It isn’t perfect though. The E35 sometimes navigated too confidently, driving up and over obstacles that should be avoided. I have a vinyl record stand on the floor, the front of which stands about an inch off the ground; the E35 frequently drove up onto this, pushing some records around in the process.
The Omni E35 uses the same app as all other Eufy robotic vacuums, and it’s an app shared by the company’s home security products too. The app has matured nicely over the past few years into something that works very well, giving you access to just the right amount of customization without it feeling overwhelming.
The creation and editing of maps works well (albeit with the phantom room I mentioned earlier), and it’s easy to select the right parameters for each clean. Or, you can set up a clean (kitchen with intense mopping and two passes, for example) and save that as a commonly used chore. This can then be added to the home screen of the app, where it’s ready to activate with one tap.
It’s also possible to create a home screen widget, where a single tap fires up the E35 and sets it to work.
Other useful app settings include the child lock, which stops small people (and pets!) from pressing the robot’s two buttons, and off-peak charging, which you can program to coincide with cheaper overnight electricity rates. Since I have an electric car tariff, I set the Eufy to charge overnight when power is significantly cheaper.
All that’s missing is a mop-only mode. This is a little frustrating for Eufy to omit, since I’d prefer to have my robot tackle a dried-on hard floor stain with its mop first, rather than vacuum the floor. Ideally, the robot should approach such a stain in reverse, mop-first, rather than risk it transferring onto the brushes before applying water and detergent.
Attribute
Notes
Score
Value
The Omni E35 feels like much better value than some of Eufy’s more expensive robotic vacuum cleaners, especially from its flagship S family. The E35 offers superb vacuuming and strong mopping performance, with smart navigation and a compact design at a more accessible price than models with superfluous bells and whistles.
4.5
Design
Compact and relatively attractive, as far as robovacs go, the E35 benefits from a clever anti-tangle brush design, along with a high-performance mop that washes and dries itself. It cleans right into the corners of every room, but can’t raise itself up to clear raised rugs as well as the more expensive Omni S2.
4.5/5
Performance
Its superb vacuuming performance is reason enough to buy this robovac. It really does leave your carpets spotless, while also mopping hard floors well, navigating reliably, and thoroughly cleaning itself after every use. It also works quickly, quietly, and reliably, not once getting stuck or lost during my testing.
4.5/5
App
Eufy’s app continues to impress, with a clean interface that is easy to navigate. It offers just the right amount of functionality and customization without being overwhelming. Shortcuts and iOS widget functionality are welcome additions, along with a child lock and off-peak charging.
4.5/5
Buy it ifYou want a hands-off robovac
Eufy says this robot can operate hands-free for up to 60 days – and even after that, you’ll likely only need to replenish the water and perhaps replace the dust bag. The self-cleaning really is that good.
I set up the Eufy Omni E35 in my own home and lived with it for a couple of weeks. During this time it was my only vacuum cleaner and mop, tackling every room of my home and cleaning up after an energetic puppy too.
After that fortnight, I conducted TechRadar’s standard robovac tests to analyze its suction, mopping and navigation skills, as well as monitoring how loud it is and checking the performance of its self-cleaning system.
You don’t need the flagship
Eufy’s Omni S2 is phenomenally good, but it’s also much more expensive than this model. Do you really need a fragrance diffuser and ozonated water? If not, save the money and buy this one instead.
You value mopping as much as vacuuming
If your floors are evenly split between hard floors and carpet, this robot could be perfect for you, since it manages both surfaces equally well.
Don't buy it ifYou’re on a budget
Despite being much less expensive than Eufy’s top-end S2, the E35 is still a pricey robovac. If you’re on a tighter budget, consider a more affordable model with less powerful suction or a less comprehensive mopping and self-cleaning system.
You have large doorway thresholds or thick rugs
Although the E35’s ability to clear 1.2-inch thresholds is good, some models can climb higher. So if you have significant differences in floor height between rooms you might want to look elsewhere.
How I tested the Eufy Omni E35@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-1789660635467-0b8tnk56l *, #fv-chart-1789660635467-0b8tnk56l *:before, #fv-chart-1789660635467-0b8tnk56l *:after, #fv-chart-1789660635467-0b8tnk56l-slideshow *, #fv-chart-1789660635467-0b8tnk56l-slideshow *:before, #fv-chart-1789660635467-0b8tnk56l-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1789660635467-0b8tnk56l, #fv-chart-1789660635467-0b8tnk56l-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1789660635467-0b8tnk56l {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1789660635467-0b8tnk56l.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1789660635467-0b8tnk56l.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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1789660635467-0b8tnk56l-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l-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-1789660635467-0b8tnk56l-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-1789660635467-0b8tnk56l-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-1789660635467-0b8tnk56l-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1789660635467-0b8tnk56l-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1789660635467-0b8tnk56l-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-1789660635467-0b8tnk56l-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-1789660635467-0b8tnk56l-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-1789660635467-0b8tnk56l-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789660635467-0b8tnk56l .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1789660635467-0b8tnk56l .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1789660635467-0b8tnk56l.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1789660635467-0b8tnk56l .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1789660635467-0b8tnk56l .fv-image-compare-expand-btn, #fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-image-compare-expand-btn:hover, #fv-chart-1789660635467-0b8tnk56l .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1789660635467-0b8tnk56l .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1789660635467-0b8tnk56l .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1789660635467-0b8tnk56l .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1789660635467-0b8tnk56l .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1789660635467-0b8tnk56l .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1789660635467-0b8tnk56l .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1789660635467-0b8tnk56l .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1789660635467-0b8tnk56l .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1789660635467-0b8tnk56l .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1789660635467-0b8tnk56l .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-bar-row, #fv-chart-1789660635467-0b8tnk56l .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789660635467-0b8tnk56l.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1789660635467-0b8tnk56l.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1789660635467-0b8tnk56l .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1789660635467-0b8tnk56l .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1789660635467-0b8tnk56l .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1789660635467-0b8tnk56l .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1789660635467-0b8tnk56l .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1789660635467-0b8tnk56l .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1789660635467-0b8tnk56l .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1789660635467-0b8tnk56l .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1789660635467-0b8tnk56l .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1789660635467-0b8tnk56l .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1789660635467-0b8tnk56l .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1789660635467-0b8tnk56l .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1789660635467-0b8tnk56l .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1789660635467-0b8tnk56l .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1789660635467-0b8tnk56l .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l.mobile-view .fv-pie-container,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-row,#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-stacked-product,#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-grouped-bar-product,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-bar-row,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-stacked-product,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1789660635467-0b8tnk56l.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-1789660635467-0b8tnk56l.mobile-view .fv-bar-label,#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-grouped-product-title,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-bar-label,#fv-chart-1789660635467-0b8tnk56l.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-1789660635467-0b8tnk56l.mobile-view .fv-bar-container,#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-cluster,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-bar-container,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789660635467-0b8tnk56l.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-1789660635467-0b8tnk56l.mobile-view .fv-x-axis-wrapper,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-x-axis-label-space,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-x-axis-chart-space,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-benchmark-title,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-dropdown-title,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-carousel-nav-btn,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-chart-title,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-chart-subhead,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-versus-header,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-versus-select-wrapper,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-versus-vs,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-versus-select-container,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-versus-select,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-stl-shop-all-btn,#fv-chart-1789660635467-0b8tnk56l.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-1789660635467-0b8tnk56l.mobile-view .fv-stl-shop-all-logo,#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-stl-shop-all-icon,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-bar-commentary-inline,#fv-chart-1789660635467-0b8tnk56l.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789660635467-0b8tnk56l.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1789660635467-0b8tnk56l .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789660635467-0b8tnk56l .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789660635467-0b8tnk56l .fv-bar-row,#fv-chart-1789660635467-0b8tnk56l .fv-stacked-product,#fv-chart-1789660635467-0b8tnk56l .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-bar-label,#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-bar-container,#fv-chart-1789660635467-0b8tnk56l .fv-bar-cluster {width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789660635467-0b8tnk56l .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789660635467-0b8tnk56l .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789660635467-0b8tnk56l .fv-x-axis-label-space {display: none !important;}#fv-chart-1789660635467-0b8tnk56l .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789660635467-0b8tnk56l .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789660635467-0b8tnk56l .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789660635467-0b8tnk56l .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789660635467-0b8tnk56l .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789660635467-0b8tnk56l .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789660635467-0b8tnk56l .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789660635467-0b8tnk56l .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789660635467-0b8tnk56l .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789660635467-0b8tnk56l .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789660635467-0b8tnk56l .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789660635467-0b8tnk56l .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789660635467-0b8tnk56l .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l .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-1789660635467-0b8tnk56l .fv-stl-shop-all-logo,#fv-chart-1789660635467-0b8tnk56l .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789660635467-0b8tnk56l .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789660635467-0b8tnk56l .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789660635467-0b8tnk56l .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789660635467-0b8tnk56l.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Hard floor cleaning test","description": "Vacuuming oats from hard floor using Eufy Omni E35","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-09-17T15:57:15.468Z","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": []}Hard floor cleaning testVacuuming oats from hard floor using Eufy Omni E35
BeforeAfterwindow.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-1789660635467-0b8tnk56l', false); });} else {initialize('fv-chart-1789660635467-0b8tnk56l', false);}})();@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-1789660646444-sr9dsdz95 *, #fv-chart-1789660646444-sr9dsdz95 *:before, #fv-chart-1789660646444-sr9dsdz95 *:after, #fv-chart-1789660646444-sr9dsdz95-slideshow *, #fv-chart-1789660646444-sr9dsdz95-slideshow *:before, #fv-chart-1789660646444-sr9dsdz95-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1789660646444-sr9dsdz95, #fv-chart-1789660646444-sr9dsdz95-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1789660646444-sr9dsdz95 {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1789660646444-sr9dsdz95.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1789660646444-sr9dsdz95.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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1789660646444-sr9dsdz95-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95-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-1789660646444-sr9dsdz95-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-1789660646444-sr9dsdz95-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-1789660646444-sr9dsdz95-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1789660646444-sr9dsdz95-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1789660646444-sr9dsdz95-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-1789660646444-sr9dsdz95-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-1789660646444-sr9dsdz95-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-1789660646444-sr9dsdz95-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789660646444-sr9dsdz95 .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1789660646444-sr9dsdz95 .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; }#fv-chart-1789660646444-sr9dsdz95.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-image-compare-label-left { left: 1rem !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-image-compare-label-right { right: 1rem !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-image-compare-expand-btn, #fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-image-compare-expand-btn:hover, #fv-chart-1789660646444-sr9dsdz95 .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-bar-row, #fv-chart-1789660646444-sr9dsdz95 .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789660646444-sr9dsdz95.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1789660646444-sr9dsdz95.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1789660646444-sr9dsdz95 .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1789660646444-sr9dsdz95 .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95.mobile-view .fv-pie-container,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-row,#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-stacked-product,#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-grouped-bar-product,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-bar-row,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-stacked-product,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1789660646444-sr9dsdz95.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-1789660646444-sr9dsdz95.mobile-view .fv-bar-label,#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-grouped-product-title,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-bar-label,#fv-chart-1789660646444-sr9dsdz95.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-1789660646444-sr9dsdz95.mobile-view .fv-bar-container,#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-cluster,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-bar-container,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789660646444-sr9dsdz95.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-1789660646444-sr9dsdz95.mobile-view .fv-x-axis-wrapper,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-x-axis-label-space,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-x-axis-chart-space,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-benchmark-title,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-dropdown-title,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-carousel-nav-btn,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-chart-title,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-chart-subhead,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-versus-header,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-versus-select-wrapper,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-versus-vs,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-versus-select-container,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-versus-select,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-stl-shop-all-btn,#fv-chart-1789660646444-sr9dsdz95.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-1789660646444-sr9dsdz95.mobile-view .fv-stl-shop-all-logo,#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-stl-shop-all-icon,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-bar-commentary-inline,#fv-chart-1789660646444-sr9dsdz95.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789660646444-sr9dsdz95.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1789660646444-sr9dsdz95 .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-bar-row,#fv-chart-1789660646444-sr9dsdz95 .fv-stacked-product,#fv-chart-1789660646444-sr9dsdz95 .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-bar-label,#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-bar-container,#fv-chart-1789660646444-sr9dsdz95 .fv-bar-cluster {width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1789660646444-sr9dsdz95 .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1789660646444-sr9dsdz95 .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-x-axis-label-space {display: none !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-chart-title {padding: 0 8px !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95 .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-1789660646444-sr9dsdz95 .fv-stl-shop-all-logo,#fv-chart-1789660646444-sr9dsdz95 .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1789660646444-sr9dsdz95 .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1789660646444-sr9dsdz95.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Hard floor cleaning test","description": "Vacuuming crumbs from hard floor using Eufy Omni E35","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-09-17T15:57:26.444Z","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": []}Hard floor cleaning testVacuuming crumbs from hard floor using Eufy Omni E35
BeforeAfterwindow.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-1789660646444-sr9dsdz95', false); });} else {initialize('fv-chart-1789660646444-sr9dsdz95', false);}})();The R1 isn’t Bambu Lab's first venture into laser engraving; of course, we first saw the small-capacity engraver in the H2D, which enabled, with the cutter and 3D printer, a full range of manufacturing tools in one not-so-small machine. The R1 is something altogether more serious and much closer to machines such as the xTool P2 that I've previously tested.
It's also an important machine for Bambu Lab and shows them expanding further into the growing maker space. The R1 is the company's first dedicated product outside 3D printing and is based around a 55W CO2 laser rather than a diode; the H2D utilised diode lasers. Using CO2 rather than diode laser technology lets the machine work with a wider range of materials, most notably clear acrylic and glass, while also providing considerably more cutting power; most diodes currently top out at 40W, although several far more powerful heads exist.
However, as with Bambu Lab’s entrance into the 3D print market, the machine technology and market aren’t new, and plenty of other players already exist. xTool, LaserPecker, Glowforge and Creality have already demonstrated how far enclosed desktop laser cutters have progressed in recent years. Five years ago, many of the smaller laser engravers I looked at were open-frame machines that required assembly and considerably more caution, to the point where I will no longer cover them. These days, fully enclosed machines are really where the technology is at, and there are some great options at very reasonable prices.
While there are plenty of machines in the sector, this is Bambu Lab, and with their first laser, they also bring much of the knowledge of 3D printing with them, along with their own approach to automation.
The R1 handles focusing, material positioning and optical alignment, with cameras, lasers and encoders helping the machine understand where the material is and where the toolhead is moving. On paper, this looks great because it will speed up workflows; however, it was only during testing that I realised what a difference it can make.
I've been using the R1 for around three weeks, mostly cutting 3mm basswood ply and acrylic, but also testing MDF, leather, paper, ceramic, glass, coated metal, and plenty of irregular wooden objects. What I have found during that time is that the hardware is exceptionally polished, and while Bambu Suite is good, it still has some catching up to do to realise its and the machine's full potential.
(Image credit: Alastair Jennings)Bambu Lab R1: Price & availabilityThe Bambu Lab R1 launches at $2,499 in the US direct from the company site and £2,249 from the UK site. Pre-orders start on September 22, 2026 and shipping scheduled to begin in October.
The short-focus lens is included. The Riser Base, Conveyor, Rotary attachment, medium- and long-focus lenses, Vision Encoder, E1 Pro Air Purifier and Auto Fire Extinguishing System are optional extras.
Bambu Lab R1: DesignSpecsLaser technology: 55W CO2
Working area: 600 x 300mm
Working area with Conveyor: 600 x 3000mm
Maximum speed: 1,000mm/s
Maximum acceleration: 20,000mm/s²
Positioning accuracy: < 0.2 mm
Absolute motion accuracy: < 0.1 mm across 600mm with Vision Encoder
Dimensions: 940 x 560 x 200mm
Weight: 33.5kg
Maximum input power: 780W
Software: Bambu Suite
Supported OS: Windows, macOS
Connectivity: Dual-band Wi-Fi, USB
Laser safety: Class 1 in standard enclosed configuration
Short-focus spot: 0.11mm
Medium-focus spot: 0.17mm
Long-focus spot: 0.19mm
Maximum cutting capacity: 18mm black walnut with medium/long-focus lens; 20mm acrylic.
Standard lens: Short-focus
Supported cutting/engraving materials: Wood, acrylic including clear acrylic, leather, fabric, paper, EVA foam and shell
Engraving materials: Glass, ceramic and coated metal
Optional accessories: Riser Base, Conveyor, Rotary, medium/long-focus lenses, Vision Encoder, E1 Pro Air Purifier and Auto Fire Extinguishing System.
Unpacking the box, and having already checked the specifications before the machine arrived, I was surprised the packaging was smaller than expected. It still required two of us to manoeuvre the box into the workshop, but once unpacked and at 33.5 kg, I could lift and position it with little issue. It’s still heavy, but looking at the slight curve that’s left in the desk from the previous test, it's not quite as heavy as the previous 3D printer that took up the space.
The weight and, for that matter, the size are actually very manageable, and with a footprint of 940 x 560mm, the machine was able to sit on the standard section of the 60cm-deep workshop bench. While the main machine sits quite happily in that space, you’ll also need to consider venting and leave enough vertical clearance to open the lid.
Once in position, the R1's design is unmistakably Bambu Lab. The finish is superb; everything feels properly manufactured rather than assembled from off-the-shelf laser components, and I was pleased to see the machine arrived largely configured; I just had a few small setup procedures to follow before I could start.
As with all engravers, the first job was to attach the exhaust to the filter, and in my setup this was paired with the optional E1 Pro filtration system. You also need to fill the cooling reservoir with distilled or de-ionised water.
The instructions suggest adding antifreeze if you live in a colder climate. My workshop can drop below 5°C during winter, so I filled the system to the -10°C protection mark. Once I removed the transport restraints and checked the interior, the R1 was ready to power on.
The initial startup takes roughly 30 seconds before calibration begins. The automated self-check and initial calibration took around half an hour. Once that completes, you can then run the laser alignment procedure, and this is the first sign that this laser is something a little different.
Unlike the more manual approach of other CO2 lasers, here all you need to do to calibrate is to lift the small cover on the toolhead, then attach the supplied Laser Alignment Sensor, which clicks into place magnetically. Select the alignment function from the touchscreen, and the R1 handles the rest. The complete process took me approximately five minutes, including fitting and removing the sensor.
That's longer than Bambu's roughly one-minute claim for the alignment operation itself, but from my perspective there was virtually nothing to do. Then inside, there are a few removable slats that help to support the material that is placed within.
These are all easy to reposition, but again I would have liked more of them, although there are a few more than when I looked inside the LaserPecker LX2 in my recent review. The main issue is that small cut pieces can fall between the gaps, and for detailed work I still prefer a proper honeycomb bed, which I used for most of the review.
Around the machine, things are similarly clean. The exhaust and main power connection are at the rear, while Air Assist is integrated. Accessory connections sit on the side, alongside USB, and an easily accessible emergency stop is included. Unusually for a laser engraver, it has a small touchscreen, which is extremely useful. Most laser cutters force almost every operation back through the computer. Having direct access to machine functions makes the R1 much easier to use.
(Image credit: Alastair Jennings)Bambu Lab R1: FeaturesA look through the specifications, and the first thing to note is that this is a 55W CO2 laser; at present, there are only a few CO2 laser engravers at this price aimed at the enthusiast and small-business sector, and the only real competition is the xTool P2.
Inside is a very decent 600 x 300mm working area, which, from my testing, is large enough for most projects; if you need to go larger, there is an optional conveyor. Based on my testing of the base unit alone, I found I could place two standard 300 x 300mm basswood sheets side by side, which was useful when cutting multi-part models, such as the flower box and an RC boat I’m partway through. If you need longer than 300mm, the Conveyor enables working lengths of up to 3000mm, but you are still limited to the 600mm width.
After reviewing all the information, Bambu Lab is keen to highlight the Auto Laser Alignment. This is because, in the past, this process has been very hands-on with other machines, as a CO2 laser relies on mirrors to direct the beam through the machine, and those mirrors need to remain aligned.
On most machines, these mirrors are pre-calibrated, but they do occasionally need recalibration, which can be time-consuming; here, however, that process is fully automated with motorised mirror actuators and an alignment sensor.
For design placement accuracy on materials and tight measurements, the machine uses a TriSense system. This combines the BirdsEye Camera, Toolhead Camera, Pinpoint Laser, distance-measurement laser, and XY encoders to locate material, measure its surface, and monitor movement.
During testing, I accidentally put this to the test when I made an error importing a cutting design and left the paths set as lines rather than cuts. I ran the job, removed the basswood from the machine and only then realised the mistake. Normally, that could easily mean starting again.
Instead, I put the sheet back into the R1, used the camera view to align the cutting paths with the lines already engraved into the material, changed the operation to Cut and reran it. The cuts followed the previous lines accurately, with no obvious signs of the mistake.
When it came to small objects, the positioning was equally impressive. I placed pre-cut objects such as placemats around the work area, positioned the artwork through Bambu Suite, and achieved results very close to what I had on screen.
(Image credit: Alastair Jennings)Alongside the hardware is the Bambu Suite software, which offers plenty of functionality, and I found it to have good overall stability when working on macOS, but the workflow isn't yet as fluid as the hardware deserves.
Importing a DXF, for example, involves selecting Open Image, when Open File would make considerably more sense. Once you import a design, you can assign Cut, Line, and Fill operations. Then you move into Prepare, where you set up the machine and material.
This separation isn't always convenient. If you realise you've assigned the wrong operation later, changing it isn't as immediate as right-clicking the object in the earlier screen.
Capturing the work area also requires you to enter the preparation workflow. During testing, I occasionally found the workspace remained blank until I selected Measure and ran through the capture procedure again. On the Mac version, I also occasionally saw a ghost of the previously captured image underneath the current one. However, none of this stopped me from working.
After a couple of days, the workflow logic did make sense, and after three weeks I could move through jobs quickly, although I still didn’t feel that the workflow was as fluid as it could have been. Material profiles cover most common materials, while manual control gives you plenty of flexibility when experimenting with less conventional materials and objects.
Bambu Lab R1: PerformanceI started the test with the setup process, and while this was straightforward, there was a little to-and-fro with attaching vents and making sure the filter vent was routed outside. I then had to fill the machine with distilled water and antifreeze before running through the calibration processes, which all took around an hour.
Starting the tests, I focused on using 3mm basswood ply; this is for a couple of reasons: it's a common material used by crafters, model makers, and many small businesses. Second, I’m familiar with how it reacts under lasers and the initial results I should expect. As I started the process, the Bambu Lab philosophy that I’ve seen with their 3D printers started to become obvious.
One of my standard initial tests is a flower-box project. I imported the design, detached individual components and rearranged them across two 300 x 300mm basswood sheets to make better use of the material. I tried the auto layout, but because I hadn’t regrouped the paths, the design scattered across the work area. Undoing the mistake didn’t work, so I had to reload the design.
Once I’d re-laid out the design over the two sheets, I hit the Make button, and then the main button of the machine the R1 started the process of engraving and cutting, and with decent speed that I seen with other CO2 engravers. The complete model took around 10 minutes to cut across those two sheets, and the result was close to perfect.
However, there was one issue. Once the pieces were cut free, the smaller parts dropped between the support slats, and a couple of scorch marks appeared where they fell into the laser's path. Moving the slats closer helps, but this is where a honeycomb grid should really be used.
After several impressive results in basswood ply, I then produced the same flower-box design in acrylic. This took considerably longer at around 29 minutes, but the finish was exceptional, one of the best results I've achieved with this particular cutting plan in acrylic. The use of this material is one of the reasons that you would want to go for a CO2 laser over a conventional diode laser.
I also pushed the R1 beyond thin sheet material, testing materials ranging from lightweight paper through to 16mm MDF; in the case of these materials I tended to opt for the manual control so that I could get the best possible cut, and I was pleased to see it was possible to save down the settings as presets.
In the engraving tests, I used leather, ceramic, coated metal, and glass. Across those materials, the CO2 source's added power and flexibility became apparent, especially compared with the smaller diode engravers I've used.
(Image credit: Alastair Jennings)Through the test, the raw cutting power was impressive, and by slowing the engraver down and maxing out the power, I was able to cut through an 18mm sheet of ply. However, the positioning accuracy is what has really impressed me.
For small objects, the position shown in Bambu Suite and the finished engraving were exceptionally good. Once I'd grouped individual elements of a design correctly, the automatic positioning tools made batches of pre-cut objects far easier, although I was equally as impressed by the xTool and Creality machines that I’ve looked at recently in this respect.
Curved-surface engraving, however, was one up from what I have experienced before as it was easy to set up and use. Essentially, I can place something such as a bowl or piece of timber into the R1, select curved-surface machining, and manually check that there's enough clearance for the toolhead.
The machine then measures multiple points across the object to gauge the changing surface height and generates a height map. I could then position the artwork and run the job the same way I would on a flat sheet.
I tried this with curved wooden objects, including a log, and the resulting lines stayed clear and focused as the surface height changed. There is a bit of physical interaction involved. The lid needs to be raised and lowered as the R1 works through parts of the measurement process, and an automated lid would make the experience even slicker.
Bambu Lab R1: Final verdict(Image credit: Alastair Jennings)Bambu Lab may be arriving relatively late to the dedicated desktop laser market, but the R1 doesn't feel like a first attempt. After three weeks of use, what stands out isn't just the 55W CO2 laser; it’s that Bambu Lab's formula has been applied, which means it looks great, is easy to use, and produces great cuts and engravings.
The automatic optical alignment seems to do its job and removes some of the more complex maintenance tasks that come with owning a CO2 laser. Then there's the TriSense system that makes positioning objects and designs easy, and the curved-surface measurement procedure just works exceptionally well.
I even felt that the material presets were spot on, enabling me to get excellent results without spending the first afternoon with the machine producing endless power-and-speed test grids. Something I’m all too familiar with.
The physical design is excellent and weight and size means it sits perfectly in the workshop with teh 600 x 300mm work area enabling enough rooom for most of the jobs that I would want to do on this style of machine.
Bambu Suite does, however, need more work. I'd like quicker access to camera capture, a more fluid transition between design and preparation, clearer terminology, and a few interface bugs ironed out. I'd also like more support slats in the actual machine, or preferably a honeycomb bed that was supplied with the machine and not an optional extra.
Also, on the interior, a little more headroom would have been nice, but then you can use a raiser, but that or the use of the conveyor changes the machine from a class 1 to a class 4.
The R1 has been designed to be part of the Bambu Lab ecosystem and is designed for makers who are already invested in Bambu. Putting laser engraving and 3D printing together at scale does provide a solid base for personal manufacturer and it is exciting.
For small businesses, workshops, model makers and serious crafters, this is a fast, accurate and unusually easy to use CO2 machine.
Should you buy the Bambu Lab R1Value:
Premium price, but with serious production capability
4
Design:
Considering the size of the work area it's relatively compact and exceptionally solid
4.5
Features
Automation brought over from 3D printing makes complicated jobs simple.
5
Performance
Excellent cuts and detail with superb positioning and minimal scorching
5
Total
Exceptional CO2 cutter, software needs some workflow issue resolving.
4.5
Buy it if...You already 3D print
Pairing the R1 with a Bambu 3D printer creates an exceptionally flexible workshop for combining printed components with wood and acrylic.
Accuracy really matters
Camera positioning, surface measurement and automatic alignment make placing detailed engravings onto pre-cut and curved objects remarkably straightforward and repeatable.View Deal
Space is limited
The R1 is compact for its capacity, but at 33.5kg with extraction and filtration, it still requires a proper workshop setup.
You want simplicity
The hardware is exceptionally polished, but Bambu Suite's current workflow requires some familiarisation and could still benefit from further refinement.View Deal
For more crafting tech, I've tested and reviewed all the best 3D printers and the best laser engravers.
Sonos is making a real statement of intent with its new wireless headphones, the Sonos Ace Ultra.
The multi-room master has made a whole host of improvements to this upgraded wireless over-ear model, which has arrived two years after the original Ace came to market. The Sonos Ace Ultra have enhanced custom 40mm drivers, a new headphone engine, better battery life, better noise-cancelling, and more detailed EQ to name a few things. So can they finally compete with flagship rivals from the likes of Sony and Bose to become some of the best noise-cancelling headphones we've tested? Here’s what I think after weeks of testing.
Let’s start by addressing the most important area of all: sound quality. We felt that the original Ace fell short of the best headphones around due to one main issue: their middling musicality. But the Ace Ultra have remedied that, and then some.
When listening to the Sonos Ace Ultra beside the original model, the differences were stark. Where the standard Sonos Ace sounded confined, overstretched, and unrefined, the Ace Ultra offered openness, intricate detailing, and a broader, more organized soundstage. What’s more, they provide better balance across the frequency range, with deep yet controlled bass, rich but less overzealous mids, and tight, articulate treble.
While I still consider some similarly priced competitors, like the Sony WH-1000XM6 and Bowers & Wilkins Px7 S3 to supply slightly more premium, detailed sound (for music, that is), the Ace Ultra are really not far behind. Sonos listened to the critics, and proved that it's up to the task of going toe-to-toe with the titans of the headphone world.
We already loved the original Ace for movies, though, finding that they offered immersive Dolby Atmos audio with effective head-tracking to boot. And that’s much the same on the Ace Ultra. They whip up wonderful width, strong command over height effects, and never neglect the fundamentals like clear dialogue and cinematic, pounding bass.
But what’s new on the Ace Ultra? Although music got a seismic upgrade, other alterations feel a bit more incremental — but that’s by no means a bad thing. Two more microphones have been added to the Ultra, bringing the total to ten, and ANC is great here. Wherever I was, my soundings were subdued to great effect, almost creating a bubble of silence. ANC is adaptive this time around and adjusts nicely, and the transparency mode works a treat. Call quality is strong too, as you may expect.
Battery life has also seen a boost, and you’ll now get up to 35 hours with ANC on. Is this anything groundbreaking? No. But it’s slightly above the 30-hour standard for headphones in this price bracket, and I never felt that I had to charge these cans very regularly. The battery is also replaceable, and a rapid charging mode means you can get three hours of playback if you spend three minutes juicing them up.
EQ options have also been expanded beyond the basic two-band equalizer found on the standard Ace headphones. There’s an eight-band option now as well as adaptive EQ, meaning you can genuinely tailor sound to your specific tastes.
We also need to talk about the Wi-Fi capabilities of the Sonos Ace Ultra. No, we’re still not at the point where we can directly stream tunes over a local internet connection, but there are some nifty features at play. First of all, TV Audio Swap is back, enabling you to link the headphones to a compatible Sonos soundbar, and transfer sound seamlessly. This is highly responsive and effective, and while I didn’t find myself using this feature a ton, you can avoid the latency issues you’d get from connecting headphones to your TV over Bluetooth.
The Ace Ultra also add Headphone Linking, though, which means you can also transfer sound from compatible speakers, like the Sonos Play, for instance. This is equally reliable as TV Audio Swap, and is a great option if you’re listening to music at home but want to keep listening without distracting others.
It’s clear to see that the Sonos Ace Ultra don’t look very different from the previous model, but that’s no bad thing. They’re sleek, well-built, and offer a neat combination of comfort and over-ear security. They’re not fully foldable, and the included case could be better quality-wise, but these are fairly minor pain points in the grand scheme of things.
Considering that the Ace Ultra cost the same as the original Ace at the point of launch — and actually less in the UK — they feel like a much more worthwhile investment. They’re by no means cheap, but their enhancements are meaningful and substantial, making these a great pair of headphones whether you have a pre-existing Sonos system or not. As a result, these are a great pair of headphones for music and movie lovers alike that feel worth the outlay — and are easy to recommend if you want a great all-round pair of premium wireless headphones.
(Image credit: Future)Sonos Ace Ultra review: price & release dateThe Sonos Ace Ultra were released in September 2026, about two years after the original Sonos Ace headphones. The new model is priced at $449 / £399 / AU$699, which is the same as the standard Ace cost at launch in the US and Australia, though they’re actually cheaper in the UK than the original Ace were at the point of release.
Given their price, the Ace Ultra have some extremely hot competition. For example, the Sony WH-1000XM6 are similarly priced, and offer an incredible mix of balanced, dynamic, and impactful sound alongside some of the best noise-cancelling on the market and a giant suite of features. Other competitors include the noise-crushing Bose QuietComfort Ultra Headphones Gen 2, the spacious sounding Bowers & Wilkins Px7 S3, and the ultra-detailed Sennheiser HDB 630.
Sonos Ace Ultra review: specsDrivers
Next-gen 40mm custom
Active noise cancellation
Yes
Battery life
35 hours (ANC on)
Weight
0.7lbs / 322g
Connectivity
Bluetooth 6.0, USB-C
Frequency range
20Hz-20kHz
(Image credit: Future)Sonos Ace Ultra review: featuresThe Sonos Ace Ultra boast an excellent suite of features and are a highly personalizable, smart set of headphones.
Let’s kick off with ANC, which has had quite the revamp. Now, you can toggle on an adaptive mode, which adjusts for things like fit, whether you’re wearing glasses, and if you make sudden head movements. But that’s not all.
Sonos has also boosted the number of mics for the Ultra, with ten to the original Ace’s eight. The mics can monitor your surroundings and cut out external noise in real time, and they do this to great effect. Yes, the Ace Ultra supply great ANC, and no matter my environment, I was treated to satisfying, distraction-free listening.
When out on walks, the sounds of cars passing by were totally nullified. When typing away in the office, the clacking of keyboards was fully subdued, and when travelling on public transport, engine sounds and surrounding chatter were put right to the sword. The Aware Mode is also very effective, and makes it incredibly easy to tune into your surroundings, with the new Voice Boost mode able to improve the clarity of voices around you if you toggle it on.
The upgraded microphone system also helps the Ace Ultra to handle phone calls with greater care than ever before. When taking calls when out and about, my speech was perfectly comprehensible, and never sounded obscured by background noise, even when walking in a busy part of my city.
Something else that’s received a boost is battery life. Sonos says that the Ace Ultra are capable of staying alive for 35 hours on a single charge, and my testing found this to be pretty accurate. This is a slight improvement on the original Ace, which could deliver 30 hours of use, which is essentially the standard for headphones in this price category. There’s also a rapid charging option, which gives the Ace Ultra three hours of playback from a three minute charge and a power saving mode if you want to extend the headphones’ life in a pinch.
One of the more welcome additions to the Ace Ultra is their expanded EQ options. Now, you can make use of an eight-band equalizer to customize the sound of the headphones to your specific taste. This is a big improvement on the basic two-band equalizer on the original Ace (for bass and treble levels), though there’s a more basic three-band option on the Ace Ultra if you prefer a less detail-oriented approach.
Let’s stick with sound, because there are a number of great features here that help you get the best out of both music and movies. First of all, you get all the hi-res goodness from the original Ace, with aptX codec support, as well as lossless audio via USB-C — and there’s a USB-C to 3.5mm cable bundled if you want to use them with a laptop, DJ controller, or other source device.
Dolby Atmos also returns on the Ace Ultra, enabling you to enjoy spatial audio on the go. Once again, this works an absolute treat — especially for movies, where head-tracking also helps to further immerse you in on-screen action. I tried using the TV Audio Swap feature, which enabled me to connect the headphones to the Sonos Beam Ultra, and Atmos movies sounded wonderful — more on that in the ‘sound quality’ section.
While the situations in which I’d use TV Audio Swap are admittedly niche, it's a very reliable feature. It harnesses Wi-Fi connectivity, so you don’t have to deal with the latency issues that connecting headphones to your TV over Bluetooth would bring. And you can easily switch between the soundbar, headphones, and other compatible Sonos speakers with a simple press of a button, which is highly convenient.
The Ace Ultra’s new Headphone Engine 2 also enables Headphone Linking, which allows them to directly connect to other components in your Sonos system — including compatible speakers such as the Sonos play — and move audio to and from your speakers and headphones. Like TV Audio Swap, this feels seamless and speedy to activate, and is great if you’re blasting music at home, but don’t want to disturb others if they want some peace and quiet.
On top of all of this, you get the usual good stuff: multi-point pairing, Bluetooth 6.0 connectivity, wear detection, and a relatively intuitive companion app. And when you add all of this together, I think it's fair to say that the Ace Ultra offer an incredibly fleshed-out, and well-refined feature set.
While we considered the original Sonos Ace to be a good pair of headphones, their somewhat middling musicality ended up holding them back from greatness. But luckily, Sonos has listened to the criticism, implemented next-gen 40mm custom drivers, and remedied a lot of the issues we had with the previous model. The result? A genuinely great-sounding pair of headphones.
I tried comparing the Sonos Ace Ultra against the original model directly, and when I say that the difference is striking, I truly mean it. In essence, the Ace Ultra provide a significantly broader soundstage with far better organization and balance, as well as deeper, more controlled bass, and more articulate, detailed treble. I also found them to offer superior handling of dynamics and enhanced instrument separation, meaning that, for me, Sonos is closer to rivals like Bose and Sony than ever before.
Sonos has been keen to talk up the Ace Ultra’s improved bass, so I started out by listening to a house track, Get It On by Jansons. The Ace Ultra delivered palpable, pumping bass, that was rhythmic and rapid, never sounding lethargic or boomy. This never concealed other sounds across the frequency range, either, with synths in the mid-range sounding well defined and tonally accurate, and high-pitched drums coming through with precision and vigor, helping the track to maintain its high energy.
Treble was especially tighter on the Ace Ultra compared to the original model, and the wider soundstage gave each individual element more room to breathe, and this became a theme across all of my listening tests.
For instance, with the funk track Joía Rara by Brylho, the upgrade the Ultra provided was considerable. On the original Sonos Ace, the soundstage felt confined, with guitars lacking definition in the mix, and as the track built, the horns, bass, vocals, and guitars sounded slightly convoluted, resulting in a messier presentation than I’d expected. But on the Ace Ultra, things were totally different. Guitars in the intro occupied a unique pocket, bass was well-balanced, and finer percussive details were perfectly audible. Vocals were also separated to greater effect, and while they weren’t the most textured or forward, they were more than clear enough.
Are the Sonos Ace Ultra the best-sounding headphones in their price bracket? Well, they’re not far behind the competition, though I do still think a couple of models edge just ahead. For example, I tested them side by side with the Sony WH-1000XM6, and I found that Sony’s cans supplied a slightly more dynamic low-end output and detailing in the mid-range. It was very close between these two, though. Of course, if you want the most expansive soundstage, headphones like the AirPods Max 2 will edge out the Ace Ultra, but they’re slightly more expensive.
Before we move onto design, we have to talk about the Ace Ultra’s handling of spatial audio. They support Dolby Atmos as well as head tracking, really helping you to immerse yourself in your favorite movies and TV shows, and the expansiveness that the headphones supply is seriously impressive.
When using TV Audio Swap with some 4K UHD Blu-ray discs, the Ace Ultra were able to conjure up an excellent sense of width, almost like some of the best Dolby Atmos soundbars can. I started by watching Elio, and the Ace Ultra did an incredible job — voices were clear, and as characters moved across the screen, they were tracked with precision, and if I tilted my head, sound shifted dynamically as if I was speaking with characters directly. As Elio returned to earth, deep, pounding bass hit with immense power too, but didn’t sound muddy or overbearing.
With Godzilla Minus One, the sense of a plane flying overhead in the opening scene was captured far more effectively than expected. It was genuinely convincing, as if the sound was truly coming from above. Dialogue was clear again, and Godzilla’s almighty screech was both tonally accurate and controlled, rather than tinny. More generally, the movie’s action scenes had tremendous width, creating a genuinely immersive experience.
The Ace Ultra look an awful lot like the original Ace, but as someone who loved the way those headphones looked, that’s a big plus. The ear cups are relatively flat and understated, the rounded look is sleek and sexy, and the metallic details only add to the sense of premium. The button controls have shifted about slightly, but they’re incredibly easy to reach, and are all very responsive.
I tried the Soft White version which is stylish and modern, but the Ace Ultra are also available in Black, Agave, and Sand. All of these colorways are minimalistic and suit the luxurious vibe of the headphones to perfection.
In terms of fit, the Ace Ultra strike a really strong balance between comfort and security — they’re the goldilocks of headphones, if you will. There’s enough clamping power to prevent excess sound seeping in and keep them on your head during a workout or similar, but I never found this to be overbearing. Even when I was wearing a hat, the Ace Ultra felt really snug, with the plush ear cups and padded headband helping me to enjoy my music for many hours on end.
One subtle thing I like is how the inside of the right ear cup is green, making it easy to know which side is which when throwing the cans on. The right cup also features a slider, which can be used to easily adjust volume or trigger the Audio Swap feature. I usually prefer touch controls, but the tactile and reliable nature of these buttons might just have converted me.
Something that may frustrated a few users is that the Ace Ultra are not foldable. Yes, the ear cups rotate flat for when you want to stow the headphones in the case, but rivals like the Sony WH-1000XM6 offer a more compact, travel-friendly design. In addition, the case itself doesn’t quite offer the quality I was expecting, with a fuzzy exterior that’s a bit prone to picking up fibers. I also found that the zip jammed a bit easily. I much prefer the magnetic case of the XM6, which is more seamless to use and has a more quality look and feel.
The Sonos Ace Ultra cured the single ailment that plagued the original model above else: their middling musicality. When I tested both headphones side by side, the difference was night and day. The original Ace were held back by a limited soundstage, underwhelming instrument separation, and a lack of balance across the frequency range. But the Ace Ultra sound so much more open, organized, and detailed, and truly compete with flagship rivals from Sony and Bose.
On top of that, you’re getting excellent Dolby Atmos performance, Headphone Linking and TV Audio Swap for linking up to other Sonos products, a beautiful design, and strong noise-cancelling capabilities. Considering that the Sonos Ace Ultra cost the same as the original model did at the point of launch — and less than the standard Ace initially cost in the UK — that’s pretty impressive.
At $449 / £399 / AU$699, they’re still quite the investment, of course. And I do think that some rivals, including the Sony WH-1000XM6 and Bowers & Wilkins Px7 S3 just edge above them in terms of sound quality. But those models can’t compete when it comes to movies — a big selling point of the Ace headphones. And the interactivity that these have with other Sonos products makes them a slam-dunk for owners of products like the Sonos Beam Ultra and Sonos Play.
Even if you don’t have a Sonos system, these headphones still justify their price with great all-round performance, a delicious design, higher-res audio codecs and wired lossless sound, as well as solid battery life. All in all, then, the Ace Ultra feel like a much more worthwhile investment than the original Ace, and manage to earn their price.
Attribute
Notes
Score
Features
Enhanced ANC, call quality, and battery life, better EQ options, and neat smart features like Headphone Linking.
5/5
Sound quality
Much better musicality than the original Ace and fantastic Dolby Atmos for movies.
4.5/5
Design
Gorgeous looks, comfortable and secure fit, but the carry case could be better.
4.5/5
Value
Earn their price much more than the original Ace with great performance across the board.
4.5/5
Buy them if…You want amazing headphones for movies
With Dolby Atmos compatibility and serious spatial audio skills, the Sonos Ace Ultra are arguably the best wireless headphones you can buy for movie-watching. You’ll experience expansive, three-dimensional sound with the Ace Ultra, and head-tracking will only further your immersion in any on-screen action.
You already own a Sonos system
If you own Sonos products like the Sonos Beam Gen 2 or Sonos Play, then the Ace Ultra are a very sensible buy. TV Audio Swap and Headphone Linking enable you to seamlessly transfer sound across your system, giving you unrivalled control over your music-listening and movie-viewing experiences.
You want the best-sounding headphones in this price-bracket
While the Sonos Ace Ultra offer great musicality, they can still be beaten. The Sony WH-1000XM6 provide a bit more bite and detailing, while the Bowers & Wilkins Px7 S3 provide even more nuanced soundstaging and instrument separation.
You want the best possible cans for travel
The Sonos Ace Ultra supply awesome ANC and do come with a carry case, but unlike some rivals, they’re not fully foldable. Rivals like the WH-1000XM6 are much more compact if you’re on the go and don’t have much space in your bag, for instance.
Sonos Ace Ultra
Sony WH-1000XM6
Bowers & Wilkins Px7 S3
Price
$449 / £399 / AU$699
$449 / £399 / AU$699
$479 / £399 / AU$699
Drivers
Next-gen 40mm custom
30mm dynamic
40mm dynamic
Active noise cancellation
Yes
Yes
Yes
Battery life
35 hours (ANC on)
30 hours (ANC on)
30 hours (ANC on)
Weight
0.7lbs / 322g
0.6lbs / 254g
0.7lbs / 300g
Connectivity
Bluetooth 6.0, USB-C
Bluetooth 5.3, 3.5mm
Bluetooth 5.3, USB-C
Frequency range
20Hz-20kHz
20Hz-20kHz
10Hz-22kHz
Sony WH-1000XM6
The Sony WH-1000XM6 are true all-rounders, boasting some of the best ANC in the game, beautifully balanced audio, and a huge range of features. They’re fully foldable, offer exceptional call clarity, and support the LDAC codec for higher-res Bluetooth listening. At this price-point, they still feel like the best headphones that you can buy for the money. Read my full Sony WH-1000XM6 review.
Bowers & Wilkins Px7 S3
For me, the Bowers & Wilkins Px7 S3 are probably the best-sounding headphones you can buy in this price-range, with an exceptionally spacious, nuanced soundstage, impeccable detailing right across the frequency range, but dynamic and exciting enough to keep you engaged for hours on end. They also look truly premium, supply USB-C audio passthrough, and have an excellent control app — though their ANC isn’t anything special. Read our full Bowers & Wilkins Px7 S3 review.
I spent about two weeks testing the Sonos Ace Ultra headphones, during which time I exhausted their various features, like TV audio swap, watched a handful of movies with Dolby Atmos soundtracks, and listened to hours worth of music.
When listening to music, I predominantly streamed tunes over Tidal on my Xiaomi 17 phone, which supports aptX codecs. To start with, I sifted through the TechRadar testing playlist, but I also listened to a wide variety of tracks from my personal library. On top of this, I compared the Sonos Ace Ultra to some of their major competitors, like the Sony WH-1000XM6, as well as the original Sonos Ace.
More generally, I’ve spent years testing gadgets here at TechRadar, where I serve as a Senior Reviews Writer. I’ve tested a wide range of audio gear, including other premium headphones like the Sony 1000X The Collexion, party speakers like the Marshall Bromley 750, Dolby Atmos soundbars like the JBL Bar 1300MK2, and more.
The Sonos Beam Ultra doesn’t merely feel like an evolution of the pre-existing Beam products. Instead, it feels like something of a middle child between the Sonos Beam Gen 2 and the Sonos Arc Ultra. After all, it sits bang in between its sibling models when it comes to channel configuration, boasting a 7.1.2 setup with nine drivers, and while it has up-firing drivers for true Dolby Atmos, it still maintains a fairly compact design.
But the Beam Ultra certainly isn’t an awkward middle-child; it’s a highly capable mid-range option that provides striking cinematic sound, while still being able to fit into a smaller setup. But is the Sonos Beam Ultra worth its $699 / £699 / AU$1,099 asking price?
Like most of the best soundbars, the Sonos Beam Ultra supports Dolby Atmos (though notably Sonos omits DTS:X), and it handles the format very effectively. When watching a 4K UHD Blu-ray of The Mask, the soundbar seamlessly tracked the titular character as he tornadoes across the screen, with audio sounding as if it far exceeded the limited confines of the soundbar. When The Mask jumped upwards, diagonally, his upward trajectory was captured with precision.
(Image credit: Future)And the Beam Ultra continued to impress me with its height effects across multiple movies. For instance, in Godzilla Minus One, the sense of a plane flying overhead was replicated more naturally than I expected from a mid-range bar. When Godzilla first appeared, the width of the kaiju’s movement was handled brilliantly — it sounded as if the creature’s stomping and destruction were emanating from different corners of the testing room, rather than a set of speakers, even without the help of surround speakers.
What’s more, the Sonos Beam Ultra nails the fundamentals. Watching Top Gun: Maverick, the roar of jet engines was palpable, and I found this to be the case across multiple films. For a mid-sized standalone bar, the Beam Ultra produces incredibly regimented, deep, and responsive low-end sound, which is excellent for movies with high-octane action sequences and dark, impactful scores. The Beam Ultra can also get seriously loud if you want to fill a more open space, but I never noticed any tinniness or harsh compression.
Still, this doesn’t come at the expense of sounds elsewhere in the frequency range. I found dialogue to be generally clear and detailed too, though I will note that turning on the Speech Enhancement mode and setting it to Medium gave me the best results. This means you can bring voices forward without hampering the fidelity of other elements in the mix.
The Beam Ultra even proved to be a hit for music, whether I was listening to an Atmos or stereo mix. With an Atmos mix of I’m Gonna Love You Just A Little More Baby by Barry White, there was tremendous width to the guitars, the vocals were perfectly clear in the center, and the bass had pleasant warmth to it. Moving over to First Summer by H.K., deep bass came through with attention-grabbing impact, sounding more full-sounding than I’d anticipated, yet keys and vocal chops in the mid-range still maintained excellent clarity, as did articulate drums in the treble.
(Image credit: Future)The Sonos Beam Ultra isn’t just a great performer; it’s also rammed full of useful features. TruePlay is here, which can optimize sound for your room in mere seconds, but there are also ways to manually adapt audio. For instance, you can adjust height effects to your choosing, and there’s even a height-effect simulation mode if there’s less than four inches of space above your soundbar — ideal if you’re placing the Beam Ultra on a shelf in your TV stand, say.
I've already mentioned the Speech Enhancement mode, which has multiple levels to emphasize speech as little or much as you need, but there’s also a Night mode if you don’t want to disturb others. You can turn these options on in the Sonos app, but there’s also an option to add a voice assistant if you want to make adjustments on the fly.
The Beam Ultra can, as you'd expect, also interact with other components in your Sonos system. You can pair compatible speakers, such as the Sonos Play, and use them as surround speakers. TV Audio Swap is also back, and enables you to transfer sound from your Beam Ultra to your Sonos Ace or Sonos Ace Ultra headphones. I tried this out with the latter cans, and found that switching was speedy and responsive, while the quality of spatial audio was exceptional — make sure to read my Sonos Ace Ultra review for a deeper dive.
There are a fair few ways to connect to your Sonos Beam Ultra too. Of course, HDMI eARC is the most important — this is what you’ll use to hook the soundbar up to your TV and experience Dolby Atmos movies in all their glory. There’s also Wi-Fi 6 for streaming content over a local connection, allowing you to use services like Tidal Connect and Spotify Connect. And, unlike with the Beam Gen 2, you also get Bluetooth 5.3 connectivity as well as USB-C line-in.
One thing I would have really have loved to see, though, is an HDMI input, which has been left off of the Sonos Beam Ultra. Given that connecting the soundbar up to your TV already takes away one precious HDMI slot, it would’ve been great to get a passthrough port on this model — it’s something I use on my Marshall Heston 120 at home, given that I have multiple game consoles connected up.
Something that does not disappoint, though, is the Beam Ultra’s design. It’s sleek, modern, and stylish — but understated enough to seamlessly slot into just about any living space. It also has a great standard of build, intuitive touch controls, and handy status indicator lights to signify connection status. There’s also a microphone slider, which you can deactivate if you don’t want your soundbar listening in on you.
But here comes the big question: is the Sonos Beam Ultra actually worth the money? While $699 / £699 / AU$1,099 is by no means cheap, I still think the answer is yes. It’s priced right in between the Beam Gen 2 and Arc Ultra, and feels like a true best-of-both-worlds option — the height channels give it much more convincing Atmos performance than the Beam Gen 2, but you also get amazing power in a single, compact package.
Sure, you could get a soundbar and sub combo like the Samsung HW-Q800F for a similar price, and that will give you even deeper, more cinematic bass. But that model has a more restrictive 5.1.2 configuration, and if you want something more low-profile, it won’t fit the bill. You also get an excellent suite of features from the Beam Ultra, and you can add a compatible sub and other other Sonos speakers for surround sound if you wish.
As a result, the Sonos Beam Ultra might just be the best compact Dolby Atmos soundbar I’ve tested. In spite of its modest size, it plates up powerful, immersive, and clear audio, so if you want a simple plug-and-play solution to get amazing audio into just about any space, this is my top recommendation.
(Image credit: Future)Sonos Beam Ultra review: Price and release dateThe Sonos Beam Ultra is priced at $699 / £699 / AU$1,099, placing it mid-way between the Sonos Beam Gen 2 and the Sonos Arc Ultra. While you can get some multi-box options for a similar price, like the Sony HW-Q800F, for instance, the Beam Ultra features an extensive 7.1.2 driver configuration, and its compact nature is a central part of its appeal.
Sonos Beam Ultra review: specsDimensions
29.5 x 2.6 x 4.1 inches / 750 x 65 x 105mm
Speaker channels
7.1.2
Connections
HDMI eARC, Wi-Fi 6, Bluetooth 5.3, USB-C
Dolby Atmos / DTS:X
Yes / No
Sub included
No
Rear speakers included
No
(Image credit: Future)Should I buy the Sonos Beam Ultra?Attribute
Notes
Score
Features
Good connectivity options, great sound modes, can add sub and surrounds, no DTS:X or HDMI passthrough.
4.5/5
Performance
Expansive sound in a compact package with imposing bass and clear dialogue.
5/5
Design
Stellar looks, slim build, neat touch controls.
5/5
Setup & usability
Plug and play set-up, easy to connect to via Wi-Fi or Bluetooth.
5/5
Value
Not cheap, but a perfect marriage of the standard Beam and Arc that’s priced accordingly.
4.5/5
Buy it if…You want a compact soundbar with amazing Dolby Atmos
So many compact Dolby Atmos soundbars fall flat when it comes to Dolby Atmos. Often, that’s due to a lack of dedicated up-firing drivers to provide convincing height effects. But the Beam Ultra has those — and it also conjures up an impressive sense of width.
You already own a Sonos system
If you already have a compatible sub and speakers like the Sonos Play or Sonos Era 100, you can connect them to the Beam Ultra to open up even more immersive, three-dimensional audio. TV Audio Swap is also available if you’ve got the Sonos Ace or Sonos Ace Ultra headphones.
You need HDMI passthrough
The Sonos Beam Ultra does not offer HDMI passthrough, which might be troublesome if, like me, you have multiple games consoles, a 4K Blu-ray player, and other devices that use HDMI.
You need DTS:X
The Sonos Beam Ultra supports Dolby Atmos, but not DTS:X, much like other Sonos soundbars, including the Sonos Arc Ultra. A number of 4K discs make use of DTS:X, so if you’re someone who often makes use of that format, it may be worth looking elsewhere.
Sonos Beam Ultra
Samsung HW-Q800F
Bose Smart Ultra Soundbar
Price
$699 / £699 / AU$1,099
$1,099 / £799 / AU$1,099
£899 / $899 / AU$1499
Dimensions
29.5 x 2.6 x 4.1 inches / 750 x 65 x 105mm
Main soundbar: 43.7 x 2.4 x 4.7 inches / 1110.7 x 60.4 x 120mm; subwoofer: 9.8 x 9.9 x 9.8 inches / 249 x 251.8 x 249mm
2.3 x 41 x 4.2 inches / 58 x 1045 x 107mm
Speaker channels
7.1.2
5.1.2
5.1.2
Connections
HDMI eARC, Wi-Fi 6, Bluetooth 5.3, USB-C
1x HDMI input, 1x HDMI eARC, digital optical, Wi-Fi, Bluetooth 5.3
HDMI eARC, digital optical, Ethernet, USB (service only), Bluetooth, Wi-Fi
Dolby Atmos / DTS:X
Yes / No
Yes / Yes
Yes / No
Sub included
No
Yes
No
Rear speakers included
No
No
No
Samsung HW-Q800F
This multi-box Samsung soundbar can now be found for a similar price to the Sonos Beam Ultra, if not less. It supplies exceptional sound, with impeccable bass from its dedicated sub, clear dialogue, and engrossing Atmos effects. It doesn’t offer the Beam Ultra’s compact size, but it does have DTS:X and HDMI passthrough. Read my full Samsung HW-Q800F review.
Bose Smart Ultra Soundbar
The Bose Smart Ultra Soundbar is a great 5.1.2 soundbar with wide, detailed sound, excellent build quality, and an effective companion app. It doesn’t quite offer the height or bass weight of the Sonos Beam Ultra, but it can often be found on sale for less than $700 / £500. Read our full Bose Smart Ultra Soundbar review.
I spent one week testing the Sonos Beam Ultra at our TV testing space at Future Labs, during which time I exhausted its various features, watched a variety of movies, and listened to music in both Dolby Atmos and stereo formats.
To test the Beam Ultra, I hooked it up to the Samsung R95H TV via HDMI. I also made use of the Panasonic DP-UB820 to view Dolby Atmos-enabled 4K UHD Blu-rays. When listening to music, I streamed tunes over Tidal Connect via Wi-Fi, and made use of the TV Audio Swap feature to transfer audio from the soundbar to the Sonos Ace Ultra headphones.
I also compared the Sonos Beam Ultra directly against the Sonos Beam Gen 2 to assess improvements to height effects, expansiveness, and general functionality.
I’ve spent several years testing audio-visual gear at TechRadar, where I'm a Senior Reviews Writer. I’ve tested a vast number of soundbars specifically, from compact models like the Marshall Heston 60 to grand surround systems like the LG Sound Suite Immersive Suite 7 Pro.
While everyone else at school was dreaming about their future spouse and white wedding, I was dreaming about my future friends. I didn't have the platonic relationships I was told I would have by popular 2000s kids TV shows like The Sleepover Club, with my friends and I braiding each other's hair and spilling all of their secrets.
Watching The Love Hypothesis on Prime Video brought the romance of that childhood dream flooding back. In fact, I think the new movie has got the love story at its core all wrong — this isn't a passionate affair between PHD student Olive (Lili Reinhart) and "evil" Doctor Adam (Tom Bateman), but an example of enduring connection between friends Olive and Anh (Rachel Marsh).
Of course, I get why the former route has been taken. Not only is the film an adaptation of the popular Ali Hazelwood novel of the same name, but Amazon is on a roll with its abundance of young-adult romantic dramas. You can't tune into a streamer that's developed bangers like Off Campus, Stirling Point and Every Year After and expect it to take a different tack here.
Is this taking the safe option? Probably. Does The Love Hypothesis tick the rom-com boxes it needs to? Undoubtedly. But while I don't think fans of the book will be disappointed, I can't help feeling that The Love Hypothesis has missed fully exploring its most enriching love story.
The Love Hypothesis is far from the greatest love story ever told — but it's funIn a nutshell, Olive is a third-year biology PhD candidate at Stanford researching early pancreatic cancer detection. In order to convince her best friend Anh that she has completely moved on from a crush, Olive impulsively grabs and kisses Adam in the lab hallway. The two make a mutually beneficial agreement to fake date each other... though that fakeness doesn't last for long.
You can see, and correctly guess, all of the story beats just from me writing that short synopsis. There are no surprises, and things will end exactly where you expect them to. For some people, this is what they'll want — a reliable, sexy and giving rom-com in these desolate times? I get the appeal. Just don't expect anything that will blow your wind.
Even though Adam is barely tolerable for the majority if The Love Hypothesis, the ensemble cast is clearly at home in the genre. We want to be Olive as she wrestles between her head and heart, attending cool house parties and industry mixers. We want to shout at the characters who do her wrong, and we truly feel like her ride or die through the process.
The highly-anticipated hotel room scene, I can confirm, is hot. It's not the most explicit or sexiest moment in a movie I've ever seen, but you can't deny the natural chemistry sizzling between our two leads. Take everything you felt during the split second teaser in the above trailer and amplify it by 1000.
Yes, The Love Hypothesis largely plays it safe, with its direction, narrative and unbelievably underwhelming soundtrack all evidence of that. But the journey from start to finish is fun, understanding, and convincingly sincere. It's tough work being a woman as it is, let alone a talented woman in STEM.
This should really be a love story between two best friends(Image credit: Prime Video)But enough about textbook love... let's talk about friendship. My heart bursts for the love between Olive and Anh, and their unrelenting willingness to go above and beyond for each other. I mean... Olive is fake dating someone just so her bestie feels comfortable enough to pursue the man she likes without crossing a boundary. That's a girl's girl alright.
Neither of them compromise on their smarts, or dedication to their future careers, let a man come between them, or change who they are to fit in with their university's social norms. They are fully themselves at all times, allowing their value and worth to shine through in every aspect of their lives.
If anything, this is what I hope viewers will take away from the new Prime Video movie. At the end of the day, there are no greater romances than your friendships, and those of us that have such friendships are incredibly lucky to have such invaluable wells of support and love in their lives.
The Love Hypothesis might be marketed as a standard enemies-to-lovers romance, but strip back the tropes and you'll find a love letter to friendship — and this, for me, is the mark of a job well done.
Action camera brand Insta360 has been making a name for itself in the webcam space recently, breaking out with its first-ever webcam, the Link, back in 2022. Then we saw the Insta360 Link 2 in 2024, so while I was hoping for a Link 3 this year, instead we're getting an interstitial generation: say hello to the Insta360 Link 2 Pro.
I can't say I'm disappointed, mind you. The Link 2 was a fantastic webcam, and while the Link 2 Pro is a fairly straightforward hardware upgrade, I'm not one to complain about getting more of a good thing. The Pro model increases the price a bit, but also delivers improved internals: a bigger, better sensor and wider aperture for superior FOV and light balance mean that 4K video capture looks even prettier. It also adds a little gold trim around the lens.
Now, the Link 2 was already a pricey product, so there's no denying that the Insta360 Link 2 Pro is very expensive for a webcam, even a 4K-capable one. More on that further down in this review, but in short: want one of the best budget webcams? This ain't that.
But for professional users creating video content or making regular presentations over video conferencing, the Link 2 Pro should be a very serious consideration. It may not be cheap, but you get a lot of webcam for your money: the performance, design quality, and feature set are truly all best-in-class.
(Image credit: Future)It's almost a bit surprising that more camera companies haven't made the jump to webcams. From old-guard industry titans like Canon to up-and-coming manufacturers like DJI, you'd imagine that more of them would want to capitalize on a product type that has only become more necessary in the wake of the COVID-19 pandemic and the rise of remote work.
But hey: their loss is Insta360's gain, having made a seamless jump from action-cams and drones to premium webcams. And make no mistake, the Link 2 Pro is indeed a premium piece of hardware.
The build quality on display here is nothing short of excellent. The casing is a pleasingly sturdy construction of matte plastic and metal, with a compact folding clip that snaps magnetically to the rotating gimbal mount, makning it easy to attach to any monitor. It also features an industry-standard threaded screwhole on the underside for fitting it to a tripod or arm mount.
(Image credit: Future)Of course, the gimbal is arguably the star of the show here. A two-point mechanism that allows for both horizontal and vertical rotation of the main camera unit, the gimbal allows the camera to track your movements within a wide radius thanks to AI-powered head-tracking technology.
I tested this thoroughly, and it really works; even when I attempted to move completely out of frame, the camera was surprisingly adept at tracking my movements.
That's not all it's capable of, though. The gimbal also enables several of the Link 2 Pro's nifty presentation modes, including desktop mode (which points down to the surface in front of you, ideal for showing off physical documents), whiteboard mode (which frames and zooms on a whiteboard or similar presentation board), and the very clever 'pause-tracking' mode (which lets you designate a specific area where the tracking lingers naturally as it follows you around, creating a more dynamic feel to your footage).
It also doubles as a privacy feature (as opposed to a lens cover or camera killswitch), with the lens pointing directly down when not in use. A set of four 'recognition markers' is included in the box, which are used for some of the tracking-lock modes.
(Image credit: Future)All this fancy functionality, as well as more 'conventional' features like light balance adjustment and digital zoom, is readily accessible through Insta360's free software. It's a solid tool that makes setting up your ideal video experience swift and seamless, but even better, it's also available as a phone app – perfect for quick adjustments without needing to fire up an extra piece of software on your PC while you're trying to record.
With all that fancy AI baked into the Link 2 Pro, you might be hoping for something a little more sophisticated than tracking modes. Worry not: like the previous Link 2, this webcam features a set of preloaded gesture controls, letting you control the camera with your hand movements rather than needing to adjust anything in the app.
These are fairly basic, but I found they worked well in practice. Holding up your palm freezes (or unfreezes) your tracking or auto-framing preset, holding up two fingers toggles the aforementioned whiteboard mode, and making an 'L' sign and moving your hand up and down lets you zoom in and out. It doesn't feel particularly natural at first, but I quickly found myself adapting to it.
(Image credit: Future)Now, let's get to the meat of this review: how's that picture quality? Well, I'm very pleased to report that it's nothing short of excellent. Even in the poorly-lit, cramped little box of a room I call a home office, I don't think I've ever looked better on a monitor-mounted webcam.
4K footage is sharp and bright at 30FPS with solid color reproduction. The upgraded sensor and larger aperture compared to the previous model give the Link 2 Pro great performance across a range of light conditions, showing me clearly and well-illuminated whether it was the middle of the day with the curtains open or late at night by the light of my desk lamp.
The field of view is also reasonably wide at 83.9 degrees, making it easy to fit two or even three people in frame for presentations or podcasts. I've seen webcams with broader FOVs – in fact, I very recently reviewed the Razer Kiyo V2, which boasts an almost too-wide 91-degree FOV – but this is more or less perfect for mainstream use.
(Image credit: Future)The built-in microphone array is pretty good considering that integrated microphones frequently feel like an afterthought on webcams. It offers clear enough audio capture with AI-powered background noise canceling for casual to intermediate users, great for stuff like Zoom meetings, but serious professional content creators will likely still want to invest in a proper standalone microphone.
In terms of flexibility of use, it's good, if not perfect. It's relatively compact, so while there are smaller and lighter webcams out there, you can still take it with you on the go if you work across multiple locations. If you fit it to a suitable mount, you can easily flip it onto its side to record vertical video for social media without any loss of functionality. The only issue is that it's a tad bulky to mount atop a laptop display unless your laptop has a particularly sturdy hinge, but that's a pretty minor issue in the grand scheme of things.
(Image credit: Future)Overall, I'm finding very little I can criticize about the Insta360 Link 2 Pro. Other than the fact that it's undeniably expensive and will almost certainly be more than the average user actually needs, this is just a fundamentally great product that easily ranks among the best webcams on the market right now.
If I absolutely had to pick something to nitpick here, it might be that the Link 2 Pro lacks any kind of lens cap. Dust and debris getting stuck on or under the lens can be a real irritation with webcams, so it would have been a nice inclusion – especially considering that it's a pricey, high-end webcam. But that really is the definition of nitpicking; this is genuinely one of the greatest webcams I've seen in a long time.
Insta360 Link 2 Pro webcam: Price & availabilityAt $249.99 / £239 / AU$439, the Insta360 Link 2 Pro is the most expensive webcam the company offers, and it's undeniably a steep price for the average user. If you're purely looking for a high-quality 4K webcam and you're not bothered about fancy features, you could easily find one for half that price if you shop sales.
That being said, I'm not going to call this bad pricing. Considering that the Link 2 Pro is a high-end webcam aimed squarely at professionals who are serious about their hardware, along with the rich feature set and great picture quality it offers, I don't think the price is unreasonable – it's just not going to be worth it for more casual users.
Insta360 Link 2 Pro webcam: SpecsRazer Kiyo V2
Price:
$249.99 / £239 / AU$439
Supported resolutions:
4Kp at 30fps, 1080p at 60fps
Sensor:
Insta360 1/1.3" Low Light Excellence Sensor
Field of view:
83.9 degrees
Connection:
USB-C
Features:
Digital zoom, AI auto-framing, AI tracking modes, AI autofocus, dynamic color correction, HDR, mechanized gimbal
Software Integration:
Insta360 mobile app, Insta360 Studio
Should you buy the Insta360 Link 2 Pro webcam?(Image credit: Future)Insta360 Link 2 Pro webcam report cardValue
The high asking price is the only thing holding the Link 2 Pro back from being genuinely perfect, but it's worth the money for professional users.
3.5 / 5
Design
The chassis remains unchanged from the Link 2, but it was already great, with the gimbal working fantastically.
5 / 5
Performance
Visual clarity is absolutely great at 4K, and the Link 2 Pro performs great at any light level and focal length.
5 / 5
Avarage rating
The definition of a premium webcam for content creators and remote professionals, the Insta360 Link 2 Pro is an easy recommendation – if you can stomach the price.
4.5 / 5
Buy it if...You want the best of the best
It's not cheap, but the Insta360 Link 2 Pro more than earns its title of 'premium webcam', with great performance and a rich, useful feature set.
You want smart tracking modes
The AI-powered gimbal tracking of the Link 2 Pro works seamlessly across a range of use cases, making it ideal for activities like podcasting and shopping streams.
You're on a budget
With a steep price tag of $249.99 / £239 / AU$439, there's no denying that the Link 2 Pro will be too expensive for many users.
You want something simple
While it does offer pretty effective plug-and-play functionality, the Link 2 Pro is a high-end device that offers more than the average Zoom user really needs.
Insta360 Link 2C
Our current top pick of the 4K webcams available on the market right now, the Link 2C offers performance that almost matches the Link 2 Pro, but removes the fancy mechanized gimbal to provide a more straightforward webcam experience at a lower price point.
Read our full Insta360 Link 2C review
Obsbot Tiny 2
The Tiny 2 from Obsbot delivers 4K video along with AI-powered tracking via its mechanical gimbal mount, just like the Link 2 Pro. For those who want a high-end video experience, this is a great pick.
Read our full Obsbot Tiny 2 review
How I tested the Insta360 Link 2 Pro webcamI've been using an Insta360 Link 2 as my day-to-day webcam for several months now, so I was curious to see how it compared to the Link 2 Pro. As per my usual process for reviewing webcams, I replaced my daily driver with the Link 2 Pro for just over a week, using it for my usual spate of workday video calls.
I also installed the relevant Insta360 software on my phone and PC to test out its functionality, and made sure to test the performance of the Link 2 Pro in a range of different light conditions by recording video and comparing the clips side by side.
I've been testing and reviewing PC hardware for more than eight years, starting at the PC-building hobbyist magazine Maximum PC before making the leap to TechRadar's computing team. I put all of my knowledge and experience behind each and every one of my product reviews, so you can be assured that you're getting an informed and bias-free judgement.
The new Dell XPS 13 (2026) is a shift from Dell's usual modus operandi, finally bringing the premium-quality XPS line down to a more affordable space. If that sounds familiar, it's because Apple did the exact same thing earlier this year: the arrival of the MacBook Neo has shaken up the laptop market, and evidently left other manufacturers scrambling to front their own competition to Apple's new wallet-friendly MacBook.
But before I delve into how effective a frontline soldier Dell's new effort is in the never-ending battle between Windows and Mac, it's time for a brief history lesson: the lore of XPS, if you like.
Dell's XPS brand was unceremoniously killed off last year, before being suddenly resurrected at CES 2026, presumably because their executives realised that shuttering your single most iconic and well-loved brand is a bad idea (shocker, I know). But as I mentioned above, the return of XPS has seen a paradigm shift; while the Dell XPS 14 and XPS 16 are still the pricey, high-end laptops I've come to expect from the XPS lineup, the new XPS 13 is an entirely different beast.
(Image credit: Future)It's still identifiably an XPS laptop, there's no denying that. From the ultra-thin chassis to the all-metal casing and minimalist logo on the lid, you'd be forgiven for thinking at first glance that this was just another premium XPS model.
But opening up the laptop betrays its more budget-conscious nature immediately; gone are the giant, edgeless touchpad and zero-spacing keyboard seen on this year's 14- and 16-inch models, replaced instead by more traditional fare. The touchpad and keyboard here wouldn't look out of place on the average Chromebook.
A peek at the spec sheet further solidifies the new XPS 13's position as a MacBook Neo rival; a lower-end hexa-core Intel Core 5 chip and only 8GB of RAM in the base model all point to this being a more sensibly priced product.
I'll dig into the performance specifics later in this review, but the good news is that the lower-spec hardware doesn't render the XPS 13 dangerously underpowered. This laptop is perfectly capable of handling everyday work, even if it's not a performant powerhouse like its bigger siblings. The battery life is also excellent, and the display is very high quality for the price point. In short, there's a lot to love here.
Unfortunately, there are a few things that hold this new breed of XPS back. The base configuration features only 8GB of RAM, which is fundamentally insufficient in the current era of Windows software, and the measly port selection may prove frustrating for some users. It's also just a bit too expensive to be considered a true rival to the MacBook Neo.
Now, it's arguable that this isn't entirely Dell's fault. The ongoing RAM crisis, spurred by skyrocketing demand for AI data center hardware, is causing the prices of all kinds of computer components to spike sharply. Shifting to 8GB of RAM in the base configuration is very likely to be a cost-saving move. Overall, I'd say that this is a pretty solid effort from Dell – just don't expect too much from it.
Dell XPS 13 (2026) review: Price & availability(Image credit: Future)Brace yourself: this is going to be one of the longest price sections I've written for a review in a while. There's a lot to talk about here, sorry!
Apologies to our readers outside the US: the pricing of the Dell XPS 13 beyond America is pretty damn awful, to the point where I'm worried it might have already scuppered any chance of this laptop being a genuine competitor against the MacBook Neo.
In the US, the base configuration comes with a 256GB SSD, Intel Core 5 320 processor, and 8GB of RAM. It'll cost you a very reasonable $699, or $599 with a student discount – in other words, exactly the same price as the 256GB MacBook Neo.
However, I'd generally struggle a little to recommend that version. 8GB of RAM is simply substandard for running software in Windows 11 these days, especially if you plan to run multiple programs at once. Stepping up to the safer recommended 16GB of RAM (which also mandatorily bumps up the SSD to 512GB) will cost you $899, already taking us a fair bit beyond the competing MacBook Neo. Of course, there's no 16GB version of the Neo available, but it's worth noting that the 'unified memory' used by Apple's laptops is a bit more efficient than traditional laptop RAM.
Outside the US, things start to look dicey. For starters, there's no 256GB SSD configuration available in Australia, with the cheapest available models starting at £749 / AU$1,597.20 – a far less attractive prospect after accounting for exchange rates. And if you want to bump things up to 16GB of RAM, you're looking at a fairly steep £1,099 / $1,897.50. My review unit is the 8GB UK configuration with 512GB of storage, which will cost you £899 (though at the time of writing, it's already on sale for £769)
There are higher-spec models available, too, with the RAM configurable up to 32GB and the SSD up to 1TB, as well as the option to upgrade the CPU to a significantly more powerful Intel Core Ultra 7 355. This top-spec model will cost you $1,799.99 / £1,899 / $3,698.20 – and quite frankly, at that point you might be better served by opting for the more premium XPS 14. Configurations with the Core Ultra 7 processor also benefit from an upgrade to Thunderbolt 4-capable USB-C ports.
Overall, I'm not too impressed by the pricing of the Dell XPS 13, especially considering its market position as a Windows-toting rival to the MacBook Neo. There's certainly still an argument that it deserves a place among the best budget laptops (for buyers in the US, at least), but it's not the phenomenal value product I was really hoping to see when I first heard about it. Still, if you're a US shopper who wants a basic but effective laptop for work or school, it's not a terrible choice.
Base spec
Max spec
Price
$699 / £749 / AU$1,597.20
$1,799.99 / £1,899 / $3,698.20
CPU
Intel Core 5 320
Intel Core Ultra 7 355
Graphics
Integrated Intel Graphics
Integrated Intel Graphics
RAM
8GB LPDDR5X
32GB LPDDR5X
Display
13.4inch, 2.5K (2560 x 1440), 120Hz, 500 nits, Touch
13.4inch, 2.5K (2560 x 1440), 120Hz, 500 nits, Touch
Storage
256GB M.2 PCIe SSD
1TB M.2 PCIe SSD
Ports and Connectivity
2x USB-C 3.2 Gen 2; Wi-Fi 7, Bluetooth 6.0
2x Thunderbolt 4 USB-C; Wi-Fi 7, Bluetooth 6.0
Battery
52Wh
52Wh
Weight
2.2lbs (1 kg)
2.2lbs (1 kg)
Dimensions
11.7 x 7.9 x 0.5 inches / 297 x 201 x 13mm
11.7 x 7.9 x 0.5 inches / 297 x 201 x 13mm
Dell XPS 13 (2026) review: Design(Image credit: Future)Straight off the bat, despite its aggressive redesign and shift towards more conventional aesthetics, the 2026 Dell XPS 13 still feels like a premium product. I might have complained about the pricing further up in this review, but considering that the build quality remains solid regardless of which configuration you buy, I have to admit that I'm very pleased here.
The entire chassis is machined from high-grade aluminum, making it highly durable without compromising on weight. The whole thing weighs almost exactly one kilogram, and combined with the 13.4-inch display's slim bezels, it's a very portable laptop indeed.
It's also impressively thin, measuring just half an inch thick with the lid closed. The casing has rounded corners and a smooth matte finish, which is reasonably good at resisting scratches and fingerprint marks. It's available in a few different colorways, all muted metallic tones, with availability varying between regions and configurations.
(Image credit: Future)The keyboard and touchpad are totally different from what we've seen on previous XPS 13 models, now trending towards functionality over style. The LED-backlit keys are reasonably spaced, comfortable to type on even for extended periods, and have a decent amount of travel despite the laptop's ultra-thin design.
They're perhaps a little spongy on full presses for my liking, with a bit of flex in the keyboard housing; something which I consider completely forgivable in a sub-$800 laptop, but might push some users towards the more premium typing experience of the XPS 14 or 16. Similarly, the touchpad has a satisfying click, but firm presses on the bottom corners feel a tiny bit flimsy – definitely not a dealbreaker for a budget laptop, but again, it gives me pause when it comes to recommending the higher-spec models.
Thankfully, some things haven't changed from previous models. The display is once again the star of the show here: a fantastic 2.5K touch panel, boasting good maximum brightness and impressive color reproduction, especially considering that the screen is the same regardless of which internal spec you opt for. If you get the cheapest configuration, you're getting plenty of bang for your buck when it comes to the display.
(Image credit: Future)Looking at the rest of the physical design, it's all good without being spectacular. The speakers are integrated under thin slots on either side of the base and are reasonably loud for such a small laptop. Don't expect thumping bass here, but the volume is good without high notes sounding tinny.
The webcam is also decent, 1080p rather than the 720p resolution you'll find on many budget-conscious laptops. I've certainly seen sharper webcam footage, and the low-light performance is merely okay, but it gets the job done well for the most part. It also supports facial recognition logins via Windows Hello. The integrated microphone array is decidedly average, though, so I'd advise getting a decent headset if you plan to make regular video calls.
Lastly, we come to connectivity, which is perhaps the most mixed part of an already mixed bag. Wireless connectivity is top-notch; Wi-Fi 7 ensures speedy, lossless internet (assuming you're connected to a network that supports it!) while Bluetooth 6.0 is an exceedingly rare sight on any laptop under $1,000.
FutureFutureFuturePhysical connections, though? Yeah, this one's a wash. We criticised the MacBook Neo for only having two basic USB-C ports (no Thunderbolt 4 support), and it's the same case here. Granted, these are both USB 3.2, while one of the Neo's ports is a frankly pathetic USB 2, and springing for the higher-spec CPU upgrades both ports to Thunderbolt 4, but it's still just fundamentally not enough ports.
Considering that the only way to charge the XPS 13 is to use one of the only two ports available, you're down to just a single port any time it's plugged in. Power users who want to connect multiple peripherals are going to need to spend extra on a USB-C hub, and anyone who doesn't shell out for the more powerful CPU will be dealing with slower charging and data transfer speeds.
Overall, it's a well-designed laptop that feels like it should last for years, but I will be docking a point for the sheer dearth of ports. If you prefer to connect your hardware solely via wireless means, though, you should have very little to complain about here.
3DMark: Night Raid: 17,611; Fire Strike: 3,308; Steel Nomad: N/A; Solar Bay: N/A; Solar Bay Unlimited: N/A; Solar Bay Extreme: N/A; Solar Bay Extreme Unlimited: N/A
Geekbench 7: Multicore: 7,103; Single-core: 2,345
Cinebench 2026: Single Core: 455; Multi Core: 1,604
Crossmark: N/A
Passmark Overall: 3,872.3; CPU: 16,166.2 2D Graphics: 745.0; 3D Graphics: 2,566.9; Memory: 2,389.7; Disk: 33,862.4
BlackMagicDisk: Read: 3,774MB/s; Write: 2,829MB/s
HandBrake 4K to 1080p: 22.48fps
Total War: Warhammer III: 1080p, Medium: N/A
Total War: Warhammer III: 1800p, Ultra: N/A
Battery Life (TechRadar movie test): 16 hours and 17 minutes
I'm a big believer in setting realistic expectations, so once I learned that my XPS 13 review unit was the UK standard configuration with 8GB of RAM and the decidedly low-end Core Ultra 5 320 CPU, I immediately tempered my hopes of great performance.
Despite this, this XPS 13 performed a bit better than I'd expected overall. Performance in my everyday workloads – including web browsing, word processing, and some light image editing in GIMP – was good, with virtually no slowdown even with half a dozen Chrome tabs open and Spotify running in the background. Windows 11 generally felt snappy and responsive.
The more you start to load it down with tasks, though, the more it struggles. The simple fact is that in the current age of computer software, 8GB of RAM just isn't sufficient for more complex or varied workloads.
It was a telling moment when Apple finally relented and upgraded the minimum starting memory on the best MacBooks to 16GB rather than 8GB back in 2024; the demands of modern professionals have shifted, and I was rather upset to see that the MacBook Neo has reverted back to 8GB as standard. However, this is less of a problem for Apple, since the 'unified memory' used in MacBooks is faster and more efficient than traditional DDR laptop RAM, and the company's total control of the Mac software/hardware ecosystem makes optimizing for less memory a bit easier.
(Image credit: Future)So let's break down how the XPS 13's 8GB of RAM actually performed. I'll start with the bad news: some of my tests failed to complete altogether, loading up but then aborting. I've not seen this happen in quite a while, with the 16GB industry standard evidently shielding me from such failures.
In total, the XPS 13 failed eight of our standard benchmark tests, most of which were the more demanding 3DMark graphical tests. However, I also noticed some instability in other tests; Cinebench crashed several times before I was able to get stable readings, and 3DMark also crashed once before I was even able to start running tests.
The tests that did run showed decidedly lackluster performance in 3D rendering and similar creative workloads. This isn't a laptop you'll be squeezing in a few rounds of Marvel Rivals on, though I did manage to get Slay the Spire II running fine, so perhaps some 2D indie gaming is still on the table here.
Outside of regular testing, I also tried to fire up Adobe Photoshop and Premiere Pro. Both initially loaded without crashing, but were sluggish in practice, and Photoshop ended up crashing after about five minutes of use.
The Dell XPS 13 (2026) got rather warm during the more intensive tests. The thermal exhaust is a thin slot nestled into the display hinge, and while the fans remained impressively quiet throughout my testing, the underside of the laptop did get too toasty to comfortably have it actually on your lap while running resource-intensive software. It did remain cool and near-silent during regular office work, however.
The takeaway here is that while the 8GB model of the XPS 13 is perfectly capable of handling basic everyday workloads, it just doesn't have the oomph for anything more demanding than straightforward office or schoolwork. If that's all you want to do, the budget-friendly 8GB configuration should be fine; if you've got grander designs than that, you'll need to pay extra for a more powerful model.
Intel's third-generation Core chips are clearly putting in some work here. Although the Dell XPS 13 (2026) only has a 52Wh battery (far smaller than the batteries you'll find on many ultrabooks these days), the efficiency of this chip can't be understated; our video playback battery test saw the laptop sail comfortably past the 16-hour mark.
There are laptops that can go for longer, but at this price point, that's a very respectable effort. It outstrips the MacBook Neo by nearly three hours according to our tests. I found that even at maximum brightness, with a Bluetooth mouse and headset connected and the Windows power mode set to Balanced, it could comfortably make it through an eight-hour workday without needing a charge.
The laptop also holds charge fantastically when not in use. My partner got sick, and I had to shelve this review for a couple of weeks, during which time the XPS 13 simply sat untouched on a desk in my home office. When I finally opened it up to start my review process, it was still at 90% charge. When plugged in, it charges up to full in just under an hour (though the higher-spec model with Thunderbolt 4 ports will presumably charge faster).
My only real criticism here is that it doesn't come with a power adapter in the UK and EU. Much like Apple's approach with the MacBook Neo, this is ostensibly due to local regulations that mandate consumers' ability to buy a laptop without a charger, but come on; you could include the option to add one at checkout. I've criticized Apple for this in the past, too: it's malicious compliance, and it's simply irritating for the end user.
Attributes
Notes
Rating
Value
The UK and Australia pricing is a shame, but student discounts help a lot, and the base model is very reasonable in the US.
3 / 5
Design
Despite a disappointing port selection, this is a well-crafted laptop that feels nicely durable and packs an excellent touch display.
4 / 5
Performance
Decent performance in everyday tasks, but users aiming to multitask will definitely want to invest in the 16GB RAM model.
3 / 5
Battery life
The XPS 13 can comfortably cruise through a full workday (and then some) without needing a charge.
4.5 / 5
Total Score
The 2026 XPS 13 isn't quite the MacBook Neo-beater that Dell clearly hoped it would be, but it's still a solid pick for anyone who wants a Windows alternative to Apple's new budget MacBook.
3.65 / 5
Buy it if…You want something ultra-portable
The impressively slim design, one-kilo total weight, and sturdy aluminum chassis all work together to make the XPS 13 an eminently portable laptop for taking on the go.
You want a premium design for a non-premium price
It looks and feels impressively high-end, even in the cheapest available configurations. While it might be a little more function-over-form than the larger XPS models, this still feels like a premium laptop.
You want lots of ports
There are only two ports on board, and both are USB-C (without Thunderbolt 4 in our review configuration), so you'll need a USB hub if you want to connect multiple peripherals.
You want to run demanding software
While it can handle everyday work with easy, the lower-end CPU and 8GB of RAM in the base configuration simply don't offer enough juice for power users planning on aggressive multitasking or resource-intensive programs.
HP OmniBook 7 14-inch (2025)
Like the XPS 13, the OmniBook 7 is an incredibly thin and light laptop. Not only that, our reviewer was very impressed with how well it handled all kinds of workloads, and it has a superb battery life to boot. Read our full HP OmniBook 7 14-inch (2025) review.
Asus Zenbook A14
Another ultra-portable hero, the A14 offers truly staggering battery life; in fact, it’s the most enduring laptop we've tested in recent years, lasting a staggering 28 hours in our movie playback test. Its build isn’t as premium as the XPS 13’s, and its display isn’t as bright, but it’s still a capable machine. Read our full Asus Zenbook A14 review.
If you've read any of my other reviews, you'll already know the drill: I swapped out my daily driver (the excellent Asus Zenbook Duo 14) for the Dell XPS 13 for one full week, including the weekend.
This helps me get a proper feeling for how the laptop functions in everyday use scenarios, testing it out for a range of typical tasks including web research, writing articles, and image editing. Naturally, I also ran the laptop through our usual suite of synthetic benchmarking tests, including our looped video test for battery life.
I've been a computer hardware journalist for more than eight years, and working for TechRadar for half a decade. In that time, I've reviewed more laptops than I can remember for numerous different publications; the number is certainly in the dozens, quite likely into triple digits by now! I put every bit of experience and expertise I've gained over those years into my reviews, so you can rest assured that you're getting accurate, bias-free information.
CareerBuilder is a popular job site that aggregates numerous listings and lets job seekers search through them seamlessly. Users can upload resumes and get matched with employers and also receive ongoing job opportunity alerts.
Founded way back in 1995, CareerBuilder is one of the earliest job sites still operating today. It once had the largest market share of job sites in the U.S. but gradually lost ground to rivals like Indeed and Glassdoor. It remains fairly popular, though, with users across the US, Asia, and Europe.
I reviewed CareerBuilder to help you decide if it’s a good option out of the many job sites to choose from. What do you gain from it, what are its pros and cons, and is it better than the competition? I’ve answered these questions in detail, so read on to learn what CareerBuilder offers.
CareerBuilder: Plans and pricingCareerBuilder follows the pricing model used by most job boards. Job seekers use the site for free, while employers pay to promote job listings and gain access to the resume database. You can check it out by clicking here.
It’s a business model that works well for both parties. Job seekers find opportunities without paying, while businesses pay to connect with qualified job candidates.
Pricing for employers starts at $299 per month. The Lite plan, for $299 per month, allows 1 active job listing and 500 resume views on CareerBuilder’s database. Using algorithms, the job listing is matched with fitting resumes from CareerBuilder's database, and the employer receives ongoing email alerts about resume matches.
The Standard plan, for $399 per month, allows 3 active job listings per month while other features remain the same. For $599 per month, the Pro plan allows 5 active job listings.
CareerBuilder offers discounted prices for businesses that commit to paying annually instead of monthly. Large enterprises can also negotiate directly with the sales team and secure bulk discounts.
Unlike several job sites I’ve reviewed, CareerBuilder offers no free plan for employers, and I consider this a disadvantage. Some sites allow employers to post 1 or 2 job listings for free, then pay for advanced features like access to the resume database. In this case, there’s no free plan or a standard free trial.
CareerBuilder: FeaturesCareerBuilder connects job seekers to employers advertising job listings in numerous niches. For job seekers, it’s free to use, but employers pay for promoting job listings.
Anyone can sign up as a job seeker and scour CareerBuilder’s job listings, with filtering by location, type (full-time or part-time), date posted, and specific keywords.
For instance, if you’re looking for a full-time software engineer role in Denver, Colorado, you’ll adjust the search filters to get the exact results matching your query. If you need a part-time job at a local retailer, you can also adjust filters to get exact matches.
(Image credit: CareerBuilder)You can also upload your resume to CareerBuilder’s database, and employers can find you in this database. This means that you don’t always have to go seeking jobs, but jobs can come to you. If an employer thinks your resume is a very good fit, they’ll contact you for further interviews.
(Image credit: Uploading a resume to CareerBuilder)I like that CareerBuilder sends job alerts tailored to users’ resumes and previous searches. Some of the best roles are hiding in plain sight, so you won’t always find them when searching, but CareerBuilder’s email alerts can quickly point you to them.
For some jobs, you can apply with one click, but others can require a multi-step process. Either way, I found the application process as straightforward as it gets.
CareerBuilder provides some profile insights that I found valuable. I received alerts when employers viewed my profile (even if most didn’t send job offers) and when my profile appeared in search results. These insights tell users about the employers and job searches their profiles match, and they can optimize further to get the right roles.
I also like that CareerBuilder offers salary data, though not as detailed as rivals like Glassdoor. This data makes it easy to research pay ranges for expected jobs, based on location, roles, and other data.
I’ve discussed the features job seekers get on CareerBuilder, so let’s now look at what employers get on this platform. First, businesses gain access to a vast resume database from which they can select suitable job candidates. Just as job seekers search for jobs with filters like location and title, you can filter through resumes to find candidates that match your preferences, then contact these candidates with potential offers.
Of course, businesses can create job postings for candidates to view on the CareerBuilder job board. I like that CareerBuilder provides an AI assistant that helps generate compelling job descriptions. With many businesses posting similar roles, a compelling description makes yours stand out to job seekers.
Notably, CareerBuilder offers job syndication, where job listings are published not only on CareerBuilder but also on partner sites and niche job boards. This syndication increases the reach of your job posts and makes finding good candidates easier.
A centralized dashboard makes it simple for businesses to sort and save resumes, monitor applications, and keep tabs on conversations with candidates.
CareerBuilder offers standard features that employers find on rival job boards. My main complaints are the relatively high costs and lack of a free plan, even one with restricted features.
Pricing starts at $299 per month for 1 active job listing and goes up to $599 per month for 5 listings, which I consider steep. Large businesses can negotiate discounts, but the pricing remains relatively high. I’ll advise only medium-sized and large businesses with bigger budgets to get a CareerBuilder employer account, but it doesn’t suit small businesses.
CareerBuilder: Ease of useCareerBuilder offers a modern, visually appealing interface that I found easy to navigate. The interface sports a white background and a few bright colors to highlight buttons, icons, and features, giving it a modern, minimalist look.
Filtering job listings, uploading resumes, and scouring resume databases felt noticeably easy. This sleek, easy-to-navigate interface benefits both job seekers and employers.
(Image credit: CareerBuilder )You can access CareerBuilder from a web browser or download the iOS or Android app. The smartphone app allows for easy, on-the-go access, particularly for browsing job listings and quickly applying to available jobs.
CareerBuilder: SupportYou can access CareerBuilder from a web browser or download the iOS or Android app. The smartphone app allows for easy, on-the-go access, particularly for browsing job listings and quickly applying to available jobs.
CareerBuilder: The competitionCareerBuilder has many competitors, as it operates in a crowded job board industry. I’d have mentioned Monster as a rival, but both are owned by the same company. Glassdoor and Snagajob are then the main rivals I’d like to highlight.
Glassdoor operates a job board like CareerBuilder, but its strength lies in massive salary data, company reviews, and interview prep tips for job seekers. CareerBuilder also provides salary data, but its dataset is nowhere as close as what’s available on Glassdoor.
Snagajob is built for a specific niche of hourly, part-time, and seasonal jobs in retail, restaurants, and related industries. You can also find such jobs on CareerBuilder, but I think Snagajob is better for seeking hourly, temporary roles at retail stores, bars, restaurants, warehouses, etc. However, CareerBuilder offers a broad set of jobs, both full-time corporate and hourly roles, that you won’t find on Snagajob.
CareerBuilder: Final verdictCareerBuilder is good for both people seeking jobs and businesses seeking to connect with the right job candidates, although prices are relatively high for businesses. It’s a reliable platform that connects job seekers with the right opportunities from businesses.
However, I’d note that CareerBuilder doesn’t offer much to differentiate itself from the competition. It feels like just other job boards do. That’s not really a flaw, but just something to note when comparing CareerBuilder against other job boards.
For more picks, we've tested the best recruitment platforms and the best job sites.
Dreame’s flagship X60 Pro Ultra Complete is one of the most feature-filled, efficient and reliable hybrid robot cleaners this writer has so far reviewed — and I've reviewed many. Its class-leading 42,000Pa of suction power is certainly attention-grabbing, but the cleverness of this autonomous floor bot goes well beyond brute suction force.
Like some Roborock models, the X60 Pro Ultra is equipped with a retractable LiDAR turret that allows the unit to scoot under the lowest of furnishings with a floor clearance of just 3.5 inches (9cm). Better still, it can also tackle thresholds up to 3.9 inches (10cm) in height, so doorways and awkward transitions are much less likely to bring its cleaning mission to an abrupt halt.
Dreame has also addressed one of the biggest weaknesses of robot cleaners – getting properly into edges and corners. Where most premium bots are able to extend one of the mops by a couple of inches, this one is capable of extending it's edge-cleaning mop to an extremely impressive seven inches (18cm), and you can see the amazing results of this when it's working along skirting boards and around chair legs. Likewise, its front side-mounted sweeper brush can also reach up to four inches (12cm) into corners for a much more thorough sweep.
Dreame appears to have thrown everything it has into this flagship model, and the results are very impressive. Granted, it’s expensive, possibly over-engineered and perhaps more robot cleaner than most people actually need, but if your idea of luxury is never having to sweep or mop floors again, this model is a very tempting proposition, despite some minor anomalies in the obstacle avoidance department. The fact it comes with a surfeit of extra accessories — including spare dust bags, filters and rollers — is the icing on a very substantial cake.
Dreame X60 Pro Ultra Complete review: price & availabilityAt the time of writing, the Dreame X60 Pro Ultra Complete is available in the UK for £1,299, with retailers including Dreame, Amazon and John Lewis & Partners listing it. It is also available in most parts of Europe, priced at €1,499, with some discounts taking it to a much lower €1,199.
In the USA, Dreame is concentrating on the X60 Max Ultra Complete, a slightly different variant with lower suction power (35,00Pa) than the UK-spec X60 Pro Ultra Complete. You can purchase the Max version via the US Dreame store for $1,699.99 or Amazon where it shifts for a slightly discounted $1,614.99.
At the time of writing, the Dreame X60 Pro Ultra doesn't seem to be available in Australia yet.
In the UK, the X60 Pro Ultra Complete is firmly in premium robot-vacuum territory, so there are plenty of alternatives worth considering. The Roborock Saros 20 is an obvious rival that offers a similarly sophisticated low-profile design for a shade under £1,000 and the Ecovacs Deebot X8 Pro Omni is another strong contender, particularly if mopping performance is a priority. Dreame’s own X40 Ultra is also worth considering if you want many of the flagship brand’s features without spending X60 Pro Ultra money.
However, for design, performance, impressive specs and the horde of spare parts it comes with, the X60 Pro Ultra Complete is difficult to ignore. While its combination of 42,000Pa of suction power, extendable cleaning hardware and highly automated dock puts it firmly at the expensive end of the market, I think it's a price worth paying.
Robot dimensions (W x H)
13.77 x 3.5 inches / 35 x 8.9cm
Cleaning dock dimensions (H x W x D)
19.64 x 17.95 x 15.35 inches / 49.9 x 45.6 x 39cm
Suction
42,000Pa
Cleaning dock bin size
3.38 quarts / 3.2 liters
Clean water tank size
4.43 quarts / 4.2 liters
Dirty water tank size
3.17 quarts / 3 liters
Navigation & obstacle avoidance
Pathfinder VersaLift ToF LiDAR paired with AI OmniSight System 3.0 + LED
Carpet detection
Yes
Threshold crossing
ProLeap with dual retractable legs for up to 3.93 inches (10cm) clearance
Mopping functions
Dual heated rotating mops + dock-based maintenance
Robot noise level
65dB at five feet
Dreame X60 Pro Ultra Complete: designBefore we take a look at design of the X60 Pro Ultra's robot and dock, I should add that, right out of the box, this model has been extraordinarily reliable and more efficient than the majority other models I've reviewed these past few months.
Robot vacuum cleaners are among the easiest of smart home products to set up and this one was one of the most efficient. Yes, it arrived in a large box but because it comes with just three main parts — the robot, the dock and its clip-on ramp – I had it on the floor and ready to map my open-plan area within minutes. And, boy, did it map it well, even to the point of accurately pre-naming the four spaces it had located – Living Room, Dining Room, Kitchen and Hall — simply by noting the type of furnishings in each room.
This was a great start, in my opinion, because most robot vacs normally settle for generic terms like Room, 1, Room 2, etc. Of course, it's extremely simple to change the names of the rooms and just as easy to divide or merge them, but to have a robot that maps a living space so accurately from the off is a major plus.
I was also pleasantly surprised to discover the true meaning of this model's 'Complete' moniker because I spotted a huge array of accessories in the box. Most floor bots only come with a spare side brush, a spare dust bag and, occasionally, a tiny bottle of floor cleaning solution. But this model comes with three extra dust bags, a spare side brush, two dust box filters, three pairs of extra mop pads, a large one-quart (1L) bottle of cleaning solution and, rare for any robot, a spare pair of roller brushes. This is a major boon given that these are all items that one would normally need to purchase further down the line of ownership. Chapeau to Dreame.
Finally, if you purchase this bot today, sometime in 2027 you'll be able to use it in cahoots with Dreame's next sci-fi offering, a staircase-climbing robot module called the Cyber X. Unveiled at IFA Berlin, this amazingly clever slice of robotic tech functions as an autonomous carrier for the X60 so it can be transported up and down stairs. Can’t wait to see that in operation.
(Image credit: Future)Robot designThe Dreame X60 Pro Ultra is available in black or white and is a striking example of just how much robot vacuum design has advanced. From the outside, it remains recognisably circular, but almost every component here has been engineered to tackle many of the shortcomings that have made some robot cleaners largely frustrating to live with. In short, this is a robot designed not simply to clean the floor, but to get into more places, deal with more types of mess and spend less time getting stuck.
While not especially unique, the X60’s retractable LiDAR turret is one of its smartest design flourishes. Rather than permanently sitting proud of the robot, the turret can retract to help the machine achieve an incredibly low 3.50 inch (8.9cm) profile. That might not sound like much on paper, but it makes a substantial difference in practice, allowing the X60 to venture underneath beds, sofas, TV cabinets and any other furnishings with a minimum floor clearance of just 3.54 inches (9cm).
Dreame has also addressed another common robot-vacuum weakness: thresholds. My home doesn't have any thresholds but if it did, this is the model I'd choose because its two pop-out legs give it the ability to climb double-layered obstacles up to 3.93 inches (10cm) and single steps up to 2.04 inches (5.2cm) in height, giving it an impressive ability to move between areas of the home without requiring any makeshift ramps. It also means far fewer situations where you return home only to discover that your expensive robot has spent half the day stranded on the lip of a doorway.
(Image credit: Future)The X60 Pro Ultra's class-leading figure of 42,000 Pascals of suction is colossal even by today's standards, and this is especially useful when engaging the robot's Large Particles Boost mode which gives the X60 Pro Ultra additional oomph when it encounters larger pieces of debris.
Combined with the unit's twin tangle-free rubber rollers and a retractable pressure plate that creates a semi-sealed vacuum chamber, this level of suction is particularly relevant for pet owners, where clumps of hair can present a much greater challenge than everyday dust. Moreover, the X60 Pro Ultra also features an obligatory spinning side brush which extends much further than the norm — up to four inches (12cm) — for better corner cleaning.
(Image credit: Future)Many modern floor bots feature at least one mop that's able to extend by a couple inches when cleaning along skirting boards, in corners or around furniture legs. But this one takes mop extension to a whole new level of stretch by offering a reach of seven inches (18cm). When I first saw this in operation I thought a piece of furniture had ripped its arm out of a socket. The spinning mop pads, meanwhile, are thermally efficient and exert up to 15 Newtons of downward pressure, providing considerably more physical contact with the floor than a robot that merely drags damp pads behind it.
When it comes to robot vacuum cleaners, navigation and obstacle avoidance are arguably just as important as suction because all this fancy hardware is pretty pointless if the robot can’t find its way around the home.
(Image credit: Future)The X60 Pro Ultra’s impressive navigation system is built around Dreame’s advanced VersaLift retractable hybrid LiDAR, which scans its surroundings using lazer beams to create detailed maps of the home and plan efficient cleaning routes. It’s also backed by AI-enhanced 3D Proactive Light Detection and intelligent obstacle recognition of around 320 object including, according to Dreame, 'tiny objects of 10mm'. We'll have to see about that.
On the battery front, this model is fitted with a 5,000mAh battery that recharges from empty to full in about 100 minutes and, according to Dreame, is capable of charging 25% of its capacity in about six minutes.
Score ref: 5/5
Dock designThe Dreame X60 Pro Ultra’s charging dock is as impressive as the robot itself. With its tall, sophisticated design and glossy facade replete with a subtle pinstripe effect, this is one robot dock you might not mind having centre stage. More importantly, it’s packed with a raft of technology that's designed to keep the X60 in readiness for action with minimal human intervention, aside from periodically discarding the dock's dust bag and servicing the two water tanks.
Speaking of which, you get the usual dual water tank combo comprising a 4.43 quarts (4.2L) fresh water tank and a smaller 3.17 quarts (3L) tank for the filthy stuff. Instead of tainting the sink area with stinky water, I always flush the contents of the dirty tank into the toilet bowl and then give the container a quick rinse under a tap. This model also comes with a liquid floor detergent dispenser situated next door to the dock's dust bag department.
The Dreame X60 Pro Ultra comes with one of the most stylish docks on the marketFutureBig water tanks for the mopping systemFutureA bigger-than-average dust bag with detergent dispenser on the leftFutureThis dock cleans itself without human interventionFutureAs to be expected in this day and age, the X60 Pro Ultra dock also takes care of all self-cleaning duties, including preparing the mop pads before use with scaldingly hot water. Since the mops themselves are thermally efficient enough to retain heat, the floor has a better chance of being properly cleaned. When the robot returns to the dock, the mop pads are washed with hot water — apparently 212F (100C) — before drying them using hot air to help prevent build-up of bacteria and nasty smells.
The dock is also fitted with a generous 3.38 quarts (3.2L) dust bag, which is larger than those fitted to many competing robot vacuum docks. This means that more debris can be stored before you need to replace the bag, reducing one of the few genuinely tedious jobs associated with owning a robot vacuum. The fact you get three spare bags with this specific 'Complete' model can be considered a major bonus.
Score ref: 5/5
To give you some idea of how impressive Dreame's current crop of robot vacs are, I installed this model's stablemate – the extra-large Matrix10 Ultra – in our village hall where it has been running for the past eight months without any hiccups. The hall is a huge 130 square meters — two-thirds of a singles tennis court – and divided into various sections, including two toilet areas and a kitchen.
Where other robots I've installed in the hall have had issues where their LiDAR-written maps have been corrupted due to the vast size of the work space and presumably the reflective windows surrounding it, the Matrix10 Ultra has not had any issues at all. In fact, it continues to this day, having successfully completed 395.65 hours of reliable operation over an area of 25,018 square meters, equivalent to a massive 6.18 acres. Not bad for a robot vacuum cleaner!
Needless to say, this model's navigation is equally impressive in the way it has mapped my home, negotiated a lot of furniture including a cluttered dining area, and never once having got lost, trapped itself under furniture or snowplowed a loose rug.
Mind, its first mapping session did produce one amusing moment when it reached the area around our garden door. Since this model uses LiDAR to navigate, its laser beam had scanned beyond the open door towards the garden, thinking it had detected another room. All LiDAR robots do this but very few have the ability to scale a tall threshold. This one, of course, has excellent ability in that department so you can see where this is heading. In fact it was sheer luck that I happened to enter the room just as it was in the process making a beeline for the garden. You've got to laugh.
Another thing I should add is that I have had to raise the valance on the lounge sofa because the camera and laser system treats fabric valances as a solid obstacle. I personally don’t consider this a major issue because almost every LiDAR-governed robot I've reviewed has also refused to punch through a sofa or bed valance. To rectify this I now occasionally tuck the sofa's valance up out of the way so the X60 can clean underneath.
Score ref: 5/5
Obstacle avoidance(Image credit: Future)Having read the glowing headlines on Dreame's website about this robot avoiding objects as small 10mm (0.39 of an inch), I simply had to give it a go by placing some much smaller items than usual in its path, including a Hue remote, a phone cable, a small bottle of essential oil and a tiny lighter. I made sure I'd selected every option in its intelligent obstacle avoidance setting and crossed my fingers as it proceeded to travel from the hall to the kitchen.
While it deftly avoided all the objects I usually test robot vacs with — including the low circular dog chew, remote and phone cable — I was very surprised when it thundered straight over the bottle and lighter as if they weren't even there. While I don't consider this a major strike against the X60's obstacle avoidance — many other robot vacs have fared worse — I do think that if a company is going to state that their robot can avoid objects as tiny as 10mm, they really need to back it up with a level of real-world performance that matches the claim.
While the X60 is no match for the DJI ROMO when it comes to obstacle avoidance, I still think it deserves a respectable 4/5 because it has avoided everything else in its path for the last six weeks, and I have never once had to remove the roller brushes to extricate something it had tried to swallow. In short, I'd say this model's obstacle avoidance is better than average but with room for improvement.
Score ref: 4/5
VacuumingI've been using the Dreame X60 Pro Ultra for the past six weeks and have never had to think about it. I've never looked at a rug after hearing it perform a scheduled task and thought it needed another clean with a cordless stick vac, I've never had to untangle it from the tassels of a rug, and I’ve never had to extricate an item too big to swallow from its rubber rollers.
Nevertheless, needs must so I scattered my usual potpourri of obstreperous ingredients over the hardwood kitchen floor and a similar handful over a piece of carpet, and watched it do its thing.
FutureFutureFor a robot vac faced with far more detritus than it would ever come across in the real world (at least I'd like to think so), the Dreame X60 Pro Ultra made surprisingly short work of cleaning up the scattered cornflakes, muesli, oats and rice, swallowing up both the fine particles and larger ones with impressive consistency, even though it needed two passes to complete the task. The X60's 42,000Pa suction rating and Large Particles Boost Mode clearly paid dividends here, though I should add that this bot is louder in volume (up to to around 68dB) when cleaning in full-power mode.
I then applied the same test to a carpeted rug and it performed just as well though, again, it required two passes – one horizontal, the other vertical – to fulfil the task. Yes, there were a few small flakes left behind on the periphery but that's because they had been flung beyond the working zone I had previously programmed.
Score ref: 4.5/5
Mopping performance(Image credit: Future)As I've stated umpteen times before, I'm no fan of robots that also mop and would much rather have a vacuum-only robot with a huge dustbin in its dock. For mopping I generally prefer sticking to my Roborock F25 Ultra wet-and-dry vac or use a paper towel to wipe up a small spill of milk.
However I can see the appeal of having a robot for hard floor-cleaning duties if it mops practically every day. And this model excels at just that, partly because of the incredible reach of its extendable mop that genuinely cleans to the edge, in corners and around table legs, and partly because its clever blue Proactive Light Dirt Detection system does seem to spot stains better than other models I've tested.
Anyway, for my extreme kitchen test I accidentally-on-purpose spilt a glass of milk and programmed the X60 to run a zone clean. After about five minutes of mop preparation, including heating the pads using hot water, it trundled over and mopped up half the milk before returning to the dock. I thought that was that until I realized it was having its mops washed in readiness for the second run I had previously programmed.
I'd say the final results were perfectly acceptable given that I would never command a robot to mop up a spill when I can perform the task a thousand times quicker with some paper towels.
The main take away here is that its day-to-day performance has definitely been a cut above many of its competitors and there's no denying the practicality of the robot's extendable mop arm which really does work wonders.
Score ref: 4.5/5
Dock performanceI have nothing but good things to say about the X60 Pro Ultra's dock. Yes, it's a pretty large item to have in a small space but, on the plus side, I think its reflective pin-striped glass-like facade is one of the most attractive finishes I've seen since the Roborock 10R.
From a functional point of view, this dock does everything from emptying the robot's dust bin and servicing the robot’s mop system with hot water, washing the mops and then drying them, to self cleaning its own mop tray at the touch of a button on the app.
Only once did the dock's suction not correctly empty the contents of the robot's bin after a full house clean, and this was because I had activated the Hair Compression setting in the app. I'm not sure how this function works but the robot's bin was so tightly clumped with loads of winter-shed hair from my two labradors that the contents refused to budge when the dock's suction kicked in. Thankfully I've had no repeats of this since switching off the Hair Compression setting and, as a result, I am not losing any sleep over it.
Score ref: 5/5
The Dreame X60 Pro Ultra’s Dreamehome app is extraordinarily well featured, giving you an almost ridiculous level of control over what the robot does, when it does it and how it cleans each area of your home. The problem is that it can initially feel like you’ve been handed the controls to an airliner.
As per usual, once the X60 has mapped your home, the app presents a detailed map that lets you merge or divide individual rooms, define cleaning zones and set no-go areas and virtual barriers. You can specify whether particular areas should be vacuumed, mopped or given both treatments, and adjust cleaning intensity according to the room or floor type.
(Image credit: Future)There are also extensive options for scheduling and short-cut tasks, along with a myriad of settings for suction power, water usage, mop behavior, carpet type, floor direction, obstacle crossing, obstacle avoidance, even if you want pet hair in the robot's bin to be compressed.
The sheer depth of the Dreamehome app is undeniably impressive, but it does come with a steep learning curve that encourages a lot of experimentation. It can also take a while to work out where everything lives, particularly if you’re the sort of person who prefers to press a couple of buttons and get on with more important things. Nevertheless, once you’ve mastered this app, it becomes one of the X60 Pro Ultra’s biggest strengths.
Section
Notes
Score
Value for money
While in the premium bracket, I think the Dreame X60 Pro Ultra Complete is fair value for money, especially given the on-board tech and huge amount of included spares.
4.5/5
Design
Slick, sophisticated and impressively engineered, the X60 Pro Ultra and its glossy dock ooze premium quality.
5/5
Performance
The X60 Pro Ultra delivers outstanding vacuum performance and better-than-average mopping, but its obstacle avoidance system could be better.
4.5/5
App functionality
The Dreamehome app is impressively comprehensive, offering deep control over all aspects, but its sheer number of settings can feel overwhelming.
4/5
Average rating
4.5/5
Buy it ifYou want great vacuum performance
Powerful 42,000Pa suction tackles stubborn household detritus with aplomb
You have hairy pets
This model has several functions designed with pets in mind
You have low furniture and high thresholds
The X60 cleans beneath very low furniture and climbs most thresholds
Don't buy it ifYour home is cluttered with tiny toys
The X60 most likely won’t evade small toys like Lego bricks
You're not very tech savvy
The X60 Pro Ultra's surfeit of features may overwhelm less technical users
Your home is on the small side
This model would be overkill, as would the large dock
How I tested the Dreame X60 Pro Ultra CompleteTechRadar takes its product testing very seriously so I lived with the X60 Pro Ultra for a few weeks having set up various weekly schedules and routines to gauge how efficiently it performed the tasks it was designed for. I also monitored the amount of times I had to rescue it from entanglement or some other anomaly but, aside from some minor obstacle avoidance issues, the X60 functioned reliably throughout its trial.
If only to prove its capability for cleaning up heavier doses of debris and mopping up spills, I also performed a few extreme tests that no robot should have to endure in its lifetime.
First reviewed September 2026.
Traditionally set in North America, the Silent Hill series has been known to stray beyond the continent on occasion, most notably with the recent Silent Hill f, which takes place in sixties Japan.
Review infoPlatform reviewed: PS5
Available on: PS5, PC
Release date: September 24, 2026
With Townfall, we’re headed to nineties Scotland, but that’s not the only change: we also get a new perspective — in more ways than one.
Not only is the game in first-person, rather than third-person, but it's developed by a series newcomer, Screen Burn Interactive, formerly known as No Code. This small Scottish outfit doesn’t exactly have a long resume, but it's already proved itself with its two previous outings. 2017’s Stories Untold was an interesting, modern take on the text adventure, while 2019’s Observation, another first-person horror, won the Bafta for Best British Game in 2020.
Now the team brings its Caledonian spirit to bear on Konami’s flagship horror franchise, but does the new locale and camera angle represent another step in the right direction for a series keen on extending its recent purple patch?
Everybody’s aff to the rapture(Image credit: Konami)We open in typical horror story fashion: a man crawls out of the water onto a dock, not knowing where he is or where he came from.
Best bit(Image credit: Konami)Sneaking around the streets of St. Amelia. Its layout is ripe for creating your own paths to avoid enemies, and escaping their clutches by running down back alleys and hiding in cupboards is always a thrill. Plus, you get to explore a town that’s been lovingly and realistically rendered, with homes, shops, and features that offer a glimpse back to a simpler time.
This man is Simon Ordell, wearing an outfit almost identical to Travis Grady’s from 2007’s Silent Hill: Origins, and denoting his everyman-ness. As you make your way up from the harbour, a cutscene plays, and a tarp blows away from a sign, revealing the town’s name: St. Amelia
And so the game proper begins, as you make your way through the seemingly abandoned town to find out what’s going on. Along the way, you’ll take control of two additional characters besides Simon — Zoe and Richard — and the plot unfolds gradually to reveal the trio’s connection to one another.
(Image credit: Konami)The first thing that struck me as I paced through the streets was the fantastic art direction. As expected from a Scottish team, Screen Burn has nailed the feel of a small Scottish town.
St. Amelia is lovingly crafted and perfectly captures its mid-nineties period, containing plenty of features recognizable to those this side of the pond, from period-correct storefronts and pebble-dashed houses to public telephone booths and post boxes.
Virtually every frame looks cinematic (there’s even a letterbox mode enabled by default). The perennial fog is, of course, present and correct here, and looks better and moodier than ever. Hues of white, red, and blue are prominent throughout as well, and look eerily beautiful as they shine through the mist and are backlit by streetlamps. This is a game made for screenshotting, although unfortunately it doesn’t have a native photo mode.
I played through the game in Performance mode, as is often my preference, and I couldn’t discern any visual downgrade from Quality mode. Naturally, though, Performance mode offered a much better frame rate, and I only encountered one section where things got a little choppy, but this was brief and far from ruinous.
(Image credit: Konami)Complementing the visuals is the score, another feature that’s always stood out in Silent Hill titles. Here, though, regular series composer and sound designer Akira Yamaoka is, for once, not involved. Instead, the honors go to Pilotpriest, who’s done a fantastic job of replicating the off-kilter sounds and melancholic melodies fans have come to know and love, while adding a modern twist.
Pieces are more sparse and muted than before, often with heavy doses of reverb. They match the tone of the gameplay brilliantly, and compositions open up during cutscenes when some emotional weight needs carrying.
Unfortunately, the characters’ facial animations are less capable at this. They’re often stilted, which can work when they seem detached and dejected, but they fail to sell terror or emotional breakdowns when required.
This is doubly a shame since it lets down the largely great performances of the voice actors, of which Kezia Burrows’ Zoe is worthy of highlighting. She has a greater range of traits and emotions to convey than the other two, and she does so with aplomb.
Another disappointing aspect of the game’s design is the monsters — this for a series renowned for its strikingly original creations. Virtually every one is some kind of faceless alabaster humanoid with no details of note, and some are mere rehashes of past favorites, such as the fleshy straight-jacketed figure, although this time it has a plank driven through its head.
Less attention has been paid to their symbolism, too: there are suggestions that they reflect aspects of the inner turmoil of the main characters, à la most Silent Hill monsters, but there's little about their design that shows this in an interesting way.
Monster hunting(Image credit: Konami)Looks aside, though, the monsters are more dangerous than ever. There are a handful of basic pawns, such as those that wander around slowly, and the aforementioned straight-jacketed plank heads that move much faster and more erratically and are equally troublesome.
If either catches you, you’ll have a basic button-mashing QTE to avoid them if you have enough health, but if not, it’ll be instant death. In certain sections, a larger monster appears with blobs on its back, which is unkillable as far as I could tell. There's no chance to QTE your way out of its grip if it catches you, either.
Sneaking around enemies, therefore, can be a tense and terrifying experience, accompanied by a huge sense of relief when you succeed. Often, the environmental design expertly facilitates this stealth gameplay. The outside sections in particular are laden with cut-throughs and hiding places, and more impressive is the fact that this design is so firmly planted in the real world.
You’ll be sneaking around abandoned cars and peeking out over low walls, scooting down narrow back alleys and distracting enemies with bottles or radios. There’s a surprising degree of player freedom that makes these sections more satisfying to play through than your typical survival horror fare.
(Image credit: Konami)What also helps is the excellent player movement. All three move in the same way, which is to say they’re responsive and agile, as well as being reasonably fast when sprinting, although this is no arena shooter — but then again, I wouldn’t want it any other way in a horror game. There’s also an option to use motion controls for aiming, with fast and precise movements, and it is my preferred method.
There’s a peek mechanic, too, which again is very useful. It may be lifted straight from classic first-person horror games, most notably Alien: Isolation, but it gives you a great deal of freedom to not just strafe laterally, but also to peer up over barriers or down over ledges, whether standing or crouched.
To detect threats more easily, Simon picks up a handheld TV (or CRTV) early on that can tune into enemy locations. They’re rendered in silhouette against a red background, serving as the game’s ‘detective mode’. This gives you a real advantage, but its screen is just obscure enough to avoid you using it the whole time.
You also lose focus on your surroundings while equipped, again preventing you from relying on it wholesale. Keeping track of multiple enemies can be hard as well, since you have to toggle between them one at a time, and those long passed or on a different level remain in the CRTV’s memory.
(Image credit: Konami)Zoe, on the other hand, is saddled with a pager, a far less effective item since it doesn’t directly reveal enemy movements. Instead, bars around the sides fill up to show their approximate direction and proximity. Both gadgets, though, are effective at grounding Townfall in the real world. At certain points, the CRTV can be tuned to show recorded messages that help develop the story or provide hints. The pager, meanwhile, receives mission- and story-related communication.
This grounding is something the game as a whole does well. From the environments and puzzles, right down to the save system, which has always been a quirky thing in Silent Hill games. Usually, it’s something obscure and surreal, such as interacting with a well or a red square on a wall, but here you use landlines (no mobile phones in St. Amelia 1996) and dial 100 — the in-game number for the coastguard.
The map screen is as helpful and skeuomorphic as ever. Scrawls in red marker pen appear to show rooms you’ve entered, locked doors, and story clues. You can also zoom and pan around it with ease.
When the sneaking goes wrong, you aren’t completely defenceless. You don’t exactly have a military arsenal at your disposal, but some humble series staples are here, including wooden planks and metal pipes. They degrade this time, though, so they won’t last long. Firepower comes later, but ammo is scarce, making the game’s intentions for a stealthy play style clear.
(Image credit: Konami)All this isn’t to say the weapons are useless. On the contrary, they’re very effective, and just the right amount of difficult to use. Melee combat is a basic affair, with one button for attack and one for block, but a lot of enemies can be disposed of quite quickly. The revolver and shotgun are even more effective, as you would imagine, but reload times are slow. All weapons feel impactful and satisfying to use, too, and the controls aren’t awkward.
Healing items are more generously distributed. There’s gauze for minor wounds and first aid kits for major ones. You can also combine alcohol with the former for a larger heal, while empty IV bags can be combined with IV fluids to automatically revive you if you die.
Aside from combat and sneaking, you’ll of course be solving puzzles. These are more ingenious than past efforts, and expertly combine that aforementioned verisimilitude with the series’ penchant for the weird.
One of my favorites had me reading out patient charts as Zoe to an aggressively condescending doctor, chastising her and me if I gave the wrong information. I then needed to find medicines dotted around the medical center, beginning yet another monster-avoidance section, which was as tense and as exciting as those in the streets of St. Amelia.
There are plenty of documents and computer emails to read and collect, providing clues to puzzles. There’s also a handy mechanic where you can hold a button to bring up the relevant clue while interacting with a puzzle, although, bizarrely, this is limited to only a few occasions.
Nothing personal(Image credit: Konami)While I certainly had a good time with Townfall, certain sections drag on a little too long. But on the whole, the game does well to vary the environments and puzzles (the enemies less so) throughout to keep you hooked.
I didn’t find normal difficulty too troubling: the puzzles are pitched just right, and those I spent a long time figuring out weren’t frustrating or unfair; in fact, they’re proved more satisfying to solve than the series’ typical offerings.
Sneaking and combat, on the other hand, are more challenging. Enemies can come upon you quickly, and since there can be long stretches before you reach a save point, you can find yourself trudging back through the same section if you perish. But mostly, their presence adds real stakes and rewards you with a sense of achievement once you make it past them.
(Image credit: Future)It took me just over 20 hours to complete a single playthrough, and that was at a gentle pace. There’s little beyond the main objectives at hand to seek out, aside from some mysterious coded postcards that’ll have fans scrabbling to decipher, as well as hidden phone numbers to find. There are also unlockable outfits and weapons, and five different endings to get.
Townfall isn’t particularly scary. There’s the occasional jump scare, but it doesn’t rely on them for cheap thrills. The game is a slow burn, with plenty of quiet, contemplative moments as you explore your surroundings. As with many Silent Hill games, the horror is more psychological.
But herein lies a problem. While the story is commendable for sustaining the mystery for as long as possible, there’s a lack of character exploration, contrary to many other stories in the franchise.
The characters’ dialogue is mostly cryptic, so you never get much of a grasp on their thoughts and feelings until the end — and even then, there are still plenty of questions left unanswered, as they should be. But the three of them are by turns confused and forlorn throughout.
This mixture works to conjure that strange, uncanny tone the series is known for, but it also means the trio fails to elicit the same level of emotional investment garnered by past protagonists, such as Harry and Heather Mason, James Sunderland, and Mary.
(Image credit: Konami)Social commentary seems to be Townfall’s primary concern: the main theme is one of corporate negligence and its devastating impact on a community, which is certainly relevant in today’s world. And it’s true that once the three collide and everything comes to a head, it starts to resonate emotionally. But this is a long time coming, and Zoe ultimately feels underserved by the story’s conclusion, a shame given the aforementioned excellence of her actor’s performance.
It’s entirely possible, though, that other endings will give her a larger role than the one I reached, although I have no idea how these are achieved yet.
Ultimately, I found Townfall less impactful than Silent Hill 2 or Shattered Memories. It won't haunt me for as long as those entries, but it’s an intriguing journey nonetheless, with mysteries that remain after completion to keep fans busy with their theories.
No doubt some will also see Townfall as departing too far from the Silent Hill formula, a debate that’s already begun. But to my mind, the new setting and perspective fit the mold perfectly, so despite a few reservations, it still marks another triumphant reimagining of the series.
Should you play Silent Hill: Townfall?Play it if…You love sneaking and puzzling
Sneaking around enemies is often thrilling, and the memorable puzzles mix realism with the series’ unhinged tropes masterfully.
You want great art direction
Screen Burn has managed to haul a small Scottish fishing village into the world of Silent Hill beautifully. It looks and sounds fantastic.
You want the best monsters
The monsters are certainly less memorable this time round, a shame given the series’ pedigree in this area.
You want more emotion from your characters
Mostly, the three protagonists are quite stilted in their tone. The botoxed facial animations don’t help, either.
Compared to other modern releases, Townfall’s accessibility features are a little lacking. There are no content filters for blood and gore, and visual assists for color and contrast, and the like, are also missing. You can toggle subtitles and closed captions separately, though, and you can adjust the opacity of their backgrounds.
There are three difficulty modes to choose from: Story, which reduces the threat posed by enemies; Normal, which is how the developers intend the game to be played; and Nightmare, which increases enemy power and makes your flashlight detectable by them.
Puzzle difficulty is handled separately, although there are only two modes for this, with the only difference being red highlights of salient text clues.
How I reviewed Silent Hill: Townfall(Image credit: Konami)I played Townfall for just over 20 hours, completing the game once through on normal difficulty. I also toggled the puzzle difficulty between Normal and Hinted modes at various points.
I played the game on a standard PS5, largely in Performance mode, although I also tested Quality mode for a time, too. I used a Lenovo Legion R27qe monitor and the Skullcandy Crusher PLYR 720 headset for audio.
I’m a long-time fan of the Silent Hill series and have played many games in the series, including the recent Silent Hill f and the 2024 remake of Silent Hill 2. The original Silent Hill 2 and Silent Hill: Shattered Memories rank among the best horror games of all time, in my mind.
First reviewed September 2026
The DBrand Killswitch for Nintendo Switch 2 is the ultimate protective solution for your shiny new hybrid system. Rather than being a traditional carrying case, it acts as a permanent protective shell for your system, keeping it shielded at all times. I’ve spent a few days gaming with the Killswitch for Switch 2 now, so here’s how I’d rate it.
First of all, I have to applaud the ease of setup. The main case is incredibly easy to pop on. I just had to remove a couple of adhesive strips on the case, push it onto my system, and bam — it was done. The Joy-Con 2 controllers also slot into individual cases, and there’s a protective cover for the system’s kickstand that sticks on seamlessly.
The case has gaps for all of the crucial elements like volume controls, the power button, the USB-C slots, and vents. I also appreciated how slim the protective case felt — sure, it adds a bit of depth, but it doesn’t make the console feel too broad.
Like a lot of the best Nintendo Switch 2 accessories, the Killswitch feels very high in quality, and plenty durable. It also offers great ergonomics, with the textured case and its curved feel making the system incredibly comfortable to use in handheld mode. I tried playing a wide variety of games, including Mario Kart World and Yoshi and the Mysterious Book, and whether I was turning tight corners or exploring a mystical area, the system never felt unwieldy or chunky.
Although the case adds some bulk to the Switch 2, you’re still easily able to use it in docked mode. That’s because the Killswitch comes with a dock adapter. Just place it onto the Switch 2’s usual dock, and you’re good to go. It has 4K 60Hz passthrough, so you can still enjoy the best Nintendo Switch 2 games without compromise, meaning it serves as a super-convenient solution.
(Image credit: Future)You get a few extras depending on the Killswitch variant that you select. I went for the Travel pack, which also includes stick grips and a travel cover. The grips push on without difficulty, and they have a tactile, secure feel that makes gaming feel as easy as ever. The travel cover is a neat inclusion too, and has ten slots for Nintendo Switch 2 or Nintendo Switch games.
So, it’s safe to say that I’m a big fan of the Killswitch for Switch 2. But there’s one thing worth considering. It’s pretty pricey. The Killswitch starts at just under $60 for the Essential package, which comes with the main case, a skin, and the dock adapter. But if you get the Everything variant, which also adds the stick grips, travel cover, two screen protectors, and a Joy-Con 2 controller holder, it's just under $155. That’s an awful lot to pay for the fully protective package any way you shake it.
One other minor thing worth noting is that the protective case and stick grips are a little susceptible to picking up dust and fibers. This didn’t bother me all too much, but I did realize the grips were a little grimy after an hour's worth of use. Not a dealbreaker, but worth pointing out.
But I’ll be clear. The DBrand Killswitch for Switch 2 is an excellent protective option for your console, and I won’t be taking it off my system any time soon. If you want excellent durability, seamless setup, and flexibility for handheld and docked play, it’s a top-class choice.
(Image credit: Future)DBrand Killswitch Nintendo Switch 2 review: price & release dateThe price you’ll pay for the Nintendo Switch 2 variant of the Killswitch will vary depending on the model you select. Typically, it’s $59.95 for the Essential pack, $99.85 for the Travel option, $134.80 for the Ultra variant, and $154.75 for the Everything package. I have seen the Killswitch go on sale at times, though, so it’s worth checking DBrand’s site for discounts. The Killswitch for Switch 2 was released in June 2025.
(Image credit: Future)Should I buy the DBrand Killswitch Nintendo Switch 2?Buy it if…You want a premium protection without compromise
If you want one of the best protective solutions on the market, then the DBrand Killswitch is easily one of my top recommendations. It’s highly durable and easy to set up, but it also feels amazing in-use and has a dock adapter, meaning you don’t have to compromise when shielding your Switch 2.
You want flexibility for handheld and docked play
Although the Killswitch adds a bit of bulk to your Switch 2, the included dock adapter makes it easy to seamlessly switch between handheld and TV mode play.
You’re on a budget
If you’re looking for a cheaper solution then the Killswitch may not be ideal, given that the cheapest package will set you back almost $60. If you’re happy with a standard case, then a good budget pick is the Turtle Beach PlayTrek Travel Case for Nintendo Switch 2.
You want a traditional case
If you’re looking for a traditional carrying case, then you may want to look elsewhere. My favorite all-in-one option (which will house your console, dock, controllers, and more) is the official Nintendo Switch 2 All-In-One Carrying Case.
Nintendo Switch 2 Carrying Case & Screen Protector
If you want a cheaper screen protector and case combo, then Nintendo’s official option is a solid choice for when you’re on the go. It isn’t going to give you the top-tier protection of the Killswitch casing, but if you’re predominantly playing handheld and want an affordable package, I’d recommend picking it up. Read my full Nintendo Switch 2 Carrying Case & Screen Protector review.
I spent a week testing the DBrand Killswitch for Nintendo Switch 2, and kept it on my system everywhere I went.
I tried dropping my system from a controlled height to judge its durability, and made use of all of the accessories in the Travel package, including the dock adapter, game card holder, and stick grips.
More generally, I’ve spent years testing gadgets here at TechRadar, where I serve as a Senior Reviews Writer. I’ve reviewed a vast amount of Switch 2 accessories, from cases like the Hori Adventure Pack to controllers such as the Turtle Beach Rematch Wireless Controller, and have been a Switch 2 owner from day one.