{"product_id":"f-one-quest","title":"F-One QUEST","description":"\u003cstyle\u003e\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    @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\u003c\/style\u003e\n\n\u003ch3\u003ePERFORMANCE\u003c\/h3\u003e\n\u003chr width=\"30%\" align=\"left\" color=\"B3B3B3\"\u003e\n\u003cdiv class=\"progress-container\"\u003e\n\u003cdiv data-progress=\"80\" id=\"ring1\" class=\"progress-ring\"\u003e\n\u003csvg height=\"150\" width=\"150\"\u003e\n            \u003ccircle r=\"65\" cy=\"75\" cx=\"75\" class=\"ring-background\"\u003e\u003c\/circle\u003e\n            \u003ccircle r=\"65\" cy=\"75\" cx=\"75\" class=\"ring\"\u003e\u003c\/circle\u003e\n        \u003c\/svg\u003e\n\u003cdiv class=\"progress-title\"\u003eUpwind\u003c\/div\u003e\n\u003cdiv id=\"progress1\" class=\"progress-text\"\u003e0%\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv data-progress=\"90\" id=\"ring2\" class=\"progress-ring\"\u003e\n\u003csvg height=\"150\" width=\"150\"\u003e\n            \u003ccircle r=\"65\" cy=\"75\" cx=\"75\" class=\"ring-background\"\u003e\u003c\/circle\u003e\n            \u003ccircle r=\"65\" cy=\"75\" cx=\"75\" class=\"ring\"\u003e\u003c\/circle\u003e\n        \u003c\/svg\u003e\n\u003cdiv class=\"progress-title\"\u003eLow end\u003c\/div\u003e\n\u003cdiv id=\"progress2\" class=\"progress-text\"\u003e0%\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv data-progress=\"100\" id=\"ring3\" class=\"progress-ring\"\u003e\n\u003csvg height=\"150\" width=\"150\"\u003e\n            \u003ccircle r=\"65\" cy=\"75\" cx=\"75\" class=\"ring-background\"\u003e\u003c\/circle\u003e\n            \u003ccircle r=\"65\" cy=\"75\" cx=\"75\" class=\"ring\"\u003e\u003c\/circle\u003e\n        \u003c\/svg\u003e\n\u003cdiv class=\"progress-title\"\u003eHigh end\u003c\/div\u003e\n\u003cdiv id=\"progress3\" class=\"progress-text\"\u003e0%\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv data-progress=\"100\" id=\"ring4\" class=\"progress-ring\"\u003e\n\u003csvg height=\"150\" width=\"150\"\u003e\n            \u003ccircle r=\"65\" cy=\"75\" cx=\"75\" class=\"ring-background\"\u003e\u003c\/circle\u003e\n            \u003ccircle r=\"65\" cy=\"75\" cx=\"75\" class=\"ring\"\u003e\u003c\/circle\u003e\n        \u003c\/svg\u003e\n\u003cdiv class=\"progress-title\"\u003ePacking\u003c\/div\u003e\n\u003cdiv id=\"progress4\" class=\"progress-text\"\u003e0%\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp\u003e\u003cbr\u003e\u003cscript\u003e\n    document.addEventListener(\"DOMContentLoaded\", function() {\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    });\n\u003c\/script\u003e\u003c\/p\u003e","brand":"F-One","offers":[{"title":"2.0m \/ White\/Lilac","offer_id":53305073205585,"sku":"2026-77261-2002A-2.0A","price":899.0,"currency_code":"EUR","in_stock":false},{"title":"2.0m \/ Red\/White","offer_id":53305098109265,"sku":"2026-77261-2002A-2.0B","price":899.0,"currency_code":"EUR","in_stock":false},{"title":"2.5m \/ White\/Lilac","offer_id":53305073238353,"sku":"2026-77261-2002A-2.5A","price":929.0,"currency_code":"EUR","in_stock":false},{"title":"2.5m \/ Red\/White","offer_id":53305098142033,"sku":"2026-77261-2002A-2.5B","price":929.0,"currency_code":"EUR","in_stock":false},{"title":"3.0m \/ White\/Lilac","offer_id":53305073271121,"sku":"2026-77261-2002A-3.0A","price":949.0,"currency_code":"EUR","in_stock":false},{"title":"3.0m \/ Red\/White","offer_id":53305098174801,"sku":"2026-77261-2002A-3.0B","price":949.0,"currency_code":"EUR","in_stock":true},{"title":"3.5m \/ White\/Lilac","offer_id":53305073303889,"sku":"2026-77261-2002A-3.5A","price":999.0,"currency_code":"EUR","in_stock":true},{"title":"3.5m \/ Red\/White","offer_id":53305098207569,"sku":"2026-77261-2002A-3.5B","price":999.0,"currency_code":"EUR","in_stock":true},{"title":"4.0m \/ White\/Lilac","offer_id":53305073336657,"sku":"2026-77261-2002A-4.0A","price":1049.0,"currency_code":"EUR","in_stock":true},{"title":"4.0m \/ Red\/White","offer_id":53305098240337,"sku":"2026-77261-2002A-4.0B","price":1049.0,"currency_code":"EUR","in_stock":true},{"title":"4.5m \/ White\/Lilac","offer_id":53305073369425,"sku":"2026-77261-2002A-4.5A","price":1099.0,"currency_code":"EUR","in_stock":true},{"title":"4.5m \/ Red\/White","offer_id":53305098273105,"sku":"2026-77261-2002A-4.5B","price":1099.0,"currency_code":"EUR","in_stock":false},{"title":"5.0m \/ White\/Lilac","offer_id":53305073402193,"sku":"2026-77261-2002A-5.0A","price":1149.0,"currency_code":"EUR","in_stock":false},{"title":"5.0m \/ Red\/White","offer_id":53305098305873,"sku":"2026-77261-2002A-5.0B","price":1149.0,"currency_code":"EUR","in_stock":false},{"title":"6.0m \/ White\/Lilac","offer_id":53305073434961,"sku":"2026-77261-2002A-6.0A","price":1069.0,"currency_code":"EUR","in_stock":false},{"title":"6.0m \/ Red\/White","offer_id":53305098338641,"sku":"2026-77261-2002A-6.0B","price":1069.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0512\/0838\/8795\/files\/QUEST-CCA-Lilac_White-1-V2.jpg?v=1773658399","url":"https:\/\/billy.be\/products\/f-one-quest","provider":"Billy.be","version":"1.0","type":"link"}