Dandy Horse AR 60 ARV
Featherlight aerodynamic wheels. A model for committed road cyclists who don't accept compromises.
Weight: from 1515 g
Price range: € 1 633 through € 1 958
Dandy Horse ARX 60
High-profile wheels are a statement and a commitment. Riding at high speed is their element.
Weight: from 1575 g
Price range: € 1 345 through € 1 669
Dandy Horse ARX 60
Your road bike deserves aerodynamic wheels, whether you ride for results or for fun.
Weight: from 1605 g
Price range: € 1 201 through € 1 407
Dandy Horse ARV 45
Top-tier hooked wheels with a discreet engraved logo. Some of the lightest in their class.
Weight: from 1365 g
Price range: € 1 561 through € 1 934
Dandy Horse ARX 45
The ARX 45 wheels will carry you with breathtaking lightness, whether you are riding for pleasure or racing. If you equip your bike with them, we guarantee they will make a dramatic difference, so you won't want to get off.
Weight: from 1415 g
Price range: € 1 297 through € 1 669
Dandy Horse ARX 45
The AR 45 are built on traditional hooked rims. We've designed them without unnecessary extras, but the priorities remain the same: lightweight, stiffness, and reliability.
Weight: from 1440 g
Price range: € 1 153 through € 1 359
Dandy Horse ARV 30
Top-of-the-line wheels for road and gravel - uncompromisingly fast on both asphalt and off-road.
Weight: from 1305 g
Price range: € 1 561 through € 1 934
Dandy Horse ARX 30
Fast and responsive wheels with a racing pedigree that will allow you to fully utilize the potential of your legs.
Weight: from 1385 g
Price range: € 1 297 through € 1 669
Dandy Horse ARX 30
A versatile road-gravel wheelset. They perform excellently on both asphalt and off-road.
Weight: from 1450 g
Price range: € 1 153 through € 1 359

ROAD

We offer road wheels for all riders. Both for people who regularly train and participate in races, for travelers, and also for recreational cyclists. We build wheels with the utmost care on top-quality components. You will find carbon and aluminum rims, high and low profile, tubeless, and also hookless. We build wheels on Dandy Horse and DT Swiss hubs. On an individual order, we can build wheels on the supplied components from different manufacturers. Spokes are often an overlooked component, while they are essential for the durability and reliability of the wheels. We use only Sapim and DT spokes, because we believe that only these two manufacturers can be fully trusted in terms of quality. Our road wheels are fast, light and stiff. For heavier riders, we have reinforced models with increased weight limit.

Grab an extra 5% off

Sign up for our newsletter to receive exclusive offers

(function() { const popupID = 4091; // <- Twoje ID popupu const requiredMs = 60000; // 60 sekund const startKey = "popupTimerStart_" + popupID; const closedKey = "popupClosed_" + popupID; const shownSessionKey = "popupShownSession_" + popupID; const maxWaitForElementorMs = 10000; // ile maksymalnie czekamy na elementorProFrontend // Jeśli zamknięto już popup (localStorage) — nie pokazuj więcej if (localStorage.getItem(closedKey)) return; // Ustal moment rozpoczęcia liczenia (persistuje między podstronami) let start = localStorage.getItem(startKey); if (!start) { start = Date.now(); localStorage.setItem(startKey, start); } else { start = parseInt(start, 10); } // Oblicz ile jeszcze brakuje do wymaganych 60s function msRemaining() { return Math.max(0, requiredMs - (Date.now() - start)); } // Funkcja pokazująca popup (gdy elementorProFrontend już gotowy) function tryShowPopup() { // jeśli użytkownik zamknął popup w międzyczasie — przerwij if (localStorage.getItem(closedKey)) return; // jeśli już pokazano w tej sesji — nie pokazuj ponownie if (sessionStorage.getItem(shownSessionKey)) return; // upewnij się, że obiekt elementora jest dostępny if (typeof elementorProFrontend !== "undefined" && elementorProFrontend && elementorProFrontend.modules && elementorProFrontend.modules.popup) { elementorProFrontend.modules.popup.showPopup({ id: popupID }); sessionStorage.setItem(shownSessionKey, "1"); } else { // jeśli elementor jeszcze nie załadowany — nic nie robimy tutaj console.warn("Elementor Pro popup module not ready yet."); } } // Czekaj na elementorProFrontend (polling), ale nie dłużej niż maxWaitForElementorMs function waitForElementorReady(cb) { const interval = 200; let waited = 0; const t = setInterval(function() { if (typeof elementorProFrontend !== "undefined" && elementorProFrontend && elementorProFrontend.modules && elementorProFrontend.modules.popup) { clearInterval(t); cb(true); } else { waited += interval; if (waited >= maxWaitForElementorMs) { clearInterval(t); cb(false); } } }, interval); } // Gdy popup zostanie zamknięty — zapisz to na stałe w localStorage (function bindCloseListener() { if (window.jQuery) { jQuery(document).on('elementor/popup/hide', function(event, id) { if (id === popupID) { localStorage.setItem(closedKey, "1"); } }); } else { // jeśli jQuery jeszcze nie dostępne, spróbuj za chwilę let tries = 0; const t = setInterval(function() { tries++; if (window.jQuery) { clearInterval(t); jQuery(document).on('elementor/popup/hide', function(event, id) { if (id === popupID) { localStorage.setItem(closedKey, "1"); } }); } else if (tries > 50) { clearInterval(t); } }, 200); } })(); // Teraz ustaw timeout — jeśli pozostały czas 0 => pokaż natychmiast (po upewnieniu się, że elementor jest gotowy) const remaining = msRemaining(); if (remaining <= 0) { waitForElementorReady(function(ready) { if (ready) tryShowPopup(); else { // jeśli elementor nie gotowy — spróbuj jeszcze raz po krótkim timeout setTimeout(tryShowPopup, 500); } }); } else { // ustaw timeout na pozostały czas; po upływie — spróbuj pokazać popup setTimeout(function() { waitForElementorReady(function(ready) { if (ready) tryShowPopup(); else { // jeśli elementor nie gotowy — spróbuj z małym opóźnieniem setTimeout(tryShowPopup, 500); } }); }, remaining); } // Dodatkowo: jeśli użytkownik zamknął popup w innej karcie/oknie, ten skrypt też to zauważy dzięki storage event window.addEventListener('storage', function(e) { if (e.key === closedKey && e.newValue) { // nic do zrobienia tutaj — warunki wyżej sprawią, że nic się nie pokaże } }); })();