{"product_id":"2024-f-one-origin-wing","title":"F-One Origin","description":"\u003cp\u003e\u003cmeta charset=\"UTF-8\"\u003e \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\u003c\/p\u003e\n\u003cstyle\u003e\u003c!--\n  .popup-container {\n    cursor: pointer;\n  }\n\n  .popup-text {\n    display: none;\n    position: absolute;\n    background-color: #f9f9f9;\n    border: 1px solid #ccc;\n    border-radius: 5px;\n    padding: 40px;\n    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    z-index: 2;\n    width: 900px;\n    left: 20%; \/* Center horizontally *\/\n    top: 98%; \/* Center vertically *\/\n    transform: translate(-10%, -10%); \/* Center both horizontally and vertically *\/\n  }\n\n  .popup-container:hover .popup-text {\n    display: block;\n  }\n\n  \/* Media Query for Mobile Devices with Width \u003c= 400px *\/\n  @media (max-width: 750px) {\n    .popup-text {\n      width: 90%; \/* Adjust the width as needed for mobile devices *\/\n      left: 50%; \/* Center the pop-up horizontally on mobile devices *\/\n      top: 95%; \/* Center the pop-up horizontally on mobile devices *\/\n      transform: translateX(-50%); \/* Center the pop-up using transform *\/\n    }\n  }\n\n  \/* Additional styles to center the popup text trigger within its parent column *\/\n  .custom-popup-column {\n    display: flex;\n    justify-content: center;\n    position: relative;\n  }\n\n  * {\n    box-sizing: border-box;\n  }\n    .mySlides {\n        display: none\n    }\n\n    img {\n        vertical-align: middle;\n    }\n\n    \/* Slideshow container *\/\n    .slideshow-container {\n        max-width: 100%;\n        position: relative;\n        margin: 0 auto;\n        overflow: hidden;\n        \/* Hide horizontal overflow caused by touch sliding *\/\n        touch-action: pan-y;\n        \/* Enable vertical touch scrolling *\/\n    }\n\n    \/* Slideshow caption *\/\n    .slide-caption {\n        padding: 20px 30px 0px 50px;\n    }\n\n  .numbertext {\n    position: absolute;\n    top: 2%;\n    left: 3%;\n    z-index: 1; \/* Changed to 1 *\/\n    color: #00a885;\n    font-size: 12px;\n}\n\n    \/* Next \u0026 previous buttons *\/\n    .prev,\n    .next {\n        cursor: pointer;\n        position: absolute;\n        top: 50%;\n        width: auto;\n        padding-left: 20px;\n        padding-right: 5px;\n        margin-top: -22px;\n        color: #00a885;\n        font-weight: bold;\n        font-size: 35px;\n        transition: 0.6s ease;\n        border-radius: 0 3px 3px 0;\n        user-select: none;\n        z-index: 1;\n        \/* Ensures the buttons appear on top of the image *\/\n    }\n\n    \/* Position the \"next button\" to the right *\/\n    .next {\n        right: 0;\n        border-radius: 3px 0 0 3px;\n    }\n\n    \/* The dots\/bullets\/indicators *\/\n    .dot {\n        cursor: pointer;\n        height: 5px;\n        width: 5px;\n        margin: 0 2px;\n        background-color: #00a885;\n        border-radius: 50%;\n        display: inline-block;\n        transition: background-color 0.6s ease;\n    }\n\n    .dot.active {\n        background-color: #000000;\n        \/* Set the active dot to black *\/\n    }\n\n    \/* Fading animation *\/\n    .fade {\n        animation-name: fade;\n        animation-duration: 1.5s;\n    }\n\n    @keyframes fade {\n        from {\n            opacity: .4\n        }\n\n        to {\n            opacity: 1\n        }\n    }\n\n    \/* Two-column layout for large devices *\/\n    .slide-content {\n        display: flex;\n        flex-direction: row;\n    }\n\n    .slide-image {\n        flex: 1;\n    }\n\n    .slide-caption {\n        flex: 1;\n        padding-left: 20px;\n        text-align: left;\n    }\n\n    \/* On small devices, stack image and caption vertically *\/\n    @media only screen and (max-width: 767px) {\n        .slide-content {\n            flex-direction: column;\n        }\n\n        .slide-image,\n        .slide-caption {\n            padding-left: 0;\n            text-align: center;\n        }\n\n        .slide-image img {\n            max-width: 100%;\n        }\n\n        \/* Hide previous and next buttons on mobile *\/\n        .prev,\n        .next {\n            display: none;\n        }\n    }\n      \n        .progress-container {\n            display: flex;\n            justify-content: space-between;\n            background-color: #f9f9f9;\n            padding: 40px 25px 60px 25px;\n        }\n        .progress-ring {\n            width: 150px;\n            height: 150px;\n            position: relative;\n            text-align: center;\n        }\n        .progress-ring circle {\n            fill: transparent;\n            stroke: #ff6800;\n            stroke-width: 15;\n            transform: rotate(-90deg);\n            transform-origin: 50% 50%;\n            transition: stroke-dashoffset 0.5s;\n        }\n        .progress-ring .ring-background {\n            fill: transparent;\n            stroke: #ccc;\n            stroke-width: 15;\n            transform: rotate(-90deg);\n            transform-origin: 50% 50%;\n        }\n        .progress-text {\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%);\n            font-size: 24px;\n        }\n        .progress-title {\n            font-size: 20px;\n          color: black;\n            margin-top: 10px;\n        }\n\n        @media (max-width: 768px) {\n            .progress-container {\n                flex-direction: column;\n                align-items: center;\n            }\n            .progress-ring {\n                margin-bottom: 50px;\n            }\n        }\n    \n--\u003e\u003c\/style\u003e\n\u003ch3 class=\"jeff\"\u003eTHE ORIGINAL FEELING\u003c\/h3\u003e\n\u003chr style=\"border: none; border-top: 1px solid #B3B3B3; width: 30%; margin: 0 0 20px 0;\"\u003e\n\u003cdiv class=\"container_fluid\"\u003e\n\u003cdiv class=\"row\"\u003e\n\u003cdiv class=\"col-md-6 order-md-last\"\u003e\u003ciframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/oUWvTrw6KQM\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"\u003e\u003c\/iframe\u003e\u003c\/div\u003e\n\u003cdiv class=\"col-md-6\"\u003e\n\u003cp style=\"text-align: justify;\"\u003eThe original feeling returns with the ORIGIN, F-ONE’s new wing. As its name indicates, the ORIGIN is a wing that recalls the easy, comfortable feel of our original wings, with which many discovered and first tasted the thrill of wing foiling.\n\u003c\/p\u003e\n\u003cul\u003e\n  \u003cli\u003eAn accessible, light, and forgiving wing\u003c\/li\u003e\n  \u003cli\u003eLegendary pumping and easy take-offs\u003c\/li\u003e\n  \u003cli\u003eOptimized design for extra lightness and comfort\u003c\/li\u003e\n  \u003cli\u003eImpressive freefly abilities in light wind\u003c\/li\u003e\n  \u003cli\u003eEquipped with our new interchangeable handle system\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003eFEATURES\u003c\/h3\u003e\n\u003chr style=\"border: none; border-top: 1px solid #B3B3B3; width: 30%; margin: 0 0 20px 0;\"\u003e\n\u003cdiv class=\"slideshow-container\"\u003e\n\u003c!-- Slide 1 --\u003e\n\u003cdiv class=\"mySlides fade\"\u003e\n\u003cdiv class=\"numbertext\"\u003e1\/6\u003c\/div\u003e\n\u003cdiv class=\"slide-content\"\u003e\n\u003cdiv class=\"slide-image col-md-6 col-sm-12\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0512\/0838\/8795\/files\/F-One_ORIGIN_wing_details_2024-canopy.jpg?v=1718277211\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"slide-caption col-md-6 col-sm-12\"\u003e\n\u003ch4 class=\"jeff\"\u003eADAPTIVE WING DESIGN\u003c\/h4\u003e\n\u003cp style=\"text-align: justify;\"\u003eWhile the industry trends towards the “all-rigid”, we have developed the Adaptive Wing Design, a unique concept offering the perfect balance between performance and comfort.\n\nIt is difficult and uncomfortable to handle a stiff, handheld wing in the high end, especially without a harness. A wing must be able to absorb that power, just like the mast bend or the opening of the leech in windsurfing or the depower in kitesurfing.\nThe Adaptive Wing Design transforms every gust into positive energy and enables a perfect control of the traction. This new wing is designed to adapt through a controlled deformation that allows the preservation of a high-performance profile and unprecedented stability throughout the entire range of use.\nTo reach this result, we worked on the leading edge and modified the shape of the central strut. Its cut is now segmented, allowing for an improved control of its curve and its deformations. We also enhanced the wing’s twist.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Slide 2 --\u003e\n\u003cdiv class=\"mySlides fade\"\u003e\n\u003cdiv class=\"numbertext\"\u003e2\/6\u003c\/div\u003e\n\u003cdiv class=\"slide-content\"\u003e\n\u003cdiv class=\"slide-image col-md-6 col-sm-12\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0512\/0838\/8795\/files\/F-One_SWING_V4_wing_details_2024-kevlar_reinfrocements.jpg?v=1718272851\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"slide-caption col-md-6 col-sm-12\"\u003e\n\u003ch4 class=\"jeff\"\u003eORIGIN KEVLAR REINFORCEMENTS\u003c\/h4\u003e\n\u003cp style=\"text-align: justify;\"\u003eThe wingtips are protected with abrasion-resistant Kevlar® fabric reinforcements.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Slide 3 --\u003e\n\u003cdiv class=\"mySlides fade\"\u003e\n\u003cdiv class=\"numbertext\"\u003e3\/6\u003c\/div\u003e\n\u003cdiv class=\"slide-content\"\u003e\n\u003cdiv class=\"slide-image col-md-6 col-sm-12\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0512\/0838\/8795\/files\/F-One_Origin_wing_details_2024-radial_wing_tips.jpg?v=1718277211\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"slide-caption col-md-6 col-sm-12\"\u003e\n\u003ch4 class=\"jeff\"\u003eRADIALS TIPS\u003c\/h4\u003e\n\u003cp style=\"text-align: justify;\"\u003eSmall radial cuts are also implemented on the wingtips and on the back of the strut to spread tensions. Aligning the fibre exactly along the load paths means that stretch can be controlled to a never-before-seen level on a wing.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Slide 4 --\u003e\n\u003cdiv class=\"mySlides fade\"\u003e\n\u003cdiv class=\"numbertext\"\u003e4\/6\u003c\/div\u003e\n\u003cdiv class=\"slide-content\"\u003e\n\u003cdiv class=\"slide-image col-md-6 col-sm-12\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0512\/0838\/8795\/files\/F-One_ORIGIN_wing_details_2024-load_diffuser.jpg?v=1718277383\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"slide-caption col-md-6 col-sm-12\"\u003e\n\u003ch4 class=\"jeff\"\u003eLOAD DIFFUSER ORIGIN\u003c\/h4\u003e\n\u003cp style=\"text-align: justify;\"\u003eLocated on the back of the strut, our innovative Load Diffuser made of overlapping panels of hard Mylar and Dacron further helps maintaining the profile sleek and efficient, leading to the ultimate stability, performances, and longevity.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Slide 5 --\u003e\n\u003cdiv class=\"mySlides fade\"\u003e\n\u003cdiv class=\"numbertext\"\u003e5\/6\u003c\/div\u003e\n\u003cdiv class=\"slide-content\"\u003e\n\u003cdiv class=\"slide-image col-md-6 col-sm-12\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0512\/0838\/8795\/files\/F-One_SWING_V4_wing_details_2024-valves.jpg?v=1718272852\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"slide-caption col-md-6 col-sm-12\"\u003e\n\u003ch4 class=\"jeff\"\u003eORIGIN VALVES\u003c\/h4\u003e\n\u003cp style=\"text-align: justify;\"\u003eThe wing features two highly efficient inflation valves: one on the central strut and one on the leading edge. These two areas of the wing face different forces, and thus require two different pressure recommendations. As a result, the central strut is thinner in diameter and gains in rigidity thanks to its independent valve that allows for a better control of its pressure.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Slide 6 --\u003e\n\u003cdiv class=\"mySlides fade\"\u003e\n\u003cdiv class=\"numbertext\"\u003e6\/6\u003c\/div\u003e\n\u003cdiv class=\"slide-content\"\u003e\n\u003cdiv class=\"slide-image col-md-6 col-sm-12\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0512\/0838\/8795\/files\/F-One_CWC_wing_details_2024-handles.jpg?v=1718195569\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"slide-caption col-md-6 col-sm-12\"\u003e\n\u003ch4 class=\"jeff\"\u003eINTERCHANGEABLE WING HANDLES SYSTEM\u003c\/h4\u003e\n\u003cp style=\"text-align: justify;\"\u003eIn 2024, all our wings are fitted with our new interchangeable handle system. Whether you’re looking for a light and comfortable setup with soft handles, a more direct and aggressive ride with hard handles or something in between with our innovative hybrid handles, we’ve got you covered. \u003cbr\u003eWings come with soft handles pre-installed, but swapping a handle set between wings is quick and easy thanks to our screwless setup.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Previous and Next buttons will show on larger screens --\u003e \u003ca class=\"prev\" onclick=\"plusSlides(-1)\"\u003e❮\u003c\/a\u003e \u003ca class=\"next\" onclick=\"plusSlides(1)\"\u003e❯\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cdiv style=\"text-align: center; margin-top: -20px;\"\u003e\n\u003cspan class=\"dot\" onclick=\"currentSlide(1)\"\u003e\u003c\/span\u003e \u003cspan class=\"dot\" onclick=\"currentSlide(2)\"\u003e\u003c\/span\u003e \u003cspan class=\"dot\" onclick=\"currentSlide(3)\"\u003e\u003c\/span\u003e \u003cspan class=\"dot\" onclick=\"currentSlide(4)\"\u003e\u003c\/span\u003e \u003cspan class=\"dot\" onclick=\"currentSlide(5)\"\u003e\u003c\/span\u003e \u003cspan class=\"dot\" onclick=\"currentSlide(6)\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003ePERFORMANCE\u003c\/h3\u003e\n\u003chr color=\"B3B3B3\" align=\"left\" width=\"100%\"\u003e\n\u003cdiv class=\"progress-container\"\u003e\n\u003cdiv class=\"progress-ring\" id=\"ring1\" data-progress=\"40\"\u003e\n\u003csvg width=\"150\" height=\"150\"\u003e \u003ccircle class=\"ring-background\" cx=\"75\" cy=\"75\" r=\"65\"\u003e\u003c\/circle\u003e \u003ccircle class=\"ring\" cx=\"75\" cy=\"75\" r=\"65\"\u003e\u003c\/circle\u003e \u003c\/svg\u003e\n\u003cdiv class=\"progress-title\"\u003eFreestyle\u003c\/div\u003e\n\u003cdiv class=\"progress-text\" id=\"progress1\"\u003e0%\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"progress-ring\" id=\"ring2\" data-progress=\"80\"\u003e\n\u003csvg width=\"150\" height=\"150\"\u003e \u003ccircle class=\"ring-background\" cx=\"75\" cy=\"75\" r=\"65\"\u003e\u003c\/circle\u003e \u003ccircle class=\"ring\" cx=\"75\" cy=\"75\" r=\"65\"\u003e\u003c\/circle\u003e \u003c\/svg\u003e\n\u003cdiv class=\"progress-title\"\u003eSurf\u003c\/div\u003e\n\u003cdiv class=\"progress-text\" id=\"progress2\"\u003e0%\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"progress-ring\" id=\"ring3\" data-progress=\"90\"\u003e\n\u003csvg width=\"150\" height=\"150\"\u003e \u003ccircle class=\"ring-background\" cx=\"75\" cy=\"75\" r=\"65\"\u003e\u003c\/circle\u003e \u003ccircle class=\"ring\" cx=\"75\" cy=\"75\" r=\"65\"\u003e\u003c\/circle\u003e \u003c\/svg\u003e\n\u003cdiv class=\"progress-title\"\u003eFreefly\u003c\/div\u003e\n\u003cdiv class=\"progress-text\" id=\"progress3\"\u003e0%\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"progress-ring\" id=\"ring4\" data-progress=\"50\"\u003e\n\u003csvg width=\"150\" height=\"150\"\u003e \u003ccircle class=\"ring-background\" cx=\"75\" cy=\"75\" r=\"65\"\u003e\u003c\/circle\u003e \u003ccircle class=\"ring\" cx=\"75\" cy=\"75\" r=\"65\"\u003e\u003c\/circle\u003e \u003c\/svg\u003e\n\u003cdiv class=\"progress-title\"\u003eSpeed\u003c\/div\u003e\n\u003cdiv class=\"progress-text\" id=\"progress4\"\u003e0%\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003eWIND RANGE\u003c\/h3\u003e\n\u003chr style=\"border: none; border-top: 1px solid #B3B3B3; width: 30%; margin: 0 0 20px 0;\"\u003e\n\u003cdiv class=\"table-responsive table-bordered\"\u003e\n  \u003ctable class=\"table\" style=\"width: 100%; table-layout: auto;\"\u003e\n\u003ctbody style=\"border-color: rgba(33,37,41,0); border-left: 0px none rgba(128,128,128,0);\"\u003e\n\u003ctr style=\"background: black;\"\u003e\n\u003ctd\u003e\u003cspan style=\"color: #ffffff;\"\u003eWING SIZE m²\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003cspan style=\"color: #ffffff;\"\u003e2.0\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003cspan style=\"color: #ffffff;\"\u003e2.5\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003cspan style=\"color: #ffffff;\"\u003e3.0\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003cspan style=\"color: #ffffff;\"\u003e3.5\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003cspan style=\"color: #ffffff;\"\u003e4.0\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003cspan style=\"color: #ffffff;\"\u003e4.5\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003cspan style=\"color: #ffffff;\"\u003e5.0\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd\u003e\u003cspan style=\"color: #ffffff;\"\u003e5.5\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eWIND RANGE kts\u003c\/td\u003e\n\u003ctd\u003e35+\u003c\/td\u003e\n\u003ctd\u003e30+\u003c\/td\u003e\n\u003ctd\u003e28 – 38\u003c\/td\u003e\n\u003ctd\u003e25 – 35\u003c\/td\u003e\n\u003ctd\u003e22 – 32\u003c\/td\u003e\n\u003ctd\u003e18 – 28\u003c\/td\u003e\n\u003ctd\u003e14 – 25\u003c\/td\u003e\n\u003ctd\u003e12 – 22\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n     let slideIndex = 1;\n    showSlides(slideIndex);\n\n    function plusSlides(n) {\n        showSlides(slideIndex += n);\n    }\n\n    function currentSlide(n) {\n        showSlides(slideIndex = n);\n    }\n\n    function showSlides(n) {\n        let i;\n        let slides = document.getElementsByClassName(\"mySlides\");\n        let dots = document.getElementsByClassName(\"dot\");\n        if (n \u003e slides.length) {\n            slideIndex = 1\n        }\n        if (n \u003c 1) {\n            slideIndex = slides.length\n        }\n        for (i = 0; i \u003c slides.length; i++) {\n            slides[i].style.display = \"none\";\n        }\n        for (i = 0; i \u003c dots.length; i++) {\n            dots[i].className = dots[i].className.replace(\" active\", \"\");\n        }\n        slides[slideIndex - 1].style.display = \"block\";\n        dots[slideIndex - 1].className += \" active\";\n    }\n    \/\/ Touch events for sliding on mobile\n    let touchStartX = 0;\n    let touchEndX = 0;\n    document.querySelector('.slideshow-container').addEventListener('touchstart', function(event) {\n        touchStartX = event.touches[0].clientX;\n    });\n    document.querySelector('.slideshow-container').addEventListener('touchend', function(event) {\n        touchEndX = event.changedTouches[0].clientX;\n        handleSwipe();\n    });\n\n    function handleSwipe() {\n        if (touchStartX - touchEndX \u003e 50) {\n            plusSlides(1); \/\/ Swipe left, show next slide\n        } else if (touchEndX - touchStartX \u003e 50) {\n            plusSlides(-1); \/\/ Swipe right, show previous slide\n        }\n    }\n        function animateProgress(ringId, from, to, duration) {\n            const ring = document.querySelector(`#ring${ringId} .ring`);\n            const text = document.getElementById(`progress${ringId}`);\n            const title = document.querySelector(`#ring${ringId} .progress-title`);\n            const circumference = 2 * Math.PI * 65; \/\/ Hardcoding the radius as 65 for this example\n            const increment = (to - from) \/ (duration * 60);\n            let current = from;\n\n            function update() {\n                if ((increment \u003e 0 \u0026\u0026 current \u003c to) || (increment \u003c 0 \u0026\u0026 current \u003e to)) {\n                    const offset = circumference - (current \/ 100) * circumference;\n                    ring.style.strokeDasharray = `${circumference} ${circumference}`;\n                    ring.style.strokeDashoffset = offset;\n                    text.textContent = `${Math.round(current)}%`;\n\n                    current += increment;\n                    requestAnimationFrame(update);\n                } else {\n                    const offset = circumference - (to \/ 100) * circumference;\n                    ring.style.strokeDashoffset = offset;\n                    text.textContent = `${to}%`;\n                }\n            }\n\n            update();\n        }\n\n        function handleIntersection(entries, observer) {\n            entries.forEach((entry) =\u003e {\n                if (entry.isIntersecting) {\n                    const ringId = entry.target.id.replace('ring', '');\n                    const from = 0;\n                    const to = parseInt(entry.target.getAttribute('data-progress'), 10);\n                    animateProgress(ringId, from, to, 2);\n                    observer.unobserve(entry.target);\n                }\n            });\n        }\n\n        const rings = document.querySelectorAll('.progress-ring');\n\n        const observer = new IntersectionObserver(handleIntersection, {\n            root: null,\n            rootMargin: '0px',\n            threshold: 0.2 \/\/ Adjust this threshold as needed\n        });\n\n        rings.forEach((ring) =\u003e {\n            observer.observe(ring);\n        });\n    \u003c\/script\u003e","brand":"F-One","offers":[{"title":"2.0m \/ Onyx\/Glacier","offer_id":48808815657297,"sku":"FW24-77241-1101-2.0C","price":879.0,"currency_code":"EUR","in_stock":false},{"title":"2.0m \/ Glacier\/Flame","offer_id":48808685109585,"sku":"FW24-77241-1101-2.0B","price":879.0,"currency_code":"EUR","in_stock":false},{"title":"2.0m \/ Abyss\/Flame","offer_id":48808684814673,"sku":"FW24-77241-1101-2.0A","price":879.0,"currency_code":"EUR","in_stock":false},{"title":"2.5m \/ Onyx\/Glacier","offer_id":48808815690065,"sku":"FW24-77241-1101-2.5C","price":899.0,"currency_code":"EUR","in_stock":false},{"title":"2.5m \/ Glacier\/Flame","offer_id":48808685142353,"sku":"FW24-77241-1101-2.5B","price":899.0,"currency_code":"EUR","in_stock":false},{"title":"2.5m \/ Abyss\/Flame","offer_id":48808684847441,"sku":"FW24-77241-1101-2.5A","price":899.0,"currency_code":"EUR","in_stock":false},{"title":"3.0m \/ Onyx\/Glacier","offer_id":48808815722833,"sku":"FW24-77241-1101-3.0C","price":919.0,"currency_code":"EUR","in_stock":false},{"title":"3.0m \/ Glacier\/Flame","offer_id":48808685175121,"sku":"FW24-77241-1101-3.0B","price":919.0,"currency_code":"EUR","in_stock":false},{"title":"3.0m \/ Abyss\/Flame","offer_id":48808684880209,"sku":"FW24-77241-1101-3.0A","price":919.0,"currency_code":"EUR","in_stock":false},{"title":"3.5m \/ Onyx\/Glacier","offer_id":48808815755601,"sku":"FW24-77241-1101-3.5C","price":959.0,"currency_code":"EUR","in_stock":false},{"title":"3.5m \/ Glacier\/Flame","offer_id":48808685207889,"sku":"FW24-77241-1101-3.5B","price":959.0,"currency_code":"EUR","in_stock":false},{"title":"3.5m \/ Abyss\/Flame","offer_id":48808684912977,"sku":"FW24-77241-1101-3.5A","price":959.0,"currency_code":"EUR","in_stock":false},{"title":"4.0m \/ Onyx\/Glacier","offer_id":48808815788369,"sku":"FW24-77241-1101-4.0C","price":999.0,"currency_code":"EUR","in_stock":false},{"title":"4.0m \/ Glacier\/Flame","offer_id":48808685240657,"sku":"FW24-77241-1101-4.0B","price":999.0,"currency_code":"EUR","in_stock":false},{"title":"4.0m \/ Abyss\/Flame","offer_id":48808684945745,"sku":"FW24-77241-1101-4.0A","price":999.0,"currency_code":"EUR","in_stock":false},{"title":"4.5m \/ Onyx\/Glacier","offer_id":48808815821137,"sku":"FW24-77241-1101-4.5C","price":1049.0,"currency_code":"EUR","in_stock":false},{"title":"4.5m \/ Glacier\/Flame","offer_id":48808685273425,"sku":"FW24-77241-1101-4.5B","price":1049.0,"currency_code":"EUR","in_stock":false},{"title":"4.5m \/ Abyss\/Flame","offer_id":48808685011281,"sku":"FW24-77241-1101-4.5A","price":1049.0,"currency_code":"EUR","in_stock":false},{"title":"5.0m \/ Onyx\/Glacier","offer_id":48808815853905,"sku":"FW24-77241-1101-5.0C","price":1089.0,"currency_code":"EUR","in_stock":false},{"title":"5.0m \/ Glacier\/Flame","offer_id":48808685306193,"sku":"FW24-77241-1101-5.0B","price":1089.0,"currency_code":"EUR","in_stock":false},{"title":"5.0m \/ Abyss\/Flame","offer_id":48808685044049,"sku":"FW24-77241-1101-5.0A","price":1089.0,"currency_code":"EUR","in_stock":false},{"title":"5.5m \/ Onyx\/Glacier","offer_id":48808815886673,"sku":"FW24-77241-1101-5.5C","price":1149.0,"currency_code":"EUR","in_stock":false},{"title":"5.5m \/ Glacier\/Flame","offer_id":48808685338961,"sku":"FW24-77241-1101-5.5B","price":1149.0,"currency_code":"EUR","in_stock":false},{"title":"5.5m \/ Abyss\/Flame","offer_id":48808685076817,"sku":"FW24-77241-1101-5.5A","price":1149.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0512\/0838\/8795\/files\/F-OneOriginWing2024gallery-ONYXMAIN.jpg?v=1718278498","url":"https:\/\/www.billy.be\/products\/2024-f-one-origin-wing","provider":"Billy.be","version":"1.0","type":"link"}