Easy to store and carryThe ROCKET AIR range is a line of inflatable boards essentially dedicated to foiling sports: Surf foil, SUP foil, wing foil, windfoil and even kitefoil. They are developed following the outlines and sizes as the rigid boards and offer great stability with the extra volume brought by the inflatable technology. The foil position is also identical and provides the same perfect balance in flight and for take-off. The ROCKET AIR boards are nearly indestructible and will grant you some extra padding if you fall. They are built using higher grade Dropstitch, bringing extra stiffness that is essential to control the board properly when foiling. The weight of the board is incredibly light, making them easy to handle and a lot of fun, even for advanced riders. Finally, the ROCKET AIR boards can all be stored in a small bag to be easily brought on your next adventure. .progress-container { display: flex; justify-content: space-between; background-color: #f9f9f9; padding: 40px 25px 60px 25px; } .progress-ring { width: 150px; height: 150px; position: relative; text-align: center; } .progress-ring circle { fill: transparent; stroke: #ff6800; stroke-width: 15; transform: rotate(-90deg); transform-origin: 50% 50%; transition: stroke-dashoffset 0.5s; } .progress-ring .ring-background { fill: transparent; stroke: #ccc; stroke-width: 15; transform: rotate(-90deg); transform-origin: 50% 50%; } .progress-text { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 24px; } .progress-title { font-size: 20px; color: black; margin-top: 10px; } @media (max-width: 768px) { .progress-container { flex-direction: column; align-items: center; } .progress-ring { margin-bottom: 50px; } } PERFORMANCE Accessibility 0% Freeride 0% Freestyle 0% Carving 0% document.addEventListener("DOMContentLoaded", function() { function animateProgress(ringId, from, to, duration) { const ring = document.querySelector(`#ring${ringId} .ring`); const text = document.getElementById(`progress${ringId}`); const title = document.querySelector(`#ring${ringId} .progress-title`); const circumference = 2 * Math.PI * 65; // Hardcoding the radius as 65 for this example const increment = (to - from) / (duration * 60); let current = from; function update() { if ((increment > 0 && current < to) || (increment < 0 && current > to)) { const offset = circumference - (current / 100) * circumference; ring.style.strokeDasharray = `${circumference} ${circumference}`; ring.style.strokeDashoffset = offset; text.textContent = `${Math.round(current)}%`; current += increment; requestAnimationFrame(update); } else { const offset = circumference - (to / 100) * circumference; ring.style.strokeDashoffset = offset; text.textContent = `${to}%`; } } update(); } function handleIntersection(entries, observer) { entries.forEach((entry) => { if (entry.isIntersecting) { const ringId = entry.target.id.replace('ring', ''); const from = 0; const to = parseInt(entry.target.getAttribute('data-progress'), 10); animateProgress(ringId, from, to, 2); observer.unobserve(entry.target); } }); } const rings = document.querySelectorAll('.progress-ring'); const observer = new IntersectionObserver(handleIntersection, { root: null, rootMargin: '0px', threshold: 0.2 // Adjust this threshold as needed }); rings.forEach((ring) => { observer.observe(ring); }); });