Error message

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

Feed aggregator

New forum topics

Today's NYT Mini Crossword Answers for Saturday, May 30

CNET News - Sat, 05/30/2026 - 00:15
Here are the answers for The New York Times Mini Crossword for May 30.
Categories: Technology

Today's NYT Connections: Sports Edition Hints and Answers for May 30, #614

CNET News - Sat, 05/30/2026 - 00:05
Here are hints and the answers for the NYT Connections: Sports Edition puzzle for May 30, No. 614.
Categories: Technology

Forget a simple mugging - report claims physical attacks on major crypto holders is on the rise as 'Whales' are targeted for kidnapping

TechRadar News - Fri, 05/29/2026 - 20:05
Crypto bigwigs are some of the biggest - and in some cases, easiest targets for kidnappers, conmen, and blackmailers alike
Categories: Technology

'Doubtless the best noise-cancelling iPhone headphones on the planet': I tested AirPods Max 2 and they really are that good — here's why

TechRadar Reviews - Fri, 05/29/2026 - 20:00
Apple AirPods Max 2: Two-minute review

I haven't always been an AirPods fangirl. In fact, in May 2021, when the company unveiled Apple Music Lossless and Hi-Res Lossless for free, as part of your Apple Music subscription, I may have come down quite hard on Apple's musical headgear — and for some time after that. Why? Because it took four more years for the Cupertino giant to work out how to get its Lossless music standard into its own flagship headphones.

Another thing that's taken Apple a very long time? Unveiling a second-generation update to said headphones. It's been five years and three months between iterations, a vast expanse of time in any area of technology, but an epoch in Bluetooth audio and among the best noise-cancelling headphones.

A happy by-product of the fact above is that it makes my delay in filing this review seem minuscule in comparison (I had a spell in hospital, but it did mean I could test the ANC in a key user-case scenario!). However, I mention the timeline mostly as a way to emphasise that based on looks alone, you'd be forgiven for thinking Apple hadn't used that huge stretch wisely. The ear cup design, webbed headband, driver array and yes, even the 'headphone bra' semi-case haven't been tweaked whatsoever for AirPods Max 2.

Did Apple simply not have the R&D budget, or did its engineers double down on their 2020 design as still being the best possible shape, construction, driver size and material for a set of cans? And why, given the glowing star-rating at the top of this review, am I still being so negative?

The answer to all of these questions is this: if you're using an iPhone 15 Pro (aka, the oldest iPhone that is still able to support Apple Intelligence) or later as a source device, AirPods Max 2 are some of the most formidable, featured and fantastic shut-the-world-out headphones I've ever tested — and I've been doing this full-time since 2019. They're doubtless the best noise-cancelling iPhone headphones on the planet.

Design-wise, there's no perceivable difference — it's all under the hoodFutureFutureFutureFutureFuture

That's enough on what Apple hasn't done with AirPods Max 2; let's talk about what has been updated. The big upgrade is the inclusion of Apple's newer H2 chip, over the H1 in the originals. Given that this is the same in-house Apple audio processor that made its debut in the September 2022 AirPods Pro 2 (and also takes the wheel in the AirPods 4, AirPods Pro 3, and original 2023-launch Apple Vision Pro), it might not seem like much of a headline grabber. But in AirPods Max it does a lot of heavy lifting.

The H2 chips — yes, you actually get one in each ear cup — add a plethora of new features, including Adaptive Audio (the Transparency mode can adjust itself to block some unnecessary sounds, and there's an optional slider to tweak just how 'adaptive' you want it to get), Conversation Awareness (so the over-ears can automatically lower the volume of your music and filter external sounds should you start talking to someone, then put everything back again once you stop yapping), plus Loud Sound Reduction and Personalized Volume to help protect your hearing but keep the sonic profile how you like it.

There's also Live Translation, which I enjoyed using here much more than on AirPods Pro 3, because it's so much easier to access via a long press of AirPods Max's on-ear Listening Mode button. The new Voice Isolation software also improves your call quality when it's loud or windy around you — and thanks to some extra processing power afforded by that H2 chip, you get much better voice capture from the headphones' three mics for voice pickup (two are shared with the ANC system, and one is an additional dedicated microphone) in the nine-mic total.

Elsewhere, Head Gestures let you nod to accept a call or check a message, shake your head to dismiss a message or decline a call, or nod to Siri silently. Also, the new Camera Remote feature means you can now take snaps on your iPhone camera using AirPods Max 2's Digital Crown.

And I left the best for last: Apple claims that the active noise cancellation is "up to 1.5x more effective than the previous generation" and when Tim Cook's behemoth states such a thing, I sit up and take notice. The noise-nixing here is next-level — and I mean near-silent, calming, cocooning and enveloping. It's like stillness as a backdrop to your music. If that's what you need, buy these headphones.

Any negatives? Two. The battery life is unchanged at 20 hours (which is easy to beat even much further down the headphone food chain), and there's still no support for wireless hi-res codecs. You can get Lossless-quality audio, but you have to use the bundled USB-C cable (or buy a USB-C to 3.5mm one, which Apple sells separately) introduced to the original AirPods Max via a software update in March 2025.

Does any of that last paragraph matter? For me, given the crispness, clarity, impact, fun, separation and sheer musicality available here, no. And I rarely say that hi-res codecs or stamina don't matter.

(Image credit: Future)Apple AirPods Max 2 review: Price and release date
  • Unveiled on March 16, 2026 (available for pre-order as of March 25, 2026)
  • Priced $549 / £499 / AU$999
  • Available in 'Midnight' (black), 'Starlight' (white), Purple, Blue and Orange

There's been a curious trend in Apple's pricing of late. The inaugural AirPods Max arrived in December 2020 with an asking price of $549 / £549 / AU$899, so, with the second-generation update priced at $549 / £499 / AU$999, Apple is keeping the US MSRP the same, giving the UK a price cut and charging The Land Down Under a little more.

The thing is, this is not a one-off. Both the first-generation AirPods Pro and the follow-up AirPods Pro 2 were priced at $249 / £249 / AU$399 when they landed, so when AirPods Pro 3 arrived with a $249 price tag, it came as no surprise to US fans. However, those newest buds were priced a little lower than before in the UK, at £219, and — at AU$429 — a little bit more in Australia. For Apple's flagship earbuds, £30 cheaper in the UK yet AU$30 more expensive in Australia felt a bit harsh.

Here, there's a £50 saving to be had if you live in Blighty, but a AU$100 increase to pay if you reside in Oz. I'm sorry. I could suggest it's down to Australian Goods and Services Taxes (GST), relative incomes, International shipping costs, or perhaps a more bijou consumer base, but all of that would be pure speculation. I just cannot make that make sense to you.

Anyway, what of direct competition at this not-insignificant level? AirPods Max 2's chief rivals are perhaps most pressingly the five-star Bose QuietComfort Ultra Headphones (2nd Gen), which hit shelves at slightly more affordable $449 / £449 / AU$699 price points, or the also five-star Bowers & Wilkins Px8 S2, which cost a fair bit more, at $799 / £629 / AU$1,299. Oh, and let's not forget the excellent Sony WH-1000XM6, which sell for $449 / £399 / AU$699.

But there's no shortage of competition at this level and – given options such as the inexpensive 4.5-star Nothing Headphone (a) with its remote camera function – at a few levels down from it too…

(Image credit: Future)Apple AirPods Max 2 review: Specs

Drivers

Apple-designed dynamic driver with new 'custom high dynamic range amplifier'

Active noise cancellation

Yes

Battery life

Up to 20 hours (with ANC enabled)

5 mins of charging nets 1.5 hours of listening

Weight

386.2g

Connectivity

Bluetooth 5.3 (H2 chip)

Waterproofing

Not rated

(Image credit: Future)Apple AirPods Max 2 review: Features
  • Live Translation is enjoyable and useful
  • Adaptive Audio is good; ANC is excellent
  • Conversation Awareness is a game-changer

I've touched on a lot of great new features, so it might be worth mentioning an Apple headline grabber you won't get: heart-rate monitoring. It is available in both the flagship AirPods Pro 3 and Beats Powerbeats Pro 2, yet despite the arsenal of sensors nestled in AirPods Max 2 (an optical sensor, position sensor, accelerometer and case-detect sensor in each ear cup, plus a gyroscope in the left cup), there's no PPG infrared light sensor to measure light absorption in your blood. And because of this, Apple isn't funnelling you quite so readily towards its free Fitness app with its over-ears, or offering you a virtual trainer, however you feel about that…

You also don't get Apple's Hearing Test or Hearing Aid suite of features; the only toggles to preserve your hearing health here are Loud Sound Reduction (switch it on and provided you're listening in either Transparency or Adaptive modes, the headphones will actively reduce your exposure to loud environmental sounds) and Personalized Volume, to readily adjust the loudness of your media in response to your surroundings, but they both work well.

Now, back to what you do get, and top of the list for me personally must be Live Translation. Why? Because it can be accessed with a surreptitious long press of the listening mode button (ie. the flush pill-shaped button located on the right ear cup that isn't the digital crown). I found this a much more reliable way to start Live Translation than squeezing both stems of my AirPods Pro 3. Quick accessibility is key with these kinds of life-hack features, and on a recent trip to Girona (the Catalonian city near Barcelona where Season 6 of Game of Thrones was filmed), I found it genuinely useful, rather than a novelty to play with. Now, Girona is a Catalan-speaking city, and Catalan isn't yet one of Apple's supported Live Translation languages, but I heard a lot of Spanish too — and I also have a long-suffering life partner who speaks both languages. You can see snippets of our conversation below.

Apple Apple

I've said before that this is an Apple offering you need to spend a bit of time setting up — ideally before your romantic city break — because there's a fair bit of red tape you'll need to cut through. You'll also need an iPhone 15 Pro or later running iOS 26 or later, Apple Intelligence turned on, the Translate app downloaded (and the language modules you want downloaded), plus the latest AirPods Firmware version.

I also customized the iPhone Action button on my iPhone 15 Pro Max to start Live Translation, because in the moment it can be easier to tap your phone rather than your headphones, and it's all about speed of deployment with Live Translation. Once that's done, audible English responses are piped in as your helper answers your questions, with a transcription of the information they're giving you (and your questions translated) also appearing on your iPhone's screen. OK, perhaps your helpful human will find the fact that you're not taking off your headphones to talk to them a little rude, but it works beautifully and with very little lag.

Now to the other new features and claimed upticks in performance, all of which can be found, controlled, toggled and customized with a tap of the AirPods Max bubble near the top of the settings tab, or by swiping down from the top-right of your screen, to get the Control Center. Your listening modes include Off, Transparency (which works and without making music tinny, but there's no slider), Adaptive (which does have a slider, to allow more or less noise into your cans, albeit dynamically and in response to noises the headphones pick up around you) or Noise Cancellation (no slider, but it's excellent).

For me, the right way to go about this in most situations is to deploy both Noise Cancellation and the Conversation Awareness toggle, a little further down in that menu. This means that, by default, you're not being bothered, but when you speak up, music is automatically lowered and external noises are piped in as you need them. It's not that Adaptive Audio is bad, because it's not; I simply found that when using the Adaptive Audio profile I'd keep setting the slider right down to allow for fewer distractions, but if you don't have the luxury of blocking out the world in your working day, Adaptive will serve you well.

If you take just one thing away from this review, let it be that the noise-cancelling power in AirPods Max 2 really is 1.5 times better than before. It's fabulous; almost wickedly good at inhaling the noise from your ears, but without the vacuum effect I often find nauseating in rival cans (the few that offer ANC anywhere near this good, anyway).

Call handling is excellent; callers said my voice was remarkably clear, even on a windy UK seafront in Dorset. Gesture Control is also good provided you're relatively animated with your nods or head shakes, and the Camera Remote feature is a neat way to make photo capture easier on your iPhone. As with Conversation Awareness, it just makes for a simpler life when it comes to wearing headphones.

  • Features score: 4.5 / 5

(Image credit: Future)Apple AirPods Max 2 review: Sound quality
  • Expansive, layered music aided by supreme ANC and Spatial Audio
  • Vocals emotive and textured
  • Could be a bit punchier, but a big improvement on the originals

I've spent enough time on how good the noise cancellation is, right? OK, so let's move on to the joys of head-tracked Spatial Audio. It's not a new feature with this iteration, but it is so beautifully implemented here you'll find yourself whipping them off to check there's no mini speaker under your chin or squirrelled away at the back of the room. Better than the original AirPods Max? Yes. It's likely due to the new amplifier under the hood plus the processing power of the H2 chipset, but it's cleaner all round — and I did listen in direct comparison.

My favorite home cinema setup is now an iPad and the AirPods Max 2 with head-tracked Spatial Audio engaged. If you're not so sure, try watching the opening scene of Alfonso Cuarón’s 2013 movie Gravity (it's a known test these days, but still). See?

When listening to music, you can expect an expansive, meticulously unfurled soundstage with a noise floor so low that bass frequencies rumble, snap and boom in so much space it's almost a crime. Fontaines D.C.'s I Love You is brooding through the intro and able to celebrate the juicy depth of Grian Chatten's vocals as well as I've heard in any wireless headphones. My Chatten playlist continues with The Score. Its textured acoustic guitar intro brushes each of my ears in turn before expanding yet further to let the vocal drop centrally. Add the USB-C cable to listen in Lossless on Apple Music and it's even better.

Timing, too, is exceptional. I dare you to stream Bad Bunny's Tití Me Preguntó and sit still. It's raucous, defiant, joyous and, in these headphones, it's why I love music.

For crisp leading edges of notes and an extra ounce of detail (again, we come to that 'integrated hi-fi versus fun' debate), you'll get just a little more insight and honesty from the Bowers & Wilkins Px8 S2, but those headphones are pricier and for me, AirPods Pro 2's Spatial Audio knocks B&W's True Immersion solution clean out the water, with the latter coming off veiled and almost muffled in direct comparison.

Ask yourself this: do you want your music to feel emotional, zealous and fun — a more V-shaped presentation where upper mids (ie. vocals) and feels through the bass dart betwixt each ear? Or do you want a faithful, neutral stereo performance that leaves nothing out of the mix? Your answer is important because if you pick the first option, you own an iPhone and you can afford these headphones, I know you won't be disappointed.

  • Sound quality: 5 / 5

(Image credit: Future)Apple AirPods Max 2 review: Design
  • A new 'custom high dynamic range amplifier' is the only physical update
  • …but for me, they're still the most comfortable headphones around
  • Could do with an audio handoff option — and better stamina

As I've already mentioned and pictured, AirPods Max 2's appearance and indeed innards (save for a new chip and amplification module) remain largely unchanged. If you hoped Apple would completely overhaul the design, you'll doubtless feel wronged. But I maintain that the headband here is the most comfortable I've ever worn, and the metallic yokes are the most reliable and silent. I wear headphones almost constantly, but I also suffer from migraines, so a headband digging into the crown of my head doesn't help the pain in my noggin one bit. No such issue here, ever, and for me that's priceless. What I'm saying is, I think Apple found the fix here and I wouldn't want them to try again and alter it.

The ear cups are quite wide and extremely long, but they aren't especially deep, unlike the audiophile-grade options I've tried that felt like long lenses strapped across my head. An IP rating would be a plus, as would an actual case rather than the headphone bra Apple has stuck with (see the new Sony 1000X The Collexion for a novel idea that still actually protects your expensive headphones, Apple), but the build quality is resoundingly premium. All the more reason to want to protect it…

My main gripe here concerns the battery life. At 20 hours (albeit with ANC deployed), Apple is being left behind. We recently knocked the Sony 1000X for a lack of stamina, even with 24 hours in ANC mode, but you'll get 30 hours from the B&W Px8 S2 with noise cancellation on. And these options aren't class leaders — Cambridge's Melomania P100 (a fantastic set of cans) will go for 60 hours with ANC on.

And I have one other bugbear. In AirPods Pro 3, I suggested a dedicated iOS app might be necessary now, because of the additional Hearing Health suite (hearing tests, hearing aid functionality and virtual trainer perks), heart-rate monitor, and the fact that on-ear controls on an earbud are more fiddly than they are on an ear cup. Here, I think the in-iPhone solution suffices, but I'd like an audio handoff feature that works with Apple Music.

To be clear, I don't mean a cross-device feature to resume playback on another Apple device when I walk through the door, as pioneered by Bowers & Wilkins between its wireless headphones and wireless speakers (not too many of us still use HomePods or HomePod minis, I imagine), or true multipoint connectivity — if you're using the same Apple ID, your AirPods Max 2 will happily dart between your iPhone, Mac or iPad using its own Automatic Device Switching solution. No, I simply want to be able to seamlessly switch from streaming Apple Music on my iPhone to streaming Apple Music on my MacBook. I want to pause a song on my phone, sit at my MacBook Pro, open the Music app, and continue listening to the same track, or playlist. It's odd that this still isn't happening — but this is a review about AirPods Max 2, not the Apple Music user experience.

  • Design score: 4.5 / 5

(Image credit: Future)Apple AirPods Max 2 review: value
  • The best ANC over-ears for iPhone owners
  • Some might think Apple should've tried harder though…

Here's the issue: people buy with their eyes first, then their wallets. And in one sense, there's nothing new to see here — buy the newest AirPods Max and few people will be able to tell if you just bought the older, heavily discounted set or the brand new H2-toting pair. My Orange review sample is one of the new Max 2-only colorways, but with so many bright finishes available (and oddly, none of them correspond with Apple's latest MacBook Neo colorways), it's hard to keep tabs on what's new and what's not.

It's unfortunate, because having tested them for over two months now, I can tell you that AirPods Max 2 are much better sonically than the originals. The ANC is as good as Apple claims it is, and they boast a greatly improved user experience to boot. But you'd never be able to tell that by looking at them, and when the model they look just like came out in late 2020, that could present a problem in terms of perceived value.

  • Value: 4 / 5

(Image credit: Future)Should I buy the Apple AirPods Max 2? @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'); @import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,400;0,900;1,900&display=swap'); /* Reset & Base */ #fv-chart-1780067391081-6swb3ztn4 *, #fv-chart-1780067391081-6swb3ztn4 *:before, #fv-chart-1780067391081-6swb3ztn4 *:after, #fv-chart-1780067391081-6swb3ztn4-slideshow *, #fv-chart-1780067391081-6swb3ztn4-slideshow *:before, #fv-chart-1780067391081-6swb3ztn4-slideshow *:after { box-sizing: border-box !important; margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } #fv-chart-1780067391081-6swb3ztn4, #fv-chart-1780067391081-6swb3ztn4-slideshow { font-family: 'Open Sans', sans-serif !important; } /* Main Wrappers */ #fv-chart-1780067391081-6swb3ztn4 { position: relative !important; overflow: visible !important; --riv-primary: #2E6E93; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-inner-wrapper.fv-no-header.fv-is-image-compare { padding-top: 0 !important; } #fv-chart-1780067391081-6swb3ztn4.fv-full-bleed { width: 100vw !important; margin-left: calc(50% - 50vw) !important; } body { overflow-x: clip !important; } #fv-chart-1780067391081-6swb3ztn4.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-1780067391081-6swb3ztn4 .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; } /* Slideshow Styles */ #fv-chart-1780067391081-6swb3ztn4-slideshow { position: relative !important; width: 100% !important; margin: 1rem 0 !important; --riv-primary: #2E6E93; } #fv-chart-1780067391081-6swb3ztn4-slideshow .fv-slides-wrapper { position: relative !important; width: 100% !important; } #fv-chart-1780067391081-6swb3ztn4-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; } } /* Top Navigation Row (Redesign) */ #fv-chart-1780067391081-6swb3ztn4-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-1780067391081-6swb3ztn4-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-1780067391081-6swb3ztn4-slideshow .fv-nav-btn svg { width: 18px !important; height: 18px !important; stroke-width: 3px !important; filter: none !important; } #fv-chart-1780067391081-6swb3ztn4-slideshow .fv-nav-btn:hover { opacity: 0.9 !important; transform: translateY(-1px) !important; } #fv-chart-1780067391081-6swb3ztn4-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-1780067391081-6swb3ztn4-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; } /* Slideshow Dropdown Navigation */ #fv-chart-1780067391081-6swb3ztn4-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-1780067391081-6swb3ztn4-slideshow .fv-slideshow-select:focus { outline: 2px solid #2E6E93 !important; border-color: #2E6E93 !important; } /* Typography */ #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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; } /* Versus Chart */ #fv-chart-1780067391081-6swb3ztn4 .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-select-wrapper { flex: 1; min-width: 0; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-inside-left { white-space: nowrap; flex-shrink: 0; } #fv-chart-1780067391081-6swb3ztn4 .fv-inside-right { white-space: nowrap; flex-shrink: 0; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; } #fv-chart-1780067391081-6swb3ztn4 .fv-versus-pct-diff { font-size: 12px; font-weight: 600; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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; } /* Image Comparison Styles */ #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; } #fv-chart-1780067391081-6swb3ztn4.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-wrapper { position: relative !important; width: 100% !important; overflow: hidden !important; border-radius: 0 !important; background-color: #000 !important; touch-action: pan-y !important; user-select: none !important; -webkit-user-select: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-inner { position: relative !important; width: 100% !important; height: 100% !important; display: block !important; transform-origin: center center !important; transition: transform 0.1s ease-out !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-bg { display: block !important; width: 100% !important; height: auto !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-fg { position: absolute !important; top: 0 !important; left: 0 !important; width: 100% !important; height: 100% !important; object-fit: cover !important; clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%) !important; pointer-events: none !important; user-select: none !important; -webkit-user-select: none !important; -webkit-user-drag: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-slider { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 32px !important; transform: translateX(-50%) !important; cursor: ew-resize !important; z-index: 10 !important; user-select: none !important; -webkit-user-select: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-slider-line { position: absolute !important; top: 0 !important; bottom: 0 !important; left: 50% !important; width: 4px !important; background-color: white !important; transform: translateX(-50%) !important; box-shadow: 0 0 10px rgba(0,0,0,0.5) !important; pointer-events: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-handle { position: absolute !important; top: 50% !important; left: 50% !important; transform: translate(-50%, -50%) !important; width: 32px !important; height: 32px !important; background-color: white !important; border-radius: 50% !important; box-shadow: 0 2px 6px rgba(0,0,0,0.3) !important; display: flex !important; align-items: center !important; justify-content: center !important; gap: 4px !important; pointer-events: none !important; z-index: 11 !important; overflow: hidden !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-arrow-left { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-right: 4px solid #4b5563 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-arrow-right { width: 0 !important; height: 0 !important; border-top: 4px solid transparent !important; border-bottom: 4px solid transparent !important; border-left: 4px solid #4b5563 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-label { position: absolute !important; top: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; padding: 0.25rem 0.75rem !important; border-radius: 0.25rem !important; font-size: 0.875rem !important; font-weight: 500 !important; pointer-events: none !important; backdrop-filter: blur(4px) !important; z-index: 5 !important; transition: right 0.3s ease, opacity 0.2s ease !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-label-left { left: 1rem !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-label-right { right: 1rem !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-expand-btn, #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-close-btn { position: absolute !important; bottom: 1rem !important; right: 1rem !important; background-color: rgba(0, 0, 0, 0.5) !important; color: white !important; border: none !important; border-radius: 0.25rem !important; padding: 0.5rem !important; cursor: pointer !important; z-index: 20 !important; display: flex !important; align-items: center !important; justify-content: center !important; backdrop-filter: blur(4px) !important; transition: background-color 0.2s !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-expand-btn:hover, #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; } /* Fullscreen State */ #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-wrapper.fv-image-compare-fullscreen { position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; bottom: 0 !important; width: 100% !important; height: 100% !important; z-index: 999999 !important; display: flex !important; align-items: center !important; justify-content: center !important; background-color: rgba(0, 0, 0, 0.9) !important; margin: 0 !important; touch-action: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner { width: 100% !important; height: 100% !important; display: flex !important; align-items: center !important; justify-content: center !important; cursor: grab !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-bg { position: absolute !important; top: 0 !important; left: 0 !important; max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-fg { max-width: 100% !important; max-height: 100% !important; width: 100% !important; height: 100% !important; object-fit: contain !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; } /* Footer */ #fv-chart-1780067391081-6swb3ztn4 .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-footer-content { text-align: center !important; width: 100% !important; } #fv-chart-1780067391081-6swb3ztn4 .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; } /* Display Mode Controls */ #fv-chart-1780067391081-6swb3ztn4 .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-dropdown-title:focus { outline: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-dropdown-title::-ms-expand { display: none !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; } /* Legend */ #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; } /* Multi-Value Legend */ #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; } /* Chart Core Styles */ #fv-chart-1780067391081-6swb3ztn4 .fv-benchmark-group { margin-bottom: 1rem !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-bar-row, #fv-chart-1780067391081-6swb3ztn4 .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-bar:hover { opacity: 0.8 !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-bar-inner-value { flex-shrink: 0 !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; } /* Multi-Value Bar Logic */ #fv-chart-1780067391081-6swb3ztn4 .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; } /* Stacked Bar */ #fv-chart-1780067391081-6swb3ztn4 .fv-stacked-bar { display: flex !important; overflow: hidden !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-stacked-segment:last-child { border-right: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-segment-value { font-size: 14px !important; font-weight: bold !important; } /* Grouped Bar */ #fv-chart-1780067391081-6swb3ztn4 .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-grouped-product-title-wrapper { padding-left: 150px !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-bar-cluster .fv-bar-container { height: 20px !important; } /* Line Chart Grid */ #fv-chart-1780067391081-6swb3ztn4 .riv-grid line { stroke: #D1D5DB !important; stroke-dasharray: 3 3 !important; } /* X-Axis */ #fv-chart-1780067391081-6swb3ztn4 .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-x-axis-ticks span { position: relative !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; } #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .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; /* Aligns with Y-axis line inside SVG (35/600) */ margin-bottom: 4px !important; display: block !important; font-weight: bold !important; } /* Shop The Look */ #fv-chart-1780067391081-6swb3ztn4 .fv-stl-container { position: relative !important; width: auto !important; display: block !important; background-color: transparent !important; transition: min-height 0.3s ease !important; overflow: hidden !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-wrapper { position: relative !important; width: auto !important; display: block !important; margin: 0 auto !important; } #fv-chart-1780067391081-6swb3ztn4.fv-full-bleed .fv-stl-container { width: 100% !important; } #fv-chart-1780067391081-6swb3ztn4.fv-full-bleed .fv-stl-wrapper { width: 100% !important; max-width: none !important; margin: 0 auto !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-image { display: block !important; width: 100% !important; height: auto !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-hotspot-container { position: absolute !important; z-index: 10 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-hotspot-btn { position: absolute !important; margin-left: -0.75rem !important; margin-top: -0.75rem !important; width: 1.5rem !important; height: 1.5rem !important; border-radius: 9999px !important; display: flex !important; align-items: center !important; justify-content: center !important; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06) !important; transition-property: all !important; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important; transition-duration: 300ms !important; cursor: pointer !important; border: none !important; padding: 0 !important; background-color: #ffffff !important; color: #1e293b !important; font-size: 0.75rem !important; font-weight: 700 !important; font-family: sans-serif !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-hotspot-btn:hover { transform: scale(1.1) !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-hotspot-btn:focus { outline: 2px solid transparent !important; outline-offset: 2px !important; box-shadow: 0 0 0 2px #ffffff, 0 0 0 4px #000000 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-hotspot-btn[aria-expanded="true"] { background-color: #3b82f6 !important; color: #ffffff !important; transform: scale(1.1) !important; box-shadow: 0 0 0 2px #ffffff !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-hotspot-pulse { position: absolute !important; inset: 0 !important; border-radius: 9999px !important; background-color: #2E6E93 !important; opacity: 0.4 !important; pointer-events: none !important; z-index: -1 !important; animation: fv-stl-ping 1.5s cubic-bezier(0, 0, 0.2, 1) 3 forwards !important; } @keyframes fv-stl-ping { 75%, 100% { transform: scale(2); opacity: 0; } } @media (max-width: 640px) { #fv-chart-1780067391081-6swb3ztn4 .fv-stl-hotspot-pulse { animation-fill-mode: none !important; } } /* Shop the look button */ #fv-chart-1780067391081-6swb3ztn4 .fv-stl-shop-all-btn { position: absolute !important; bottom: 1rem !important; right: 1rem !important; height: 2.5rem !important; background-color: rgba(255, 255, 255, 0.95) !important; backdrop-filter: blur(12px) !important; color: #111827 !important; padding: 0 1rem 0 3rem !important; border-radius: 0.25rem !important; font-weight: 700 !important; font-size: 0.875rem !important; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2) !important; border: none !important; cursor: pointer !important; transition: all 0.2s !important; z-index: 10 !important; display: flex !important; align-items: center !important; text-transform: uppercase !important; overflow: hidden !important; white-space: nowrap !important; max-width: calc(100% - 2rem) !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-shop-all-btn span { overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-shop-all-btn:hover { background-color: #ffffff !important; transform: scale(1.05) !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-shop-all-logo { position: absolute !important; left: 0 !important; top: 0 !important; width: 2.5rem !important; height: 2.5rem !important; object-fit: cover !important; background-color: #ffffff !important; border-right: 1px solid #f3f4f6 !important; flex-shrink: 0 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-stl-shop-all-icon { position: absolute !important; left: 0 !important; top: 0 !important; width: 2.5rem !important; height: 2.5rem !important; display: flex !important; align-items: center !important; justify-content: center !important; background-color: #ffffff !important; border-right: 1px solid #f3f4f6 !important; color: #1f2937 !important; flex-shrink: 0 !important; } /* All Products Modal */ #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 { position: fixed !important; inset: 0 !important; background-color: rgba(0, 0, 0, 0) !important; backdrop-filter: blur(0px) !important; -webkit-backdrop-filter: blur(0px) !important; display: flex !important; align-items: center !important; justify-content: center !important; z-index: 99999 !important; pointer-events: none !important; transition: background-color 0.3s ease, backdrop-filter 0.3s ease, -webkit-backdrop-filter 0.3s ease !important; padding: 1rem !important; overflow: hidden !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 { position: absolute !important; padding: 0 !important; align-items: flex-end !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4.is-active { background-color: rgba(0, 0, 0, 0.2) !important; backdrop-filter: blur(4px) !important; -webkit-backdrop-filter: blur(4px) !important; pointer-events: auto !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-content { width: 100% !important; max-width: 42rem !important; max-height: 100% !important; display: flex !important; flex-direction: column !important; position: relative !important; background-color: rgba(255, 255, 255, 0.95) !important; backdrop-filter: blur(12px) !important; -webkit-backdrop-filter: blur(12px) !important; border-radius: 1rem !important; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25) !important; overflow: hidden !important; transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s ease !important; opacity: 0 !important; transform: scale(0.95) !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-content { max-width: 100% !important; height: 85% !important; max-height: 85% !important; border-radius: 1.5rem 1.5rem 0 0 !important; transform: translateY(100%) !important; opacity: 1 !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4.is-active .fv-stl-all-products-content { opacity: 1 !important; transform: scale(1) !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4.is-active .fv-stl-all-products-content { transform: translateY(0) !important; } /* V2 Bottom Sheet Style */ #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4.v2 { align-items: flex-end !important; padding: 0 !important; } @media (min-width: 640px) { #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4.v2:not(.mobile-view *) { justify-content: flex-end !important; } } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4.v2 .fv-stl-all-products-content { max-width: 100% !important; height: 85% !important; max-height: 85% !important; border-radius: 1.5rem 1.5rem 0 0 !important; transform: translateY(100%) !important; opacity: 1 !important; } @media (min-width: 640px) { #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4.v2:not(.mobile-view *) .fv-stl-all-products-content { max-width: 700px !important; border-radius: 1.5rem 0 0 0 !important; } } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4.v2.is-active .fv-stl-all-products-content { transform: translateY(0) !important; opacity: 1 !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-header { display: flex !important; align-items: center !important; justify-content: space-between !important; padding: 1.5rem !important; border-bottom: 1px solid #e5e7eb !important; flex-shrink: 0 !important; position: sticky !important; top: 0 !important; background-color: rgba(255, 255, 255, 0.8) !important; backdrop-filter: blur(12px) !important; -webkit-backdrop-filter: blur(12px) !important; z-index: 10 !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-header { padding: 0.75rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-logo { height: 1.5rem !important; width: auto !important; object-fit: contain !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-logo { height: 1.25rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-title { font-size: 1.25rem !important; font-weight: 700 !important; color: #111827 !important; margin: 0 !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-title { font-size: 1.125rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-close { width: 2rem !important; height: 2rem !important; border-radius: 9999px !important; background-color: rgba(0, 0, 0, 0.05) !important; display: flex !important; align-items: center !important; justify-content: center !important; border: none !important; cursor: pointer !important; z-index: 10 !important; color: #6b7280 !important; transition: all 0.2s !important; padding: 0 !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-close:hover { background-color: rgba(0, 0, 0, 0.1) !important; color: #111827 !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-list { list-style: none !important; padding: 1.5rem !important; margin: 0 !important; overflow-y: auto !important; flex: 1 !important; display: flex !important; flex-direction: column !important; gap: 0.75rem !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-list { padding: 0.75rem !important; gap: 0.5rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-item { margin: 0 !important; padding: 0.25rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-link { display: flex !important; align-items: flex-start !important; padding: 0.75rem !important; text-decoration: none !important; color: inherit !important; transition: all 0.2s !important; border-radius: 1rem !important; border: 1px solid transparent !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-link { padding: 0.5rem !important; border-radius: 0.75rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-link:hover { background-color: #ffffff !important; border-color: #e5e7eb !important; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03) !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-item.is-highlighted .fv-stl-all-products-link { background-color: #ffffff !important; border-color: #d1d5db !important; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06), 0 0 0 2px #111827 !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-image-container { position: relative !important; margin-right: 1.25rem !important; flex-shrink: 0 !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-image-container { margin-right: 0.75rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-number { position: absolute !important; top: -0.5rem !important; left: -0.5rem !important; width: 1.5rem !important; height: 1.5rem !important; border-radius: 9999px !important; background-color: #0f172a !important; color: #ffffff !important; display: flex !important; align-items: center !important; justify-content: center !important; font-size: 0.75rem !important; font-weight: 700 !important; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06), 0 0 0 2px #ffffff !important; z-index: 10 !important; font-family: sans-serif !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-number { top: -0.375rem !important; left: -0.375rem !important; width: 1.25rem !important; height: 1.25rem !important; font-size: 0.625rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-image-wrapper { width: 6rem !important; height: 6rem !important; border-radius: 0.75rem !important; overflow: hidden !important; background-color: #f9fafb !important; border: 1px solid #f3f4f6 !important; display: flex !important; align-items: center !important; justify-content: center !important; box-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.02) !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-image-wrapper { width: 4rem !important; height: 4rem !important; border-radius: 0.5rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-image { width: 100% !important; height: 100% !important; object-fit: cover !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-placeholder { width: 2rem !important; height: 2rem !important; color: #d1d5db !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-placeholder { width: 1.5rem !important; height: 1.5rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-info { flex: 1 !important; min-width: 0 !important; display: flex !important; flex-direction: column !important; justify-content: center !important; margin-top: 0.25rem !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-info { margin-top: 0 !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-brand { font-size: 0.625rem !important; font-weight: 700 !important; color: #6b7280 !important; text-transform: uppercase !important; letter-spacing: 0.1em !important; margin: 0 0 0.375rem 0 !important; white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-brand { font-size: 0.5625rem !important; margin: 0 0 0.25rem 0 !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-name { font-size: 1rem !important; font-weight: 700 !important; color: #111827 !important; margin: 0 0 0.375rem 0 !important; display: -webkit-box !important; -webkit-line-clamp: 2 !important; -webkit-box-orient: vertical !important; overflow: hidden !important; line-height: 1.25 !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-name { font-size: 0.875rem !important; margin: 0 0 0.25rem 0 !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-meta { display: flex !important; align-items: center !important; font-size: 0.875rem !important; margin-bottom: 0.375rem !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-meta { font-size: 0.75rem !important; margin-bottom: 0.25rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-price { font-weight: 700 !important; color: #111827 !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-sale-price { font-weight: 700 !important; color: #dc2626 !important; margin-right: 0.5rem !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-sale-price { margin-right: 0.375rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-original-price { color: #9ca3af !important; text-decoration: line-through !important; font-size: 0.75rem !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-original-price { font-size: 0.625rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-commentary { font-size: 0.875rem !important; color: #4b5563 !important; margin: 0 !important; display: -webkit-box !important; -webkit-line-clamp: 2 !important; -webkit-box-orient: vertical !important; overflow: hidden !important; line-height: 1.375 !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-commentary { font-size: 0.75rem !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-action { width: 2.5rem !important; height: 2.5rem !important; border-radius: 9999px !important; background-color: #f9fafb !important; display: flex !important; align-items: center !important; justify-content: center !important; color: #9ca3af !important; margin-left: 1rem !important; flex-shrink: 0 !important; border: 1px solid #f3f4f6 !important; transition: all 0.2s !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-action { width: 2rem !important; height: 2rem !important; margin-left: 0.75rem !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-action svg { width: 14px !important; height: 14px !important; } #fv-stl-all-products-modal-fv-chart-1780067391081-6swb3ztn4 .fv-stl-all-products-link:hover .fv-stl-all-products-action { background-color: #111827 !important; color: #ffffff !important; border-color: #111827 !important; } /* Image Annotation Styles */ #fv-chart-1780067391081-6swb3ztn4 .fv-ia-container { position: relative !important; width: auto !important; display: block !important; background-color: transparent !important; overflow: hidden !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-wrapper { position: relative !important; width: auto !important; display: block !important; margin: 0 auto !important; } #fv-chart-1780067391081-6swb3ztn4.fv-full-bleed .fv-ia-container { width: 100% !important; } #fv-chart-1780067391081-6swb3ztn4.fv-full-bleed .fv-ia-wrapper { width: 100% !important; max-width: none !important; margin: 0 auto !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-image { display: block !important; width: 100% !important; height: auto !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-node-container { position: absolute !important; z-index: 10 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-node-button { position: absolute !important; margin-left: -0.75rem !important; margin-top: -0.75rem !important; width: 1.5rem !important; height: 1.5rem !important; border-radius: 9999px !important; display: flex !important; align-items: center !important; justify-content: center !important; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1) !important; transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1) !important; cursor: pointer !important; border: none !important; padding: 0 !important; background-color: #ffffff !important; color: #1e293b !important; font-size: 0.75rem !important; font-weight: 700 !important; font-family: sans-serif !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-node-button:hover { transform: scale(1.1) !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-node-button.is-active { background-color: #2E6E93 !important; color: #ffffff !important; transform: scale(1.1) !important; box-shadow: 0 0 0 2px #ffffff !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-pulse-ring { position: absolute !important; inset: 0 !important; border-radius: 9999px !important; background-color: #2E6E93 !important; opacity: 0.4 !important; pointer-events: none !important; z-index: -1 !important; animation: fv-ia-ping 1.5s cubic-bezier(0, 0, 0.2, 1) 3 forwards !important; } @keyframes fv-ia-ping { 75%, 100% { transform: scale(2); opacity: 0; } } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-static-tooltip { display: none !important; position: absolute !important; top: -10px !important; left: 50% !important; transform: translate(-50%, -100%) !important; background-color: rgba(255, 255, 255, 0.95) !important; padding: 10px !important; border-radius: 6px !important; box-shadow: 0 4px 12px rgba(0,0,0,0.15) !important; width: max-content !important; max-width: 200px !important; font-size: 13px !important; color: #1f2937 !important; z-index: 20 !important; pointer-events: none !important; white-space: pre-wrap !important; line-height: 1.4 !important; border: 1px solid #e5e7eb !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-node-button:hover + .fv-ia-static-tooltip { display: block !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-logo-explore-bar { position: relative !important; width: 100% !important; display: flex !important; justify-content: center !important; align-items: center !important; min-height: 30px !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-logo-explore-bar .fv-logo { margin: 0 auto !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-explore-wrapper { position: absolute !important; right: 0 !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-logo-explore-bar { flex-direction: column !important; min-height: auto !important; gap: 0.75rem !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-ia-explore-wrapper { position: static !important; align-self: flex-end !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-explore-btn { background-color: rgba(255, 255, 255, 0.95) !important; color: #1e293b !important; border: 1px solid #e5e7eb !important; border-radius: 9999px !important; padding: 0.5rem 1.25rem !important; font-size: 0.875rem !important; font-weight: 600 !important; font-family: sans-serif !important; display: inline-flex !important; align-items: center !important; gap: 0.5rem !important; cursor: pointer !important; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1) !important; transition: all 0.2s !important; pointer-events: auto !important; flex-shrink: 0 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-explore-btn:hover { background-color: #ffffff !important; transform: translateY(-2px) !important; box-shadow: 0 6px 8px -1px rgba(0, 0, 0, 0.15) !important; color: #2E6E93 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-explore-btn svg { transition: transform 0.2s !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-explore-btn:hover svg { transform: translateX(2px) !important; } /* IA Modal Styles */ #fv-chart-1780067391081-6swb3ztn4 .fv-ia-active-modal-container { display: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-modals { display: block !important; position: static !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-modal-item { display: none !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-modal-item.is-active { display: flex !important; flex-direction: column !important; position: absolute !important; top: 1rem !important; right: 1rem !important; z-index: 20 !important; width: 18rem !important; max-width: calc(100% - 2rem) !important; background-color: #ffffff !important; padding: 1rem !important; border-radius: 0.75rem !important; box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04) !important; border: 1px solid #e5e7eb !important; border-top: 4px solid #2E6E93 !important; animation: fv-ia-fade-in 0.2s ease-out !important; gap: 0.75rem !important; max-height: 80% !important; overflow-y: auto !important; pointer-events: auto !important; } @keyframes fv-ia-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-modal-header { display: flex !important; justify-content: space-between !important; align-items: flex-start !important; margin: 0 !important; gap: 0.5rem !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-node-title { font-size: 1rem !important; line-height: 1.25 !important; font-weight: 700 !important; color: #111827 !important; margin: 0 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-close-button { background: #f9fafb !important; border: 1px solid #e5e7eb !important; border-radius: 50% !important; width: 2rem !important; height: 2rem !important; display: flex !important; align-items: center !important; justify-content: center !important; color: #9ca3af !important; cursor: pointer !important; padding: 0 !important; flex-shrink: 0 !important; transition: all 0.2s !important; box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-close-button:hover { background: #e5e7eb !important; color: #111827 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-ia-node-description { font-size: 0.875rem !important; color: #374151 !important; margin: 0 !important; line-height: 1.625 !important; white-space: pre-wrap !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-ia-node-description { font-size: 0.875rem !important; } /* Error Handling */ #fv-chart-1780067391081-6swb3ztn4 .fv-ia-empty { display: flex !important; align-items: center !important; justify-content: center !important; height: 200px !important; background-color: #f1f5f9 !important; color: #64748b !important; border: 2px dashed #cbd5e1 !important; border-radius: 0.5rem !important; } /* Countdown Styles */ #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-container { display: flex !important; flex-direction: column !important; align-items: center !important; justify-content: center !important; padding: 1rem !important; position: relative !important; width: 100% !important; box-sizing: border-box !important; font-family: Montserrat, sans-serif !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-header { text-align: center !important; margin-bottom: 2rem !important; z-index: 10 !important; width: 100% !important; display: flex !important; flex-direction: column !important; align-items: center !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-title { font-size: 1.25rem !important; font-weight: 900 !important; text-transform: uppercase !important; letter-spacing: 0.05em !important; margin: 0 !important; font-style: italic !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-subhead { font-size: 1.125rem !important; font-weight: 900 !important; text-transform: uppercase !important; letter-spacing: 0.05em !important; margin: 0.25rem 0 0 0 !important; font-style: italic !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-timer-wrap { display: flex !important; flex-direction: column !important; align-items: center !important; width: 100% !important; max-width: 64rem !important; z-index: 10 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-labels { display: flex !important; justify-content: center !important; width: 100% !important; margin-bottom: 0.5rem !important; padding: 0 0.5rem !important; font-size: 0.75rem !important; font-weight: bold !important; text-transform: uppercase !important; letter-spacing: 0.05em !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-labels > div { flex: 1 !important; text-align: center !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-box { position: relative !important; width: 100% !important; border-top: 6px solid #333 !important; border-bottom: 8px solid #333 !important; padding: 1rem 0 !important; background: linear-gradient(to bottom, #1f2937, #000000) !important; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25) !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-digits { display: flex !important; justify-content: center !important; font-size: 1.75rem !important; font-weight: 900 !important; letter-spacing: 0em !important; font-family: monospace !important; color: #fff !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-digits > div.digit-box { flex: 1 !important; text-align: center !important; white-space: nowrap !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-digits > div.colon { flex: 0 0 auto !important; opacity: 0.5 !important; position: relative !important; top: -2px !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-spike-l { position: absolute !important; left: -15px !important; top: 50% !important; transform: translateY(-50%) !important; width: 0 !important; height: 0 !important; border-top: 15px solid transparent !important; border-bottom: 15px solid transparent !important; border-right: 15px solid #374151 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-spike-r { position: absolute !important; right: -15px !important; top: 50% !important; transform: translateY(-50%) !important; width: 0 !important; height: 0 !important; border-top: 15px solid transparent !important; border-bottom: 15px solid transparent !important; border-left: 15px solid #374151 !important; } @media (min-width: 600px) { #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-container { padding: 2rem !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-title { font-size: 1.75rem !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-subhead { font-size: 1.25rem !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-digits { font-size: 2.25rem !important; letter-spacing: 0 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-labels { font-size: 0.875rem !important; padding: 0 1rem !important; margin-bottom: 1rem !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-box { padding: 1.5rem 0 !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-digits > div.colon { top: -4px !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-spike-l { left: -20px !important; border-top-width: 20px !important; border-bottom-width: 20px !important; border-right-width: 20px !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-spike-r { right: -20px !important; border-top-width: 20px !important; border-bottom-width: 20px !important; border-left-width: 20px !important; } } @media (min-width: 768px) { #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-digits { font-size: 3.5rem !important; letter-spacing: 0.05em !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-countdown-digits > div.colon { top: -5px !important; } } /* Mobile / Forced Mobile View / Labels on Top */ #fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-pie-container, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-pie-container { flex-direction: column !important; gap: 1rem !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-grouped-product-title-wrapper, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-grouped-product-title-wrapper { padding-left: 0 !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-bar-row, #fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-stacked-product, #fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-grouped-bar-product, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-bar-row, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-stacked-product, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-grouped-bar-product { flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-bar-label:not(.fv-grouped-product-title), #fv-chart-1780067391081-6swb3ztn4.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-1780067391081-6swb3ztn4.mobile-view .fv-bar-label, #fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-grouped-product-title, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-bar-label, #fv-chart-1780067391081-6swb3ztn4.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-1780067391081-6swb3ztn4.mobile-view .fv-bar-container, #fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-bar-cluster, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-bar-container, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-bar-cluster { width: 100% !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-x-axis-wrapper, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-x-axis-wrapper { margin-left: 0 !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-x-axis-label-space, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-x-axis-label-space { display: none !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-x-axis-chart-space, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-x-axis-chart-space { padding-right: 0 !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-benchmark-title, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-benchmark-title { font-size: 16px !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-dropdown-title, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-dropdown-title { font-size: 16px !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-carousel-nav-btn, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-carousel-nav-btn { padding: 8px 12px !important; font-size: 14px !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-chart-title, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-chart-title { padding: 0 8px !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-chart-subhead, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-chart-subhead { padding: 0 8px !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-versus-header, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-versus-header { flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-versus-select-wrapper, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-versus-select-wrapper { flex: 1 !important; min-width: 0 !important; width: 100% !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-versus-select-wrapper.fv-left, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-versus-select-wrapper.fv-left { text-align: center !important; padding-right: 0 !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-versus-select-wrapper.fv-right, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-versus-select-wrapper.fv-right { text-align: center !important; padding-left: 0 !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-versus-select.fv-select-left, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-versus-select.fv-select-left { text-align: center !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-versus-select.fv-select-right, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-versus-select.fv-select-right { text-align: center !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-versus-vs, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-versus-vs { text-align: center !important; padding: 0.25rem 0 !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-versus-select-container, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-versus-select-container { max-width: 100% !important; width: 100% !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-versus-select, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-versus-select { font-size: 14px !important; width: 100% !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-stl-shop-all-btn, #fv-chart-1780067391081-6swb3ztn4.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-1780067391081-6swb3ztn4.mobile-view .fv-stl-shop-all-logo, #fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-stl-shop-all-icon, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-stl-shop-all-logo, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-stl-shop-all-icon { width: 2rem !important; height: 2rem !important; }#fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-stl-shop-all-icon svg, #fv-chart-1780067391081-6swb3ztn4.labels-on-top .fv-stl-shop-all-icon svg { width: 14px !important; height: 14px !important; } #fv-chart-1780067391081-6swb3ztn4.mobile-view .fv-y-axis-title { padding-left: 5% !important; /* (30/600) for mobile view */ } #fv-chart-1780067391081-6swb3ztn4.mobile-view.fv-contains-line-chart .fv-footer-content { margin-left: -1rem !important; margin-right: -1rem !important; } @media (max-width: 599px) { #fv-chart-1780067391081-6swb3ztn4 .fv-pie-container { flex-direction: column !important; gap: 1rem !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-grouped-product-title-wrapper { padding-left: 0 !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-bar-row, #fv-chart-1780067391081-6swb3ztn4 .fv-stacked-product, #fv-chart-1780067391081-6swb3ztn4 .fv-grouped-bar-product { flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important; }#fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-bar-label, #fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-bar-container, #fv-chart-1780067391081-6swb3ztn4 .fv-bar-cluster { width: 100% !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-x-axis-wrapper { margin-left: 0 !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-x-axis-label-space { display: none !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-x-axis-chart-space { padding-right: 0 !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-benchmark-title { font-size: 16px !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-dropdown-title { font-size: 16px !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-carousel-nav-btn { padding: 8px 12px !important; font-size: 14px !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-chart-title { padding: 0 8px !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-chart-subhead { padding: 0 8px !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-versus-header { flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-versus-select-wrapper { flex: 1 !important; min-width: 0 !important; width: 100% !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-versus-select-wrapper.fv-left { text-align: center !important; padding-right: 0 !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-versus-select-wrapper.fv-right { text-align: center !important; padding-left: 0 !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-versus-select.fv-select-left { text-align: center !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-versus-select.fv-select-right { text-align: center !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-versus-vs { text-align: center !important; padding: 0.25rem 0 !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-versus-select-container { max-width: 100% !important; width: 100% !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-versus-select { font-size: 14px !important; width: 100% !important; }#fv-chart-1780067391081-6swb3ztn4 .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-1780067391081-6swb3ztn4 .fv-stl-shop-all-logo, #fv-chart-1780067391081-6swb3ztn4 .fv-stl-shop-all-icon { width: 2rem !important; height: 2rem !important; }#fv-chart-1780067391081-6swb3ztn4 .fv-stl-shop-all-icon svg { width: 14px !important; height: 14px !important; } #fv-chart-1780067391081-6swb3ztn4 .fv-y-axis-title { padding-left: 5% !important; /* (30/600) for mobile view */ } #fv-chart-1780067391081-6swb3ztn4.fv-contains-line-chart .fv-footer-content { margin-left: -1rem !important; margin-right: -1rem !important; } } { "@context": "https://schema.org", "@type": "Dataset", "name": "AirPods Max 2 score card", "description": "Excellent sound and ANC; lacklustre stamina", "creator": { "@type": "Organization", "name": "TechRadar", "logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png" }, "isAccessibleForFree": true, "dateCreated": "2026-05-29T15:09:51.082Z", "citation": "Add your caption to explain the data, the learnings and the key takeaways of the data being visualized", "keywords": [ "AirPods Max 2", "Features", "Sound Quality", "Design", "Battery Life", "Noise Cancellation", "Value", "Overall", "Group 1", "benchmark", "comparison", "performance", "review", "TechRadar" ], "measurementTechnique": "Performance Benchmarking", "variableMeasured": [ { "@type": "PropertyValue", "name": "AirPods Max 2 – Features", "value": 4.5, "unitText": "", "maxValue": 5 }, { "@type": "PropertyValue", "name": "AirPods Max 2 – Sound Quality", "value": 5, "unitText": "", "maxValue": 5 }, { "@type": "PropertyValue", "name": "AirPods Max 2 – Design", "value": 4.5, "unitText": "", "maxValue": 5 }, { "@type": "PropertyValue", "name": "AirPods Max 2 – Battery Life", "value": 3, "unitText": "", "maxValue": 5 }, { "@type": "PropertyValue", "name": "AirPods Max 2 – Noise Cancellation", "value": 5, "unitText": "", "maxValue": 5 }, { "@type": "PropertyValue", "name": "AirPods Max 2 – Value", "value": 4, "unitText": "", "maxValue": 5 }, { "@type": "PropertyValue", "name": "AirPods Max 2 – Overall", "value": 4.5, "unitText": "", "maxValue": 5 } ]} AirPods Max 2 score card

Excellent sound and ANC; lacklustre stamina

Features 4.5 Sound Quality 5 Design 4.5 Battery Life 3 Noise Cancellation 5 Value 4 Overall 4.5 01.534.56 Group 1 Data ProductFeatures ()Sound Quality ()Design ()Battery Life ()Noise Cancellation ()Value ()Overall () AirPods Max 24.554.53544.5 window.iFrameResizer = { heightCalculationMethod: 'taggedElement' }; (function() { /* Global animation function for slideshow re-use */ 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) { /* Reset to 0 first to ensure animation triggers */ bar.style.setProperty('width', '0%', 'important'); bar.style.setProperty('transition', 'none', 'important'); var targetWidth = bar.dataset.targetWidth; if (targetWidth === undefined) return; /* Force reflow */ 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); /* Reduced initial delay */ }); } 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); }); } /* Execute */ var charts = chartWrapper.querySelectorAll('.fv-chart-item'); charts.forEach(function(chart) { /* If in carousel/dropdown mode, hidden charts are display:none. */ /* We only animate what is visible. */ 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); /* In slideshow mode, 'root' will be null because the container has '-slideshow' suffix. */ /* We handle that logic below. */ if (!root && !isSlideshow) return; /* Setup internal interactions (Carousel/Dropdown/LineChart) for a specific chart wrapper */ function setupWrapper(chartWrapper) { if (!chartWrapper) return; /* Responsive mobile view handling */ 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) { /* Fallback for when width isn't available yet (e.g., hidden tab) */ isMobile = isMobileDevice || window.matchMedia('(max-width: 599px)').matches; } else { /* Mobile if container is small OR if it's a physical mobile device (overriding fixed-width iframes) */ isMobile = isMobileDevice || width < 600; } if (isMobile) { chartWrapper.classList.add('mobile-view'); } else { chartWrapper.classList.remove('mobile-view'); } } /* Initial check */ checkMobileView(); if (typeof ResizeObserver !== 'undefined') { var ro = new ResizeObserver(function() { checkMobileView(); }); ro.observe(chartWrapper); } /* Always add window resize listener as a reliable fallback for DevTools and edge cases */ window.addEventListener('resize', checkMobileView); /* Labels on top handler */ var labelsOnTop = chartWrapper.dataset.barLabelsOnTop === 'true'; if (labelsOnTop) { /* If there are multiple charts and we're not in a carousel/dropdown, we might have mixed types. */ /* But typically, labels-on-top is a global setting. We'll apply it initially, */ /* and showInternalChart will toggle it if needed. */ 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'); } /* Legend interactions */ 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); } }); }); /* Versus Chart Logic */ 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); }); /* Carousel & Dropdown Logic */ 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'); /* Text Elements */ 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') { /* Line chart animations if needed */ } else if (cType !== 'Pie') { window.fvAnimateCharts(chartWrapper); } /* Update labels-on-top based on current chart type */ 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; /* Update Subhead and Caption */ 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 || ''; 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); }); } /* Image Comparison Logic */ 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; /* Zoom state */ 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(); /* Max pan depends on how much the image is scaled beyond the wrapper */ 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; /* Prevent click after pinch */ } 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 }); } /* Expand/Close Logic */ 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.preventDefault(); // Removed to allow text selection */ e.stopPropagation(); wrapper.classList.add('fv-image-compare-fullscreen'); document.body.style.overflow = 'hidden'; /* Load high-res images if available */ 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.preventDefault(); // Removed to allow text selection */ e.stopPropagation(); wrapper.classList.remove('fv-image-compare-fullscreen'); document.body.style.overflow = ''; updateTransform(); }); } /* Close on Escape */ 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(); } }); }); /* Shop The Look Hotspots */ 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'); /* Remove highlights */ var items = allProductsModal.querySelectorAll('.fv-stl-all-products-item'); items.forEach(function(item) { item.classList.remove('is-highlighted'); }); /* Remove min-height after transition */ 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'); /* Ensure container is tall enough */ var container = btn.closest('.fv-stl-container'); if (container && container.offsetHeight < 450) { container.style.minHeight = '450px'; } /* Highlight and scroll to item */ 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(); } } }); }); /* Shop All button */ if (shopAllBtn && allProductsModal) { shopAllBtn.addEventListener('click', function(e) { e.stopPropagation(); closeAllModals(); allProductsModal.classList.add('is-active'); /* Ensure container is tall enough */ var container = shopAllBtn.closest('.fv-stl-container'); if (container && container.offsetHeight < 450) { container.style.minHeight = '450px'; } if ('parentIFrame' in window) { window.parentIFrame.size(); } }); } /* Close button in all products modal */ if (allProductsModal) { var closeAllBtn = allProductsModal.querySelector('.fv-stl-all-products-close'); if (closeAllBtn) { closeAllBtn.addEventListener('click', function(e) { e.stopPropagation(); closeAllModals(); }); } } /* Close modals when clicking outside */ chartWrapper.addEventListener('click', function(e) { /* Only close if clicking on the wrapper or container, not inside a modal content */ 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(); } }); } /* Image Annotation Logic */ 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(); } }); } /* Initial Animation */ window.fvAnimateCharts(chartWrapper); /* Countdown Logic */ 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-1780067391081-6swb3ztn4', false); }); } else { initialize('fv-chart-1780067391081-6swb3ztn4', false); } })();

Attributes

Notes

Rating

Features

AirPods Max 2 are finally full of 2026 tech; you love to see it — just not hearing tests

4.5/5

Sound quality

Excellent ANC and head-tracked Spatial Audio with bags of space in the mix

5/5

Design

There's very little to see here until you get to the H2 chip and new amp — but if it ain't broke… 

4.5/5

Value

There is value here, you just can't really see it (because they look just like a set from 2020)

4/5

Buy them if…

You want to be held in a bubble of silence
If you want that and (ideally) you own an iPhone, these are the cans for you. Very little penetrates the silence here.

You travel a lot (and you don't speak the language)
Live Translation is well integrated here and for the first time I found it very useful, rather than a fun gimmick to use with my Spanish-speaking other half.

You value head-tracked Spatial Audio
This is especially true if you watch movies on the fly, but even if you just like Apple Music's Spatial Audio offering with head tracking, this is the flagship Gold Standard of the format.

Don’t buy them if…

You need proper stamina for long-haul flights
AirPods Max 2's battery life is not great — and by 'not great' I mean that any recent rival of note can beat the quoted battery life by at least four hours (and often by a lot more).

You own an Android phone
It probably goes without saying, but for this money (and for the number of features that melt away if you never bought into Apple's ecosystem), you'll be better served with a Sony, Technics, Bose, Cambridge or Bowers & Wilkins product.

You want LDAC or aptX Adaptive
No dice here, friend. That will come as no surprise to dyed-in-the-wool Apple fans, but if you want hifalutin wireless codecs for higher-resolution audio over Bluetooth, you'll need to look to Bowers & Wilkins or even Sennheiser — which, at the time of writing, has just announced its new Momentum 5 Wireless.

Apple AirPods Max 2 review: Also consider

Apple AirPods Max 2

Bose QuietComfort Ultra Headphones (2nd Gen)

Sony WH-1000XM6

Bowers & Wilkins Px8 S2

Drivers

'Apple-designed dynamic driver'

Not stated officially

30mm dynamic

40mm dynamic full-range carbon cone

Active noise cancellation

Yes

Yes

Yes

Yes

Battery life

Up to 20 hours (ANC on); 5 mins of charging = 1.5 hours of listening

30 hours (ANC on)

30 hours (ANC on)

30 hours (ANC on)

Weight

386.2g

250g

254g

310g

Connectivity

Bluetooth 5.3 (H2 chip); USB-C audio

Bluetooth 5.4 with aptX Adaptive, USB-C audio

Bluetooth 5.3, 3.5mm, LDAC

Bluetooth 5.3 with aptX Adaptive and aptX Lossless

Sony WH-1000XM6
If you’re after something a little bit cheaper that performs really well in every department without ever quite dominating it, the Sony WH-1000XM6 are excellent all-rounders with better battery life and LDAC support (ie. good for Sony handsets or Samsung Galaxy S-Series phones).
Read our full Sony WH-1000XM6 review

Bose QuietComfort Ultra Headphones (2nd Gen)
Like the Sony cans above, you get an extra 10 hours of battery life over the Apple option, with ANC deployed. And what a great noise-cancelling performance it is! You also get Bose's Immersive Audio profiles, which we really enjoyed.
Read more in our Bose QuietComfort Ultra Headphones (2nd Gen) review

View Deal

Bowers & Wilkins Px8 S2
Want a truly premium-feeling set of over-ears? These are gorgeous, and the detailed, neutral sound is sensational — although you do pay for that. That being said, the onboard spatial audio solution is easily beaten by AirPods Max 2… 
See if they're a better fit for you in our Bowers & Wilkins Px8 S2 review

How I tested the Apple AirPods Max 2
  • Tested for two months
  • Tested on a trip to Girona, a hospital stay, coastal walks, and at my desk
  • Used an Apple iPhone 15 Pro Max and MacBook Pro with Apple Music, plus downloaded Flac files on my FiiO hi-res music player

I used AirPods Max 2 for two months while compiling this review. Why so long? Because I had to have shoulder surgery after accepting them for review, so my testing involved listening to podcasts and music post-op from my hospital bed, with ANC on to distract me from my immediate surroundings, then plenty of streamed movies during my recovery (and to distract me from painful rehab exercises).

I listened at home, on a quick pre-op trip to Girona (which is where AirPods Max 2's Live Translation really came into its own) and on blustery Dorset coastal walks, and let me tell you, they kept me sane while navigating my early recovery away from my desk.

I've been testing audio products full-time since 2019, first as a staff writer at TechRadar's sister publication What Hi-Fi? (locked in our hi-fi testing facility for two years, I was), then as senior writer at TechRadar and, since early 2024, audio editor.

My background as a professional dancer means I'm always interested in moving to good-quality music even with a non-functioning shoulder. I never stop listening for precision, clarity, faithful timing, insight and good old-fashioned fun in recorded audio. And when said shoulder's fully better, I'm going to be back to throwing shapes while testing too. You just wait…

  • First reviewed May 2026
Categories: Reviews

This RTX 5060 Lenovo gaming laptop is the best deal I've seen all week — get an OLED display, Ultra 7 chipset, 32GB of RAM, and $400 off

TechRadar News - Fri, 05/29/2026 - 20:00
The stunning Lenovo Legion 5i is a great pick today thanks to this $400 price cut at B&H Photo.
Categories: Technology

'Doubtless the best noise-cancelling iPhone headphones on the planet': I tested AirPods Max 2 and they really are that good — here's why

TechRadar News - Fri, 05/29/2026 - 20:00
AirPods Max 2's strong resemblance to the originals might have some fans disappointed given the wait, but sonically, and in terms of features, I have to hand it to Apple — man, they're good…
Categories: Technology

Spotify wants to ‘help keep listening smooth’ with new playback and queuing tools — and it’s also dropped an overdue upgrade for offline listening

TechRadar News - Fri, 05/29/2026 - 20:00
Spotify has added its own 'play next' tool and other queue functions, as well as a big upgrade for offline listening.
Categories: Technology

‘The moment infrastructure moves to orbit, that assumption disappears’: Layered access control, physical redundancy and rapid component replacement are major orbital challenges

TechRadar News - Fri, 05/29/2026 - 19:20
Hyperscalers are considering sending AI compute into orbit, but experts warn it introduces severe operational risks that could lead to months-long outages.
Categories: Technology

AT&T gets into a legal spat with California over legacy phone network maintenance rules

TechRadar News - Fri, 05/29/2026 - 19:05
Maintaining copper lines in California is a $1 billion annual expense that serves only 3% of its potential consumer base, claims the Dallas-based telecommunications giant.
Categories: Technology

Apple Sweetens Trade-in Deals With Higher Payouts for Your Old Device

CNET News - Fri, 05/29/2026 - 18:53
Apple boosted its maximum trade-in values for selected iPhones, iPads, Apple Watches, MacBooks and desktop Macs.
Categories: Technology

NASA reveals more on its moon base plans — and it seems the astronauts might have to assemble it all themselves, like a load of IKEA furniture

TechRadar News - Fri, 05/29/2026 - 18:15
NASA outlines Moon Base missions, rover contracts, and cargo landers while relying on commercial partners and uncertain lunar economic potential
Categories: Technology

Quote of the day by Steve Jobs: "Everybody in this country should learn how to program a computer, because it teaches you how to think" — advice on upskilling for the future

TechRadar News - Fri, 05/29/2026 - 18:05
Steve Jobs was a huge believer in the power of education and learning skills like programming and development
Categories: Technology

Quordle hints and answers for Saturday, May 30 (game #1587)

TechRadar News - Fri, 05/29/2026 - 18:00
Looking for Quordle clues? We can help. Plus get the answers to Quordle today and past solutions.
Categories: Technology

NYT Connections hints and answers for Saturday, May 30 (game #1084)

TechRadar News - Fri, 05/29/2026 - 18:00
Looking for NYT Connections answers and hints? Here's all you need to know to solve today's game, plus my commentary on the puzzles.
Categories: Technology

NYT Strands hints and answers for Saturday, May 30 (game #818)

TechRadar News - Fri, 05/29/2026 - 18:00
Looking for NYT Strands answers and hints? Here's all you need to know to solve today's game, including the spangram.
Categories: Technology

AMD's rival to Nvidia's GB10 AI workstation is set to go on preorder in days, but is it too little too late?

TechRadar News - Fri, 05/29/2026 - 17:55
The AMD Ryzen AI Halo will be available for preorder in June 2026, as the California-based chipmaker aims to compete with Nvidia's DGX by focusing on price and performance.
Categories: Technology

Don't Know Where to Put Your Bird Feeder? This Is What a Wildlife Expert Recommends

CNET News - Fri, 05/29/2026 - 17:44
If you want to attract more hungry visitors to your bird feeder, this is where you should place it in your yard.
Categories: Technology

Best Wireless Earbuds of 2026

CNET News - Fri, 05/29/2026 - 16:45
I've reviewed hundreds of wireless earbuds for CNET, and these are my current top picks at a variety of prices.
Categories: Technology

Pages

Subscribe to The Vortex aggregator