In the current issue of Aktiv Radfahren magazine you will find an endurance test of our 2014 veloheld.lane bike. The bike was put through its paces every day for over 4300 km and we are delighted that it was able to finish this test completely maintenance-free with a recommendation from the editors. The editor was very impressed and is now very sad that he had to give it back. We suffer with him, but are also looking forward to the new 2015 veloheld.lane.

The new bike will no longer be available in white as standard and a few equipment details have also changed. But this only makes it even better than it has already been rated. We will be presenting it to you in more detail soon.

jQuery(window).on('load', function() { jQuery('a[data-toggle="tab"]').on('shown.bs.tab', function(e) { Waypoint.refreshAll(); }); }); jQuery(window).on('load',function(){ jQuery(".nav-tabs").on( 'shown.bs.tab', function() { window.dispatchEvent(new CustomEvent('boxResized')); } ); }); jQuery(function($){ setTimeout( function() { $('.elementor-tab-content .dataTable').DataTable({retrieve:true}).columns.adjust().draw(); $('.elementor-tab-title').one('click', function(){$('#'+this.getAttribute('aria-controls')+' .dataTable').DataTable({retrieve:true}).columns.adjust().draw();}); }, 10 ); }); (function () { function initSonstigesIn(root) { // root = Popup-DOM oder document const forms = root.querySelectorAll('form.wpcf7-form'); if (!forms.length) return; forms.forEach(form => { const wrap = form.querySelector('.sonstiges-wrap'); if (!wrap) return; function update() { const boxes = form.querySelectorAll('input[name="woher[]"]'); let show = false; boxes.forEach(cb => { if (cb.checked && cb.value === 'Sonstiges') show = true; }); wrap.style.display = show ? 'block' : 'none'; } // einmal initial update(); // change-handler (nur einmal binden) if (!form.dataset.sonstigesBound) { form.addEventListener('change', function(e){ if (e.target && e.target.matches('input[name="woher[]"]')) update(); }); form.dataset.sonstigesBound = "1"; } }); } // normaler Seitenload document.addEventListener('DOMContentLoaded', function () { initSonstigesIn(document); }); // CF7 re-init (Ajax) document.addEventListener('wpcf7init', function () { initSonstigesIn(document); }); // Popup Maker: wenn Popup geöffnet wurde document.addEventListener('pumAfterOpen', function (e) { // e.detail[0] ist meist das Popup-Element (jQuery object in manchen Setups) let popupEl = null; // Versuch 1: jQuery object if (e.detail && e.detail.length && e.detail[0] && e.detail[0][0]) { popupEl = e.detail[0][0]; } // Versuch 2: direktes Element if (!popupEl && e.target && e.target.classList && e.target.classList.contains('pum')) { popupEl = e.target; } initSonstigesIn(popupEl || document); }); })(); /* Top-Bar */ (function() { function rotateUSPs() { if (window.innerWidth <= 768) { return; // Beende Funktion auf Mobile } // Die ersten beiden b-Elemente auswählen const container1 = document.querySelector('.menu-bloginfo-inner b:nth-child(1)'); const container2 = document.querySelector('.menu-bloginfo-inner b:nth-child(2)'); if (!container1 || !container2) return; const items1 = container1.querySelectorAll('i'); const items2 = container2.querySelectorAll('i'); // Nur rotieren wenn mindestens ein Container mehrere Items hat if (items1.length <= 1 && items2.length <= 1) return; let currentIndex1 = 0; let currentIndex2 = 0; // gemeinsame Interval-Funktion für beide setInterval(() => { // Container 1 rotieren (falls mehrere spans) if (items1.length > 1) { const current1 = items1[currentIndex1]; const nextIndex1 = (currentIndex1 + 1) % items1.length; const next1 = items1[nextIndex1]; current1.style.opacity = '0'; current1.style.transform = 'translateY(-100%)'; setTimeout(() => { items1.forEach((item, idx) => { if (idx !== nextIndex1) { item.style.transform = 'translateY(100%)'; item.style.opacity = '0'; } }); next1.style.opacity = '1'; next1.style.transform = 'translateY(0)'; currentIndex1 = nextIndex1; }, 300); } // Container 2 rotieren (falls mehrere spans) if (items2.length > 1) { const current2 = items2[currentIndex2]; const nextIndex2 = (currentIndex2 + 1) % items2.length; const next2 = items2[nextIndex2]; current2.style.opacity = '0'; current2.style.transform = 'translateY(-100%)'; setTimeout(() => { items2.forEach((item, idx) => { if (idx !== nextIndex2) { item.style.transform = 'translateY(100%)'; item.style.opacity = '0'; } }); next2.style.opacity = '1'; next2.style.transform = 'translateY(0)'; currentIndex2 = nextIndex2; }, 300); } }, 10000); // Alle 10 Sekunden } // Starten wenn DOM geladen if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', rotateUSPs); } else { rotateUSPs(); } })(); add_action('wp_footer', function() { if (!is_product()) return; global $product; if (!$product || $product->get_id() != 0) { // 0 = Platzhalter, wird unten dynamisch geprüft } ?> .searchwp-live-search-results { opacity: 0; transition: opacity .25s ease-in-out; -moz-transition: opacity .25s ease-in-out; -webkit-transition: opacity .25s ease-in-out; height: 0; overflow: hidden; z-index: 9999995; /* Exceed SearchWP Modal Search Form overlay. */ position: absolute; display: none; } .searchwp-live-search-results-showing { display: block; opacity: 1; height: auto; overflow: auto; } .searchwp-live-search-no-results { padding: 3em 2em 0; text-align: center; } .searchwp-live-search-no-min-chars:after { content: "Continue typing"; display: block; text-align: center; padding: 2em 2em 0; }