Light spoilers follow for Supergirl.
Supergirl marks the eponymous character's return to the limelight after 42 years. Okay, the DC superhero has starred and/or appeared in numerous TV shows and small-screen movies in the decades since; however, her only previous big-screen outing came in the form of the much-maligned 1984 Supergirl film featuring Helen Slater, so another cinematic adventure is long overdue.
Unfortunately, as incredibly excited as I've been for the second DC Universe (DCU) flick's arrival, it gives me no satisfaction to say that Kara Zor-El's latest silver-screen project is DC Studios' first misfire. It's not terrible by any means, but I left my screening with a tangible pang of what could have been if the movie had actually done right by its source material.
Kara, Krypto, Krypton, and KremSupergirl's latest film is based on a very specific comic-book story (Image credit: DC Studios/Warner Bros. Pictures)Following her scene-stealing cameo in 2025's David Corenswet-led Superman movie, Supergirl reunites us with Kara (Milly Alcock) and her superpowered pup Krypto as they embark on an interstellar bar crawl to celebrate Kara's 23rd birthday, which Kara simultaneously uses to try and forget the destruction of her and Supes' home world Krypton by getting blackout drunk.
However, it isn't long before last orders are called. Indeed, when the sadistic Krem of the Yellow Hills (Matthias Schoenaerts) and his criminal gang — aka The Brigands — murder the family of a young woman named Ruthye (Eve Ridley) on her home planet, the latter tracks down Kara to help Ruthye get her revenge.
Supergirl doesn't soar to the heady heights that its main character can reach with ease
Initially reluctant to help, Kara changes her mind when Krem not only steals her spaceship, but also critically injures Krypto with a poisoned dart. With only 72 hours to find Krem and retrieve the antidote that'll save her dog's life, Kara and Ruthye set off on a character-defining journey that's as much a sci-fi adventure and space western as it is a superhero movie.
Kara and Krem only occasionally clash throughout Supergirl's 108-minute runtime (Image credit: Warner Bros. Pictures/DC Studios)Tonally, Supergirl takes as much inspiration from genre films like True Grit, Mad Max, and Guardians of the Galaxy as it does from Supergirl: Woman of Tomorrow, aka the 2021 graphic novel that this movie is based on.
The occasionally egregious editing of some set-pieces doesn't do justice to Supergirl's fight choreography
Those comparisons aren't a negative but, while Supergirl's grimy, washed-out aesthetic might seem like a good fit for its modern pulp plot, I yearned for the vibrant, eye-popping color palette and visual flair of its comic-book inspiration, which last year's Superman film had in spades.
On the action front, Supergirl expands on the set-pieces spread across Woman of Tomorrow's pages, while adding a couple of new ones to the mix.
Some Supergirl flight sequences look better than others (Image credit: Warner Bros. Pictures/DC Studios)And, honestly, I had no problem with the inclusion of these new sequences, nor the creative liberties taken with pre-existing ones. The Woman of Tomorrow comic book is a slow-burning, pensive read that's lightly seasoned with thrilling, high-stakes action, so I fully understand why its film adaptation dials up the spectacle.
That said, the occasionally egregious editing of some set-pieces doesn't do justice to Supergirl's fight choreography.
Spoilers notwithstanding, at the start of the film's climactic battle, I counted at least 20 quick-fire cuts across what must have been a 40-second period. That's far, far too many and, while it isn't the only example I could give where jump-cuts make it difficult to follow the action, I wouldn't be shocked if, once Supergirl has fully launched worldwide by June 26, fans have plenty of negative things to say about this specific sequence.
Woman of Tomorrow, problems for todaySupergirl isn't a 1:1 translation of Tom King and Bilquis Eveley's Woman of Tomorrow comic book series (Image credit: DC Studios/Warner Bros. Pictures)That's far from my only issue with Supergirl — and a lot of my grievances stem from the crucial fact that it dismisses aspects of what makes Woman of Tomorrow such a great read.
When its second trailer arrived in April, I expressed concern that Supergirl wouldn't be the comic book movie adaptation I was hoping for. Two months later, Supergirl's final trailer did little to assuage those fears. Nevertheless, I clung to the hope that my worries would be unfounded once I saw the full film.
Supergirl reinterprets its source material for the worse
Color me disappointed, then, that the DCU Chapter One flick reinterprets its source material for the worse.
For starters — and this might sound baffling to some — Supergirl tells its story from Kara's perspective. I know, how blasphemous of it to focus on its titular protagonist.
But hear me out. One of the comic book's biggest strengths is that Ruthye is our point-of-view character, so we witness Kara's heroic actions through the eyes of her young ally. To re-use True Grit to illustrate my point: in the 2010 western, we see events through teenager Mattie's eyes, not her world-weary and flawed albeit honorable chaperone Rooster Cogburn. To me, there's no reason why Supergirl couldn't have done likewise, especially when there's already a precedent for it in Woman of Tomorrow.
Kara and Ruthye's relationship isn't fully explored in Supergirl (Image credit: Warner Bros. Pictures/DC Studios)Supergirl similarly squanders another of its best elements by regularly neglecting Kara and Ruthye's complex dynamic
Supergirl similarly squanders another of its best elements by regularly neglecting Kara and Ruthye's complex dynamic.
Again, I appreciate that this is a movie about the eponymous Kryptonian, but the original Woman of Tomorrow story works so well because it's a two-hander. Apart from giving Ridley's Ruthye a belated chance to shine as the film's third act begins, Supergirl relegates her to the sidelines; and, in what I consider to be a huge misstep, doesn't examine the full extent of the complicated yet sincere relationship that exists between her and Kara in Tom King and Bilquis Eveley's comic-book series.
Considering that Supergirl clocks in at a breezy one hour and 48 minutes, there's really no excuse why this team-up wasn't explored more acutely. To me, a few more scenes based around more intimate character moments from Woman of Tomorrow would have gone a long way to fixing this without impacting the film's flow.
Supergirl satisfyingly expands on the titular hero's backstory that's outlined in Woman of Tomorrow (Image credit: Warner Bros. Pictures/DC Studios)To give credit where it's due, Supergirl is at times as emotionally engaging, if not more so, than its literary influence — and that's mainly down to Alcock's poignantly potent performance.
Last September, in comments that could have been viewed as being exceedingly biased, DC Studios co-chief James Gunn said Alcock's take on Kara was "absolutely stunning" — and he's absolutely right.
Alcock captures the morally complex, sassy, and traumatized metahuman with the right amount of poise, petulance, and emotional precision
Whether it's her juggling of Kara's conflicting emotions in the present, or scenes depicting Kara's tragic backstory that act as well-placed storytelling touchstones peppered throughout, Alcock captures the morally complex, sassy, and traumatized metahuman with the right amount of poise, petulance, and emotional precision. Suffice it to say, I can't wait to see how her fellow superpowered beings deal with her punk rock attitude in 2027 Superman sequel Man of Tomorrow.
Jason Momoa has the time of his life playing Lobo in this DCU project (Image credit: DC Studios/Warner Bros. Pictures)As for the film's supporting cast, Jason Momoa is arguably the standout as the immortal, interstellar mercenary Lobo.
Ridley does well with the screen time she's afforded, while Corenswet repays Alcock for her cameo in last year's DCU big-screen curtain-raiser with a couple of memorable appearances of his own. However, it's Momoa — a self-confessed Lobo superfan — who shines brightest in a role that's an integral part of Supergirl's story, and which allows him to play to his obvious acting strengths.
Unfortunately, the same can't be said of Krem. Schoenaerts is fine as the movie's central antagonist, but I'm simply not a fan of the changes — physical or otherwise — made to turn him into a disappointing, one-note villain. A bit more substance and — you know, giving us the Krem portrayed in Woman of Tomorrow — would have gone a long way to keeping me onside.
My verdictTaken at face value, Supergirl is a pretty good film. Its heartfelt story, good-to-great cast performances, occasionally funny moments, applause-worthy practical effects, and tentpole action sequences will appeal to anyone who simply wants to be entertained by a traditional superhero flick.
However, those hoping for a more accurate adaptation of its literary works, and/or looking for a different kind of comic book movie, will likely deem it a somewhat underwhelming watch — especially if their expectations were sky-high like mine. I really wanted to like this film more than I did; but, ultimately, it doesn't soar to the heady heights that its main character can reach with ease.
I've been going around in circles writing this Oura Ring 5 review. On the one hand, I find the health insights equally fascinating and motivating just like the best smart rings, and its discreet design is without a doubt comfortable to wear all day long.
But it's worth noting that Oura has been facing increasing backlash after deepening its partnership with the Department of Defense in the US last year, which is something ethically-conscious buyers may want to look into before purchasing.
That said, its ability to track more than 50 health and wellness metrics, such as sleep quality and stress levels, is undeniably enticing for anyone wanting to be more aware of their body — and the launch of this newest model brought a whole host of new insights.
What I will say is that the Oura app does try to include a lot of context about how these measurements can be interpreted and how they contribute to‚ for example, determining how prepared your body is for the day ahead based on a range of metrics, which Oura calls your 'Resilience Score'. But, again, this only scratches the surface of understanding how your body actually functions.
The best example of these assessments triggering misguided concern was when I got warnings from a feature called 'Symptom Radar', which tracks your respiratory rate and body temperature to flag signs of strain. What it didn't take into account was that a woman's body temperature naturally rises after ovulation, making its assessment unnecessarily worrying for anyone who didn't know that.
I can't deny that its claim to be the world's smallest smart ring at launch really does hold up — its lightness makes it disappear on your finger, making it ideal for everyday wear. With six stylish finishes and an even more scratch-resistant titanium surface, it's no wonder it's made headlines in the wearable tech space, with plenty of influencer reviewers fawning over the all-new Oura Ring 5.
By now you've definitely noticed my to-ing and fro-ing as I work through every side of the Oura Ring 5 to reach an honest and fair review. I won't say it's the most perfect smart ring on the market — that would be ignoring too much — but I will say it comes close. I can't argue with its premium build and the level of tech packed into those tiny sensors, which manage to achieve high levels of accuracy. That's impressive in itself, and
Oura has been facing increasing backlash after deepening its partnership with the Department of Defense in the US last year, although it doesn't use data from any of its users other than specific military personnel as part of this arrangement. It's also worth keeping in mind that there have been studies raising concerns about 'health data anxiety', and Oura's attempt to bring new biomarkers into play have given us a whole new category to worry about. But at the end of the day, I'm a sucker for brilliant tech — which the Oura Ring 5 definitely is.
Oura Ring 5: Price and availability(Image credit: Future)The Oura Ring 5 costs an extra $50 / £50 / AU$80 — or $100 / £100 for a premium finish — compared with the Oura Ring 4, which launched in 2024. (Australian pricing doesn't appear to carry the same premium finish gap.)
Beyond the high-gloss gold and silver finishes, you're paying an extra $100 / £100 / AU$150 for any of the four premium styles: a softer gold, brushed silver, matte black, and — the color I tried — deep copper rose.
Add the $5.99 monthly subscription, and you're looking at up to $670 / £670 / AU$1,029.88 to own an Oura Ring 5 for a year, if you go for the most expensive finish plus the travel case.
That's no small sum when most smart rings on the market cost less and many don't require a recurring subscription. There are also plenty of wearable alternatives that track the same health vitals, which makes this very much a luxury purchase.
By far the best justification for the Oura Ring 5's high price tag is that it could easily pass for a piece of jewellery. That's largely down to a 40% decrease in size from the previous model, the result of Oura redesigning the entire core.
That freed up space to drop multiple sensors, but it hasn't made the Ring 5 any less accurate — Oura has increased the efficiency of the remaining sensors to offset the loss. The titanium surface is also more scratch-resistant; I can't compare it directly to a previous model, but it hasn't picked up a nick yet.
What I can say is that the Oura Ring 5 is significantly smaller than the Ring 4. Holding it up against a previous-generation ring (admittedly the bulkier ceramic finish), I was shocked at how noticeable the size difference is. It's lighter and far more comfortable to wear, since it doesn't protrude — and therefore doesn't rub against — my finger as much.
That same design ethos carries through to the Oura app, which has a minimalist interface that isn't cluttered with numbers and graphs. Instead, data is presented as scores with percentages and ratings for each health vital. It's easy to use, though it's worth noting that the app needs a certain amount of data to establish your health baseline, so you won't have access to every feature right away.
After two weeks of wearing the Oura Ring 5, I've unlocked most features — sleep, resilience, and activity scores — which now populate what was once a fairly bare home screen.
The Oura app works best with more data, so it's constantly prompting you to add new "tags" to your day's timeline. Some are automatic, like detecting exercise, while others — what you ate, or what kind of activity you did — require manual logging.
The app's other three main sections cover your vitals, a health assessment area, and an LLM chatbot you can talk to about your data. That last part matters, because as I mentioned above, there's plenty of room for misleading interpretations if you don't understand the many factors behind your body's vitals.
I got a lot out of learning more about my sleep quality and general heart health (the app has a neat feature that lets you feel your heartbeat throughout the day via your phone's haptic feedback), but what I'm most interested in unlocking next are the new women's health features, such as Hormonal Birth Control, which builds on the existing Cycle Insights dashboard with what Oura calls a "first-of-its-kind" view into how biometrics shift across hormonal and hormone-free days.
While I find the wellness insights genuinely useful, the ring is nowhere near as practical as a dedicated fitness tracker. Without GPS — it relies on a paired device for location — and limited to activities compatible with wearing jewellery on your hand (so no weightlifting without a third-party silicone band over the top), it falls short, even with the addition of real-time tracking — which, again, you can only view through a paired device).
One of the biggest improvements that the Oura Ring 5 brings over the Ring 4 is that has managed to squeeze out a whole extra day of battery life, despite the ring itself being redesigned to be 40% smaller.
During my testing, I found it lasted a whole seven days on one full charge. But I was more impressed with was how quickly you can charge the smart ring. From a fully drained battery, it took less than an hour until it was all way back up to 100%, which means it's very easy to top it up throughout the week whenever you're, say, washing dishes or having a shower.
For the most part, I kept the Oura Ring 5 on throughout the day, allowing it to track my vitals as I moved from home to work to seeing friends, exercising and cooking, which it does very well. Most of the automated tracking suggestions were accurate, allowing me to quickly confirm all of the day's activities when I next checked into the app.
This same accuracy extends to the sleep data, which is the absolute highlight of the Oura Ring 5's feature set. I found the insights both enlightening and motivating, especially after getting my first sleep score as (like any gamification effect) I began trying to reach a new higher level. My testing also confirmed this when my readouts for my average heart rate managed to be within 3 BPM of the Polar H10 chest strap, which is the gold standard for consumer heart rate and workout accuracy as it uses actual ECG (electrocardiogram) technology.
@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-1782232373550-lbuegnd1y *, #fv-chart-1782232373550-lbuegnd1y *:before, #fv-chart-1782232373550-lbuegnd1y *:after, #fv-chart-1782232373550-lbuegnd1y-slideshow *, #fv-chart-1782232373550-lbuegnd1y-slideshow *:before, #fv-chart-1782232373550-lbuegnd1y-slideshow *:after {box-sizing: border-box !important; margin: 0; padding: 0; border: 0;font-size: 100%; font: inherit; vertical-align: baseline;}#fv-chart-1782232373550-lbuegnd1y, #fv-chart-1782232373550-lbuegnd1y-slideshow { font-family: 'Open Sans', sans-serif !important; }#fv-chart-1782232373550-lbuegnd1y {position: relative !important; overflow: visible !important;--riv-primary: #2E6E93;}#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-inner-wrapper.fv-no-header.fv-is-image-compare {padding-top: 0 !important;}#fv-chart-1782232373550-lbuegnd1y.fv-full-bleed {width: 100vw !important;margin-left: calc(50% - 50vw) !important;}body {overflow-x: clip !important;}#fv-chart-1782232373550-lbuegnd1y.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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y-slideshow {position: relative !important;width: 100% !important;margin: 1rem 0 !important;--riv-primary: #2E6E93;}#fv-chart-1782232373550-lbuegnd1y-slideshow .fv-slides-wrapper {position: relative !important;width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y-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-1782232373550-lbuegnd1y-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-1782232373550-lbuegnd1y-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-1782232373550-lbuegnd1y-slideshow .fv-nav-btn svg {width: 18px !important;height: 18px !important;stroke-width: 3px !important;filter: none !important;}#fv-chart-1782232373550-lbuegnd1y-slideshow .fv-nav-btn:hover {opacity: 0.9 !important;transform: translateY(-1px) !important;}#fv-chart-1782232373550-lbuegnd1y-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-1782232373550-lbuegnd1y-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-1782232373550-lbuegnd1y-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-1782232373550-lbuegnd1y-slideshow .fv-slideshow-select:focus {outline: 2px solid #2E6E93 !important;border-color: #2E6E93 !important;}#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-select-wrapper { flex: 1; min-width: 0; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-inside-left { white-space: nowrap; flex-shrink: 0; }#fv-chart-1782232373550-lbuegnd1y .fv-inside-right { white-space: nowrap; flex-shrink: 0; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; }#fv-chart-1782232373550-lbuegnd1y .fv-versus-pct-diff { font-size: 12px; font-weight: 600; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; }#fv-chart-1782232373550-lbuegnd1y .fv-footer-content { text-align: center !important; width: 100% !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; }#fv-chart-1782232373550-lbuegnd1y .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-dropdown-title:focus { outline: none !important; }#fv-chart-1782232373550-lbuegnd1y .fv-dropdown-title::-ms-expand { display: none !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; }#fv-chart-1782232373550-lbuegnd1y .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; }#fv-chart-1782232373550-lbuegnd1y .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; }#fv-chart-1782232373550-lbuegnd1y .fv-benchmark-group { margin-bottom: 1rem !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-bar-row, #fv-chart-1782232373550-lbuegnd1y .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; position: relative !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y.preview-wrapper .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1782232373550-lbuegnd1y.preview-wrapper .fv-bar-commentary-inline:focus, #fv-chart-1782232373550-lbuegnd1y.preview-wrapper .fv-bar-commentary-inline:focus-within, #fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline, #fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-commentary-inline:focus, #fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-commentary-inline:focus-within { display: flex !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-bar:hover { opacity: 0.8 !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; }#fv-chart-1782232373550-lbuegnd1y .fv-bar-inner-value { flex-shrink: 0 !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; }#fv-chart-1782232373550-lbuegnd1y .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; }#fv-chart-1782232373550-lbuegnd1y .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; }#fv-chart-1782232373550-lbuegnd1y .fv-stacked-bar { display: flex !important; overflow: hidden !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-stacked-segment:last-child { border-right: none !important; }#fv-chart-1782232373550-lbuegnd1y .fv-segment-value { font-size: 14px !important; font-weight: bold !important; }#fv-chart-1782232373550-lbuegnd1y .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; }#fv-chart-1782232373550-lbuegnd1y .fv-grouped-product-title-wrapper { padding-left: 150px !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; }#fv-chart-1782232373550-lbuegnd1y .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; }#fv-chart-1782232373550-lbuegnd1y .fv-bar-cluster .fv-bar-container { height: 20px !important; }#fv-chart-1782232373550-lbuegnd1y .riv-grid line {stroke: #D1D5DB !important;stroke-dasharray: 3 3 !important;}#fv-chart-1782232373550-lbuegnd1y .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; }#fv-chart-1782232373550-lbuegnd1y .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; }#fv-chart-1782232373550-lbuegnd1y .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; }#fv-chart-1782232373550-lbuegnd1y .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; }#fv-chart-1782232373550-lbuegnd1y .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-x-axis-ticks span { position: relative !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; }#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y.mobile-view .fv-pie-container,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-grouped-product-title-wrapper,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-row,#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-stacked-product,#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-grouped-bar-product,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-bar-row,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-stacked-product,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-label:not(.fv-grouped-product-title),#fv-chart-1782232373550-lbuegnd1y.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-1782232373550-lbuegnd1y.mobile-view .fv-bar-label,#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-grouped-product-title,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-bar-label,#fv-chart-1782232373550-lbuegnd1y.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-1782232373550-lbuegnd1y.mobile-view .fv-bar-container,#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-cluster,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-bar-container,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-bar-cluster {width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-row .fv-bar-commentary-inline:focus-within,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1782232373550-lbuegnd1y.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-1782232373550-lbuegnd1y.mobile-view .fv-x-axis-wrapper,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-x-axis-label-space,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-x-axis-label-space {display: none !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-x-axis-chart-space,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-benchmark-title,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-dropdown-title,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-carousel-nav-btn,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-chart-title,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-chart-title {padding: 0 8px !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-chart-subhead,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-versus-header,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-versus-select-wrapper,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-versus-select-wrapper.fv-left,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-versus-select-wrapper.fv-right,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-versus-select.fv-select-left,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-versus-select.fv-select-right,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-versus-vs,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-versus-select-container,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-versus-select,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-stl-shop-all-btn,#fv-chart-1782232373550-lbuegnd1y.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-1782232373550-lbuegnd1y.mobile-view .fv-stl-shop-all-logo,#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-stl-shop-all-icon,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-stl-shop-all-logo,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-stl-shop-all-icon svg,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-bar-commentary-inline,#fv-chart-1782232373550-lbuegnd1y.labels-on-top .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y.mobile-view .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1782232373550-lbuegnd1y.mobile-view.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}@media (max-width: 599px) {#fv-chart-1782232373550-lbuegnd1y .fv-pie-container {flex-direction: column !important; gap: 1rem !important;}#fv-chart-1782232373550-lbuegnd1y .fv-grouped-product-title-wrapper {padding-left: 0 !important;}#fv-chart-1782232373550-lbuegnd1y .fv-bar-row,#fv-chart-1782232373550-lbuegnd1y .fv-stacked-product,#fv-chart-1782232373550-lbuegnd1y .fv-grouped-bar-product {flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important;}#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-bar-label,#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-bar-container,#fv-chart-1782232373550-lbuegnd1y .fv-bar-cluster {width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y .fv-bar-row .fv-bar-commentary-inline,#fv-chart-1782232373550-lbuegnd1y .fv-bar-row:hover .fv-bar-commentary-inline,#fv-chart-1782232373550-lbuegnd1y .fv-bar-row .fv-bar-commentary-inline:focus,#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-x-axis-wrapper {margin-left: 0 !important;}#fv-chart-1782232373550-lbuegnd1y .fv-x-axis-label-space {display: none !important;}#fv-chart-1782232373550-lbuegnd1y .fv-x-axis-chart-space {padding-right: 0 !important;}#fv-chart-1782232373550-lbuegnd1y .fv-benchmark-title {font-size: 16px !important;}#fv-chart-1782232373550-lbuegnd1y .fv-dropdown-title {font-size: 16px !important;}#fv-chart-1782232373550-lbuegnd1y .fv-carousel-nav-btn {padding: 8px 12px !important; font-size: 14px !important;}#fv-chart-1782232373550-lbuegnd1y .fv-chart-title {padding: 0 8px !important;}#fv-chart-1782232373550-lbuegnd1y .fv-chart-subhead {padding: 0 8px !important;}#fv-chart-1782232373550-lbuegnd1y .fv-versus-header {flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important;}#fv-chart-1782232373550-lbuegnd1y .fv-versus-select-wrapper {flex: 1 !important; min-width: 0 !important; width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y .fv-versus-select-wrapper.fv-left {text-align: center !important; padding-right: 0 !important;}#fv-chart-1782232373550-lbuegnd1y .fv-versus-select-wrapper.fv-right {text-align: center !important; padding-left: 0 !important;}#fv-chart-1782232373550-lbuegnd1y .fv-versus-select.fv-select-left {text-align: center !important;}#fv-chart-1782232373550-lbuegnd1y .fv-versus-select.fv-select-right {text-align: center !important;}#fv-chart-1782232373550-lbuegnd1y .fv-versus-vs {text-align: center !important; padding: 0.25rem 0 !important;}#fv-chart-1782232373550-lbuegnd1y .fv-versus-select-container {max-width: 100% !important; width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y .fv-versus-select {font-size: 14px !important; width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y .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-1782232373550-lbuegnd1y .fv-stl-shop-all-logo,#fv-chart-1782232373550-lbuegnd1y .fv-stl-shop-all-icon {width: 2rem !important; height: 2rem !important;}#fv-chart-1782232373550-lbuegnd1y .fv-stl-shop-all-icon svg {width: 14px !important; height: 14px !important;}#fv-chart-1782232373550-lbuegnd1y .fv-bar-commentary-inline {display: block !important; margin-left: 0 !important; width: 100% !important;}#fv-chart-1782232373550-lbuegnd1y .fv-y-axis-title { padding-left: 5% !important; }#fv-chart-1782232373550-lbuegnd1y.fv-contains-line-chart .fv-footer-content {margin-left: -1rem !important;margin-right: -1rem !important;}}{"@context": "https://schema.org","@type": "Dataset","name": "Overall Chart Title","description": "Subhead to describe the test and what's being measured and why","creator": {"@type": "Organization","name": "TechRadar","logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png"},"isAccessibleForFree": true,"dateCreated": "2026-06-23T16:32:53.550Z","citation": "Add your caption to explain the data, the learnings and the key takeaways of the data being visualized","keywords": ["Oura Ring 5","Polar H10","Average heart rate","benchmark","comparison","performance","review","TechRadar"],"measurementTechnique": "Performance Benchmarking","variableMeasured": [{"@type": "PropertyValue","name": "Oura Ring 5 – Average heart rate","value": 115,"unitText": ""},{"@type": "PropertyValue","name": "Polar H10 – Average heart rate","value": 112,"unitText": ""}]}Average heart rateOura Ring 5115Polar H10112037.575112.5150Average heart rate DataProductValueOura Ring 5115Polar H10112window.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-1782232373550-lbuegnd1y', false); });} else {initialize('fv-chart-1782232373550-lbuegnd1y', false);}})();Category
Comment
Score
Value
An extremely luxury smart ring compared to others on the market.
2/5
Design
The most discreet and comfortable smart ring to wear all day.
5/5
Features
Stacked on the wellness front, but not when it comes to fitness.
4/5
Performance
A whole week's worth of battery, with accurate sleep tracking.
5/5
Oura Ring 5: Should I buy?(Image credit: Future)Buy it if...You want wellness tracking
From stress to sleep, you can turn your health vital's raw data into useful insights.
You want a smart ring that looks like jewellery
The smart ring manages to be stylish, small and light, and comfortable.
You don't want to spend more than you need to
You can find smart ring alternatives that deliver the same benefits for a lot less.
You want a fitness tracking wearable
There are far more feature-rich fitness trackers available at a more affordable price.
Component
Oura Ring 5
Samsung Galaxy Ring
Price
From $399 / £399 / AU$649
$399 / £399 / AU$699
Colors
Gold, Silver, Brushed Silver, Premium Gold, Stealth Black, Rose Gold
Black, Titanium Gold, Titanium Silver
Material
Titanium
Titanium
Weight
Between 2 (size 6) and 2.6g (size 13)
2.3g (size 5) 3.0g (size 13)
Battery life
Up to 7 days
Up to 7 days (ring), up to 6 charges (cradle)
Connectivity
Bluetooth 6.0
Bluetooth 5.4
Sensor array
Updated Smart Sensing array
PPG, accelerometer, skin temperature
Water resistance
IP68
IP68
GPS?
No
No
How I testedI wore the Oura Ring 5 for two weeks, draining the battery completely (despite the app advising against letting it go below 30%). I have some gaps in my data from forgetting to put it back on, but I mostly didn't take it off. I tested the ring's heart rate monitoring accuracy against the Polar H10 chest strap, and compared its design to a ceramic Oura Ring 4.
With protagonist Fox McCloud appearing in a surprise cameo in the recent Super Mario Galaxy Movie, it’s clear that Nintendo wants to bring its niche on-rail space shooter series to a wider audience. To that end, this new Star Fox makes a lot of sense. It’s a remake of the 1997 title Star Fox 64, which is beloved by fans and a good starting point if you’ve never played one of the games before.
Review infoPlatform reviewed: Nintendo Switch 2
Available on: Nintendo Switch 2
Release date: June 25, 2026
The problem for me is that this is far from the first time that Nintendo has brought Star Fox 64 back. I grew up with the Nintendo 3DS, and experienced it as Star Fox 64 3D. This was followed by some hands-on time with the Wii U reimagining Star Fox Zero, and then finally a playthrough of the original release when it came to Nintendo Switch via Nintendo Switch Online.
Every single mainline Star Fox game that’s come out since I was about eight years old has been a version of Star Fox 64, and now, as an adult, I’m getting yet another one in Star Fox for Nintendo Switch 2.
I really wish the gaming giant had been a little bolder with this release, adding even just a smidge of new gameplay to freshen up the old campaign. Still, Star Fox 64 is a cult classic for a reason, and thanks to its strong base, this remake is still plenty of fun to play through for what is, hopefully, one last time
Into the Lylat Wars(Image credit: Nintendo)The premise is simple, if a little unconventional. You’re a dashing fox in a universe populated by anthropomorphic animals where civilization has managed to crack space colonization despite an apparent lack of opposable thumbs.
Rather than rooting through sci-fi bins, you’re the leader of a mercenary squad (staffed by you, the bird-like Falco, the lagomorphic Peppy, and slimy Slippy toad) that lends its services to the highest bidder — in this case an intergalactic army that’s waging war against the evil scientist dictator Andross.
Fully voiced and animated cutscenes to convey all this information are one of this remake’s biggest new additions, and they feel like a natural inclusion. They’re not super long or expansive by any means, but all flow well and are decently acted throughout even if there are a few moments where the animation can look a bit cheap.
They provide some much-needed downtime in between each of the levels, which are hectic, high-score challenges that see you steering your ship, the Arwing, through intense battles. The action unfurls in a largely on-rails format, but that doesn't mean that this isn’t a degree of strategy to it.
(Image credit: Nintendo)You can swerve all across the screen, hitting barrel rolls to deflect incoming fire and blasting your laser canons. Your craft very much exists in a 3D space, so enemies often come up behind you, requiring evasive maneuvers like somersaults or hitting the brakes.
There's a boost too, which, deployed at the right time, can see you zooming under falling debris or through closing gaps — often picking up a power-up or two in the process. It’s all remarkably smooth to control, and sections where you pilot other vehicles keep the stages feeling fresh.
Each campaign is extremely short, taking just over an hour to complete, and has you working your way through a map of the galaxy littered with 16 unique planets.
Best bit(Image credit: Nintendo)The challenge mode lets you replay all of the levels from the campaign but with some new tricky objectives. These reward you with unlocks like profile badges and lore to read, and I can already see it being a huge hit with completionists.
You can’t visit all of them in one playthrough, which, alongside the two main story paths, gives you plenty of reasons to replay it at least a couple of times. That said even when you bear that in mind, the experience is still pretty fleeting and doesn’t feel befitting of the $49.99 / £41.99 / AU$84.95 digital (or $59.99 / £44.99 / AU$99.95 physical) asking price.
This is especially true if you’ve played all the other versions of Star Fox 64, as you’re basically just paying for a new, admittedly quite pretty, coat of paint.
There is thankfully a new battle mode to try out, and it’s pretty good on the whole. It’s in an online 4v4 player versus player (PvP) format, with one team playing as the Star Fox squad and the other cast as their rivals Star Wolf. Each of the three maps has its own associated game mode, ranging from simple control point capture to fighting to drag limited space cargo back to base.
I’ve had a great time with it so far, though I can imagine that online populations will quickly dwindle given the small map pool. Hopefully a post-launch update will add some more.
Should I play Star Fox?Play it if...You’ve never tried Star Fox 64
If you’ve never experienced Star Fox 64 before, then Star Fox is the best version that’s readily available right now. The updated graphics are pleasant, and it feels fantastic to control.
You find it on sale
My main issue with Star Fox is its high asking price. If you can find it heavily discounted, then it’s well worth picking up.
You’re sick of the Nintendo 64 game
If you’ve played the previous Star Fox 64 remakes, then I would recommend skipping Star Fox. It looks pleasant, sure, but it really doesn't add much new beyond its cutscenes.
As with most first-party Nintendo releases, the accessibility features here are thin. Subtitles are used throughout the game, though their appearance cannot be customized. You can invert the axis of the control scheme and disable features like controller rumble, but that’s basically it.
How I reviewed Star FoxI played Star Fox on Nintendo Switch 2 for roughly eight hours, experiencing all of its major campaign routes, unlocking every planet, and trying out challenge mode.
I also dived into its multiplayer offering, using my earlier hands-on experience with other players when trying it at Nintendo HQ and testing matches against bots. I mainly played the game in handheld mode using the Joy-Con 2 controllers, though I did briefly test it in docked mode on a 4K Samsung TV to ensure the performance and Nintendo Switch 2 Pro Controller support is up to scratch.
First reviewed June 2026
The Shark PowerDetect UV Reveal comes in at $1,299.99 / £999.99 — while it’s far from cheap, it’s pretty good value for what it offers. That being said, there are other robot vacuum cleaners with equally impressive features and better software at a similar price point.
Plus, you’ll need to maintain some parts of the vacuum; in particular, refills for the multi-floor cleaner ($13.99 / £14.99) and the odor-neutralizing puck ($9.99 – $14.99 / £7.99 – £15.99), as well as the usual replacement for things like side brushes and mop pads. Over time, these can add up, but you’ll scarcely find a robovac that doesn’t come with added costs at similar prices these days.
Out of the box, you’ll find the vacuum, base, power chord, an anti-odor puck, one refill bottle of Shark’s multi-floor cleaner, two side brushes, plus the usual array of instructions and warranty documents.
The base stands at 17 x 18 x 14 inches / 43.2 x 45.7 x 35.6 cm, and comes in either black or white — mine was the latter, and I think it looks a lot more premium than the tackier black colorway. Enclosed in the lid of the base are the 2.74-litre / 96.65oz clean and 1.18-litre / 41.62oz waste water tanks, which lift out easily thanks to the retractable handles, as well as the bagless dirt compartment — I really appreciate that Shark opted for this so there’s one less thing to routinely replace.
(Image credit: Future)You can remove the container with the press of a button situated on the side of the dock, and it’s also HEPA-filtered. There’s also a set of two filters you’ll need to clean every 1-2 months, depending on how often you use your robot vacuum, and a slot for one of Shark’s anti-odor pucks should dusty smells be an issue for you.
(Image credit: Future)The vacuum itself is a fairly standard, rounded 2-in-1 robot vacuum, but a little tall and hefty at 5.35 inches / 13.6cm tall. The top houses its raised puck for LiDAR sensing, which works in tandem with the front of the device, where the cameras and other sensors, including a camera as well as LED and UV lights, to navigate your home and spot messes ripe for cleaning.
If you’d rather not use the app, you can use the four touch-sensitive buttons to activate mop and vacuum modes, send the vacuum home and connect to the Wi-Fi. A soft bumper surrounds the edges of the vacuum to prevent damage from any collisions, which are remarkably rare thanks to its top-tier obstacle avoidance, and you can remove its dust bin and mop plate from the rear of the device.
(Image credit: Future)On the underside, you’ll find the wheels, brush bar, side brush, and a singular, flat mop pad. These aren’t my favorite type — a rondel will typically offer a deeper clean, better post-clean drying and less water waste. However, Shark has designed the robot vacuum to wiggle this mop pad to agitate dirt, which goes some of the ways to make up the difference.
Of note is that the vacuum seems to be a total dust magnet. I have mine placed beneath a desk, where I wouldn’t expect excessive levels of dust — however it’s constantly lined with a thick layer of the stuff.
Setup for the Shark PowerDetect UV Reveal is pretty simple; using the app, you’ll connect the vacuum to your Wi-Fi, give it a name (I loved some of the suggestions like Clean Latifah), and after that, the robot vacuum will run its first mapping pass. Broadly, mine was accurate; my apartment has a slightly tricky layout for robot vacuums, including a half-tiled, half-carpeted kitchen-living room, and lots of doors to dodge.
After this first pass, the app will offer you a second mapping run, this time to detect flooring types. If you plan to regularly mop hard floors and have carpets or rugs to avoid, make sure to get this out of the way during setup; I couldn’t find any way to update this map after the fact.
FutureFutureFutureCleaning testsI performed my standard pickup tests using oats, cornflour and brown rice to compare performance to other robot vacuums I’ve tested, and the results were a mixed bag. When setting the Shark PowerDetect UV Reveal off for a standard, vacuum-only clean, I was immediately impressed as it zig-zagged across my floors, leaving them visibly refreshed — plus, it’s pretty quiet in action.
On hard floors, it excels thanks to a combination of its side brush, solid suction and the jet of air it blasts at hard-to-reach debris, ensuring floors are spick and span post-clean. On carpet, it’s slightly less impressive, especially in the edge cleaning department, but it still does a decent enough job. Its pickup of larger debris was very impressive on carpet, leaving little to nothing behind, but there was a small amount of powdery debris left behind on my medium-pile rugs — hair, however, is no problem, be it human or pet.
(Image credit: Future)Next up, I tried a regular combination clean with vacuum and mopping, and that’s where my experience with the Shark PowerDetect UV Reveal became a bit more mixed. The robot vacuum first fills its water tank at the base, proceeding to concurrently vacuum and mop your floors rather than splitting out the tasks. This helps to save time and battery; however, it does increase the risk of soggy carpets.
To avoid this, the robovac will lift its hind to keep the mop pad from drenching carpets — this reduces its effectiveness on carpets, though, as it crushes the side brush, and sometimes, while navigating, it will spin round and spit water across the floor, too. However, once it reaches hard floors, the results are pretty impressive; the mop pad agitates spills and stains with a back-and-forth scrubbing motion, and will reach into corners to make sure every spot is well-cleaned.
Shark PowerDetect UV Reveal lifting its mop padFutureShark PowerDetect UV Reveal lifting its mop padFutureIt does use a lot of water, though, and especially if you’re cleaning up larger spills, that means the PowerDetect UV Reveal can leave a streaky mess in its wake. I noticed this even more so when there was lots of debris to vacuum up during the clean; the PowerDetect UV Reveal left a clump of soggy oats behind like an owl pellet as well as white streaky marks across the floor, but I wouldn’t typically recommend regularly using your robot vacuum to collect large volume spills anyway. I have especially reflective kitchen tiles, so I noticed this a lot; on my less shiny bathroom tiles, it wasn’t as much of a problem.
Powering up to a higher suction or mopping setting does result in a more thorough cleaning job, especially on carpets, but it’s worth noting that this seems to make the excess water usage more noticeable.
Some smeared oats, milady? I wouldn't advise using the Shark PowerDetect UV Reveal, or indeed most robot vacuums that mop and vacuum concurrently, to clear up high volumes of debris. (Image credit: Future)Object detection and navigationWhen the Shark PowerDetect UV Reveal works, it really works, but I encountered a fair few bugs and limitations that do impact its overall effectiveness — for example, when doing a combination clean, it sometimes skips cleaning certain areas and rooms, or neglects to clean areas I’ve specifically asked it to.
Its LiDAR scanner makes accurate room maps, though they’ll be a bit odd-looking if you have lots of furniture at floor level. That’s unavoidable, to a degree, but I wish it had investigated those areas more closely to find the real edges of the walls; that way if furniture moves around your home, you wouldn’t need to remap.
Its object detection is incredible — perhaps too good, as the robot vacuum avoided my low-hanging (but not floor-length) curtains like the plague, giving wide berth to even the most inconsequential of obstacles. Generally, it’s not too much of a problem, but improved smarts would mean there’s slightly less preparation required pre-clean to ensure your entire floor gets cleaned properly. I was also massively impressed by the ease with which it lifted itself over and cleared thresholds, chair legs, and the like, leading to quicker cleans.
UV detection in action, as well as some rugs the vacuum fought (and defeated)FutureUV detection in action. FutureUV detectionAfter its standard cleaning cycles, the robovac will return to its base, but the cleaning isn’t over quite yet. It’ll issue an ominous warning once it’s refreshed itself: "I detected stains. I'm heading back out to aggressively attack them."
Here’s where the magic of the PowerDetect UV Reveal is really on show; as it cleans, it flares a blue UV light, with which you can see for yourself the stubborn and sometimes invisible stains on your floor, which it will then return to after a standard cleaning run. It was pretty cringe-inducing to watch it navigate areas I hadn’t cleaned recently and see just how much grime was there.
(Image credit: Future)DockAfter the job’s complete, it’ll return for a final time to the base and begin the mop pad maintenance process quietly in the background with just a low humming noise, washing it with hot water before drying it to reduce contamination. In my testing, the robovac lived up to its estimated 3-hour battery life; a 45-minute clean on standard settings dropped the battery by 25%. A full recharge takes roughly 4 hours, and the vacuum won’t perform new tasks when at less than 20%.
The app is quite restrictive when it comes to home and schedule customization; you can only have one map, so multi-floor cleaning isn’t possible, no-go zones are always rectangular and you can only create two schedules per day.
I also noticed that the robot vacuum would often get confused when it initiated a clean, forging straight to the corner of my living room and spinning there for a good few minutes before figuring out its path to the hallway. On closer inspection, this happened most frequently when I sent it to clean somewhere other than its home room; for some reason, it wanted to head straight through my wall instead of around and through the doorway.
I couldn’t find a quiet mode, either, meaning if you ever wanted to use the vacuum at night or when little ones are sleeping, they might awaken to an ominous threat from your robovac.
These issues, among other software quirks, make for the primary complaint I have surrounding the Shark PowerDetect UV reveal; its app and on-board smarts hold back an otherwise high-performance robot vacuum.
Wattage (robot):
65W
Robot diameter:
13.2 inches / 34cm
Robot height:
4 inches / 10.2cm
Cleaning path width:
Not specified
Dock dimensions (H x W x D):
17 x 18 x 14 inches / 43.2 x 45.7 x 35.6 cm
Dock cord:
3.9ft / 1.2m
Weight (robot + dock):
26.9 lbs / 12.21 kg
Should I buy Shark PowerDetect UV Reveal?Section
Notes
Score
Software and app
There are lots of features I’d expect as standard in a robot vacuum, especially at this list price, that Shark just hasn’t added. That and the litany of odd bugs drop the overall score significantly.
2.5/5
Performance
Great for vacuuming carpets, and while the mop pad is a bit of a hazard, with UV sensing in tow it offers a truly deep clean.
4/5
Design
Neutral, bag-less and easy to maintain, the only thing I could ask for would be a slightly more premium feel in its black colorway. Plus, it’s a dust-magnet.
4.5/5
Value
Given its innovative features and thorough cleaning, it’s sitting pretty at its list price compared to the competition, but loses points for the in-app experience.
4/5
Buy it if…You value well sanitized floors
With its UV detection, the Shark PowerDetect UV Reveal offers peace of mind and broadly great results, especially in the mopping department… if you can handle slow-drying floors.
You have pets
Again, the UV detection comes in clutch here for invisible pet messes, but it’s also a deft hand at hair collection.
You have a large home
With its great battery life and efficiency, the Shark PowerDetect UV Reveal is unlikely to run out of juice before finishing the job even in larger homes.
You have lots of wooden floors or shiny tiles
While it’ll clean these floor types within an inch of their life, the residual water and cleaning solution could warp or damage wooden floors and leave streaky marks on particularly reflective ones.
You have lots of carpet
Don’t get me wrong, this is an accomplished vacuum for carpets, but if you want to do combination cleans, you might end up with a few soggy spots left in its wake.
You want to vacuum multiple floors — or other smart features
I liken the Shark PowerDetect UV Reveal to a power washer in the hands of a caveman; it’s only as good as the software allows it to be, and with frustrations like single-floor mapping, ignored instructions and
Shark PowerDetect UV Reveal review: Also considerEufy X10 Pro Omni
Another two-in-one robovac with excellent cleaning on all floor types, plus strong mapping and navigation.
Read our full Eufy X10 Pro Omni review
Roborock Qrevo Curv
A robot vacuum and mop that delivers superb suction and great wet floor cleaning. It's the best robovac we've tested to date.
See our full Roborock Qrevo Curv review
How I tested the Shark PowerDetect UV RevealI tested the Shark PowerDetect UV Reveal for two weeks in my home, completing my standardised pickup, edge cleaning and mopping tests in addition to simulating tests for features like UV detection. I used the app, making a map of my home and testing various features like scheduling and room-by-room cleaning tasks, closely observing the vacuum when in use to note any navigation or performance issues during testing.
Despite being Insta360’s first vlogging camera with multiple Insta360 firsts, the Luna Ultra, overall, feels like a polished and bold product. Its triple chipset ably supports powerful features — especially the gimbal-stabilized 8K 30p video with 10-bit color depth and 4K 120p slow motion video recording, Log color profile, autonomous subject tracking autofocus and 32-bit float audio.
With dual 20mm f/1.8 and 60mm f/2.0 lenses, each with its own sensor, you truly are getting two cameras in one. And having enjoyed the Luna's ultra-wide and impressive 3x telephoto versatility for a month, it will be hard for me to go back to a single-lens compact vlogging camera.
The detachable remote module — which features the two-inch OLED touchscreen, main camera controls and built-in microphone — has, understandably, won many admirers. It's such a clever and well-implemented design feature that truly enhances the user experience, especially for solo vlogging.
Here the module has been removed. It has a 20m transmission range and when removed it functions just as if it's attached to the camera (Image credit: Future / Tim Coleman)Initially I had a few minor niggles navigating various camera settings, and it certainly paid dividends to spend time customizing the Luna Ultra to the way I like to shoot. It's also notably bulkier than DJI's Pocket 4 vlogging cameras, and pricier than single-lens alternatives.
Despite its infancy in this space, Insta360 has to its credit already produced crucial supporting accessories — including tripod and battery grips, plus the Insta360 Mic Pro wireless mic for top quality audio — meaning you can stick within the Insta360 ecosystem and enjoying the best possible user experience and compatibility, including full Bluetooth support.
Yes, DJI has been in the compact vlogging camera space for much longer and has refined its Pocket series with every iteration, but the Luna Ultra enters with a bang and is an impressive alternative.
Two lenses in one device, with an additional zoom — an approach familiar to smartphone users (Image credit: Future / Tim Coleman)Insta360 Luna Ultra: price and release date"We're not going to compete on price" is what Insta360's co-founder Max Richter told me at a pre-launch event for the Luna Ultra, the company's first vlogging camera and DJI Osmo Pocket series rival.
And the Luna Ultra is much pricier than previous Pocket cameras. However, those were single-lens models and, like DJI's most recent Pockets, the single-lens Pocket 4 and dual-lens Pocket 4P, the Luna comes in two varieties: the single-lens Pro and the dual-lens Ultra.
Prices for the Ultra start at $769.99 / £649 / AU$1,229.99. That’s a fair whack more than the latest single-lens models, but you are truly getting two cameras in one device.
Insta360 sent me the Creator Bundle to review, which includes multiple extras such as the Mic Pro transmitter and battery grip and costs $969.99 / £829 / AU$1,549.99. I expect the dual-lens Osmo Pocket 4P to cost less than the Luna Ultra, but it won't be available in the US because of the DJI ban.
Both Luna models are available in black or white versions, and in a further variety of bundles that cater for various use cases; Standard, Essential, Endurance, VLOG, POV and Creator.
Type:
Compact video camera
Lenses
20mm f/1.8 and 60mm f/2.0
Sensors:
1-inch and 1/1.3-inch
Video:
8K up to 30p / 4K up to 120p / FHD up to 240p
Photo:
9MP JPEG & RAW / 37MP UltraPhoto mode / panorama
LCD:
2-inch OLED, detachable
Memory:
47GB internal, 1x micro SD (up to 1TB)
Battery
1,550mAh, rated up to 4 hours of 1080p
Dimensions
2.1×6.7×1.5in / 52.4×169.9×38.5mm
Weight:
8.2 oz / 233g (black)
8.3oz / 235g (white)
The Luna Ultra’s form factor is familiar — it's a bit like the compact, stick-like design of DJI’s Pocket series. DJI isn’t happy about it, by the way; it has filed a lawsuit accusing Insta360 of patent violations (which Insta360 has responded to with a countersuit).
However, there are some key design differences. Lunas are slightly larger than Pocket models. Not majorly so, but the difference is clear when you hold them side by side as I did (albeit the dual-lens Ultra alongside the single-lens Pocket 4).
In practice, I didn’t really feel that the Luna’s extra weight and size negatively affected its handling — it’s easy in the hand for on-the-go vlogging. If you want the absolute smallest option, however, DJI is your best best. Even the dual-lens Pocket 4P is smaller.
There’s a good reason why the Luna cameras are bigger, and that’s for a super clever and unique feature: a detachable remote control, which is a module that packs the camera's main controls and rotatable two-inch OLED screen. Simply squeeze the red buttons on either side of the Luna, and the module pulls away from the body.
Future / Tim ColemanFuture / Tim ColemanFuture / Tim ColemanFuture / Tim ColemanThe module has a 20m transmission range and operates exactly the same way as if it’s on the camera, with the touch display offering a remote view, and the main camera controls on hand, including gimbal, zoom and record. Transmission range is impacted by the surroundings — I found the feed froze inside 15 meters when other people passed in front of me in a busy urban space — but I could see it happening on the screen in my hand and could rectify the situation.
What’s really neat is that the module has a built-in microphone, so you can easily check your frame and present to the camera. It’s certainly better than using the on-camera mic, though a wireless mic such as Insta360’s own Mic Pro with its customizable E Ink display is an even better pick for audiophiles. The camera has direct Bluetooth support for this mic and Insta360’s Mic Air. The video below gives an idea of what the module is like to use remotely.
I really appreciated how much easier it was to frame my shots with the controller module in hand. There’s also smart subject tracking and autofocus (more on this in the performance section), meaning the camera can track you as you move around, within the gimbal’s range, keeping you or your subject centered in the frame. Controlling the Luna using the module and tracking is like having your own cameraperson filming you, provided you can find a secure surface to rest the camera on or a support to fix it to.
On that note, the Luna Ultra can stand freely on flat surfaces, while the battery grip, which extends battery life plus the physical height of the camera, features tiny flip-out tripod feet for extra stability.
The battery grip is larger than the regular tripod grip and extends the battery life of the camera, which was already impressive being rated at up to four hours of 1080p filming. Not bad for a 1,550mAh unit that can be recharged to 80% in just 23 minutes.
At first I had a few niggles with the handling of the Luna Ultra from how it comes straight from the box. Beyond finding it physically clunkier than the Pocket 4, I needed to change various settings to taste, such as its behavior when rotating the two-inch touchscreen.
Overall, however, I can't find much fault with the Luna Ultra's design, which is seriously impressive for a first generation product.
The Luna Ultra is equipped with a triple chipset, comprising powerful 4nm and AI chips. As such, I never really experienced any performance issues, even shooting a lot of 8K video (though never for more than 10 minutes at a time).
The camera does get a little warm when using power-hungry features such as 8K video, and I did see a lag when switching from the 12x zoom back to 1x using the stepped zoom control on the touchscreen. However, those were my only issues.
In addition to regular 8K video, the Luna Ultra has a range of shooting modes, including; Slow Motion up to 240fps (in Full HD), Timelapse, TimeShift and Barrel Roll. I've included some slow motion clips in a sample video below.
Both Luna cameras accept a micro SD card up to 1TB, and include 47GB internal storage — less than DJI’s Osmo Pocket 4 / 4P, which have more than double the capacity. I shot plenty of video clips and photos directly onto the internal memory, and still had plenty of space left over — the maximum 120Mbps bitrates of video files are fairly low and don't take up too much memory.
And there’s plenty more for audiophiles, namely a decent wind guard for the camera’s internal four-mic array, plus 32-bit float audio. This pro-level setting avoids clipping, and is ideal for unpredictable and noisy environments, but for simpler audio edits, the 24-bit setting is probably your best bet.
The quality of the detachable module's built-in mic impressed me, though for the clearest pickup it's pretty fussy about how close you hold it and the angle it's pointed in.
Subject tracking is impressively sticky, though I did find that it switches to a new subject a little more easily than the DJI Pocket 4. In one situation, I was walking with the camera tracking me when other people came between me and the camera and tracking stopped.
In another scenario as I held a product up to the camera for it to focus on, the camera focused back on my face in the background all too keenly when I came back into view. In such a scenario, I think DJI's tracking performs better.
The Luna Ultra ups the ante in this camera category with 8K video — double the resolution of the Osmo Pocket 4, which shoots in 4K. It’ll shoot 8K up to 30fps, complete with Dolby Vision (aka HDR) and I-Log color profile.
This is the first Insta360 camera with Log, a flat color profile that pros like to use to maximize the color grading potential and for the most dynamic range possible from their camera, which in this case is up to 14 stops.
DJI has billed the Pocket 4P as having 17 stops dynamic range with its new D-Log2 profile — I look forward to comparing the footage of both cameras to see which is better once I have my hands on the Pocket. 4P.
Insta360 thinks its night mode is superior to DJI, with its PureVideo mode boosting dynamic range in 4K 60p videos. That’s another comparison test I’m looking forward to conducting. From the shots I've taken at night in this mode, detail looks impressively sharp, though of course no match for the quality of daytime footage.
Insta360’s Leica partnership goes beyond the Luna’s Leica-branded lenses and into various Leica color profiles. If you like the simplicity of attractive color profiles with no need for color correction, then the Luna has some great alternatives to Log.
I was impressed with the 3x telephoto camera — provided the subject isn't too far away, it's possible to throw depth of field for punchy portraits. I'm talking upper body shots with notable shallow depth of field.
The zoom of that lens can be further extended with a 6x 'lossless' zoom, a term that suggests you shouldn't notice a drop in image quality — I certainly didn't. I can't say the same for the 12x digital zoom setting, which looks a little more pixelated on close inspection. Still, that 12x zoom is a handy addition should you really need to zoom closer.
Honestly, having enjoyed the variety of two lenses in such a small camera, and how impressive the quality of the telephoto camera is (the sensor is bigger than the main sensor in most smartphones), I know I'll struggle if I have to go back to a single-lens compact vlogging camera.
Video is, of course, the primary use for the Luna Ultra, but it shoots decent-quality 9MP photos too, in JPEG and RAW format, albeit with just eight-bit color depth. I've included a couple of scenarios below, taking JPEG and RAW (DNG format) photos simultaneously at night and in daylight, with the 1x and 3x lenses.
I haven't edited the RAWs so you can see the kind of processing that takes place for JPEGs. All the photos are 9MP, but there is also an UltraPhoto mode which quadruples resolution to 37MP.
Insta360 Luna Ultra photo galleryAn unedited RAW DNG file. Note the vignetting (dark corners) and muted colorsFuture / Tim ColemanThe standard color profile, JPEG format. This gives an idea of the kind of camera corrections that take place during JPEG processingFuture / Tim ColemanAnother example. Interestingly, the RAW files use a lower ISO value than JPEGs when shooting. in RAW+JPEG simultaneously. Future / Tim ColemanThe previous RAW image was ISO 180, this JPEG is ISO 360. All of the four dragon photo were taken with the 1x ultra-wide camera.Future / Tim ColemanAgain, a RAW file. There's more detail in this photo than the corresponding JPEG, and I haven't even played with exposure corrections or shadow / highlight recoveryFuture / Tim ColemanI tried the 'Fresh' color profile here, which is bright and airy. The intensity for any color profile can be adjustedFuture / Tim ColemanThe RAW DNG format again and, like the previous portraits, taken with the 3x telephoto camera.Future / Tim ColemanThe corresponding JPEG to the previous imageFuture / Tim ColemanAttributes
Notes
Rating
Price
Considering you get two cameras in one, a detachable touchscreen module and high-end video features, the Luna Ultra is decent value, but it does cost a lot more than single-lens alternatives and DJI almost always costs less
4/5
Design
Slightly clunkier than the rival Osmo Pocket 4 / 4P, but the detachable control is well implemented and seriously useful
4.5/5
Performance
Triple chipset ably supports high-end features, subject tracking works well and gimbal performance is decent
4.5/5
Image and video quality
Twin camera versatility for different shots, sharp 8K footage, I Log and Leica color profiles. You'll struggle to find better image quality in this camera format, though I haven't directly compared footage with the Osmo Pocket 4P yet
5/5
Should I buy the Insta360 Luna Ultra?Buy it if...You want a versatile compact vlogging camera
Dual lenses are a revelation for this camera format. You're no longer restricted to ultra-wide shots, but dynamic portraiture and b-roll details are entirely possible.
You're a solo vlogger
The detachable remote with two-inch touchscreen, camera controls and built-in mic aid solo vlogging, in terms of the range of shots you can easily get, especially with subject tracking on board.
You want the smallest possible vlogging camera
The Luna Ultra is clunkier than the DJI Osmo Pocket 4 / 4P. Not hugely so, but DJI's cameras are even more pocketable.
You don't need two lenses
For me, having used the Luna Ultra, it's now hard to go back to a single-lens compact vlogging camera, but if you don't need that second telephoto camera, the single-lens Pocket 4 / Luna Pro alternatives cost much less.
DJI Osmo Pocket 4 / 4P
At the time of writing, I've only reviewed the single-lens DJI Osmo Pocket 4 which isn't a fair comparison especially with the dual-lens Pocket 4P on the horizon and the direct rival to the Luna Ultra. However, if you'd like to know how the cameras compare, check out my Luna Ultra vs Pocket 4 article.
Read our in-depth DJI Osmo Pocket 4 review
Fujifilm X-M5
If we're going on price, there beginner mirrorless cameras enter the picture, and for me the Fujifilm X-M5 is the best-equipped hybrid for the money. It has a bigger APS-C sensor, shoots 6K video recording (with Full HD vertical vlogging mode) and 26MP photos and it's a stunning camera. The drawback is that there's no in-body stabilization, so you'll probably want an additional gimbal to smooth out on-the-go clips.
Read our in-depth Fujifilm X-M5 review
How I tested the Insta360 Luna UltraFuture / Tim ColemanFuture / Tim ColemanI had early access to the Luna Ultra Creator Bundle ahead of its launch, and tested the kit out over the following weeks before writing this review. During this review period, I also had the single-lens DJI Osmo Pocket 4, meaning I was able to make comparisons.
The camera shoots decent still photos with RAW format editing flexibility, but my main focus video performance. I've shot horizontal and vertical vlogging-style videos in the various resolutions and frame rates available in each format, and experimented with various color profiles.
I've made sure to try out all of the accessories supplied to me and the various configurations of the detachable monitor. I've checked the camera and detachable monitor's audio quality, and how easily and reliable it pairs with an Insta360 Mic Pro wireless mic.
Cloudzy isn’t your run-of-the-mill web hosting provider. It specializes in cloud infrastructure and fairly bare-bones Virtual Private Server (VPS) plans. That means you get reasonably priced access to excellent hardware and resources, provided you have the technical skills to handle them.
The good news is that many things can be pre-configured, and you have a broad choice of options in everything from the choice of operating system (OS) to web apps. We’re not just talking about WordPress, but also advanced options like Forex platforms.
You also have an excellent range of server location options, though perhaps not as comprehensive as Google Cloud or AWS, which are on a different pricing tier altogether. What we didn’t like, though, was the discounts Cloudzy offers based on your location choice, which we felt was a bit unfair to customers who might require specific regions for efficiency and localization.
Be warned, though - Cloudzy is not really aimed at casual users building their first website. While you can technically host anything here, the core audience appears to be users who need virtual servers for web apps, trading bots, VPN setups, and the like.
Plans and pricing(Image credit: Cloudzy)Cloudzy primarily focuses on VPS hosting rather than traditional shared hosting packages. At the bottom of its offerings are Cloud VPS plans similar to those offered by hosts like DigitalOcean, Linode, and VULTR.
(Image credit: Cloudzy)At Cloudzy, though, you get a broader range of pre-deployment options. For example, you can decide to go with a pure OS-only deployment, or get your server started with a full LAMP-stack supported web app, or almost anything else.
Cloud VPS plans start at 1 vCPU with 512MB RAM, 20GB of NVMe storage, and 1TB bandwidth/mo. This scales up to a whopping 16 vCPU, 64GB RAM, 1.5TB NVMe storage, and 16TB of bandwidth for $199.97/mo.
While there is no additional charge for pre-deployment options, your final price may be adjusted depending on server location. It’s likely that Cloudzy does this to help balance their location loads, but it’s unfortunate for customers who may be penalized because of their requirements for where their servers are located.
Aside from Cloud VPS, Cloudzy also offers more specialized solutions like high-performance GPUs, GPU-optimized servers, AI servers, and dedicated servers. Again, all of these options are fairly technical, especially their dedicated bare-metal servers.
Ease of use(Image credit: Cloudzy)The Cloudzy dashboard is a straightforward way to manage your servers. However, it’s more practical than informational. You can use it to deploy, rebuild, or configure instances. Server monitoring isn’t in the cards, though, and you’ll have to deploy any of those solutions on your individual servers if you need them.
When we initially discussed the pre-deployment option, it might have been misconstrued as saying Cloudzy is easy to use. That isn’t really the case. Once the deployment is made, you’ll still have to manage the stack on your own. For example, you have to keep your server OS and applications up to date and security-hardened, not just manage your web app.
This is typically done via SSH into the server (root access is provided). If you know what you’re doing, it’s easy-peasy. If not, you’re probably going to face an oncoming disaster.
Again, we don’t recommend Cloudzy as a first hosting provider for someone completely unfamiliar with VPS environments. If you’re looking for a first entry to the Cloud, try something with more management features like Cloudways. That, however, will cost a bit more, so be mentally prepared.
Speed and reliabilityCloud providers are always thought to be all-powerful, but keep in mind that much of it still depends on the hardware and configuration. For example, on the surface, Cloudzy offers some pretty good standard cloud VPS plans. However, the processing power on these compared to their high-performance options is very different. For example, the 2GB standard cloud VPS plan we tested includes a 2.25GHz AMD processor, while a comparable high-performance plan includes 4.2GHz processors.
The biggest surprise, though, is that Cloudzy is using AMD Ryzen 9 processors for their Cloud VPS plans. Servers typically run AMD EPYC chips, which are the dedicated server versions commonly used in web hosting. The Ryzen family is intended more for regular consumers or enthusiasts.
It’s possible that this led to the slightly disappointing test results below.
WordPress benchmark testThe standard WordPress benchmark test was run on our prebuilt WordPress site to maintain consistency. Results at Cloudzy were a letdown, with initial results showing worse performance than some budget shared hosting alternatives we’ve seen.
Siege testOn our load test, Cloudzy performed like a champ, acing results with increasing loads of 5, 9, and 15 concurrent users. It ran rock-solid and completed all transactions quickly. If we were to use this as a comparative factor against the easier benchmark test, Siege results should take priority as a more realistic indicator.
Customer supportCloudzy offers customer support via tickets (for existing customers), a knowledge base, and, more interestingly, WhatsApp. Don’t be fooled by the WhatsApp chat support option, though. You don’t get an instant response.
Their knowledge base is also quite Spartan, with only 73 guides available. These articles are very straightforward and relatively technical, so you may have to know what you’re doing just to follow the language. It can be a challenge, but those are the preconditions for this type of hosting anyway.
Overall, the vibe you get from customer support is very corporate. We felt a notable disappointment here, especially coming off our recent Freehostia review. That was a free hosting plan, yet it came with near-instant customer support that was both polite and effective.
The competitionDigitalOcean is one of the most popular cloud infrastructure providers for developers and startups, and is similar in product offerings to Cloudzy. Compared to Cloudzy, DigitalOcean has a more mature ecosystem and a more professional customer dashboard. However, Cloudzy may appeal more to users looking for simpler pricing and lower-cost VPS deployments.
Linode has built a strong reputation among developers for reliability and straightforward cloud hosting services. Compared to Cloudzy, Linode offers more enterprise-level polish and documentation, though pricing can sometimes be higher for equivalent resources.
For those who want a fully hands-off approach, Hostinger is a beginner-friendly choice. Although primarily cheap for shared hosting, you can also get VPS hosting and other plans. Hosting is priced aggressively and offers strong localization expertise for ideal customer support.
Final verdictTo be honest, Cloudzy is a fairly run-of-the-mill cloud hosting provider. We don’t feel that it excels in any particular area, even though the host itself seems professional enough. What really turned us off was their slow customer support, even for sales queries.
Performance-wise, Cloudzy runs fine, even with Ryzen chips instead of enterprise-grade EPYC chips. It’s just that the choice left us feeling disappointed that they would cut corners in that way. We recommend considering one of the many cloud alternatives if you’re in the market for a budget, hands-on hosting plan.
Gigabyte’s gaming monitors have been hit and miss lately, but I had high hopes for the 32-inch, 4K, 240Hz MO32U24, which uses a 4th-generation QD-OLED panel and has a new, HDR-boosting feature called HyperNits.
Is this the one?
Like Gigabyte’s other non-Aorus-branded gaming monitors, the MO32U24 has a sober design that eschews RGB and geometric flourishes for a basic-looking stem and stand. That’s no bad thing, as many buyers will want a monitor that suits gaming, multimedia and work.
It’s easy to assemble (one clip and a thumbscrew), there’s a generous amount of adjustment in every direction and the small-footprint stand will suit competitive gamers who sit right up close to the screen.
(Image credit: Future)QD-OLED screens banished spidery text a generation ago and this fourth-gen version is no different. Even fine fonts look sharp and the UHD resolution means you can comfortably work with four windows or large spreadsheets all day without straining your eyes.
The screen also uses Gigabyte’s ObsidianShield coating, which ‘boosts true-black performance’ and improves scratch resistance. It has a semi-gloss finish and does an impressive job of reducing reflections.
However, I was particularly interested to see how the HyperNits brightness enhancement affected the 1,000-nit HDR performance. Gigabyte says it “intelligently enhances overall brightness… while preserving highlight details.” In reality, it makes the MO32U24’s excellent HDR a bit better.
While some details still get lost in large, bright areas, an impressive amount of detail simultaneously remains visible in highlights and shadows: bright lights (fire, lightning, candles, windows and torches) shine piercingly out of true-black backgrounds without blowing out.
This noticeably improves multimedia immersion (especially in open-world games). I also liked that I could leave it activated when working without going blind.
Meanwhile, colors are bright and saturated and transitions are smooth and noise-free. The 240Hz refresh rate and the rapid 0.03ms pixel response banish blurriness around rapidly moving objects and only god-tier pro-FPS players might complain. G-Sync prevents image tearing.
(Image credit: Future)Gigabyte’s OSD is intuitive, responsive and all the usual presets and gaming features are easily accessed via a joystick button. Gigabyte’s Game Assist features include an on-screen timer and refresh rate display, on-screen crosshairs, a sniper-zoom box, green-screen night vision and flash dimming. Some are useful, but others feel gimmicky.
Potentially of more interest to FPS players is the customizable Tactical Switch button, which drops the display area to 24 or 27 inches, sets the resolution to 1440p, Full HD or HD and/or changes the aspect ratio to 4:3 or 5:4.
Beyond that, there are considerable automated OLED care options that don’t get in your way, a full set of ports (including a two-port USB hub) and two 5-watt speakers, which provide useful audio for day-to-day multimedia use (but have very little bass).
In more recent years, Asus has dominated in this space, but no longer. It has a few quirks, but the Gigabyte MO32U24 has the chops where it matters.
Gigabyte MO32U24: Price & availabilityThe Gigabyte MO32U24 is available now in most regions. It’s a premium model, so it’s not cheap. Furthermore, the global price spread is quite wide and it sits in a crowded segment where prices for rivals and previous-gen models are changing frequently (and significantly) in sales.
This means the value proposition is hard to pin down. Nonetheless, you do get a lot of gaming monitor for your money and it’s currently one of the very best on the market.
Screen size
31.5-inch
Aspect ratio
16:9
Resolution
3840 x 2160 (UHD)
Brightness
300 cd/m² typical SDR at 100% APL; 1000 cd/m² typical HDR at 3% APL
Refresh rate
240Hz
Response time
0.03ms GTG
Viewing angle
178°(H)/178°(V)
Contrast ratio
1.5M:1
Color coverage
99% DCI-P3
Inputs
2x full-bandwidth HDMI 2.1, 1x DisplayPort 1.4, 1x USB-C with DisplayPort Alt Mode, upstream and up to 18W power delivery, 2x USB 3.2 downstream, 1x USB 3.2 upstream, 1x earphone jack
Dimensions
71.9 x 61.0 x 24.0cm with stand (28.3 x 24.0 x 9.4in); 71.8 x 41.8 x 6.5cm without stand (28.3 x 16.5 x 2.6in)
Weight
7.95kg with stand (17.5lb); 6.00kg without stand (13.2lb)
Gigabyte MO32U24: DesignSome gaming monitors have over-designed, spiky stands that take up more space than is necessary on your desk in order to make a statement — often with RGB lighting to hammer home the point.
The Gigabyte MO32U24 is more sober (unlike siblings from its Aorus sub-brand) in that its no-nonsense stem, base and bezel are relatively plain-Jane in their appearance, but are arguably better for it.
The stem easily clips onto the screen and the small-footprint base attaches to it via a single thumbscrew. You’re left with a solid stand that doesn’t wobble unless you shake the whole desk.
The whole monitor doesn’t look flashy, which will suit those who want to use it for office work in an office environment. However, esports players can still sit right up close to it with their keyboards.
(Image credit: Future)I’m not quite sure what happened to the Gigabyte Control Center app. It used to be very good at adjusting all your monitor settings from the Windows desktop.
The latest version is barely functional, so you need to access settings using the joystick button at the base. Mercifully, it's intuitive and responsive and you can set up multiple (one- or two-click) shortcuts to your most commonly used features.
To its left is the off switch. To the right is the ‘Tactical Switch’ which can instantly change the display size, resolution and aspect ratio to suit esports players or activate one of the monitor’s other Game Assist features.
Those Game Assist features include multiple styles of on-screen crosshair that can be moved around the screen. These are particularly useful for games like Hardcore CoD (even though it feels like it’s close to cheating).
There’s an Eagle Eye zoom ‘sniper’ box which can magnify an area of the screen (it’s adjustable but sits in the middle by default). I’d say this really was cheating if I found it usable in any way whatsoever, but my testing found it to be little more than annoying.
There’s also Night Vision mode which changes the whole display to ‘night vision green’ for people who want to pretend they’re in real-life special forces, or something.
Flash dimming is provided to stop virtual flash-bangs combining with the high, peak brightness and burning your retinas. Not everything is available when HDR is selected, though.
You can also use Game Assist to simply show a Timer, Counter or Refresh Rate (and move this information around the screen).
(Image credit: Future)The Resolution Settings can drop the screen to 27 or 24 inches to suit FPS players who sit right up close. The available resolutions range from 1440p to 1024 x 768, with aspect ratios ranging from 16:9 through 5:4 to 4:3.
Other gaming adjustments include numerous image presets that are all adjustable. There's also AI Black Equalizer, which flattens contrast to stop enemies hiding in shadows and highlights. There are also VRR and Anti-Flicker modes to smooth out motion for console players. The monitor also supports G-Sync and FreeSync Premium Pro to prevent image tearing.
Other features include Picture-in-Picture and Picture-by-Picture, which can make use of all four inputs (2x HDMI, DP and USB-C) plus KVM settings that let you use the same peripherals on multiple connected devices.
Also included is an extensive collection of OLED Care options that are mostly automatic and unobtrusive. You can easily check on the screen’s status, manually activate pixel cleaning cycles and select settings that automatically dim logos and static images.
Ultimately, there’s nothing notable missing and even the most demanding tinkerers should be able to easily find display settings to suit their needs.
The Gigabyte MO32U24 has so many settings that every type of user should be able to quickly find a combination (by choosing a single preset or manually adjusting multiple settings) that suits their needs, whether they’re gaming or working.
Office workers will warm to sharply rendered fine fonts, a low-reflection, semi-gloss coating and a resolution that affords comfortable work with four windows at once.
(Image credit: Future)When it comes to multimedia, the semi-gloss screen reduces reflections without dulling the impact of the panel’s bright colors, true blacks and outstanding contrast like a matte screen would.
Its HDR performance, which is augmented with Gigabyte’s ObsidianShield coating and HyperNits brightness enhancement, is outstanding as it can simultaneously display details in very bright and very dark scenes at once. While some details can get lost in particularly large, bright areas, it's rarely a problem.
Top tip — I recommend using the Windows HDR Calibration tool (in the Microsoft Store) to set it up, but I also recommend not following its instructions entirely — don’t make the black and white boxes disappear into each other — you’ll get a much better image if you leave the two reference images visible.
The 240Hz refresh rate and fast QD-OLED pixel response time ensure that rapidly moving objects are rendered nearly pin-sharp. I’ve seen even better performance on even faster screens, but those rarely offer the all-around graphical attributes that are also available on the MO32U24.
I never expect much from built-in monitor speakers and the two 5-watt speakers didn’t challenge this view. It’s handy to have them for casual social-media video watching but don’t expect great musical fidelity or punchy bass.
Value
Expensive but worth it.
4 / 5
Design
Utilitarian, intuitive, useful but not flashy.
5 / 5
Performance
Sublime HDR image quality. Fast for FPS players. Great for office work too.
5 / 5
Final score
One of the very best all-around monitors on the market.
5 / 5
Buy the Gigabyte MO32U24 if...You want a monitor for work and play
The Gigabyte MO32U24’s fine resolution and low-reflection coating can make you more productive when working. Its HDR graphical capabilities improve game immersion and its speed can satisfy competitive FPS gamers.
You want a premium gaming monitor that doesn’t cost the earth
It’s not cheap, but the Gigabyte MO32U24 costs less than many flashier S-tier rivals while matching (and even beating) them for performance.
Don't buy it if...You don’t have much money
The Gigabyte MO32U24 offers the best of everything, but you can buy functional monitors that suit specific needs for far less money.
You want a flashy gaming monitor that makes a statement
If you want a spiky gaming monitor that’s dripping in RGB and looks great in Instagram pictures of your battle station, this isn’t the gaming monitor for you.
Also considerLG UltraGear GX9
LG’s UltraGear GX9 has a larger, curved panel that offers potentially greater gaming and productivity benefits. But it costs much, much more.
Read our LG UltraGear GX9 review
MSI MPG 322UR QD-OLED X24
MSI’s rival uses the same panel and offers similar performance and features. It costs a bit more on paper, but it could be significantly cheaper when on sale.
Read our MSI MPG 322UR QD-OLED X24 review
Are you after something else? Check out our guide to the best monitors.
With Microsoft seemingly intent on turning Windows into malware, Macs are increasingly appealing. But while the Apple tax is increasingly diminishing in the consumer laptop space, it’s rife when it comes to compatible monitors.
PC-focused alternatives have different colors, pixel densities and features that rarely play well with Macs, meaning users frequently fight losing battles matching what they see on their MacBook screen with a third-party monitor. But BenQ has taken note.
There are several models in BenQ’s new specialist Mac range. Most have 4K resolutions, are 27 or 32 inches in size, have 60Hz refresh rates and offer glossy or matte finishes.
There are two outliers: the 120Hz MA320UG and this, the glossy, 5K-resolution MA270S.
(Image credit: Future)Setup is simple, with the clip-on stem affixing to the base with a single thumbscrew. There’s a generous amount of adjustment (including 150mm (5.9in) height and 90° bi-directional pivot) which, unlike Apple, BenQ doesn’t charge extra for.
There’s also an unApple-like plethora of ports including two HDMI, two Thunderbolt 4 and four USB 3.2 Gen 2 ports (two USB-C and two USB-A), with up to 96 watts of USB-C power delivery — so one cable can connect and charge a laptop.
The USB-A ports also offer 7.5W charging. They also facilitate KVM functionality to connect multiple devices. Apple’s monitors don’t.
Once connected, BenQ’s factory-calibrated screen instantly resembled the display of the MacBook sitting next to it. Like Apple’s own monitors, the MA270S has a native 5K resolution of 5120 x 2880, giving it a much higher pixel density (218 PPI) than 27-inch, 1440p PC equivalents (~109 PPI).
By default, macOS scales the interface to look like 2560 x 1440, which keeps text crisp without making everything tiny.
(Image credit: Future)The IPS screen is very impressive with near-OLED levels of color saturation and LED-backlight-derived (almost completely) true blacks. Multimedia looks good at default settings (vibrant colors, respectable contrast and minimal noise in gradients), but turning on HDR significantly improves everything: more details simultaneously show up in shadows and highlights and all transitions become smooth.
The brightest highlights can blow out (with no easy fix), though, and note that the glossy coating can turn into a black mirror when displaying dark content.
A common curse of Retina displays is their sluggish speeds and the MA270S is no different. The slow, 5ms response time marries with a 60Hz refresh rate (it actually goes up to a Spinal Tap-esque 70Hz) to smear fast-moving objects across the screen, so forget about eye-friendly, fast-and-frantic gaming.
There’s no integrated webcam, but the two 3-watt speakers (surprisingly for a monitor) have well-rounded fidelity and sound good, despite not getting loud.
Despite having a joystick button, most advanced image settings are controlled by BenQ’s impressive DisplayPilot 2 app. The customizable options can easily swap between color modes and toggle settings like Low Blue Light.
Its FocuSync settings match Mac Focus adjustments and enable you to change core monitor settings using Mac settings. You can also auto-sync different color modes with different applications.
(Image credit: Future)BenQ MA270S: Price & availabilityWhile it’s not a cheap monitor, the BenQ MA270S is significantly cheaper than Apple’s own Studio displays and, therefore, serves as a much-needed, more affordable, third-party alternative in a monopoly market.
Screen size
27-inch
Aspect ratio
16:9
Resolution
5120 x 2880 (5K)
Brightness
450 cd/m² typical
Refresh rate
70Hz
Response time
5ms GTG
Viewing angle
178°(H)/178°(V)
Contrast ratio
2,000:1
Color coverage
99% sRGB, 99% P3
Inputs
2x HDMI 2.1, 1x Thunderbolt 4 (96W PD), 1x Thunderbolt 4 out (15W PD), 1x USB-C 3.2 Gen 2 (35W PD), 1x USB-C 3.2 Gen 2 (15W PD), 2x USB-A 3.2 Gen 2 (7.5W charging), headphone jack
Dimensions
43.0-58.0 x 61.4 x 22.0cm with stand (16.9-22.8 x 24.2 x 8.7in); 36.8 x 61.4 x 7.6cm without stand (14.5 x 24.2 x 3.0in)
Weight
8.64kg with stand (19.1lb); 5.7kg without stand (12.6lb)
BenQ MA270S: DesignApple users have always been an aesthetically appreciative bunch, and so they’ll warm to the color scheme of the BenQ MA270S, which apes that of a standard silver MacBook.
The stand is simple to assemble and offers a generous amount of movement in every direction. It's remarkable that Apple charges more for a feature like this — it’s standard on many PC displays.
The multiple ports (which offer different degrees of charging power) mean multiple devices can be simultaneously connected. Furthermore, a single keyboard and mouse can be shared across them using KVM functionality — unholy magic in the eyes of some Apple users.
FutureFutureFutureThe joystick button at the base of the screen only provides access to brightness, volume and input selections. To access more comprehensive settings, you’ll need the BenQ DisplayPilot 2 app and the OSD handily provides a QR code to locate it on BenQ’s own website (it’s not in the App Store).
It provides access to basic brightness settings, eye comfort and HDR, but also FocuSync settings on your Mac.
Another feature is the rubberized pad on the base of the stand. It provides slightly superior softness and friction compared to the plastic stand, so you may be more tempted to rest your phone on it.
(Image credit: Future)The only element that some users might miss is a built-in webcam. Apple’s own monitors have them, but purchasers of the BenQ MA270S will have to buy a separate unit or use the one in their MacBook.
The best thing you can say about the BenQ MA270S is that it just works. Just connecting it to your MacBook provides you with a matching image of your MacBook’s screen without having to fiddle with countless settings.
The screen displays very sharp text, colors are very bright and vibrant, and contrast is generally impressive. However, bright areas and highlights can blow out rather easily when HDR is engaged.
The big drawback is that the 70Hz refresh rate is nowhere near enough to stop the sluggish 5ms pixel response time from smearing most moving objects across the screen. As such, it’s not good for gaming.
(Image credit: Future)Unusually for a monitor, the two 3-watt speakers offer well-rounded fidelity with a modicum of bass. They don’t get particularly loud, though.
Value
In terms of monitors, it’s not cheap. In terms of Apple monitors, it represents extraordinary value.
4 / 5
Design
The MA270S looks and feels like it belongs in Apple’s world — and that’s hard to achieve for third parties.
4 / 5
Performance
The colors, brightness, sharpness and contrast are everything we’d expect from an Apple monitor. Unfortunately, the sluggish speed is too.
4 / 5
Final score
At last, MacBook users can afford a compatible external monitor without breaking the bank.
4 / 5
Buy the BenQ MA270S if...Apple’s homegrown alternatives are unaffordable
While the Apple tax isn’t what it once was, it still exists in monitor land. BenQ has provided some much-needed third-party competition.
You want multiple ports
Apple loves the simplicity of USB-C ports, but the real world often requires more, and BenQ provides them.
Don't buy it if...You need a built-in webcam
It’s the one glaring omission. It’s worth highlighting its absence, as some long-time Apple buyers would simply expect it to be there.
You want it to play games
The 5ms pixel response time and 70Hz refresh rate make it one of the slowest monitors on the market.
(Image credit: Future)Also ConsiderPhilips 27E3U7903
This expensive, third-party alternative can even beat Apple at its own game.
Read our Philips 27E3U7903 review
BenQ GW2486TC
BenQ’s smaller, older alternative can save you even more money.
Want more options? Check out our guide to the best monitors for MacBook Pro.