Apple’s delayed Siri overhaul may arrive with iOS 27, using Google Gemini and Nvidia Blackwell chips to power more advanced AI features.
The post Siri’s AI Comeback Could Run Through Google and Nvidia appeared first on TechRepublic.
VirtualBox is often considered among the best virtual machine software available, particularly for users looking for a free and flexible solution. Its cross-platform support and open-source model make it a popular starting point for anyone exploring virtualization, even if more advanced users may eventually outgrow its limitations.
VirtualBox: Plans and pricingOne of VirtualBox’s biggest advantages is that the core platform is completely free to use and distributed as open-source software under the GPL license.
However, not all functionality falls under the same licensing model. The optional Extension Pack, which adds features such as enhanced USB support and remote desktop capabilities, is free for personal and educational use but requires a commercial license in business environments.
In practice, this means that while individual users can access most of VirtualBox’s functionality at no cost, organizations may need to factor in additional licensing considerations depending on how the software is deployed.
Recent changes in the virtualization market, including VMware making its desktop hypervisors free for personal use, have also reduced VirtualBox’s traditional advantage in this area.
VirtualBox: Features(Image credit: Oracle // Future)VirtualBox supports a wide range of guest operating systems, including Windows, Linux, and other platforms, and allows users to allocate system resources such as CPU cores, memory, and storage on a per-virtual-machine basis.
It includes core virtualization features such as snapshots, which allow users to save and restore the state of a virtual machine, as well as shared folders and clipboard sharing between host and guest systems when Guest Additions are installed. Multiple networking modes are also available, including NAT and bridged networking, enabling different connectivity scenarios depending on user needs.
Additional functionality is provided through Guest Additions, which improve display handling, enable better mouse integration, and support features such as dynamic screen resizing. While the feature set is comprehensive for a free solution, some capabilities, particularly in areas such as graphics acceleration, remain more limited compared to commercial alternatives.
Recent versions have also introduced support for features such as virtual TPM, making it easier to run newer operating systems, including Windows 11.
VirtualBox: Interface and use(Image credit: Oracle // Future)VirtualBox uses a familiar, structured interface centered around a main dashboard for managing virtual machines and a detailed settings panel for configuration. Compared to earlier versions, the interface shows clear signs of improvement, with a more organized layout and better separation of system and machine-level tools.
That said, the overall design still feels more functional than refined. While navigation is logical once you understand where everything is, the experience lacks the level of polish and guidance seen in competing platforms, particularly for less experienced users.
Creating a virtual machine is handled through a guided setup process that covers operating system selection, resource allocation, and storage configuration. The process is generally straightforward, although certain steps such as attaching installation media or adjusting system parameters require a basic understanding of virtualization concepts.
In day-to-day use, the experience is stable but not always seamless. During testing, interaction within the virtual machine worked reliably for basic tasks, but usability is affected by small friction points, including mouse and keyboard capture behavior, which can feel unintuitive at first. While these issues can be managed with experience, they highlight the platform’s more technical orientation compared to more streamlined alternatives.
VirtualBox: Performance(Image credit: Oracle // Future)In use, VirtualBox delivers adequate performance for basic virtualization tasks, but it does not match the consistency or responsiveness of more polished alternatives. During testing, the virtual machine booted reliably and handled light workloads such as web browsing and system navigation without major issues.
However, performance can become less stable under heavier use. Applications may take longer to respond, and overall system interaction can feel less fluid compared to competing platforms. This is particularly noticeable in graphics handling, where VirtualBox’s limited acceleration capabilities restrict its suitability for more demanding workloads.
Resource usage is another factor to consider. Running a virtual machine requires careful allocation of CPU and memory, and on more modest systems, this can impact both host and guest performance. While the platform remains usable for everyday tasks, it is not optimized for high-performance scenarios.
Overall, VirtualBox performs well enough for testing environments, development setups, and general-purpose virtualization, but users seeking consistently smooth performance or advanced graphical capabilities may find stronger options elsewhere.
VirtualBox: SupportVirtualBox primarily relies on documentation and community-driven resources, including official manuals and user forums, as its main support channels.
Oracle does offer paid support through its enterprise programs, but this is limited to specific configurations and use cases. For most users, support is therefore largely self-service, which can make troubleshooting more time-consuming compared to commercial virtualization platforms with dedicated support channels.
VirtualBox: The competitionVirtualBox operates in a competitive space alongside tools such as VMware Workstation and Parallels Desktop, both of which offer similar core virtualization capabilities but target slightly different user needs.
Recent changes, including VMware making its desktop hypervisors free for personal use, have significantly increased competition in this space.
VMware Workstation is often seen as the more polished alternative, with stronger integration across enterprise environments and broader ecosystem support. While VirtualBox has largely caught up in terms of core features, VMware still tends to offer a more refined experience and better integration with other VMware products.
Parallels Desktop, on the other hand, focuses more on ease of use and performance, particularly on macOS systems. It offers tighter system integration and more seamless workflows, although this comes at a cost, unlike VirtualBox’s free and open-source model.
In practice, VirtualBox remains a strong option for users who prioritize cost and flexibility, while VMware and Parallels are often better suited to those who need higher performance, deeper integration, or a more streamlined user experience.
VirtualBox: Final Verdict(Image credit: Oracle // Future)VirtualBox remains one of the most accessible virtualization tools thanks to its free and open-source model. It covers the essentials well and offers a high degree of flexibility, but the experience still lacks the polish and consistency of commercial alternatives. While it performs reliably for basic tasks, users looking for smoother performance or a more intuitive interface may be better served elsewhere.
Proxmox VE is often listed among the best virtual machine software options, although it belongs to a different category than most desktop virtualization tools. Rather than running as an application inside Windows, macOS, or Linux, it is designed as a server virtualization platform that manages workloads through a web-based interface.
At its core, Proxmox VE combines KVM for full virtual machines with LXC containers for lighter workloads. This gives users the option to run complete operating systems when needed, while also deploying more efficient containerized services where a full VM would be unnecessary. That combination is one of the main reasons Proxmox has become popular in homelab environments, where users often want to run many services on limited hardware.
The platform has also gained momentum because of changes in the broader virtualization market. VMware remains a powerful enterprise platform, but licensing and ecosystem changes have made many homelab users and smaller organizations look for alternatives. Proxmox does not replace VMware in every enterprise scenario, but it offers a strong mix of flexibility, cost control, and practical capability.
This makes Proxmox VE particularly interesting for users who want to move beyond basic desktop virtualization. It is not the easiest tool in this category, but it is one of the most capable once the underlying concepts are understood.
Proxmox VE: Plans and pricingProxmox VE is free to download and use, which is one of its biggest advantages. There are no per-VM, per-core, or per-user licensing fees for the core platform, and users can install it on their own hardware without paying for a traditional software license.
The commercial model is built around annual subscriptions, priced per physical CPU socket. This is an important distinction, especially when compared with platforms that price around cores, editions, or broader enterprise bundles. For Proxmox VE, the number of cores on a processor does not change the subscription count.
The current subscription tiers start with Community at €120 per year per CPU socket, which provides access to the enterprise repository and community support. Basic costs €370 per year per CPU socket and adds three support tickets with a one-business-day response time. Standard costs €550 per year per CPU socket and includes 10 support tickets with a four-hour response time for critical requests within a business day. Premium costs €1,100 per year per CPU socket and includes unlimited support tickets with a two-hour response time for critical requests within a business day. All prices are listed as net prices, with VAT added where applicable.
This does not mean that free users are locked out of the core platform. The main virtualization features, including virtual machines, containers, clustering, high availability, and live migration, remain available without a paid subscription. Free users can use the no-subscription repository, although production environments will generally be better served by the enterprise repository and vendor-backed support.
Free installations also display a “no valid subscription” notice when logging into the web interface. This is a familiar Proxmox quirk rather than a functional limitation, but it is worth mentioning because almost every free user will encounter it.
In practice, Proxmox’s pricing model is one of the reasons it has gained more attention in recent years. Homelab users can run the platform at no cost, while businesses can add support without moving to a per-core licensing model. That makes Proxmox particularly attractive for users evaluating alternatives to VMware, although organizations still need to consider support, skills, migration planning, and operational risk rather than looking only at the license cost.
Proxmox VE: Features(Image credit: Proxmox // Future)Proxmox VE provides a broad set of features that go well beyond basic VM creation. The platform integrates KVM virtual machines, LXC containers, software-defined storage, networking, clustering, and high-availability tools into a single environment. This gives it a level of scope that is closer to infrastructure management than traditional desktop virtualization.
The support for both VMs and containers is particularly important. Full virtual machines remain useful when complete operating system isolation is needed, while LXC containers offer a lighter way to run services with lower overhead. For users running many small services in a homelab, this can be a major advantage over platforms that focus only on full virtual machines.
Storage is another major part of the platform. Proxmox can work with technologies such as ZFS, LVM, NFS, iSCSI, and Ceph, depending on the deployment. This flexibility is powerful, but it also requires care. Unlike desktop virtualization tools, where storage is often abstracted away, Proxmox expects users to understand how their storage choices affect performance, snapshots, replication, and reliability.
Backup integration is also a strong point. Proxmox Backup Server adds support for efficient backup workflows, including incremental and deduplicated backups. This has become an important part of the Proxmox ecosystem, especially for users who want a backup approach designed around virtual machines and containers rather than a generic file-based tool.
Clustering and high availability extend the platform further. Users can group multiple nodes together, migrate workloads, and design environments that are more resilient than a single standalone host. These features are valuable, but they require planning and are not as simple as creating a local VM on a desktop hypervisor.
Proxmox VE: Interface and use(Image credit: Proxmox // Future)Proxmox VE is managed primarily through a browser-based interface. This is one of its biggest practical advantages, because most common tasks can be handled without installing a separate management application. The interface provides access to nodes, virtual machines, containers, storage, networking, logs, and tasks from one central view.
The design is functional rather than polished. Compared to VMware’s more refined enterprise tools or desktop applications such as Parallels and VMware Workstation, Proxmox can feel more technical and less guided. However, the layout is logical once the main concepts are understood, and common actions such as creating a VM, opening a console, checking storage, or viewing node resources are easy to reach.
Creating a virtual machine follows a structured wizard, but the process still assumes that users understand ISO images, storage targets, CPU allocation, memory, networking, and disk formats. This is not difficult for experienced users, but it is a noticeable step up from tools that automatically hide most of these decisions.
The same applies to containers and networking. LXC containers are efficient and powerful, but users need to understand how they differ from virtual machines. Networking can also become complex, especially when moving beyond a simple bridged setup into VLANs, software-defined networking, or clustered environments.
For homelab users and administrators, this level of control is part of the appeal. For casual users who only want to run another operating system occasionally, it may feel like too much infrastructure for the task.
Proxmox VE: Performance(Image credit: Proxmox // Future)Proxmox VE can deliver strong performance, particularly when installed directly on suitable hardware. Because it is built around KVM and runs as a server virtualization platform rather than a desktop application, it avoids some of the overhead and friction associated with Type 2 hypervisors.
That said, performance depends heavily on hardware, storage design, and configuration. A well-configured Proxmox system can run virtual machines and containers efficiently, but poor storage choices, unsuitable networking, or underpowered hardware can limit the experience quickly. This is especially true when using ZFS, Ceph, or more advanced replication setups, where configuration decisions have a direct impact on performance.
Containers are one of Proxmox’s strongest performance-related advantages. LXC workloads are lighter than full virtual machines and can help users run more services on the same hardware. This matters in homelab and small infrastructure environments, where memory and storage are often limited.
GPU passthrough is also available and can be useful for advanced users who want to assign hardware to specific workloads. However, it requires compatible hardware and additional configuration, so it should not be treated as a beginner feature.
In longer-term use, Proxmox is often praised for stability, especially in homelab scenarios. Once configured properly, it can provide a reliable base for running persistent workloads, although it remains less polished than VMware in some areas. That balance is important: Proxmox performs well, but it rewards users who understand the platform rather than those expecting a fully guided experience.
Proxmox VE: SupportProxmox has extensive documentation, an active community, and a growing ecosystem of guides, scripts, and third-party resources. This community activity is one of the reasons the platform has gained momentum among homelab users and smaller organizations.
Official support is tied to paid subscriptions, which also provide access to the enterprise repository. For businesses, this model makes sense because it provides a clearer support path and more conservative update source. For individual users, community documentation and forums will often be the main support channel.
This is one area where expectations matter. Proxmox offers strong value, but free users should not expect the same support experience as customers of a fully commercial enterprise platform. The platform is usable without a subscription, but production environments should consider the support model carefully.
The broader ecosystem has improved. Proxmox Backup Server strengthens the native backup story, and third-party backup vendors have started adding support for Proxmox environments. This makes the platform easier to consider for more serious deployments than it was in the past.
Proxmox VE: The competitionProxmox VE competes most directly with VMware vSphere and ESXi in infrastructure environments, although it is also often discussed by users moving beyond desktop tools such as VirtualBox, VMware Workstation, and Hyper-V.
Compared to VMware, Proxmox offers a more accessible cost structure and a stronger appeal for homelabs, smaller deployments, and users who prefer open-source infrastructure. It also has advantages in container support through LXC, which gives it a useful middle ground between full virtual machines and lighter service deployments.
VMware still has strengths that Proxmox has not fully matched. Its enterprise ecosystem remains more mature, and areas such as advanced storage, polished management tooling, and large-scale enterprise support are still important differentiators. For large organizations with complex requirements, VMware may remain the safer and more familiar choice.
Hyper-V remains relevant for Windows-centric environments, especially where integration with Microsoft infrastructure matters. However, Proxmox is more flexible for users who want an open-source server virtualization platform with strong Linux foundations.
In practice, Proxmox VE is best suited to users who want serious virtualization without commercial licensing pressure and who are willing to learn the platform properly. It is not the easiest tool in the category, but it offers one of the strongest combinations of value, flexibility, and control.
Proxmox VE: Final VerdictProxmox VE is one of the strongest open-source virtualization platforms available for homelab users, small infrastructure environments, and users who want more control than desktop virtualization tools can provide. It combines KVM virtual machines, LXC containers, clustering, storage, networking, and backup integration into a single platform, making it far more ambitious than tools such as VirtualBox or VMware Workstation.
That strength also defines its limitations. Proxmox is not designed as a simple desktop application. It is installed as a server-focused operating environment, managed through a browser, and built around concepts such as nodes, storage pools, bridges, containers, and clusters. Users familiar with Linux and infrastructure tools will appreciate the control, while beginners may find the learning curve significant.
For users willing to work through that complexity, Proxmox VE delivers excellent value. It is free to download and use, has strong community momentum, and offers a capable alternative to commercial virtualization platforms. It still lacks some of VMware’s enterprise polish and ecosystem depth, but for homelabs and smaller deployments, it is a serious and increasingly compelling option.
For a simple device, there’s a lot going on with the Google Fitbit Air. People feel very strongly about it, for better or for worse, and there’s been a lot of chatter and interest surrounding its release. My experience actually wearing the device has generally been very positive, with tracking accuracy comparable to that offered by my Apple Watch Ultra 3, which is pretty much the gold standard for wrist-based health tracking. Metrics relying on the tracker’s onboard heart-rate monitoring are reliable, matching the Apple Watch closely during work, rest, and exercise during my week with the Fitbit Air.
Set-and-forget trackers are clearly having a moment. Oura has released the Oura Ring 5 just one year after the Ring 4, and Whoop’s success has given rise to a number of copycats from brands looking to recreate the experience of a distraction-free screenless ‘focus band’ for a less premium price.
Google is one such copycat, but the screenless, slender form factor suits the Fitbit brand — the original Fitbit was a digital pedometer — down to the ground. It speaks to the core of what Fitbit used to be, before it became just another company churning out mediocre smartwatches running a limited proprietary operating system. Your Fitbit was always meant to be a discreet little device, and devices don’t come more discreet than the Google Fitbit Air. Weighing just 12g and using a very slender 17mm-wide band, the Fitbit Air is a lovely and (crucially) comfortable device to wear and use. It’s much more comfortable to wear during sleep than any full smartwatch I’ve ever tried (and I have tried a lot), or even the Whoop.
However, it’s hard to separate the Fitbit Air from the Google Health app, with Google’s redesign of the Fitbit app causing particular ire amongst Fitbit users. The app is a bit of a mess, and not intuitive to use, with features dotted all over the place. It feels like it’s designed to primarily function as a home for the AI Health Coach chatbot, which is very intelligent and perhaps the best in-app AI assistant I’ve tried, but it’s not the best way to operate a health app. Whoop’s balance of AI and on-page metrics is much better.
If you’re looking for a consistent screenless focus band to track different sorts of workouts like gym, sports, and yoga, alongside sleep, heart health and general wellness, you can use the Google Fitbit Air as is, paying just the up-front price, and keep your tracking simple.
Whether or not you can get onboard with the Premium option will depend on how much you like chatbots — I found its flexibility immensely helpful, but its constant chirpy summaries and insistence on hiding my data inside walls of text became annoying, so it’s a mixed bag for me. Overall, though, this is the best, most interesting Fitbit to have been released in years.
Google Fitbit Air: Price and availabilityThe Google Fitbit Air costs $99.99 / £84.99 / AU$199, and for that you get the tracker, a band of your choice, and a charger specific to the Google Fitbit Air — proving once again that Google seems to be allergic to making a charger that’s compatible with more than one device.
The Google Health Premium subscription, which gives you access to Google’s AI Health Coach, costs $9.99 / £7.99 / AU$14.99 a month, or $99.99 / £79.99 / AU$140 annually. Existing Google AI Pro members get it at no extra cost.
For comparison, the cheapest Apple Watch SE 3 starts at $249 / £219 / AU$399, while Whoop’s complex pricing structure begins at £169 / $199 / AU$299 per year for the lowest tier. The Google Fitbit Air’s pricing is cheap for what you get, with the Health Coach as an optional add-on rather than a mandatory subscription.
The Google Fitbit Air’s design can be split into two components: the physical device, which is excellent, and the new Google Health app, which is a bit of a misfire.
Let’s start with the positives. The Fitbit Air comprises the tracker itself, and a wraparound band in a choice of three styles — a silicone Active band, the woven Performance Loop, or the polyurethane (pleather) Elevated Modern band. Each comes with their own color options, and a plastic clasp. On the underside of the tracker are the optical heart rate sensor, skin temperature sensor, and an accelerometer and gyroscope for counting steps.
It weighs just 12g, even with the Performance Loop strap, so it’s light and easy to wear, which is crucial for sleep tracking. I wore it on my right wrist, with a watch on my left during the day, and I didn’t feel like an obnoxious techie: unless someone looks closely, it just looks like a wristband, with the lack of a screen helping here. The Performance Loop strap that came with my review unit is the best-looking of the three options in this respect, but none of them look bad.
The tracker also has a haptic vibrate function — if you set an alarm in the app, this can be disabled with a tap on the top of the device. And that’s pretty much all the interaction you have with the sensor and band as a whole; everything else, as with one of the best smart rings or other screenless tracking options, is done via the app.
(Image credit: Future)The app is where Google’s design falls down. Split into four tabs — Today, Fitness, Sleep and Health — the Google Health app features a dashboard with key metrics at the top, and insights or libraries of content below it.
But with information scattered across a quartet of tabs, it’s hard to find certain granular metrics or content you’re looking for compared to the old Fitbit app. I searched for Mindfulness content for 10 minutes before finding the five-minute meditation I was after, for example, and I often ended up starting new chats with the AI coach rather than resuming a chat from my history. It’s just not intuitive to use.
What is right in your face, for Premium users, is the AI coach, which cloaks your metrics in paragraphs of cheery text, so it takes longer to get to your information. It’s clever, and we’ll get onto its functionality in a moment, but I wish it summarized and contextualized less, and just offered more 'glanceability'.
The Fitbit Air records the usual metrics you’d expect with a modern fitness tracker, including step count, heart rate, floors climbed, sleep stages, and so forth. Fitbit’s Daily Readiness score shows you how prepared your body is for exercise, based on recent activity and sleep scores, while it also surfaces weekly cardio goals, hydration, and basic food logging. It can offer irregular heart rate rhythm notifications, which is great for potentially diagnosing atrial fibrilation, and allows you to take an ECG scan manually to monitor your heart health.
Basic tracking is all the free version gets you; there’s no workout builder, mindfulness content, way to log sickness, or any other extras beyond the numbers. It doesn’t add any special metrics for runners, such as stride or cadence, as many of the best running watches do. For some users who just want the numbers, this will be fine, with no need to subscribe to the Premium tier.
For Premium users, food logging can be done via the AI Health Coach, by taking a picture of your food. It’s very good at logging packaged food (it was bang on logging a crinkled package of chips with the message ‘log this’ as a 74kcal snack, also breaking down macros and salt content) but can struggle with plates of homemade food, although a basic description such as ‘log this lentil curry’ is enough for it to provide an estimation. The more information you can provide (weight etc), the more detailed it gets.
It’s the best version of this feature I’ve tried across many different apps, but those without the Health Coach can log food manually, as you can in other apps like MyFitnessPal.
(Image credit: Future)The app also has access to Fitbit’s library of workout and meditation content, including individual moves, which you can use to build your own workout. Again, this is only available through the Premium subscription.
Through it all runs the AI Health Coach, which I actually found to be useful. Although there was no field to input illness as such, I typed my cold symptoms out to the Health Coach, and it remembered I was ill and adjusted its messaging and advice throughout the rest of the week based on my symptoms. I went to the gym without following one of the app’s pre-prescribed workouts, typed my sets and reps into the Coach’s ‘Ask Coach’ field, and it not only logged the workout, but suggested complementary routines to work different muscle groups for the rest of the week.
The AI Coach is a flexible ‘macro-feature’ that works well in conjunction with the rest of the app, and almost allows you to bypass the chaotic layout: you can just ask the Coach to serve you up what you need, which I’m sure was Google’s intent. Your use of the Coach will depend on your tolerance for chatbots: those who use Gemini or ChatGPT for everything will get a lot out of it, while those who loathe AI and just want numbers will likely loathe the Premium tier.
As I noted when I compared the Google Fitbit Air against the Apple Watch Ultra 3, the tracker performed well during my 10K test run, at least for the metrics like heart rate and calorie count, which it can use its onboard sensors for. The metrics it uses my phone's GPS to estimate, like distance, were off significantly.
I’ve embedded the results below, but generally there was no statistically significant difference between heart rate or calorie estimations from the two devices. I'll be updating the review with confirmation of heart rate scores tested against a new Polar H10 chest strap, as my old testing unit has malfunctioned.
@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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper *, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper *:before, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper *:after, #fv-chart-1780054953725-jxfr84byr-slideshow *, #fv-chart-1780054953725-jxfr84byr-slideshow *:before, #fv-chart-1780054953725-jxfr84byr-slideshow *:after { box-sizing: border-box !important; margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper, #fv-chart-1780054953725-jxfr84byr-slideshow { font-family: 'Open Sans', sans-serif !important; } /* Main Wrappers */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper { position: relative !important; overflow: visible !important; --riv-primary: #2E6E93; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-inner-wrapper.fv-no-header.fv-is-image-compare { padding-top: 0 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.fv-full-bleed { width: 100vw !important; margin-left: calc(50% - 50vw) !important; } body { overflow-x: clip !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow { position: relative !important; width: 100% !important; margin: 1rem 0 !important; --riv-primary: #2E6E93; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-slides-wrapper { position: relative !important; width: 100% !important; } #fv-chart-1780054953725-jxfr84byr-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-1780054953725-jxfr84byr-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-1780054953725-jxfr84byr-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-1780054953725-jxfr84byr-slideshow .fv-nav-btn svg { width: 18px !important; height: 18px !important; stroke-width: 3px !important; filter: none !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-nav-btn:hover { opacity: 0.9 !important; transform: translateY(-1px) !important; } #fv-chart-1780054953725-jxfr84byr-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-1780054953725-jxfr84byr-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-1780054953725-jxfr84byr-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-1780054953725-jxfr84byr-slideshow .fv-slideshow-select:focus { outline: 2px solid #2E6E93 !important; border-color: #2E6E93 !important; } /* Typography */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-chart { display: flex; flex-direction: column; width: 100%; margin-top: 1rem; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1.5rem; padding: 0 1rem; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select-wrapper { flex: 1; min-width: 0; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select-wrapper.fv-left { text-align: center; padding-right: 1rem; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select-wrapper.fv-right { text-align: center; padding-left: 1rem; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select-container { position: relative; display: inline-block; max-width: 100%; width: 100%; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-chevron { position: absolute; top: 50%; transform: translateY(-50%); pointer-events: none; width: 16px; height: 16px; flex-shrink: 0; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select-wrapper.fv-left .fv-versus-chevron { right: 0; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select-wrapper.fv-right .fv-versus-chevron { right: 0; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select.fv-select-left { text-align: center; direction: ltr; padding-right: 1.25rem; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select.fv-select-right { text-align: center; padding-right: 1.25rem; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-body { display: flex; flex-direction: column; gap: 1.5rem; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-row { position: relative; height: auto; padding-top: 20px; margin-bottom: 0.25rem; display: block; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-bar-container { position: relative; height: 32px; display: flex; align-items: center; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-bar-left-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-end; align-items: center; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-bar-right-wrapper { flex: 1; height: 100%; display: flex; justify-content: flex-start; align-items: center; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-bar-left { border-radius: 4px 0 0 4px; justify-content: flex-end; padding: 0 8px; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-inside-left { white-space: nowrap; flex-shrink: 0; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-inside-right { white-space: nowrap; flex-shrink: 0; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-val-text { font-family: 'Poppins', sans-serif; font-weight: 700; font-size: 14px; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-pct-diff { font-size: 12px; font-weight: 600; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-container { width: auto !important; margin-left: -1.5rem !important; margin-right: -1.5rem !important; margin-bottom: 2rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.fv-full-bleed .fv-image-compare-container { width: 100% !important; max-width: none !important; margin: 0 auto !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-handle.fv-image-compare-handle-square { border-radius: 6px !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-label-left { left: 1rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-label-right { right: 1rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-expand-btn, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-expand-btn:hover, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-close-btn:hover { background-color: rgba(0, 0, 0, 0.7) !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-close-btn { display: none !important; top: 1rem !important; bottom: auto !important; } /* Fullscreen State */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-inner:active { cursor: grabbing !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-expand-btn { display: none !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-close-btn { display: flex !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-image-compare-wrapper.fv-image-compare-fullscreen .fv-image-compare-label-right { right: 4rem !important; } /* Footer */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bottom-bar { display: flex !important; flex-direction: column !important; align-items: center !important; margin-top: 0.5rem !important; gap: 1rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-footer-content { text-align: center !important; width: 100% !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-dropdown-wrapper { text-align: center !important; margin-bottom: 16px !important; margin-top: 0 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-dropdown-title-container { position: relative !important; display: inline-block !important; max-width: 100% !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-dropdown-title:focus { outline: none !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-dropdown-title::-ms-expand { display: none !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-carousel-nav-btn:hover { border-color: #9ca3af !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-carousel-counter { font-size: 14px !important; color: #374151 !important; text-align: center !important; margin-top: 1rem !important; } /* Legend */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-legend-item { display: flex !important; align-items: center !important; gap: 6px !important; font-size: 14px !important; color: #374151 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-legend-color { width: 12px !important; height: 12px !important; border-radius: 3px !important; } /* Multi-Value Legend */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-multi-legend-swatch { width: 16px !important; height: 16px !important; border-radius: 3px !important; } /* Chart Core Styles */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-benchmark-group { margin-bottom: 1rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-row, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stacked-product { display: flex !important; align-items: center !important; width: 100% !important; margin-bottom: 0.75rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar:hover { opacity: 0.8 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-inner-label { white-space: nowrap !important; overflow: hidden !important; text-overflow: ellipsis !important; padding-right: 8px !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-inner-value { flex-shrink: 0 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-label.fv-primary-product { font-weight: bold !important; color: var(--riv-primary) !important; } /* Multi-Value Bar Logic */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-multi-bar-container { flex-direction: column !important; padding: 4px !important; align-items: stretch !important; gap: 4px !important; height: auto !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-multi-bar-item { display: flex !important; align-items: center !important; height: 25px !important; width: 100% !important; } /* Stacked Bar */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stacked-bar { display: flex !important; overflow: hidden !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stacked-segment:last-child { border-right: none !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-segment-value { font-size: 14px !important; font-weight: bold !important; } /* Grouped Bar */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-grouped-bar-product { display: flex !important; flex-direction: column !important; width: 100% !important; margin-bottom: 1.25rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-grouped-product-title-wrapper { padding-left: 150px !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-cluster { width: 100% !important; flex-grow: 1 !important; display: flex !important; flex-direction: column !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-cluster .fv-bar-row { margin-bottom: 3px !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-cluster .fv-bar-container { height: 20px !important; } /* Line Chart Grid */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .riv-grid line { stroke: #D1D5DB !important; stroke-dasharray: 3 3 !important; } /* X-Axis */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-x-axis-wrapper { display: flex !important; width: 100% !important; margin-top: 0.5rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-x-axis-label-space { width: 150px !important; padding-right: 10px !important; flex-shrink: 0 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-x-axis-chart-space { flex-grow: 1 !important; padding-right: 8px !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-x-axis-wrapper.fv-grouped-x-axis { margin-left: 0 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-x-axis-line { border-top: 1px solid #D1D5DB !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-x-axis-ticks span { position: relative !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-x-axis-unit { text-align: center !important; font-size: 14px !important; color: #374151 !important; margin-top: 8px !important; display: block !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stl-wrapper { position: relative !important; width: auto !important; display: block !important; margin: 0 auto !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.fv-full-bleed .fv-stl-container { width: 100% !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.fv-full-bleed .fv-stl-wrapper { width: 100% !important; max-width: none !important; margin: 0 auto !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stl-image { display: block !important; width: 100% !important; height: auto !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stl-hotspot-container { position: absolute !important; z-index: 10 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stl-hotspot-btn:hover { transform: scale(1.1) !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stl-hotspot-pulse { animation-fill-mode: none !important; } } /* Shop the look button */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stl-shop-all-btn span { overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stl-shop-all-btn:hover { background-color: #ffffff !important; transform: scale(1.05) !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr { 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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr { position: absolute !important; padding: 0 !important; align-items: flex-end !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr.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-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr.is-active .fv-stl-all-products-content { opacity: 1 !important; transform: scale(1) !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr.is-active .fv-stl-all-products-content { transform: translateY(0) !important; } /* V2 Bottom Sheet Style */ #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr.v2 { align-items: flex-end !important; padding: 0 !important; } @media (min-width: 640px) { #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr.v2:not(.mobile-view *) { justify-content: flex-end !important; } } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr.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-1780054953725-jxfr84byr.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-1780054953725-jxfr84byr.v2.is-active .fv-stl-all-products-content { transform: translateY(0) !important; opacity: 1 !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-header { padding: 0.75rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-logo { height: 1.5rem !important; width: auto !important; object-fit: contain !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-logo { height: 1.25rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-title { font-size: 1.25rem !important; font-weight: 700 !important; color: #111827 !important; margin: 0 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-title { font-size: 1.125rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-list { padding: 0.75rem !important; gap: 0.5rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-item { margin: 0 !important; padding: 0.25rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-link { padding: 0.5rem !important; border-radius: 0.75rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr .fv-stl-all-products-image-container { position: relative !important; margin-right: 1.25rem !important; flex-shrink: 0 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-image-container { margin-right: 0.75rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-image-wrapper { width: 4rem !important; height: 4rem !important; border-radius: 0.5rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-image { width: 100% !important; height: 100% !important; object-fit: cover !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-placeholder { width: 2rem !important; height: 2rem !important; color: #d1d5db !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-placeholder { width: 1.5rem !important; height: 1.5rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-info { margin-top: 0 !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-brand { font-size: 0.5625rem !important; margin: 0 0 0.25rem 0 !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-name { font-size: 0.875rem !important; margin: 0 0 0.25rem 0 !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-meta { display: flex !important; align-items: center !important; font-size: 0.875rem !important; margin-bottom: 0.375rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-meta { font-size: 0.75rem !important; margin-bottom: 0.25rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-price { font-weight: 700 !important; color: #111827 !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-sale-price { font-weight: 700 !important; color: #dc2626 !important; margin-right: 0.5rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-sale-price { margin-right: 0.375rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-original-price { color: #9ca3af !important; text-decoration: line-through !important; font-size: 0.75rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-original-price { font-size: 0.625rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-commentary { font-size: 0.75rem !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-action { width: 2rem !important; height: 2rem !important; margin-left: 0.75rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .fv-stl-all-products-action svg { width: 14px !important; height: 14px !important; } #fv-stl-all-products-modal-fv-chart-1780054953725-jxfr84byr .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-container { position: relative !important; width: auto !important; display: block !important; background-color: transparent !important; overflow: hidden !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-wrapper { position: relative !important; width: auto !important; display: block !important; margin: 0 auto !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.fv-full-bleed .fv-ia-container { width: 100% !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.fv-full-bleed .fv-ia-wrapper { width: 100% !important; max-width: none !important; margin: 0 auto !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-image { display: block !important; width: 100% !important; height: auto !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-node-container { position: absolute !important; z-index: 10 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-node-button:hover { transform: scale(1.1) !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-node-button:hover + .fv-ia-static-tooltip { display: block !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-logo-explore-bar .fv-logo { margin: 0 auto !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-explore-wrapper { position: absolute !important; right: 0 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-logo-explore-bar { flex-direction: column !important; min-height: auto !important; gap: 0.75rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-ia-explore-wrapper { position: static !important; align-self: flex-end !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-explore-btn svg { transition: transform 0.2s !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-explore-btn:hover svg { transform: translateX(2px) !important; } /* IA Modal Styles */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-active-modal-container { display: none !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-modals { display: block !important; position: static !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-modal-item { display: none !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-ia-close-button:hover { background: #e5e7eb !important; color: #111827 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-ia-node-description { font-size: 0.875rem !important; } /* Error Handling */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-labels > div { flex: 1 !important; text-align: center !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-digits > div.digit-box { flex: 1 !important; text-align: center !important; white-space: nowrap !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-digits > div.colon { flex: 0 0 auto !important; opacity: 0.5 !important; position: relative !important; top: -2px !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-container { padding: 2rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-title { font-size: 1.75rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-subhead { font-size: 1.25rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-digits { font-size: 2.25rem !important; letter-spacing: 0 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-labels { font-size: 0.875rem !important; padding: 0 1rem !important; margin-bottom: 1rem !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-box { padding: 1.5rem 0 !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-digits > div.colon { top: -4px !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-spike-l { left: -20px !important; border-top-width: 20px !important; border-bottom-width: 20px !important; border-right-width: 20px !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-digits { font-size: 3.5rem !important; letter-spacing: 0.05em !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-countdown-digits > div.colon { top: -5px !important; } } /* Mobile / Forced Mobile View / Labels on Top */ #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-pie-container, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-pie-container { flex-direction: column !important; gap: 1rem !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-grouped-product-title-wrapper, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-grouped-product-title-wrapper { padding-left: 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-bar-row, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-stacked-product, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-grouped-bar-product, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-bar-row, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-stacked-product, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-grouped-bar-product { flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-bar-label:not(.fv-grouped-product-title), #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-bar-label, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-grouped-product-title, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-bar-label, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-bar-container, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-bar-cluster, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-bar-container, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-bar-cluster { width: 100% !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-x-axis-wrapper, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-x-axis-wrapper { margin-left: 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-x-axis-label-space, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-x-axis-label-space { display: none !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-x-axis-chart-space, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-x-axis-chart-space { padding-right: 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-benchmark-title, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-benchmark-title { font-size: 16px !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-dropdown-title, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-dropdown-title { font-size: 16px !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-carousel-nav-btn, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-carousel-nav-btn { padding: 8px 12px !important; font-size: 14px !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-chart-title, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-chart-title { padding: 0 8px !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-chart-subhead, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-chart-subhead { padding: 0 8px !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-versus-header, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-versus-header { flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-versus-select-wrapper, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-versus-select-wrapper { flex: 1 !important; min-width: 0 !important; width: 100% !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-versus-select-wrapper.fv-left, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-versus-select-wrapper.fv-left { text-align: center !important; padding-right: 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-versus-select-wrapper.fv-right, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-versus-select-wrapper.fv-right { text-align: center !important; padding-left: 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-versus-select.fv-select-left, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-versus-select.fv-select-left { text-align: center !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-versus-select.fv-select-right, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-versus-select.fv-select-right { text-align: center !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-versus-vs, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-versus-vs { text-align: center !important; padding: 0.25rem 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-versus-select-container, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-versus-select-container { max-width: 100% !important; width: 100% !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-versus-select, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-versus-select { font-size: 14px !important; width: 100% !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-stl-shop-all-btn, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-stl-shop-all-logo, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-stl-shop-all-icon, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-stl-shop-all-logo, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-stl-shop-all-icon { width: 2rem !important; height: 2rem !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-stl-shop-all-icon svg, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.labels-on-top .fv-stl-shop-all-icon svg { width: 14px !important; height: 14px !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view .fv-y-axis-title { padding-left: 5% !important; /* (30/600) for mobile view */ } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.mobile-view.fv-contains-line-chart .fv-footer-content { margin-left: -1rem !important; margin-right: -1rem !important; } @media (max-width: 599px) { #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-pie-container { flex-direction: column !important; gap: 1rem !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-grouped-product-title-wrapper { padding-left: 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-row, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stacked-product, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-grouped-bar-product { flex-direction: column !important; align-items: flex-start !important; margin-bottom: 1.25rem !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-label, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-container, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-bar-cluster { width: 100% !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-x-axis-wrapper { margin-left: 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-x-axis-label-space { display: none !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-x-axis-chart-space { padding-right: 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-benchmark-title { font-size: 16px !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-dropdown-title { font-size: 16px !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-carousel-nav-btn { padding: 8px 12px !important; font-size: 14px !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-chart-title { padding: 0 8px !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-chart-subhead { padding: 0 8px !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-header { flex-direction: column !important; align-items: center !important; padding: 0 !important; gap: 0.5rem !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select-wrapper { flex: 1 !important; min-width: 0 !important; width: 100% !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select-wrapper.fv-left { text-align: center !important; padding-right: 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select-wrapper.fv-right { text-align: center !important; padding-left: 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select.fv-select-left { text-align: center !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select.fv-select-right { text-align: center !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-vs { text-align: center !important; padding: 0.25rem 0 !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select-container { max-width: 100% !important; width: 100% !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-versus-select { font-size: 14px !important; width: 100% !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .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-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stl-shop-all-logo, #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stl-shop-all-icon { width: 2rem !important; height: 2rem !important; }#fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-stl-shop-all-icon svg { width: 14px !important; height: 14px !important; } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper .fv-y-axis-title { padding-left: 5% !important; /* (30/600) for mobile view */ } #fv-chart-1780054953725-jxfr84byr-slideshow .fv-chart-wrapper.fv-contains-line-chart .fv-footer-content { margin-left: -1rem !important; margin-right: -1rem !important; } } [{ "@context": "https://schema.org", "@type": "Dataset", "name": "Overall Chart Title", "description": "Subhead to describe the test and what's being measured and why", "creator": { "@type": "Organization", "name": "TechRadar", "logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png" }, "isAccessibleForFree": true, "dateCreated": "2026-05-29T11:42:33.728Z", "keywords": [ "Google Fitbit Air", "Apple Watch Ultra 3", "Average heart rate", "benchmark", "comparison", "performance", "review", "TechRadar" ], "measurementTechnique": "Performance Benchmarking", "variableMeasured": [ { "@type": "PropertyValue", "name": "Google Fitbit Air – Average heart rate", "value": 158, "unitText": "" }, { "@type": "PropertyValue", "name": "Apple Watch Ultra 3 – Average heart rate", "value": 161, "unitText": "" } ]},{ "@context": "https://schema.org", "@type": "Dataset", "name": "Overall Chart Title", "description": "Subhead to describe the test and what's being measured and why", "creator": { "@type": "Organization", "name": "TechRadar", "logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png" }, "isAccessibleForFree": true, "dateCreated": "2026-05-29T11:42:33.728Z", "keywords": [ "Google Fitbit Air", "Apple Watch Ultra 3", "Average Pace", "benchmark", "comparison", "performance", "review", "TechRadar" ], "measurementTechnique": "Performance Benchmarking", "variableMeasured": [ { "@type": "PropertyValue", "name": "Google Fitbit Air – Average Pace", "value": 5.37, "unitText": "" }, { "@type": "PropertyValue", "name": "Apple Watch Ultra 3 – Average Pace", "value": 5.47, "unitText": "" } ]},{ "@context": "https://schema.org", "@type": "Dataset", "name": "Overall Chart Title", "description": "Subhead to describe the test and what's being measured and why", "creator": { "@type": "Organization", "name": "TechRadar", "logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png" }, "isAccessibleForFree": true, "dateCreated": "2026-05-29T11:42:33.728Z", "keywords": [ "Google Fitbit Air", "Apple Watch Ultra 3", "Calories burned", "benchmark", "comparison", "performance", "review", "TechRadar" ], "measurementTechnique": "Performance Benchmarking", "variableMeasured": [ { "@type": "PropertyValue", "name": "Google Fitbit Air – Calories burned", "value": 773, "unitText": "" }, { "@type": "PropertyValue", "name": "Apple Watch Ultra 3 – Calories burned", "value": 750, "unitText": "" } ]},{ "@context": "https://schema.org", "@type": "Dataset", "name": "Overall Chart Title", "description": "Subhead to describe the test and what's being measured and why", "creator": { "@type": "Organization", "name": "TechRadar", "logo": "https://cdn.mos.cms.futurecdn.net/dAwPEozB9GMMhAngdFJTHb.png" }, "isAccessibleForFree": true, "dateCreated": "2026-05-29T11:42:33.728Z", "keywords": [ "Google Fitbit Air", "Apple Watch Ultra 3", "Distance", "benchmark", "comparison", "performance", "review", "TechRadar" ], "measurementTechnique": "Performance Benchmarking", "variableMeasured": [ { "@type": "PropertyValue", "name": "Google Fitbit Air – Distance", "value": 10.43, "unitText": "" }, { "@type": "PropertyValue", "name": "Apple Watch Ultra 3 – Distance", "value": 10.03, "unitText": "" } ]}] Previous 1 / 4 Next Average heart rate Google Fitbit Air 158 Apple Watch Ultra 3 161 050100150200 Average heart rate Data ProductValue Google Fitbit Air 158 Apple Watch Ultra 3 161 Average Pace Google Fitbit Air 5.37 Apple Watch Ultra 3 5.47 01.534.56 Average Pace Data ProductValue Google Fitbit Air 5.37 Apple Watch Ultra 3 5.47 Calories burned Google Fitbit Air 773 Apple Watch Ultra 3 750 0200400600800 Calories burned Data ProductValue Google Fitbit Air 773 Apple Watch Ultra 3 750 Distance Google Fitbit Air 10.43 Apple Watch Ultra 3 10.03 03.757.511.2515 Kilometers Distance Data ProductValue Google Fitbit Air 10.43 Apple Watch Ultra 3 10.03 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 (true) { var slideshowContainer = document.getElementById(uniqueId + '-slideshow'); if (slideshowContainer) { var slides = slideshowContainer.querySelectorAll('.fv-slide'); slides.forEach(function(slide) { setupWrapper(slide.querySelector('.fv-chart-wrapper')); }); } var slideshowContainer = document.getElementById(uniqueId + '-slideshow'); /* Check if container exists to prevent errors */ if (slideshowContainer) { var currentSlideIndex = 0; var slides = slideshowContainer.querySelectorAll('.fv-slide'); var counter = slideshowContainer.querySelector('.fv-slide-counter'); var prevBtn = slideshowContainer.querySelector('.fv-nav-btn.prev'); var nextBtn = slideshowContainer.querySelector('.fv-nav-btn.next'); var dropdown = slideshowContainer.querySelector('.fv-slideshow-select'); function updateControls(index) { if (counter) counter.textContent = (index + 1) + ' / ' + slides.length; if (dropdown) dropdown.value = index; if (prevBtn) { if (index === 0) prevBtn.classList.add('disabled'); else prevBtn.classList.remove('disabled'); } if (nextBtn) { if (index === slides.length - 1) nextBtn.classList.add('disabled'); else nextBtn.classList.remove('disabled'); } } function showSlide(index) { if (index < 0) return; /* index = slides.length - 1; // Disable loop for linear nav style */ if (index >= slides.length) return; /* index = 0; */ currentSlideIndex = index; slides.forEach(function(slide, i) { slide.style.display = i === index ? 'block' : 'none'; if (i === index) { /* Re-trigger animations for the active slide */ var chartEl = slide.querySelector('.fv-chart-wrapper'); if (chartEl && window.fvAnimateCharts) { window.fvAnimateCharts(chartEl); } } }); updateControls(currentSlideIndex); } if (prevBtn) { prevBtn.addEventListener('click', function() { showSlide(currentSlideIndex - 1); }); } if (nextBtn) { nextBtn.addEventListener('click', function() { showSlide(currentSlideIndex + 1); }); } if (dropdown) { dropdown.addEventListener('change', function(e) { showSlide(parseInt(e.target.value)); }); } /* Initial setup */ updateControls(currentSlideIndex); /* Initial animation for the first slide */ if (slides.length > 0) { var firstChart = slides[0].querySelector('.fv-chart-wrapper'); if (firstChart && window.fvAnimateCharts) { setTimeout(function() { window.fvAnimateCharts(firstChart); }, 100); } } } } else { setupWrapper(root); } } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function() { initialize('fv-chart-1780054953725-jxfr84byr', true); }); } else { initialize('fv-chart-1780054953725-jxfr84byr', true); } })();My experience of tracking my sleep with the same two devices — I wore one on each wrist — was similar to the above, with close enough metrics but slightly different outcomes.
The Fitbit Air’s total sleep time estimation was within five minutes of the Apple Watch, and sleep stages were similar. However, while my sleep score was 90 with the Apple Watch, Fitbit registered it as only 81, citing a 10-point difference in sleep quality. However, the Google Fitbit Air’s sleep tracking has consistently registered my wake-up times during testing, successfully recording my early-hours bathroom trips and my cat jumping on my legs at 5am.
Apple HealthFutureGoogle HealthFutureBecause of the lack of a screen, GPS, and specialist metrics, regular runners won’t get a whole lot out of the Fitbit Air. Compared to my usual wealth of data from Apple or the best Garmin watches, I found it lacking, and my GPS map — imported from my phone, as the Air has no GPS of its own —- inaccurate, off by 400m compared to the Apple Watch.
Battery life is excellent, exceeding the seven days the device promised. Charging is fast, with just five minutes delivering a full day of battery life, and a full charge taking around an hour. The device is very comfortable to wear, as previously mentioned — I’ve barely needed to take it off all week.
Category
Comment
Score
Value
Very well priced compared to rivals.
4.5
Design
Great tracker, flawed app.
3.5
Features
Limited free options, expansive Premium AI tools.
4
Performance
Excellent in most areas.
4.5
Google Fitbit Air: Should I buy?Buy it if...You want an affordable fitness tracker
The Google Fitbit Air is likely to shoot to the top of our best cheap fitness tracker list.
You like the AI chatbot interface
Google Health’s Premium service is entirely dependent on using and interacting with an AI companion.
You want a screenless focus band
Even at the basic free level, a slim screenless band to record all your metrics makes for a nice fitness tracking experience.
Don't buy it if...You’re a runner
You’ll be better served with one of the best Garmin watches.
Money is no object
For serial health optimizers looking to splash some cash, the Whoop app is better.
You’re concerned about data privacy
Google has pledged not to use Fitbit data for its ads business, but if you’re still concerned about feeding all your data to Google’s AI algorithms, maybe avoid the Fitbit Air.
Also considerWhoop 5.0 & Whoop MG
The Google Fitbit Air's biggest screenless rival.
Read our full Whoop review
Oura Ring 4
Another screenless favorite, albeit another premium subscription-based option.
Read our full Oura Ring 4 review
Samsung Galaxy Fit 3
Samsung's affordable fitness tracker, and a real bargain.
Read our full Samsung Galaxy Fit 3 review
How I testedI wore the Google Fitbit Air for eight days straight. I ran a 10K while wearing an Apple Watch Ultra 3 and (malfunctioning) Polar H10 chest strap, and a shorter run with a Huawei Watch Fit 5 Pro, as comparison testing alongside my usual workout routines. I also wore the Apple and Fitbit side-by-side during sleep. I tested its alarm, tried the features of its premium Health Coach, and used the app's workout and mindfulness content.
First reviewed: June 2026