1<!doctype html> 2 3<html lang="en" dir="ltr"> 4 <head> 5 <!-- Added by AVADA SEO Suite --> 6
6<script> 7 const avadaLightJsExclude = ['cdn.nfcube.com', 'assets/ecom.js', 'variant-title-king', 'linked_options_variants', 'smile-loader.js', 'smart-product-filter-search', 'rivo-loyalty-referrals', 'avada-cookie-consent', 'consentmo-gdpr', 'quinn', 'https://www.googletagmanager.com/']; 8 const avadaLightJsInclude = ['https://www.googletagmanager.com/', 'https://connect.facebook.net/', 'https://business-api.tiktok.com/', 'https://static.klaviyo.com/', 'https://www.googletagmanager.com/gtag/js?id=G-D7CZZ970PJ', 'https://www.googletagmanager.com/gtag/js?id=AW-1069414906&l=dataLayer&cx=c>m=45je52q0v887792846za200&tag_exp=101732279~101732281~102067808~102482433~102539968~102558064~102587591~102605417~102640600~102658453~102717422~102732003', 'https://www.googletagmanager.com/gtag/js?id=AW-1002657833&l=dataLayer&cx=c>m=45je52q0v887792846za200&tag_exp=101732279~101732281~102067808~102482433~102539968~102558064~102587591~102605417~102640600~102658453~102717422~102732003']; 9 window.AVADA_SPEED_BLACKLIST = avadaLightJsInclude.map(item => new RegExp(item, 'i')); 10 window.AVADA_SPEED_WHITELIST = avadaLightJsExclude.map(item => new RegExp(item, 'i')); 11</script>
11 12
13<script> 14 const isSpeedUpEnable = !1741336271524 || Date.now() < 1741336271524; 15 if (isSpeedUpEnable) { 16 const avadaSpeedUp=1; 17 if(isSpeedUpEnable) { 18 function _0x55aa(_0x575858,_0x2fd0be){const _0x30a92f=_0x1cb5();return _0x55aa=function(_0x4e8b41,_0xcd1690){_0x4e8b41=_0x4e8b41-(0xb5e+0xd*0x147+-0x1b1a);let _0x1c09f7=_0x30a92f[_0x4e8b41];return _0x1c09f7;},_0x55aa(_0x575858,_0x2fd0be);}(function(_0x4ad4dc,_0x42545f){const _0x5c7741=_0x55aa,_0x323f4d=_0x4ad4dc();while(!![]){try{const _0x588ea5=parseInt(_0x5c7741(0x10c))/(0xb6f+-0x1853+0xce5)*(-parseInt(_0x5c7741(0x157))/(-0x2363*0x1+0x1dd4+0x591*0x1))+-parseInt(_0x5c7741(0x171))/(0x269b+-0xeb+-0xf*0x283)*(parseInt(_0x5c7741(0x116))/(0x2e1+0x1*0x17b3+-0x110*0x19))+-parseInt(_0x5c7741(0x147))/(-0x1489+-0x312*0x6+0x26fa*0x1)+-parseInt(_0x5c7741(0xfa))/(-0x744+0x1*0xb5d+-0x413)*(-parseInt(_0x5c7741(0x102))/(-0x1e87+0x9e*-0x16+0x2c22))+parseInt(_0x5c7741(0x136))/(0x1e2d+0x1498+-0x1a3*0x1f)+parseInt(_0x5c7741(0x16e))/(0x460+0x1d96+0x3*-0xb4f)*(-parseInt(_0x5c7741(0xe3))/(-0x9ca+-0x1*-0x93f+0x1*0x95))+parseInt(_0x5c7741(0xf8))/(-0x1f73*0x1+0x6*-0x510+0x3dde);if(_0x588ea5===_0x42545f)break;else _0x323f4d['push'](_0x323f4d['shift']());}catch(_0x5d6d7e){_0x323f4d['push'](_0x323f4d['shift']());}}}(_0x1cb5,-0x193549+0x5dc3*-0x31+-0x2f963*-0x13),(function(){const _0x5cb2b4=_0x55aa,_0x23f9e9={'yXGBq':function(_0x237aef,_0x385938){return _0x237aef!==_0x385938;},'XduVF':function(_0x21018d,_0x56ff60){return _0x21018d===_0x56ff60;},'RChnz':_0x5cb2b4(0xf4)+_0x5cb2b4(0xe9)+_0x5cb2b4(0x14a),'TAsuR':function(_0xe21eca,_0x33e114){return _0xe21eca%_0x33e114;},'EvLYw':function(_0x1326ad,_0x261d04){return _0x1326ad!==_0x261d04;},'nnhAQ':_0x5cb2b4(0x107),'swpMF':_0x5cb2b4(0x16d),'plMMu':_0x5cb2b4(0xe8)+_0x5cb2b4(0x135),'PqBPA':function(_0x2ba85c,_0x35b541){return _0x2ba85c<_0x35b541;},'NKPCA':_0x5cb2b4(0xfc),'TINqh':function(_0x4116e3,_0x3ffd02,_0x2c8722){return _0x4116e3(_0x3ffd02,_0x2c8722);},'BAueN':_0x5cb2b4(0x120),'NgloT':_0x5cb2b4(0x14c),'ThSSU':function(_0xeb212a,_0x4341c1){return _0xeb212a+_0x4341c1;},'lDDHN':function(_0x4a1a48,_0x45ebfb){return _0x4a1a48 instanceof _0x45ebfb;},'toAYB':function(_0xcf0fa9,_0xf5fa6a){return _0xcf0fa9 instanceof _0xf5fa6a;},'VMiyW':function(_0x5300e4,_0x44e0f4){return _0x5300e4(_0x44e0f4);},'iyhbw':_0x5cb2b4(0x119),'zuWfR':function(_0x19c3e4,_0x4ee6e8){return _0x19c3e4<_0x4ee6e8;},'vEmrv':function(_0xd798cf,_0x5ea2dd){return _0xd798cf!==_0x5ea2dd;},'yxERj':function(_0x24b03b,_0x5aa292){return _0x24b03b||_0x5aa292;},'MZpwM':_0x5cb2b4(0x110)+_0x5cb2b4(0x109)+'pt','IeUHK':function(_0x5a4c7e,_0x2edf70){return _0x5a4c7e-_0x2edf70;},'Idvge':function(_0x3b526e,_0x36b469){return _0x3b526e<_0x36b469;},'qRwfm':_0x5cb2b4(0x16b)+_0x5cb2b4(0xf1),'CvXDN':function(_0x4b4208,_0x1db216){return _0x4b4208<_0x1db216;},'acPIM':function(_0x7d44b7,_0x3020d2){return _0x7d44b7(_0x3020d2);},'MyLMO':function(_0x22d4b2,_0xe7a6a0){return _0x22d4b2<_0xe7a6a0;},'boDyh':function(_0x176992,_0x346381,_0xab7fc){return _0x176992(_0x346381,_0xab7fc);},'ZANXD':_0x5cb2b4(0x10f)+_0x5cb2b4(0x12a)+_0x5cb2b4(0x142),'CXwRZ':_0x5cb2b4(0x123)+_0x5cb2b4(0x15f),'AuMHM':_0x5cb2b4(0x161),'KUuFZ':_0x5cb2b4(0xe6),'MSwtw':_0x5cb2b4(0x13a),'ERvPB':_0x5cb2b4(0x134),'ycTDj':_0x5cb2b4(0x15b),'Tvhir':_0x5cb2b4(0x154)},_0x469be1=_0x23f9e9[_0x5cb2b4(0x153)],_0x36fe07={'blacklist':window[_0x5cb2b4(0x11f)+_0x5cb2b4(0x115)+'T'],'whitelist':window[_0x5cb2b4(0x11f)+_0x5cb2b4(0x13e)+'T']},_0x26516a={'blacklisted':[]},_0x34e4a6=(_0x2be2f5,_0x25b3b2)=>{const _0x80dd2=_0x5cb2b4;if(_0x2be2f5&&(!_0x25b3b2||_0x23f9e9[_0x80dd2(0x13b)](_0x25b3b2,_0x469be1))&&(!_0x36fe07[_0x80dd2(0x170)]||_0x36fe07[_0x80dd2(0x170)][_0x80dd2(0x151)](_0xa5c7cf=>_0xa5c7cf[_0x80dd2(0x12b)](_0x2be2f5)))&&(!_0x36fe07[_0x80dd2(0x165)]||_0x36fe07[_0x80dd2(0x165)][_0x80dd2(0x156)](_0x4e2570=>!_0x4e2570[_0x80dd2(0x12b)](_0x2be2f5)))&&_0x23f9e9[_0x80dd2(0xf7)](avadaSpeedUp,0x5*0x256+-0x1*0x66c+-0x542+0.5)&&_0x2be2f5[_0x80dd2(0x137)](_0x23f9e9[_0x80dd2(0xe7)])){const _0x413c89=_0x2be2f5[_0x80dd2(0x16c)];return _0x23f9e9[_0x80dd2(0xf7)](_0x23f9e9[_0x80dd2(0x11e)](_0x413c89,-0x1deb*-0x1+0xf13+-0x2cfc),0x1176+-0x78b*0x5+0x1441);}return _0x2be2f5&&(!_0x25b3b2||_0x23f9e9[_0x80dd2(0xed)](_0x25b3b2,_0x469be1))&&(!_0x36fe07[_0x80dd2(0x170)]||_0x36fe07[_0x80dd2(0x170)][_0x80dd2(0x151)](_0x3d689d=>_0x3d689d[_0x80dd2(0x12b)](_0x2be2f5)))&&(!_0x36fe07[_0x80dd2(0x165)]||_0x36fe07[_0x80dd2(0x165)][_0x80dd2(0x156)](_0x26a7b3=>!_0x26a7b3[_0x80dd2(0x12b)](_0x2be2f5)));},_0x11462f=function(_0x42927f){const _0x346823=_0x5cb2b4,_0x5426ae=_0x42927f[_0x346823
18(0x159)+'te'](_0x23f9e9[_0x346823(0x14e)]);return _0x36fe07[_0x346823(0x170)]&&_0x36fe07[_0x346823(0x170)][_0x346823(0x156)](_0x107b0d=>!_0x107b0d[_0x346823(0x12b)](_0x5426ae))||_0x36fe07[_0x346823(0x165)]&&_0x36fe07[_0x346823(0x165)][_0x346823(0x151)](_0x1e7160=>_0x1e7160[_0x346823(0x12b)](_0x5426ae));},_0x39299f=new MutationObserver(_0x45c995=>{const _0x21802a=_0x5cb2b4,_0x3bc801={'mafxh':function(_0x6f9c57,_0x229989){const _0x9d39b1=_0x55aa;return _0x23f9e9[_0x9d39b1(0xf7)](_0x6f9c57,_0x229989);},'SrchE':_0x23f9e9[_0x21802a(0xe2)],'pvjbV':_0x23f9e9[_0x21802a(0xf6)]};for(let _0x333494=-0x7d7+-0x893+0x106a;_0x23f9e9[_0x21802a(0x158)](_0x333494,_0x45c995[_0x21802a(0x16c)]);_0x333494++){const {addedNodes:_0x1b685b}=_0x45c995[_0x333494];for(let _0x2f087=0x1f03+0x84b+0x1*-0x274e;_0x23f9e9[_0x21802a(0x158)](_0x2f087,_0x1b685b[_0x21802a(0x16c)]);_0x2f087++){const _0x4e5bac=_0x1b685b[_0x2f087];if(_0x23f9e9[_0x21802a(0xf7)](_0x4e5bac[_0x21802a(0x121)],-0x1f3a+-0x1*0x1b93+-0x3*-0x139a)&&_0x23f9e9[_0x21802a(0xf7)](_0x4e5bac[_0x21802a(0x152)],_0x23f9e9[_0x21802a(0xe0)])){const _0x5d9a67=_0x4e5bac[_0x21802a(0x107)],_0x3fb522=_0x4e5bac[_0x21802a(0x16d)];if(_0x23f9e9[_0x21802a(0x103)](_0x34e4a6,_0x5d9a67,_0x3fb522)){_0x26516a[_0x21802a(0x160)+'d'][_0x21802a(0x128)]([_0x4e5bac,_0x4e5bac[_0x21802a(0x16d)]]),_0x4e5bac[_0x21802a(0x16d)]=_0x469be1;const _0x1e52da=function(_0x2c95ff){const _0x359b13=_0x21802a;if(_0x3bc801[_0x359b13(0x118)](_0x4e5bac[_0x359b13(0x159)+'te'](_0x3bc801[_0x359b13(0x166)]),_0x469be1))_0x2c95ff[_0x359b13(0x112)+_0x359b13(0x150)]();_0x4e5bac[_0x359b13(0xec)+_0x359b13(0x130)](_0x3bc801[_0x359b13(0xe4)],_0x1e52da);};_0x4e5bac[_0x21802a(0x12d)+_0x21802a(0x163)](_0x23f9e9[_0x21802a(0xf6)],_0x1e52da),_0x4e5bac[_0x21802a(0x12c)+_0x21802a(0x131)]&&_0x4e5bac[_0x21802a(0x12c)+_0x21802a(0x131)][_0x21802a(0x11a)+'d'](_0x4e5bac);}}}}});_0x39299f[_0x5cb2b4(0x105)](document[_0x5cb2b4(0x10b)+_0x5cb2b4(0x16a)],{'childList':!![],'subtree':!![]});const _0x2910a9=/[|\\{}()\[\]^$+*?.]/g,_0xa9f173=function(..._0x1baa33){const _0x3053cc=_0x5cb2b4,_0x2e6f61={'mMWha':function(_0x158c76,_0x5c404b){const _0x25a05c=_0x55aa;return _0x23f9e9[_0x25a05c(0xf7)](_0x158c76,_0x5c404b);},'BXirI':_0x23f9e9[_0x3053cc(0x141)],'COGok':function(_0x421bf7,_0x55453a){const _0x4fd417=_0x3053cc;return _0x23f9e9[_0x4fd417(0x167)](_0x421bf7,_0x55453a);},'XLSAp':function(_0x193984,_0x35c446){const _0x5bbecf=_0x3053cc;return _0x23f9e9[_0x5bbecf(0xed)](_0x193984,_0x35c446);},'EygRw':function(_0xfbb69c,_0x21b15d){const _0xe5c840=_0x3053cc;return _0x23f9e9[_0xe5c840(0x104)](_0xfbb69c,_0x21b15d);},'xZuNx':_0x23f9e9[_0x3053cc(0x139)],'SBUaW':function(_0x5739bf,_0x2c2fab){const _0x42cbb1=_0x3053cc;return _0x23f9e9[_0x42cbb1(0x172)](_0x5739bf,_0x2c2fab);},'EAoTR':function(_0x123b29,_0x5b29bf){const _0x2828d2=_0x3053cc;return _0x23f9e9[_0x2828d2(0x11d)](_0x123b29,_0x5b29bf);},'cdYdq':_0x23f9e9[_0x3053cc(0x14e)],'WzJcf':_0x23f9e9[_0x3053cc(0xe2)],'nytPK':function(_0x53f733,_0x4ad021){const _0x4f0333=_0x3053cc;return _0x23f9e9[_0x4f0333(0x148)](_0x53f733,_0x4ad021);},'oUrHG':_0x23f9e9[_0x3053cc(0x14d)],'dnxjX':function(_0xed6b5f,_0x573f55){const _0x57aa03=_0x3053cc;return _0x23f9e9[_0x57aa03(0x15a)](_0xed6b5f,_0x573f55);}};_0x23f9e9[_0x3053cc(0x15d)](_0x1baa33[_0x3053cc(0x16c)],-0x1a3*-0x9+-0xf9*0xb+-0x407*0x1)?(_0x36fe07[_0x3053cc(0x170)]=[],_0x36fe07[_0x3053cc(0x165)]=[]):(_0x36fe07[_0x3053cc(0x170)]&&(_0x36fe07[_0x3053cc(0x170)]=_0x36fe07[_0x3053cc(0x170)][_0x3053cc(0x106)](_0xa8e001=>_0x1baa33[_0x3053cc(0x156)](_0x4a8a28=>{const _0x2e425b=_0x3053cc;if(_0x2e6f61[_0x2e425b(0x111)](typeof _0x4a8a28,_0x2e6f61[_0x2e425b(0x155)]))return!_0xa8e001[_0x2e425b(0x12b)](_0x4a8a28);else{if(_0x2e6f61[_0x2e425b(0xeb)](_0x4a8a28,RegExp))return _0x2e6f61[_0x2e425b(0x145)](_0xa8e001[_0x2e425b(0xdf)](),_0x4a8a28[_0x2e425b(0xdf)]());}}))),_0x36fe07[_0x3053cc(0x165)]&&(_0x36fe07[_0x3053cc(0x165)]=[..._0x36fe07[_0x3053cc(0x165)],..._0x1baa33[_0x3053cc(0xff)](_0x4e4c02=>{const _0x7c755c=_0x3053cc;if(_0x23f9e9[_0x7c755c(0xf7)](typeof _0x4e4c02,_0x23f9e9[_0x7c755c(0x141)])){const _0x932437=_0x4e4c02[_0x7c755c(0xea)](_0x2910a9,_0x23f9e9[_0x7c755c(0x16f)]),_0x34e686=_0
18x23f9e9[_0x7c755c(0xf0)](_0x23f9e9[_0x7c755c(0xf0)]('.*',_0x932437),'.*');if(_0x36fe07[_0x7c755c(0x165)][_0x7c755c(0x156)](_0x21ef9a=>_0x21ef9a[_0x7c755c(0xdf)]()!==_0x34e686[_0x7c755c(0xdf)]()))return new RegExp(_0x34e686);}else{if(_0x23f9e9[_0x7c755c(0x117)](_0x4e4c02,RegExp)){if(_0x36fe07[_0x7c755c(0x165)][_0x7c755c(0x156)](_0x5a3f09=>_0x5a3f09[_0x7c755c(0xdf)]()!==_0x4e4c02[_0x7c755c(0xdf)]()))return _0x4e4c02;}}return null;})[_0x3053cc(0x106)](Boolean)]));const _0x3eeb55=document[_0x3053cc(0x11b)+_0x3053cc(0x10e)](_0x23f9e9[_0x3053cc(0xf0)](_0x23f9e9[_0x3053cc(0xf0)](_0x23f9e9[_0x3053cc(0x122)],_0x469be1),'"]'));for(let _0xf831f7=-0x21aa+-0x1793+0x393d*0x1;_0x23f9e9[_0x3053cc(0x14b)](_0xf831f7,_0x3eeb55[_0x3053cc(0x16c)]);_0xf831f7++){const _0x5868cb=_0x3eeb55[_0xf831f7];_0x23f9e9[_0x3053cc(0x132)](_0x11462f,_0x5868cb)&&(_0x26516a[_0x3053cc(0x160)+'d'][_0x3053cc(0x128)]([_0x5868cb,_0x23f9e9[_0x3053cc(0x14d)]]),_0x5868cb[_0x3053cc(0x12c)+_0x3053cc(0x131)][_0x3053cc(0x11a)+'d'](_0x5868cb));}let _0xdf8cd0=-0x17da+0x2461+-0xc87*0x1;[..._0x26516a[_0x3053cc(0x160)+'d']][_0x3053cc(0x10d)](([_0x226aeb,_0x33eaa7],_0xe33bca)=>{const _0x2aa7bf=_0x3053cc;if(_0x2e6f61[_0x2aa7bf(0x143)](_0x11462f,_0x226aeb)){const _0x41da0d=document[_0x2aa7bf(0x11c)+_0x2aa7bf(0x131)](_0x2e6f61[_0x2aa7bf(0x127)]);for(let _0x6784c7=0xd7b+-0xaa5+-0x2d6;_0x2e6f61[_0x2aa7bf(0x164)](_0x6784c7,_0x226aeb[_0x2aa7bf(0xe5)][_0x2aa7bf(0x16c)]);_0x6784c7++){const _0x4ca758=_0x226aeb[_0x2aa7bf(0xe5)][_0x6784c7];_0x2e6f61[_0x2aa7bf(0x12f)](_0x4ca758[_0x2aa7bf(0x133)],_0x2e6f61[_0x2aa7bf(0x13f)])&&_0x2e6f61[_0x2aa7bf(0x145)](_0x4ca758[_0x2aa7bf(0x133)],_0x2e6f61[_0x2aa7bf(0x100)])&&_0x41da0d[_0x2aa7bf(0xe1)+'te'](_0x4ca758[_0x2aa7bf(0x133)],_0x226aeb[_0x2aa7bf(0xe5)][_0x6784c7][_0x2aa7bf(0x12e)]);}_0x41da0d[_0x2aa7bf(0xe1)+'te'](_0x2e6f61[_0x2aa7bf(0x13f)],_0x226aeb[_0x2aa7bf(0x107)]),_0x41da0d[_0x2aa7bf(0xe1)+'te'](_0x2e6f61[_0x2aa7bf(0x100)],_0x2e6f61[_0x2aa7bf(0x101)](_0x33eaa7,_0x2e6f61[_0x2aa7bf(0x126)])),document[_0x2aa7bf(0x113)][_0x2aa7bf(0x146)+'d'](_0x41da0d),_0x26516a[_0x2aa7bf(0x160)+'d'][_0x2aa7bf(0x162)](_0x2e6f61[_0x2aa7bf(0x13d)](_0xe33bca,_0xdf8cd0),-0x105d*0x2+0x1*-0xeaa+0x2f65),_0xdf8cd0++;}}),_0x36fe07[_0x3053cc(0x170)]&&_0x23f9e9[_0x3053cc(0xf3)](_0x36fe07[_0x3053cc(0x170)][_0x3053cc(0x16c)],0x10f2+-0x1a42+0x951)&&_0x39299f[_0x3053cc(0x15c)]();},_0x4c2397=document[_0x5cb2b4(0x11c)+_0x5cb2b4(0x131)],_0x573f89={'src':Object[_0x5cb2b4(0x14f)+_0x5cb2b4(0xfd)+_0x5cb2b4(0x144)](HTMLScriptElement[_0x5cb2b4(0xf9)],_0x23f9e9[_0x5cb2b4(0x14e)]),'type':Object[_0x5cb2b4(0x14f)+_0x5cb2b4(0xfd)+_0x5cb2b4(0x144)](HTMLScriptElement[_0x5cb2b4(0xf9)],_0x23f9e9[_0x5cb2b4(0xe2)])};document[_0x5cb2b4(0x11c)+_0x5cb2b4(0x131)]=function(..._0x4db605){const _0x1480b5=_0x5cb2b4,_0x3a6982={'KNNxG':function(_0x32fa39,_0x2a57e4,_0x3cc08f){const _0x5ead12=_0x55aa;return _0x23f9e9[_0x5ead12(0x169)](_0x32fa39,_0x2a57e4,_0x3cc08f);}};if(_0x23f9e9[_0x1480b5(0x13b)](_0x4db605[-0x4*-0x376+0x4*0x2f+-0xe94][_0x1480b5(0x140)+'e'](),_0x23f9e9[_0x1480b5(0x139)]))return _0x4c2397[_0x1480b5(0x114)](document)(..._0x4db605);const _0x2f091d=_0x4c2397[_0x1480b5(0x114)](document)(..._0x4db605);try{Object[_0x1480b5(0xf2)+_0x1480b5(0x149)](_0x2f091d,{'src':{..._0x573f89[_0x1480b5(0x107)],'set'(_0x3ae2bc){const _0x5d6fdc=_0x1480b5;_0x3a6982[_0x5d6fdc(0x129)](_0x34e4a6,_0x3ae2bc,_0x2f091d[_0x5d6fdc(0x16d)])&&_0x573f89[_0x5d6fdc(0x16d)][_0x5d6fdc(0x10a)][_0x5d6fdc(0x125)](this,_0x469be1),_0x573f89[_0x5d6fdc(0x107)][_0x5d6fdc(0x10a)][_0x5d6fdc(0x125)](this,_0x3ae2bc);}},'type':{..._0x573f89[_0x1480b5(0x16d)],'get'(){const _0x436e9e=_0x1480b5,_0x4b63b9=_0x573f89[_0x436e9e(0x16d)][_0x436e9e(0xfb)][_0x436e9e(0x125)](this);if(_0x23f9e9[_0x436e9e(0xf7)](_0x4b63b9,_0x469be1)||_0x23f9e9[_0x436e9e(0x103)](_0x34e4a6,this[_0x436e9e(0x107)],_0x4b63b9))return null;return _0x4b63b9;},'set'(_0x174ea3){const _0x1dff57=_0x1480b5,_0xa2fd13=_0x23f9e9[_0x1dff57(0x103)](_0x34e4a6,_0x2f091d[_0x1dff57(0x107)],_0x2f091d[_0x1dff57(0x16d)])?_0x469be1:_0x174ea3;_0x573f89[_0x1dff57(0x16d)][_0x1dff57(0x10a)][_0x1dff57(0x125)](this,_0xa2fd13);}}}),_0x2f091d[_0x1480b5(0xe1)+'te']=function(_0x5b0870,_0x8c60d5){const _0xab22d4=_0x1480b5;if(_0x23f9e9[_0xab22d4(0xf7)](_0x5b0870,_0x23f9e9[_0xab22d4(0xe2)])||_0x23f9e9[_0xab22d4(0xf7)](_0x5b0870,_0x23f9e9[_0xab22d4(0x14e)]))_0x2f091d[_0x5b0870]=_0x8c60d5;else HTMLScriptElement[_0xab22d4(0xf9)][_0xab22d4(0xe1)+'te'][_0xab22d4(0x125)](_0x2f091d,_0x5b0870,_0x8c60d5);};}catch(_0x5a9461){console[_0x1480b5(0x168)](_0x23f9e9[_0x1480b5(0xef)],_0x5a9461);}return _0x2f091d;};const _0x5883c5=[_0x23f9e9[_0x5cb2b4(0xfe)],_0x23f9e9[_0x5cb2b4(0x13c)],_0x23f9e9[_0x5cb2b4(0xf5)],_0x23f9e9[_0x5cb2b4(0x15e)],_0x23f9e9[_0x5cb2b4(0x138)],_0x23f9e9[_0x5cb2b4(0x124)]],_0x4ab8d2=_0x5883c5[_0x5cb2b4(0xff)](_0x439d08=>{return{'type':_0x439d08,'listener':()=>_0xa9f173(),'options':{'passive':!![]}};});_0x4ab8d2[_0x5cb2b4(0x10d)](_0x4d3535=>{const _0x3882ab=_0x5cb2b4;document[_0x3882ab(0x12d)+_0x3882ab(0x163)](_0x4d3535[_0x3882ab(0x16d)],_0x4d3535[_0x3882ab(0xee)],_0x4d3535[_0x3882ab(0x108)]);});}()));function _0x1cb5(){const _0x15f8e0=['ault','some','tagName','CXwRZ','wheel','BXirI','every','6lYvYY
18X','PqBPA','getAttribu','IeUHK','touchstart','disconnect','Idvge','ERvPB','/blocked','blackliste','keydown','splice','stener','SBUaW','whitelist','SrchE','toAYB','warn','boDyh','ement','script[typ','length','type','346347wGqEBH','NgloT','blacklist','33OVoYHk','zuWfR','toString','NKPCA','setAttribu','swpMF','230EEqEiq','pvjbV','attributes','mousemove','RChnz','beforescri','y.com/exte','replace','COGok','removeEven','EvLYw','listener','ZANXD','ThSSU','e="','defineProp','MyLMO','cdn.shopif','MSwtw','plMMu','XduVF','22621984JRJQxz','prototype','8818116NVbcZr','get','SCRIPT','ertyDescri','AuMHM','map','WzJcf','nytPK','7kiZatp','TINqh','VMiyW','observe','filter','src','options','n/javascri','set','documentEl','478083wuqgQV','forEach','torAll','Avada cann','applicatio','mMWha','preventDef','head','bind','D_BLACKLIS','75496skzGVx','lDDHN','mafxh','script','removeChil','querySelec','createElem','vEmrv','TAsuR','AVADA_SPEE','string','nodeType','qRwfm','javascript','Tvhir','call','oUrHG','xZuNx','push','KNNxG','ot lazy lo','test','parentElem','addEventLi','value','EAoTR','tListener','ent','acPIM','name','touchmove','ptexecute','6968312SmqlIb','includes','ycTDj','iyhbw','touchend','yXGBq','KUuFZ','dnxjX','D_WHITELIS','cdYdq','toLowerCas','BAueN','ad script','EygRw','ptor','XLSAp','appendChil','4975500NoPAFA','yxERj','erties','nsions','CvXDN','\$&','MZpwM','nnhAQ','getOwnProp'];_0x1cb5=function(){return _0x15f8e0;};return _0x1cb5();} 19} 20 class LightJsLoader{constructor(e){this.jQs=[],this.listener=this.handleListener.bind(this,e),this.scripts=["default","defer","async"].reduce(((e,t)=>({...e,[t]:[]})),{});const t=this;e.forEach((e=>window.addEventListener(e,t.listener,{passive:!0})))}handleListener(e){const t=this;return e.forEach((e=>window.removeEventListener(e,t.listener))),"complete"===document.readyState?this.handleDOM():document.addEventListener("readystatechange",(e=>{if("complete"===e.target.readyState)return setTimeout(t.handleDOM.bind(t),1)}))}async handleDOM(){this.suspendEvent(),this.suspendJQuery(),this.findScripts(),this.preloadScripts();for(const e of Object.keys(this.scripts))await this.replaceScripts(this.scripts[e]);for(const e of["DOMContentLoaded","readystatechange"])await this.requestRepaint(),document.dispatchEvent(new Event("lightJS-"+e));document.lightJSonreadystatechange&&document.lightJSonreadystatechange();for(const e of["DOMContentLoaded","load"])await this.requestRepaint(),window.dispatchEvent(new Event("lightJS-"+e));await this.requestRepaint(),window.lightJSonload&&window.lightJSonload(),await this.requestRepaint(),this.jQs.forEach((e=>e(window).trigger("lightJS-jquery-load"))),window.dispatchEvent(new Event("lightJS-pageshow")),await this.requestRepaint(),window.lightJSonpageshow&&window.lightJSonpageshow()}async requestRepaint(){return new Promise((e=>requestAnimationFrame(e)))}findScripts(){document.querySelectorAll("script[type=lightJs]").forEach((e=>{e.hasAttribute("src")?e.hasAttribute("async")&&e.async?this.scripts.async.push(e):e.hasAttribute("defer")&&e.defer?this.scripts.defer.push(e):this.scripts.default.push(e):this.scripts.default.push(e)}))}preloadScripts(){const e=this,t=Object.keys(this.scripts).reduce(((t,n)=>[...t,...e.scripts[n]]),[]),n=document.createDocumentFragment();t.forEach((e=>{const t=e.getAttribute("src");if(!t)return;const s=document.createElement("link");s.href=t,s.rel="preload",s.as="script",n.appendChild(s)})),document.head.appendChild(n)}async replaceScripts(e){let t;for(;t=e.shift();)await this.requestRepaint(),new Promise((e=>{const n=document.createElement("script");[...t.attributes].forEach((e=>{"type"!==e.nodeName&&n.setAttribute(e.nodeName,e.nodeValue)})),t.hasAttribute("src")?(n.addEventListener("load",e),n.addEventListener("error",e)):(n.text=t.text,e()),t.parentNode.replaceChild(n,t)}))}suspendEvent(){const e={};[{obj:document,name:"DOMContentLoaded"},{obj:window,name:"DOMContentLoaded"},{obj:window,name:"load"},{obj:window,name:"pageshow"},{obj:document,name:"readystatechange"}].map((t=>function(t,n){function s(n){return e[t].list.indexOf(n)>=0?"lightJS-"+n:n}e[t]||(e[t]={list:[n],add:t.addEventListener,remove:t.removeEventListener},t.addEventListener=(...n)=>{n[0]=s(n[0]),e[t].add.apply(t,n)},t.removeEventListener=(...n)=>{n[0]=s(n[0]),e[t].remove.apply(t,n)})}(t.obj,t.name))),[{obj:document,name:"onreadystatechange"},{obj:window,name:"onpageshow"}].map((e=>function(e,t){let n=e[t];Object.defineProperty(e,t,{get:()=>n||function(){},set:s=>{e["lightJS"+t]=n=s}})}(e.obj,e.name)))}suspendJQuery(){const e=this;let t=window.jQuery;Object.defineProperty(window,"jQuery",{get:()=>t,set(n){if(!n||!n.fn||!e.jQs.includes(n))return void(t=n);n.fn.ready=n.fn.init.prototype.ready=e=>{e.bind(document)(n)};const s=n.fn.on;n.fn.on=n.fn.init.prototype.on=function(...e){if(window!==this[0])return s.apply(this,e),this;const t=e=>e.split(" ").map((e=>"load"===e||0===e.indexOf("load.")?"lightJS-jquery-load":e)).join(" ");return"string"==typeof e[0]||e[0]instanceof String?(e[0]=t(e[0]),s.apply(this,e),this):("object"==typeof e[0]&&Object.keys(e[0]).forEac
20h((n=>{delete Object.assign(e[0],{[t(n)]:e[0][n]})[n]})),s.apply(this,e),this)},e.jQs.push(n),t=n}})}} 21new LightJsLoader(["keydown","mousemove","touchend","touchmove","touchstart","wheel"]); 22 } 23</script>
23<!-- meta basic type collection --><!-- meta basic type article --> 24 25 <!-- /Added by AVADA SEO Suite --> 26 <meta charset="utf-8"> 27 <meta name="viewport" content="width=device-width, initial-scale=1.0, height=device-height, minimum-scale=1.0, maximum-scale=1.0"> 28 <meta name="theme-color" content="#ffffff"> 29 30 <title>Your Shopping Cart</title><link rel="canonical" href="https://spinning.eu/cart"><link rel="shortcut icon" href="//spinning.eu/cdn/shop/files/Spinning-favicon.png?v=1753188800&width=96"> 31 <link rel="apple-touch-icon" href="//spinning.eu/cdn/shop/files/Spinning-favicon.png?v=1753188800&width=180"><link rel="preconnect" href="https://cdn.shopify.com"> 32 <link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin> 33 <link rel="dns-prefetch" href="https://productreviews.shopifycdn.com"> 34 <link rel="preconnect" href="https://www.powr.io" crossorigin> 35 <link rel="dns-prefetch" href="//www.powr.io"> 36
36<script id="maddogg-host-training-powr-resource-hints"> 37 (function () { 38 var ids = { en: '9b07da4b_1648678467', es: '7572b6a5_1648680870', nl: 'eb1c8129_1648680649', de: 'a4658b91_1783329175', fr: 'f0bf39af_1783333039', it: 'f6fbb036_1783335314' }; 39 function supported(value) { var locale = String(value || '').trim().toLowerCase().replace('_', '-').split('-')[0]; return ids[locale] ? locale : ''; } 40 function pagePath() { var parts = String(location.pathname || '').replace(/\/+/g, '/').split('/').filter(Boolean); if (parts.length && supported(parts[0])) parts.shift(); return '/' + parts.join('/'); } 41 if (!/\/pages\/spin-studios-host-a-training\/?$/.test(pagePath())) return; 42 var locale = supported(location.pathname.split('/').filter(Boolean)[0]) || supported(document.documentElement && document.documentElement.lang) || 'en'; 43 var formId = ids[locale] || ids.en; 44 function addHint(rel, href, asValue) { var link = document.createElement('link'); link.rel = rel; link.href = href; if (asValue) link.as = asValue; if (href.indexOf('powr.io') > -1) link.crossOrigin = 'anonymous'; document.head.appendChild(link); } 45 addHint('preload', 'https://www.powr.io/powr.js?platform=shopify', 'script'); 46 addHint('prefetch', 'https://www.powr.io/form-builder/u/' + formId + '#platform=shopify&url=' + encodeURIComponent(location.href), 'document'); 47 window.__MaddoggHostTrainingPowrHint = { locale: locale, formId: formId }; 48 })(); 49 </script>
49<link rel="preload" href="//spinning.eu/cdn/fonts/montserrat/montserrat_n4.81949fa0ac9fd2021e16436151e8eaa539321637.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="//spinning.eu/cdn/fonts/montserrat/montserrat_n4.81949fa0ac9fd2021e16436151e8eaa539321637.woff2" as="font" type="font/woff2" crossorigin><meta property="og:type" content="website"> 50 <meta property="og:title" content="Your Shopping Cart"><meta property="og:url" content="https://spinning.eu/cart"> 51<meta property="og:site_name" content="Spinning EU"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="Your Shopping Cart"> 52 <meta name="twitter:description" content="Your Shopping Cart">
52<script type="application/ld+json"> 53 { 54 "@context": "https://schema.org", 55 "@type": "BreadcrumbList", 56 "itemListElement": [{ 57 "@type": "ListItem", 58 "position": 1, 59 "name": "Home", 60 "item": "https://spinning.eu" 61 }] 62 } 63</script>
63<style>/* Typography (heading) */ 64 @font-face { 65 font-family: Montserrat; 66 font-weight: 400; 67 font-style: normal; 68 font-display: fallback; 69 src: url("//spinning.eu/cdn/fonts/montserrat/montserrat_n4.81949fa0ac9fd2021e16436151e8eaa539321637.woff2") format("woff2"), 70 url("//spinning.eu/cdn/fonts/montserrat/montserrat_n4.a6c632ca7b62da89c3594789ba828388aac693fe.woff") format("woff"); 71} 72 73@font-face { 74 font-family: Montserrat; 75 font-weight: 400; 76 font-style: italic; 77 font-display: fallback; 78 src: url("//spinning.eu/cdn/fonts/montserrat/montserrat_i4.5a4ea298b4789e064f62a29aafc18d41f09ae59b.woff2") format("woff2"), 79 url("//spinning.eu/cdn/fonts/montserrat/montserrat_i4.072b5869c5e0ed5b9d2021e4c2af132e16681ad2.woff") format("woff"); 80} 81 82/* Typography (body) */ 83 @font-face { 84 font-family: Montserrat; 85 font-weight: 400; 86 font-style: normal; 87 font-display: fallback; 88 src: url("//spinning.eu/cdn/fonts/montserrat/montserrat_n4.81949fa0ac9fd2021e16436151e8eaa539321637.woff2") format("woff2"), 89 url("//spinning.eu/cdn/fonts/montserrat/montserrat_n4.a6c632ca7b62da89c3594789ba828388aac693fe.woff") format("woff"); 90} 91 92@font-face { 93 font-family: Montserrat; 94 font-weight: 400; 95 font-style: italic; 96 font-display: fallback; 97 src: url("//spinning.eu/cdn/fonts/montserrat/montserrat_i4.5a4ea298b4789e064f62a29aafc18d41f09ae59b.woff2") format("woff2"), 98 url("//spinning.eu/cdn/fonts/montserrat/montserrat_i4.072b5869c5e0ed5b9d2021e4c2af132e16681ad2.woff") format("woff"); 99} 100 101@font-face { 102 font-family: Montserrat; 103 font-weight: 700; 104 font-style: normal; 105 font-display: fallback; 106 src: url("//spinning.eu/cdn/fonts/montserrat/montserrat_n7.3c434e22befd5c18a6b4afadb1e3d77c128c7939.woff2") format("woff2"), 107 url("//spinning.eu/cdn/fonts/montserrat/montserrat_n7.5d9fa6e2cae713c8fb539a9876489d86207fe957.woff") format("woff"); 108} 109 110@font-face { 111 font-family: Montserrat; 112 font-weight: 700; 113 font-style: italic; 114 font-display: fallback; 115 src: url("//spinning.eu/cdn/fonts/montserrat/montserrat_i7.a0d4a463df4f146567d871890ffb3c80408e7732.woff2") format("woff2"), 116 url("//spinning.eu/cdn/fonts/montserrat/montserrat_i7.f6ec9f2a0681acc6f8152c40921d2a4d2e1a2c78.woff") format("woff"); 117} 118 119:root { 120 /** 121 * --------------------------------------------------------------------- 122 * SPACING VARIABLES 123 * 124 * We are using a spacing inspired from frameworks like Tailwind CSS. 125 * --------------------------------------------------------------------- 126 */ 127 --spacing-0-5: 0.125rem; /* 2px */ 128 --spacing-1: 0.25rem; /* 4px */ 129 --spacing-1-5: 0.375rem; /* 6px */ 130 --spacing-2: 0.5rem; /* 8px */ 131 --spacing-2-5: 0.625rem; /* 10px */ 132 --spacing-3: 0.75rem; /* 12px */ 133 --spacing-3-5: 0.875rem; /* 14px */ 134 --spacing-4: 1rem; /* 16px */ 135 --spacing-4-5: 1.125rem; /* 18px */ 136 --spacing-5: 1.25rem; /* 20px */ 137 --spacing-5-5: 1.375rem; /* 22px */ 138 --spacing-6: 1.5rem; /* 24px */ 139 --spacing-6-5: 1.625rem; /* 26px */ 140 --spacing-7: 1.75rem; /* 28px */ 141 --spacing-7-5: 1.875rem; /* 30px */ 142 --spacing-8: 2rem; /* 32px */ 143 --spacing-8-5: 2.125rem; /* 34px */ 144 --spacing-9: 2.25rem; /* 36px */ 145 --spacing-9-5: 2.375rem; /* 38px */ 146 --spacing-10: 2.5rem; /* 40px */ 147 --spacing-11: 2.75rem; /* 44px */ 148 --spacing-12: 3rem; /* 48px */ 149 --spacing-14: 3.5rem; /* 56px */ 150 --spacing-16: 4rem; /* 64px */ 151 --spacing-18: 4.5rem; /* 72px */ 152 --spacing-20: 5rem; /* 80px */ 153 --spacing-24: 6rem; /* 96px */ 154 --spacing-28: 7rem; /* 112px */ 155 --spacing-32: 8rem; /* 128px */ 156 --spacing-36: 9rem; /* 144px */ 157 --spacing-40: 10rem; /* 160px */ 158 --spacing-44: 11rem; /* 176px */ 159 --spacing-48: 12rem; /* 192px */ 160 --spacing-52: 13rem; /* 208px */ 161 --spacing-56: 14rem; /* 224px */ 162 --spacing-60: 15rem; /* 240px */ 163 --spacing-64: 16rem; /* 256px */ 164 --spacing-72: 18rem; /* 288px */ 165 --spacing-80: 20rem; /* 320px */ 166 --spacing-96: 24rem; /* 384px */ 167 168 /* Container */ 169 --container-max-width: 1800px; 170 --container-narrow-max-width: 1550px; 171 --container-gutter: var(--spacing-5); 172 --section-outer-spacing-block: var(--spacing-14); 173 --section-inner-max-spacing-block: var(--spacing-12); 174 --section-inner-spacing-inline: var(--container-gutter); 175 --section-stack-spacing-block: var(--spacing-10); 176 177 /* Grid gutter */ 178 --grid-gutter: var(--spacing-5); 179 180 /* Product list settings */ 181 --product-list-row-gap: var(--spacing-8); 182 --product-list-column-gap: var(--grid-gutter); 183 184 /* Form settings */ 185 --input-gap: var(--spacing-2); 186 --input-height: 2.625rem; 187 --input-padding-inline: var(--spacing-4); 188 189 /* Other sizes */ 190 --sticky-area-height: calc(var(--sticky-announcement-bar-enabled, 0) * var(--announcement-bar-height, 0px) + var(--sticky-header-enabled, 0) * var(--header-height, 0px)); 191 192 /* RTL support */ 193 --transform-logical-flip: 1; 194 --transform-origin-start: left;
195 --transform-origin-end: right; 196 197 /** 198 * --------------------------------------------------------------------- 199 * TYPOGRAPHY 200 * --------------------------------------------------------------------- 201 */ 202 203 /* Font properties */ 204 --heading-font-family: Montserrat, sans-serif; 205 --heading-font-weight: 400; 206 --heading-font-style: normal; 207 --heading-text-transform: uppercase; 208 --heading-letter-spacing: 0.0em; 209 --text-font-family: Montserrat, sans-serif; 210 --text-font-weight: 400; 211 --text-font-style: normal; 212 --text-letter-spacing: 0.0em; 213 214 /* Font sizes */ 215 --text-h0: 2.5rem; 216 --text-h1: 1.75rem; 217 --text-h2: 1.5rem; 218 --text-h3: 1.375rem; 219 --text-h4: 1.125rem; 220 --text-h5: 1.125rem; 221 --text-h6: 1rem; 222 --text-xs: 0.6875rem; 223 --text-sm: 0.75rem; 224 --text-base: 0.875rem; 225 --text-lg: 1.125rem; 226 227 /** 228 * --------------------------------------------------------------------- 229 * COLORS 230 * --------------------------------------------------------------------- 231 */ 232 233 /* Color settings */--accent: 0 0 0; 234 --text-primary: 0 0 0; 235 --background-primary: 255 255 255; 236 --dialog-background: 255 255 255; 237 --border-color: var(--text-color, var(--text-primary)) / 0.12; 238 239 /* Button colors */ 240 --button-background-primary: 0 0 0; 241 --button-text-primary: 255 255 255; 242 --button-background-secondary: 255 255 255; 243 --button-text-secondary: 0 0 0; 244 245 /* Status colors */ 246 --success-background: 224 244 232; 247 --success-text: 0 163 65; 248 --warning-background: 255 246 233; 249 --warning-text: 255 183 74; 250 --error-background: 254 231 231; 251 --error-text: 248 58 58; 252 253 /* Product colors */ 254 --on-sale-text: 196 18 46; 255 --on-sale-badge-background: 196 18 46; 256 --on-sale-badge-text: 255 255 255; 257 --sold-out-badge-background: 0 0 0; 258 --sold-out-badge-text: 255 255 255; 259 --primary-badge-background: 118 57 229; 260 --primary-badge-text: 255 255 255; 261 --star-color: 247 177 25; 262 --product-card-background: 255 255 255; 263 --product-card-text: 26 26 26; 264 265 /* Header colors */ 266 --header-background: 255 255 255; 267 --header-text: 26 26 26; 268 269 /* Footer colors */ 270 --footer-background: 0 0 0; 271 --footer-text: 255 255 255; 272 273 /* Rounded variables (used for border radius) */ 274 --rounded-xs: 0.0rem; 275 --rounded-sm: 0.0rem; 276 --rounded: 0.0rem; 277 --rounded-lg: 0.0rem; 278 --rounded-full: 9999px; 279 280 --rounded-button: 0.0rem; 281 --rounded-input: 0.0rem; 282 283 /* Box shadow */ 284 --shadow-sm: 0 2px 8px rgb(var(--text-primary) / 0.0); 285 --shadow: 0 5px 15px rgb(var(--text-primary) / 0.0); 286 --shadow-md: 0 5px 30px rgb(var(--text-primary) / 0.0); 287 --shadow-block: 0px 0px 50px rgb(var(--text-primary) / 0.0); 288 289 /** 290 * --------------------------------------------------------------------- 291 * OTHER 292 * --------------------------------------------------------------------- 293 */ 294 295 --stagger-products-reveal-opacity: 0; 296 --cursor-close-svg-url: url(//spinning.eu/cdn/shop/t/9/assets/cursor-close.svg?v=147174565022153725511788350492); 297 --cursor-zoom-in-svg-url: url(//spinning.eu/cdn/shop/t/9/assets/cursor-zoom-in.svg?v=154953035094101115921788350492); 298 --cursor-zoom-out-svg-url: url(//spinning.eu/cdn/shop/t/9/assets/cursor-zoom-out.svg?v=16155520337305705181788350492); 299 --checkmark-svg-url: url(//spinning.eu/cdn/shop/t/9/assets/checkmark.svg?v=77552481021870063511788350492); 300 } 301 302 [dir="rtl"]:root { 303 /* RTL support */ 304 --transform-logical-flip: -1; 305 --transform-origin-start: right; 306 --transform-origin-end: left; 307 } 308 309 @media screen and (min-width: 700px) { 310 :root { 311 /* Typography (font size) */ 312 --text-h0: 3.25rem; 313 --text-h1: 2.25rem; 314 --text-h2: 1.75rem; 315 --text-h3: 1.625rem; 316 --text-h4: 1.25rem; 317 --text-h5: 1.25rem; 318 --text-h6: 1.125rem; 319 320 --text-xs: 0.75rem; 321 --text-sm: 0.875rem; 322 --text-base: 1.0rem; 323 --text-lg: 1.25rem; 324 325 /* Spacing */ 326 --container-gutter: 2rem; 327 --section-outer-spacing-block: var(--spacing-20); 328 --section-inner-max-spacing-block: var(--spacing-14); 329 --section-inner-spacing-inline: var(--spacing-14); 330 --section-stack-spacing-block: var(--spacing-12); 331 332 /* Grid gutter */ 333 --grid-gutter: var(--spacing-6); 334 335 /* Product list settings */ 336 --product-list-row-gap: var(--spacing-12); 337 338 /* Form settings */ 339 --input-gap: 1rem; 340 --input-height: 3.125rem; 341 --input-padding-inline: var(--spacing-5); 342 } 343 } 344 345 @media screen and (min-width: 1000px) { 346 :root { 347 /* Spacing settings */ 348 --container-gutter: var(--spacing-12); 349 --section-outer-spacing-block: var(--spacing-20); 350 --section-inner-max-spacing-block: var(--spacing-18); 351 --section-inner-spacing-inline: var(--spacing-18); 352 --section-stack-spacing-block: var(--spacing-12); 353 } 354 } 355 356 @media screen and (min-width: 1150px) { 357 :root { 358 /* Spacing settings */ 359 --container-gutter: var(--spacing-12); 360 --section-outer-spacing-block: var(--spacing-24); 361 --section-inner-max-spacing-block: var(--spacing-18); 362 --section-inner-spacing-inline: var(--spacing-18); 363 --section-stack-spacing-block: var(--spacing-12); 364 } 365 } 366 367 @media screen and (min-width: 1400px) { 368 :root { 369 /* Typography (font size) */ 370 --text-h0: 4rem; 371 --text-h1: 3rem; 372 --text-h2: 2.5rem; 373 --text-h3: 1.75rem; 374 --text-h4: 1.5rem; 375 --text-h5: 1.25rem; 376 --text-h6: 1.25rem; 377 378 --section-outer-spacing-block: var(--spacing-28); 379 --section-inner-max-spacing-block: var(--spacing-20); 380 --section-inner-spacing-inline: var(--spacing-20); 381 } 382 } 383 384 @media screen and (min-width: 1600px) { 385 :root { 386 --section-outer-spacing-block: var(--spacing-32); 387 --section-inner-max-spacing-block: var(--spacing-24); 388 --section-inner-spacing-inline: var(--spacing-24); 389 } 390 } 391 392 /** 393 * --------------------------------------------------------------------- 394 * LIQUID DEPENDANT CSS 395 * 396 * Our main CSS is Liquid free, but some very specific features depend on 397 * theme settings, so we have them here 398 * --------------------------------------------------------------------- 399 */@media screen and (pointer: fine) { 400 /* The !important are for the Shopify Payment button to ensure we override the default from Shopify styles */ 401 .button:not([disabled]):not(.button--outline):hover, .btn:not
401([disabled]):hover, .shopify-payment-button__button--unbranded:not([disabled]):hover { 402 background-color: transparent !important; 403 color: rgb(var(--button-outline-color) / var(--button-background-opacity, 1)) !important; 404 box-shadow: inset 0 0 0 2px currentColor !important; 405 } 406 407 .button--outline:not([disabled]):hover { 408 background: rgb(var(--button-background)); 409 color: rgb(var(--button-text-color)); 410 box-shadow: inset 0 0 0 2px rgb(var(--button-background)); 411 } 412 }</style>
412<script> 413 // This allows to expose several variables to the global scope, to be used in scripts 414 window.themeVariables = { 415 settings: { 416 showPageTransition: null, 417 staggerProductsApparition: true, 418 reduceDrawerAnimation: false, 419 reduceMenuAnimation: false, 420 headingApparition: "fade", 421 pageType: "cart", 422 moneyFormat: "â¬{{amount_with_comma_separator}}", 423 moneyWithCurrencyFormat: "â¬{{amount_with_comma_separator}} EUR", 424 currencyCodeEnabled: true, 425 cartType: "popover", 426 showDiscount: true, 427 discountMode: "saving", 428 pageBackground: "#ffffff", 429 textColor: "#000000" 430 }, 431 432 strings: { 433 accessibilityClose: "Close", 434 accessibilityNext: "Next", 435 accessibilityPrevious: "Previous", 436 closeGallery: "Close gallery", 437 zoomGallery: "Zoom", 438 errorGallery: "Image cannot be loaded", 439 searchNoResults: "No results could be found.", 440 addOrderNote: "Add order note", 441 editOrderNote: "Edit order note", 442 shippingEstimatorNoResults: "Sorry, we do not ship to your address.", 443 shippingEstimatorOneResult: "There is one shipping rate for your address:", 444 shippingEstimatorMultipleResults: "There are several shipping rates for your address:", 445 shippingEstimatorError: "One or more error occurred while retrieving shipping rates:" 446 }, 447 448 breakpoints: { 449 'sm': 'screen and (min-width: 700px)', 450 'md': 'screen and (min-width: 1000px)', 451 'lg': 'screen and (min-width: 1150px)', 452 'xl': 'screen and (min-width: 1400px)', 453 454 'sm-max': 'screen and (max-width: 699px)', 455 'md-max': 'screen and (max-width: 999px)', 456 'lg-max': 'screen and (max-width: 1149px)', 457 'xl-max': 'screen and (max-width: 1399px)' 458 } 459 }; 460 461 // For detecting native share 462 document.documentElement.classList.add(`native-share--${navigator.share ? 'enabled' : 'disabled'}`);</script>
462<!-- Google tag (gtag.js) --> 463<!--
vendor: 63 bytes, line 463
463<script async src="https://www.googletagmanager.com/gtag/js?id=
463G-D7CZZ970PJ
vendor: 12 bytes, line 463
463"></script>
464<script> 465
vendor: 134 bytes, lines 465-469
465window.dataLayer = window.dataLayer || []; 466 function gtag(){dataLayer.push(arguments);} 467 gtag('js', new Date()); 468 469 gtag('config', '
469G-D7CZZ970PJ
vendor: 4 bytes, line 469
469');
470</script>
470--> 471 472 473 474<!-- GEOIP -->
475<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
vendor: 1 bytes, line 475
475
476<script type="text/javascript" src="https://geoip-js.com/js/apis/geoip2/v2.1/geoip2.js"></script>
476 477 478<!--Joel's updated code--> 479<!--
480<script type="text/javascript"> 481 function runGeoRedirect() { 482 var arrPath = window.location.pathname.split('/').filter(function(p) { return p.trim() !== ""; }); 483 var language = (navigator.language || navigator.userLanguage).substring(0, 2).toLowerCase(); 484 var publishedLocalePaths = ['de', 'es', 'fr', 'it', 'nl']; 485 486 if (window.location.hostname.indexOf('.myshopify.com') > -1) { 487 console.log('GeoIP: Shopify preview domain, skipping redirect'); 488 return; 489 } 490 491 if (arrPath.length > 0 && publishedLocalePaths.indexOf(arrPath[0].toLowerCase()) > -1) { 492 console.log('GeoIP: explicit Shopify locale path selected, skipping redirect'); 493 return; 494 } 495 496 var sitePrefix = 'https://'; 497 var internationalSite = "en1.spinning.com"; 498 var regions = ["NA", "SA", "OC", "AS"]; 499 var countries = ["US", "CA", "BR", "MX", "CL", "AR", "CU", "AU", "NZ"]; 500 var excludedCountries = ['IL','AE','BH','SA','TR','ZA']; 501 var ipAddresses = ["76.80.194.178", "104.187.115.50"]; 502 503 var CurrentPage = window.location.pathname + window.location.search; 504 var usSite = "https://spinning.com" + CurrentPage; 505 var usSiteEs = "https://spinning.com/es" + CurrentPage; 506 507 var onSuccess = function(geoipResponse) { 508 if (!geoipResponse.country || !geoipResponse.country.iso_code) { 509 console.log("GeoIP: no country code returned"); 510 return; 511 } 512 513 var ip = geoipResponse.traits.ip_address; 514 var region = geoipResponse.continent.code.toUpperCase(); 515 var country = geoipResponse.country.iso_code.toUpperCase(); 516 517 console.log("GeoIP resolved -- IP:", ip, "| Country:", country, "| Region:", region); 518 519 if (ipAddresses.indexOf(ip) > -1) { 520 console.log("GeoIP: IP is excluded, skipping redirect"); 521 return; 522 } 523 524 if (excludedCountries.indexOf(country) > -1) { 525 console.log("GeoIP: country is excluded, skipping redirect"); 526 return; 527 } 528 529 if (countries.indexOf(country) > -1 || regions.indexOf(region) > -1) { 530 if (arrPath.length === 0 && language === 'es') { 531 console.log("GeoIP: -> US Spanish site", usSiteEs); 532 window.location.href = usSiteEs; 533 } else { 534 console.log("GeoIP: -> US site", usSite); 535 // Comment this line out temporarily to test without actually redirecting 536 window.location.href = usSite; 537 } 538 } else if (language === 'es' || language === 'de') { 539 var intlUrl = sitePrefix + internationalSite + "/" + language + "/"; 540 console.log("GeoIP: -> International site", intlUrl); 541 window.location.href = intlUrl; 542 } else { 543 console.log("GeoIP: no redirect rule matched for", country, region, language); 544 } 545 }; 546 547 var onError = function(error) { 548 console.warn("GeoIP lookup failed:", error); 549 }; 550 551 // Wait for geoip2 to be available before calling it 552 var attempts = 0; 553 var waitForGeoIP = setInterval(function() { 554 attempts++; 555 if (typeof geoip2 !== 'undefined') { 556 clearInterval(waitForGeoIP); 557 console.log("GeoIP: library ready, running lookup..."); 558 geoip2.country(onSuccess, onError); 559 } else if (attempts > 20) { 560 clearInterval(waitForGeoIP); 561 console.warn("GeoIP: library never loaded after 2s, giving up"); 562 } 563 }, 100); 564 } 565 566 // Run after DOM is ready 567 document.addEventListener("DOMContentLoaded", runGeoRedirect); 568</script>
568--> 569 570
571<script type="text/javascript"> 572 function runGeoRedirect() { 573 574 /* ââ TEST MODE ââââââââââââââââââââââââââââââââââââââââââââââââââââ 575 Append ?georedirect=test to any URL to switch test mode ON for 576 the rest of the tab session. In test mode the script: 577 - LOGS what it would do but never actually redirects 578 - runs on every page load (session flag ignored) 579 - also runs on .myshopify.com preview domains 580 - exposes window.__geoSimulate(countryCode, continentCode) in 581 the console to simulate visitors from any country 582 Turn off: close the tab, or run 583 sessionStorage.removeItem('geoRedirectTest') in the console. */ 584 var testMode = false; 585 try { 586 if (window.location.search.indexOf('georedirect=test') > -1) { 587 sessionStorage.setItem('geoRedirectTest', '1'); 588 } 589 testMode = sessionStorage.getItem('geoRedirectTest') === '1'; 590 } catch (e) { /* sessionStorage unavailable â test mode off */ } 591 if (testMode) console.log('%cGeoIP TEST MODE â no real redirects will happen', 'color:orange;font-weight:bold'); 592 593 /* ââ FIX 1: Run at most once per browsing session âââââââââââââââââ 594 The geo decision is made on the first page load only. Anything the 595 visitor does after that (including manually picking a language in 596 the Shopify selector) is respected and never overridden. */ 597 try { 598 if (!testMode && sessionStorage.getItem('geoRedirectChecked')) { 599 console.log('GeoIP: already evaluated this session, skipping'); 600 return; 601 } 602 // Set the flag BEFORE redirecting so the back button / the target 603 // page never triggers a second evaluation. 604 if (!testMode) sessionStorage.setItem('geoRedirectChecked', '1'); 605 } catch (e) { 606 // sessionStorage unavailable (some privacy modes) â continue anyway 607 } 608 609 var arrPath = window.location.pathname.split('/').filter(function (p) { return p.trim() !== ''; }); 610 var language = (navigator.language || navigator.userLanguage).substring(0, 2).toLowerCase(); 611 var publishedLocalePaths = ['de', 'es', 'fr', 'it', 'nl']; 612 var manualLocaleStorageKey = 'maddoggGeoCountrySync:v3:' + window.location.hostname + ':manual_locale'; 613 var manualLocaleMaxAgeMs = 180 * 24 * 60 * 60 * 1000; 614 615 function readPersistentManualLocale() { 616 try { 617 var raw = window.localStorage.getItem(manualLocaleStorageKey); 618 if (!raw) return ''; 619 var parsed = JSON.parse(raw); 620 var locale = String(parsed.locale || '').trim().toLowerCase().replace('_', '-').split('-')[0]; 621 var selectedAt = Date.parse(parsed.at || 0); 622 var ageMs = Date.now() - selectedAt; 623 var supported = locale === 'en' || publishedLocalePaths.indexOf(locale) > -1; 624 if (!supported || !isFinite(selectedAt) || ageMs < 0 || ageMs > manualLocaleMaxAgeMs) { 625 window.localStorage.removeItem(manualLocaleStorageKey); 626 return ''; 627 } 628 return locale; 629 } catch (e) { 630 return ''; 631 } 632 } 633 634 function localeFromPathSegment(value) { 635 var match = String(value || '').trim().toLowerCase().match(/^([a-z]{2})(?:-[a-z]{2})?$/); 636 if (!match) return ''; 637 return match[1] === 'en' || publishedLocalePaths.indexOf(match[1]) > -1 ? match[1] : ''; 638 } 639 640 // Never run on Shopify preview domains (unless in test mode) 641 if (!testMode && window.location.hostname.indexOf('.myshopify.com') > -1) { 642 console.log('GeoIP: Shopify preview domain, skipping redirect'); 643 return; 644 } 645 646 // Respect an explicitly selected Shopify locale path, including 647 // market-aware routes such as /en-es, /es-es and /en-nl. 648 if (arrPath.length > 0 && localeFromPathSegment(arrPath[0])) { 649 console.log('GeoIP: explicit Shopify locale path selected, skipping redirect'); 650 return; 651 } 652 653 var sitePrefix = 'https://'; 654 /* ââ EMEA storefront domain âââââââââââââââââââââââââââââââââââââââ */ 655 var internationalSite = 'spinning.eu'; 656 /* List ONLY the locales actually published on spinning.eu. 657 To verify: open your preview URL + /de (e.g. store.myshopify.com/de) 658 â if translated content loads, that locale is published; if it 659 404s, remove it from this list. */ 660 var emeaPublishedLocales = ['de', 'es', 'fr', 'it', 'nl']; 661 var usSiteHost = 'spinning.com'; 662 var regions = ['NA', 'SA', 'OC', 'AS']; 663 var countries = ['US', 'CA', 'BR', 'MX', 'CL', 'AR', 'CU', 'AU', 'NZ']; 664 var excludedCountries = ['IL', 'AE', 'BH', 'SA', 'TR', 'ZA']; 665 var ipAddresses = ['76.80.194.178', '104.187.115.50']; 666 667 var CurrentPage = window.location.pathname + window.location.search; 668 var usSite = sitePrefix + usSiteHost + CurrentPage; 669 var usSiteEs = sitePrefix + usSiteHost + '/es' + CurrentPage; 670 671 /* ââ FIX 3: Same-page guard âââââââââââââââââââââââââââââââââââââââ 672 Never redirect to the exact URL we are already on. This prevents
673 self-redirect reloads when the script ships in the theme of the 674 store it would redirect to (spinning.com or spinning.eu). */ 675 var redirectTo = function (url, label) { 676 var a = document.createElement('a'); 677 a.href = url; 678 var samePage = 679 a.hostname === window.location.hostname && 680 a.pathname.replace(/\/+$/, '') === window.location.pathname.replace(/\/+$/, ''); 681 if (samePage) { 682 console.log('GeoIP: already on target page, no redirect needed (' + label + ')'); 683 return; 684 } 685 if (testMode) { 686 console.log('%cGeoIP [TEST]: WOULD redirect -> ' + label + ': ' + url, 'color:orange'); 687 return; 688 } 689 console.log('GeoIP: -> ' + label, url); 690 window.location.href = url; 691 }; 692 693 var onSuccess = function (geoipResponse) { 694 if (!geoipResponse.country || !geoipResponse.country.iso_code) { 695 console.log('GeoIP: no country code returned'); 696 return; 697 } 698 var ip = geoipResponse.traits.ip_address; 699 var region = geoipResponse.continent.code.toUpperCase(); 700 var country = geoipResponse.country.iso_code.toUpperCase(); 701 console.log('GeoIP resolved -- IP:', ip, '| Country:', country, '| Region:', region); 702 703 if (ipAddresses.indexOf(ip) > -1) { 704 console.log('GeoIP: IP is excluded, skipping redirect'); 705 return; 706 } 707 if (excludedCountries.indexOf(country) > -1) { 708 console.log('GeoIP: country is excluded, skipping redirect'); 709 return; 710 } 711 712 if (countries.indexOf(country) > -1 || regions.indexOf(region) > -1) { 713 // Americas / Oceania / Asia -> US storefront 714 if (arrPath.length === 0 && language === 'es') { 715 redirectTo(usSiteEs, 'US Spanish site'); 716 } else { 717 redirectTo(usSite, 'US site'); 718 } 719 } else if (region === 'EU' || region === 'AF') { 720 /* ââ All EMEA visitors -> EMEA storefront (spinning.eu) ââââââââ 721 (Middle East key markets are handled by excludedCountries 722 above; other Asian countries route to the US site via the 723 regions list.) 724 Locale is chosen by COUNTRY first, then browser language, 725 then the store default (English, no prefix). */ 726 var countryLocaleMap = { 727 DE: 'de', AT: 'de', CH: 'de', 728 FR: 'fr', MC: 'fr', LU: 'fr', 729 IT: 'it', SM: 'it', 730 NL: 'nl', 731 ES: 'es', AD: 'es' 732 // Multilingual countries not listed (e.g. BE) fall back to 733 // the visitor's browser language below. 734 }; 735 var manualLocale = readPersistentManualLocale(); 736 var locale = manualLocale || 737 countryLocaleMap[country] || 738 (emeaPublishedLocales.indexOf(language) > -1 ? language : ''); 739 // English is the unprefixed EMEA route; other values must be published. 740 if (locale && locale !== 'en' && emeaPublishedLocales.indexOf(locale) === -1) locale = ''; 741 var localePrefix = locale && locale !== 'en' ? '/' + locale : ''; 742 var intlUrl = sitePrefix + internationalSite + localePrefix + CurrentPage; 743 redirectTo(intlUrl, 'EMEA site' + (locale ? ' (' + locale + ')' : '')); 744 } else { 745 console.log('GeoIP: no redirect rule matched for', country, region, language); 746 } 747 }; 748 749 var onError = function (error) { 750 console.warn('GeoIP lookup failed:', error); 751 }; 752 753 /* In test mode, expose a console helper to simulate any visitor: 754 __geoSimulate('DE', 'EU') // German visitor 755 __geoSimulate('US', 'NA') // US visitor 756 __geoSimulate('TR', 'AS') // excluded country 757 Combine with a browser-language change to test the es/de paths. */ 758 if (testMode) { 759 window.__geoSimulate = function (countryCode, continentCode) { 760 onSuccess({ 761 country: { iso_code: countryCode }, 762 continent: { code: continentCode }, 763 traits: { ip_address: '0.0.0.0' } 764 }); 765 }; 766 console.log('GeoIP [TEST]: __geoSimulate(country, continent) is available in the console'); 767 } 768 769 // Wait for the geoip2 library to be available before calling it 770 var attempts = 0; 771 var waitForGeoIP = setInterval(function () { 772 attempts++; 773 if (typeof geoip2 !== 'undefined') { 774 clearInterval(waitForGeoIP); 775 console.log('GeoIP: library ready, running lookup...'); 776 geoip2.country(onSuccess, onError); 777 } else if (attempts > 20) { 778 clearInterval(waitForGeoIP); 779 console.warn('GeoIP: library never loaded after 2s, giving up'); 780 } 781 }, 100); 782 } 783 784 document.addEventListener('DOMContentLoaded', runGeoRedirect); 785</script>
785 786 787 788 789 790 791 792
792<script id="maddogg-geo-country-sync"> 793 (function () { 794 var marker = 'MADDOGG_GEO_COUNTRY_SYNC'; 795 var version = 'v3'; 796 var fallbackCountry = 'NL'; 797 var fallbackLocale = 'en'; 798 var supportedLocales = ['de', 'es', 'fr', 'it', 'nl']; 799 var currentCountry = 'NL'; 800 var currentLocale = 'en'; 801 var availableCountries = ['AF', 802'AL', 803'DZ', 804'AD', 805'AO', 806'AM', 807'AT', 808'AZ', 809'BH', 810'BY', 811'BE', 812'BJ', 813'BA', 814'BW', 815'BG', 816'BF', 817'BI', 818'CM', 819'CV', 820'CF', 821'TD', 822'HR', 823'CY', 824'CZ', 825'DK', 826'DJ', 827'EG', 828'ER', 829'EE', 830'ET', 831'FI', 832'FR', 833'GA', 834'GM', 835'GE', 836'DE', 837'GH', 838'GI', 839'GR', 840'GN', 841'GW', 842'HU', 843'IS', 844'IQ', 845'IE', 846'IL', 847'IT', 848'JO', 849'KZ', 850'KE', 851'KW', 852'LV', 853'LB', 854'LS', 855'LR', 856'LI', 857'LT', 858'LU', 859'MG', 860'MW', 861'ML', 862'MT', 863'MR', 864'MU', 865'MC', 866'ME', 867'MA', 868'MZ', 869'NA', 870'NL', 871'NE', 872'NG', 873'MK', 874'NO', 875'OM', 876'PK', 877'PL', 878'PT', 879'QA', 880'RO', 881'RU', 882'RW', 883'SM', 884'SA', 885'SN', 886'RS', 887'SL', 888'SK', 889'SI', 890'SO', 891'ZA', 892'ES', 893'SD', 894'SE', 895'CH', 896'TJ', 897'TZ', 898'TG', 899'TN', 900'TR', 901'TM', 902'UG', 903'UA', 904'AE', 905'GB', 906'VA', 907'EH', 908'YE', 909'ZM', 910'ZW' 911]; 912 var availableLocales = ['en', 913'es', 914'de', 915'nl', 916'fr', 917'it' 918]; 919 var countryLocaleMap = { 920 ES: 'es', 921 FR: 'fr', MC: 'fr', BE: 'fr', LU: 'fr', 922 DE: 'de', AT: 'de', CH: 'de', LI: 'de', 923 IT: 'it', SM: 'it', VA: 'it', 924 NL: 'en' 925 }; 926 927 function normalizeCountry(value) { 928 return String(value || '').trim().toUpperCase(); 929 } 930 931 function normalizeLocale(value) { 932 return String(value || '').trim().toLowerCase().replace('_', '-').split('-')[0]; 933 } 934 935 function storageKey(name) { 936 return 'maddoggGeoCountrySync:' + version + ':' + window.location.hostname + ':' + name; 937 } 938 939 function storageGet(key) { 940 try { return window.sessionStorage.getItem(key); } catch (e) { return null; } 941 } 942 943 function storageSet(key, value) { 944 try { window.sessionStorage.setItem(key, value); } catch (e) {} 945 } 946 947 var manualLocaleMaxAgeMs = 180 * 24 * 60 * 60 * 1000; 948 949 function preferenceGet(key) { 950 try { return window.localStorage.getItem(key); } catch (e) { return null; } 951 } 952 953 function preferenceSet(key, value) { 954 try { window.localStorage.setItem(key, value); } catch (e) {} 955 } 956 957 function preferenceRemove(key) { 958 try { window.localStorage.removeItem(key); } catch (e) {} 959 } 960 961 function setDebug(payload) { 962 window.MaddoggGeoCountrySync = Object.assign({ marker: marker, version: version }, payload || {}); 963 } 964 965 function shouldSkip() { 966 if (window.location.search.indexOf('geocountry=off') > -1) { 967 setDebug({ status: 'skipped', reason: 'disabled_by_query' }); 968 return true; 969 } 970 var path = window.location.pathname || ''; 971 if (['/cart', '/checkout', '/checkouts', '/account'].some(function (prefix) { return path === prefix || path.indexOf(prefix + '/') === 0; })) { 972 setDebug({ status: 'skipped', reason: 'sensitive_path', path: path }); 973 return true; 974 } 975 return false; 976 } 977 978 function readManualSelection(type) { 979 var key = storageKey('manual_' + type); 980 var raw = storageGet(key); 981 if (!raw && type === 'locale') raw = preferenceGet(key); 982 if (!raw) return null; 983 984 try { 985 var parsed = JSON.parse(raw); 986 if (type === 'locale') { 987 var locale = normalizeLocale(parsed.locale); 988 var selectedAt = Date.parse(parsed.at || 0); 989 var ageMs = Date.now() - selectedAt; 990 if ( 991 availableLocales.indexOf(locale) === -1 || 992 !isFinite(selectedAt) || 993 ageMs < 0 || 994 ageMs > manualLocaleMaxAgeMs 995 ) { 996 preferenceRemove(key); 997 return null; 998 } 999 parsed.locale = locale; 1000 } 1001 return parsed; 1002 } catch (e) { 1003 if (type === 'locale') { 1004 preferenceRemove(key); 1005 return null; 1006 } 1007 return { raw: raw }; 1008 } 1009 } 1010 1011 function installManualSelectionGuard() { 1012 document.addEventListener('click', function (event) { 1013 var countryTarget = event.target && event.target.closest ? event.target.closest('button[name="country_code"], input[name="country_code"]') : null; 1014 if (countryTarget && !window.__MaddoggGeoCountrySyncAutoSubmitting) { 1015 storageSet(storageKey('manual_country'), JSON.stringify({ country: normalizeCountry(countryTarget.value), at: new Date().toISOString() })); 1016 } 1017 var localeTarget = event.target && event.target.closest ? event.target.closest('button[name="locale_code"], input[name="locale_code"], button[name="language_code"], input[name="language_code"]') : null; 1018 if (localeTarget && !window.__MaddoggGeoCountrySyncAutoSubmitting) { 1019 var key = storageKey('manual_locale'); 1020 var payload = JSON.stringify({ 1021 locale: normalizeLocale(localeTarget.value), 1022 at: new Date().toISOString() 1023 }); 1024 storageSet(key, payload); 1025 preferenceSet(key, payload); 1026 } 1027 }, true); 1028 } 1029 1030 function parseServerTimingCountry(value) { 1031 var text = String(value || ''); 1032 var match = text.match(/(?:^|,)\s*country;desc="?([A-Z]{2})"?/i); 1033 return match ? normalizeCountry(match[1]) : ''; 1034 } 1035 1036 function detectCountryFromServerTiming() { 1037 if (!window.fetch) return Promise.resolve(''); 1038 return fetch(window.location.href, { 1039 method: 'HEAD', 1040 cache: 'no-store', 1041 credentials: 'same-origin' 1042 }).then(function (response) { 1043 return parseServerTimingCountry(response.headers && response.headers.get('server-timing')); 1044 }).catch(function () { return ''; }); 1045 } 1046 1047 function detectCountryFromGeoIP(timeoutMs) { 1048 return new Promise(function (resolve) { 1049 var resolved = false;
1050 function finish(country) { 1051 if (resolved) return; 1052 resolved = true; 1053 resolve(normalizeCountry(country)); 1054 } 1055 var attempts = 0; 1056 var timer = window.setInterval(function () { 1057 attempts += 1; 1058 if (window.geoip2 && window.geoip2.country) { 1059 window.clearInterval(timer); 1060 try { 1061 window.geoip2.country(function (geoipResponse) { 1062 finish(geoipResponse && geoipResponse.country && geoipResponse.country.iso_code); 1063 }, function () { finish(''); }); 1064 } catch (e) { finish(''); } 1065 } else if (attempts > Math.ceil(timeoutMs / 100)) { 1066 window.clearInterval(timer); 1067 finish(''); 1068 } 1069 }, 100); 1070 }); 1071 } 1072 1073 function detectTargetCountry(callback) { 1074 detectCountryFromServerTiming().then(function (serverCountry) { 1075 if (serverCountry) { 1076 callback(serverCountry, 'shopify_server_timing'); 1077 return; 1078 } 1079 detectCountryFromGeoIP(4000).then(function (geoCountry) { 1080 if (geoCountry) { 1081 callback(geoCountry, 'geoip2'); 1082 } else { 1083 callback(fallbackCountry, 'fallback_unknown_country'); 1084 } 1085 }); 1086 }); 1087 } 1088 1089 function localeRoot() { 1090 var root = ''; 1091 try { root = window.Shopify && window.Shopify.routes && window.Shopify.routes.root; } catch (e) {} 1092 if (root && root.charAt(root.length - 1) !== '/') root += '/'; 1093 if (root) return root; 1094 var first = normalizeLocale((window.location.pathname || '').split('/').filter(Boolean)[0]); 1095 if (supportedLocales.indexOf(first) > -1) return '/' + first + '/'; 1096 return '/'; 1097 } 1098 1099 function pathLocale() { 1100 var firstSegment = (window.location.pathname || '').split('/').filter(Boolean)[0] || ''; 1101 if (!/^[a-z]{2}(?:-[a-z]{2})?$/i.test(firstSegment)) return ''; 1102 var first = normalizeLocale(firstSegment); 1103 return availableLocales.indexOf(first) > -1 ? first : ''; 1104 } 1105 1106 function desiredLocaleForCountry(country) { 1107 var target = normalizeLocale(countryLocaleMap[normalizeCountry(country)] || fallbackLocale); 1108 return availableLocales.indexOf(target) > -1 ? target : fallbackLocale; 1109 } 1110 1111 function localizedReturnTo(targetLocale) { 1112 targetLocale = normalizeLocale(targetLocale || fallbackLocale); 1113 var path = window.location.pathname || '/'; 1114 var search = window.location.search || ''; 1115 var parts = path.split('/'); 1116 var first = normalizeLocale(parts[1]); 1117 var hasLocalePrefix = supportedLocales.indexOf(first) > -1; 1118 if (hasLocalePrefix) parts.splice(1, 1); 1119 var cleanPath = parts.join('/') || '/'; 1120 if (cleanPath.charAt(0) !== '/') cleanPath = '/' + cleanPath; 1121 if (targetLocale && targetLocale !== fallbackLocale && availableLocales.indexOf(targetLocale) > -1) { 1122 cleanPath = '/' + targetLocale + (cleanPath === '/' ? '' : cleanPath); 1123 } 1124 return cleanPath + search; 1125 } 1126 1127 function returnToPath(targetLocale) { 1128 return localizedReturnTo(targetLocale || currentLocale || fallbackLocale); 1129 } 1130 1131 function markAttempt(type, target, source, method) { 1132 storageSet(storageKey('attempt_' + type), JSON.stringify({ 1133 type: type, 1134 fromCountry: normalizeCountry(currentCountry), 1135 fromLocale: normalizeLocale(currentLocale), 1136 to: type === 'country' ? normalizeCountry(target) : normalizeLocale(target), 1137 source: source, 1138 method: method, 1139 at: new Date().toISOString() 1140 })); 1141 } 1142 1143 function recentAttempt(type, target) { 1144 var raw = storageGet(storageKey('attempt_' + type)); 1145 if (!raw) return null; 1146 try { 1147 var parsed = JSON.parse(raw); 1148 var expected = type === 'country' ? normalizeCountry(target) : normalizeLocale(target); 1149 var actual = type === 'country' ? normalizeCountry(parsed.to) : normalizeLocale(parsed.to); 1150 if (actual !== expected) return null; 1151 var ageMs = Date.now() - Date.parse(parsed.at || 0); 1152 return ageMs >= 0 && ageMs < 10 * 60 * 1000 ? parsed : null; 1153 } catch (e) { return null; } 1154 } 1155 1156 function clickButton(name, targetValue) { 1157 var normalizedTarget = name === 'country_code' ? normalizeCountry(targetValue) : normalizeLocale(targetValue); 1158 var selector = 'button[name="' + name + '"], input[name="' + name + '"]'; 1159 var buttons = Array.prototype.slice.call(document.querySelectorAll(selector)); 1160 var button = buttons.find(function (candidate) { 1161 var value = candidate.value || candidate.getAttribute('value'); 1162 return (name === 'country_code' ? normalizeCountry(value) : normalizeLocale(value)) === normalizedTarget; 1163 }); 1164 if (!button) return false;
1165 window.__MaddoggGeoCountrySyncAutoSubmitting = true; 1166 button.click(); 1167 window.setTimeout(function () { window.__MaddoggGeoCountrySyncAutoSubmitting = false; }, 3000); 1168 return true; 1169 } 1170 1171 function ensureHidden(form, name, value) { 1172 var input = form.querySelector('input[name="' + name + '"]'); 1173 if (!input) { 1174 input = document.createElement('input'); 1175 input.type = 'hidden'; 1176 input.name = name; 1177 form.appendChild(input); 1178 } 1179 input.value = value; 1180 } 1181 1182 function submitLocalizationForm(targetCountry, targetLocale, type) { 1183 var existingForm = document.querySelector('form[action*="/localization"], form.shopify-localization-form'); 1184 var form = existingForm || document.createElement('form'); 1185 if (!existingForm) { 1186 form.method = 'post'; 1187 form.action = localeRoot() + 'localization'; 1188 form.style.display = 'none'; 1189 document.body.appendChild(form); 1190 } 1191 ensureHidden(form, 'form_type', 'localization'); 1192 ensureHidden(form, '_method', 'put'); 1193 ensureHidden(form, 'utf8', 'â'); 1194 if (targetCountry) ensureHidden(form, 'country_code', normalizeCountry(targetCountry)); 1195 if (targetLocale) ensureHidden(form, 'locale_code', normalizeLocale(targetLocale)); 1196 ensureHidden(form, 'return_to', returnToPath(targetLocale)); 1197 window.__MaddoggGeoCountrySyncAutoSubmitting = true; 1198 form.submit(); 1199 return true; 1200 } 1201 1202 function syncCountry(targetCountry, source) { 1203 targetCountry = normalizeCountry(targetCountry || fallbackCountry); 1204 currentCountry = normalizeCountry(currentCountry); 1205 1206 if (availableCountries.indexOf(targetCountry) === -1) { 1207 var fallbackAvailable = availableCountries.indexOf(fallbackCountry) > -1; 1208 setDebug({ status: 'skipped', reason: 'geo_country_not_available', currentCountry: currentCountry, targetCountry: targetCountry, fallbackCountry: fallbackCountry, source: source }); 1209 if (!fallbackAvailable) return false; 1210 targetCountry = fallbackCountry; 1211 source = source + '_fallback_country'; 1212 } 1213 1214 if (targetCountry === currentCountry) return true; 1215 1216 var manual = readManualSelection('country'); 1217 if (manual && normalizeCountry(manual.country) && normalizeCountry(manual.country) !== targetCountry) { 1218 setDebug({ status: 'skipped', reason: 'manual_country_selected_this_session', currentCountry: currentCountry, targetCountry: targetCountry, manualCountry: normalizeCountry(manual.country), source: source }); 1219 return false; 1220 } 1221 1222 var attempt = recentAttempt('country', targetCountry); 1223 if (attempt) { 1224 setDebug({ status: 'skipped', reason: 'recent_country_attempt_already_made', currentCountry: currentCountry, targetCountry: targetCountry, source: source, attempt: attempt }); 1225 return false; 1226 } 1227 1228 if (clickButton('country_code', targetCountry)) { 1229 markAttempt('country', targetCountry, source, 'button_click'); 1230 setDebug({ status: 'submitting', stage: 'country', method: 'button_click', currentCountry: currentCountry, targetCountry: targetCountry, source: source }); 1231 return false; 1232 } 1233 1234 var targetLocale = desiredLocaleForCountry(targetCountry); 1235 markAttempt('country', targetCountry, source, 'form_submit'); 1236 setDebug({ status: 'submitting', stage: 'country', method: 'form_submit', currentCountry: currentCountry, targetCountry: targetCountry, targetLocale: targetLocale, source: source }); 1237 submitLocalizationForm(targetCountry, targetLocale, 'country'); 1238 return false; 1239 } 1240 1241 function syncLocale(targetCountry, source) { 1242 var targetLocale = desiredLocaleForCountry(targetCountry); 1243 var current = normalizeLocale(currentLocale || fallbackLocale); 1244 var explicitPathLocale = pathLocale(); 1245 1246 if (!targetLocale || availableLocales.indexOf(targetLocale) === -1) { 1247 setDebug({ status: 'ready', reason: 'target_locale_unavailable', currentCountry: normalizeCountry(currentCountry), targetCountry: normalizeCountry(targetCountry), currentLocale: current, targetL
1247ocale: targetLocale, source: source }); 1248 return; 1249 } 1250 if (current === targetLocale) { 1251 setDebug({ status: 'ready', reason: 'country_and_locale_selected', currentCountry: normalizeCountry(currentCountry), targetCountry: normalizeCountry(targetCountry), currentLocale: current, targetLocale: targetLocale, source: source }); 1252 return; 1253 } 1254 1255 var manual = readManualSelection('locale'); 1256 if (manual && normalizeLocale(manual.locale) && normalizeLocale(manual.locale) !== targetLocale) { 1257 setDebug({ status: 'skipped', reason: 'manual_locale_selected_this_session', currentCountry: normalizeCountry(currentCountry), targetCountry: normalizeCountry(targetCountry), currentLocale: current, targetLocale: targetLocale, manualLocale: normalizeLocale(manual.locale), source: source }); 1258 return; 1259 } 1260 1261 if (explicitPathLocale && explicitPathLocale !== targetLocale) { 1262 setDebug({ status: 'skipped', reason: 'explicit_locale_path_selected', currentCountry: normalizeCountry(currentCountry), targetCountry: normalizeCountry(targetCountry), currentLocale: current, targetLocale: targetLocale, pathLocale: explicitPathLocale, source: source }); 1263 return; 1264 } 1265 1266 var attempt = recentAttempt('locale', targetLocale); 1267 if (attempt) { 1268 setDebug({ status: 'skipped', reason: 'recent_locale_attempt_already_made', currentCountry: normalizeCountry(currentCountry), targetCountry: normalizeCountry(targetCountry), currentLocale: current, targetLocale: targetLocale, source: source, attempt: attempt }); 1269 return; 1270 } 1271
1272 if (clickButton('locale_code', targetLocale)) { 1273 markAttempt('locale', targetLocale, source, 'button_click'); 1274 setDebug({ status: 'submitting', stage: 'locale', method: 'button_click', currentCountry: normalizeCountry(currentCountry), targetCountry: normalizeCountry(targetCountry), currentLocale: current, targetLocale: targetLocale, source: source }); 1275 return; 1276 } 1277 1278 markAttempt('locale', targetLocale, source, 'form_submit'); 1279 setDebug({ status: 'submitting', stage: 'locale', method: 'form_submit', currentCountry: normalizeCountry(currentCountry), targetCountry: normalizeCountry(targetCountry), currentLocale: current, targetLocale: targetLocale, source: source }); 1280 submitLocalizationForm(targetCountry, targetLocale, 'locale'); 1281 } 1282 1283 function syncCountryAndLocale(detectedCountry, source) { 1284 var targetCountry = normalizeCountry(detectedCountry || fallbackCountry); 1285 if (syncCountry(targetCountry, source) === false) return; 1286 syncLocale(targetCountry, source); 1287 } 1288 1289 function run() { 1290 installManualSelectionGuard(); 1291 if (shouldSkip()) return; 1292 detectTargetCountry(syncCountryAndLocale); 1293 } 1294 1295 if (document.readyState === 'loading') { 1296 document.addEventListener('DOMContentLoaded', run); 1297 } else { 1298 run(); 1299 } 1300 })(); 1301 </script>
1301 1302 1303
1303<script> 1304 if (!(HTMLScriptElement.supports && HTMLScriptElement.supports('importmap'))) { 1305 const importMapPolyfill = document.createElement('script'); 1306 importMapPolyfill.async = true; 1307 importMapPolyfill.src = "//spinning.eu/cdn/shop/t/9/assets/es-module-shims.min.js?v=98603786603752121101788350492"; 1308 1309 document.head.appendChild(importMapPolyfill); 1310 } 1311 </script>
1311 1312 1313
1313<script async crossorigin fetchpriority="high" src="/cdn/shopifycloud/importmap-polyfill/es-modules-shim.2.4.0.js"></script>
vendor: 1 bytes, line 1313
1313
1314<script type="importmap">{ 1315 "imports": { 1316 "vendor": "//spinning.eu/cdn/shop/t/9/assets/vendor.min.js?v=37127808935879722241788350492", 1317 "theme": "//spinning.eu/cdn/shop/t/9/assets/theme.js?v=52388010713111981741788350492", 1318 "photoswipe": "//spinning.eu/cdn/shop/t/9/assets/photoswipe.min.js?v=13374349288281597431788350492" 1319 } 1320 } 1321 </script>
1321 1322 1323
1323<script type="module" src="//spinning.eu/cdn/shop/t/9/assets/vendor.min.js?v=37127808935879722241788350492"></script>
1323 1324
1324<script type="module" src="//spinning.eu/cdn/shop/t/9/assets/theme.js?v=52388010713111981741788350492"></script>
1324 1325
1325<script src="https://www.powr.io/powr.js?platform=shopify"></script>
1325 1326 1327
1327<script id="maddogg-pagefly-i18n-runtime"> 1328 (function () { 1329 var marker = 'MADDOGG_PAGEFLY_I18N_RUNTIME'; 1330 if (window.__MaddoggPageFlyI18nInstalled) return; 1331 window.__MaddoggPageFlyI18nInstalled = true; 1332 1333 var supportedLocales = ['de', 'es', 'fr', 'it', 'nl']; 1334 var translationsUrl = "//spinning.eu/cdn/shop/t/9/assets/maddogg-pagefly-i18n.json?v=169446553287516488941788350492"; 1335 translationsUrl += (translationsUrl.indexOf('?') === -1 ? '?' : '&') + 'maddogg_i18n=20260619_commercial_bikes_metafields_v3'; 1336 var i18nPayload = null; 1337 var i18nLoaded = false; 1338 var i18nLoading = false; 1339 var i18nLoadError = ''; 1340 var i18nVersion = ''; 1341 var lastStats = null; 1342 1343 var localeLabels = { 1344 de: { bikes: 'FAHRRÃDER', home: 'ZU HAUSE', commercial: 'GEWERBLICH', shop: 'SHOP', instructors: 'TRAINER' }, 1345 es: { bikes: 'BICICLETAS', home: 'CASA', commercial: 'COMERCIAL', shop: 'TIENDA', instructors: 'INSTRUCTORES' }, 1346 fr: { bikes: 'VÃLOS', home: 'MAISON', commercial: 'COMMERCIAL', shop: 'BOUTIQUE', instructors: 'INSTRUCTEURS' }, 1347 it: { bikes: 'BICI', home: 'CASA', commercial: 'COMMERCIALE', shop: 'NEGOZIO', istruttori: 'ISTRUTTORI', instructors: 'ISTRUTTORI' }, 1348 nl: { bikes: 'FIETSEN', home: 'THUIS', commercial: 'COMMERCIEEL', shop: 'WINKEL', instructors: 'INSTRUCTEURS' } 1349 }; 1350 1351 var originalTileLabels = { 1352 BIKES: 'bikes', 1353 HOME: 'home', 1354 COMMERCIAL: 'commercial', 1355 SHOP: 'shop', 1356 INSTRUCTORS: 'instructors' 1357 }; 1358 var originalTileBoxes = {}; 1359 1360 1361 var tileOverlayStyles = { 1362 bikes: { width: '54%', bottom: '10%', height: '22%', minHeight: '56px', maxHeight: '96px' }, 1363 home: { width: '48%', bottom: '6%', height: '16%', minHeight: '44px', maxHeight: '78px' }, 1364 commercial: { width: '58%', bottom: '0.5%', height: '14%', minHeight: '52px', maxHeight: '96px' }, 1365 shop: { width: '46%', bottom: '10%', height: '22%', minHeight: '56px', maxHeight: '96px' }, 1366 instructors: { width: '62%', bottom: '6%', height: '16%', minHeight: '44px', maxHeight: '78px' } 1367 }; 1368 1369 function normalizeLocale(value) { 1370 return String(value || '').trim().toLowerCase().replace('_', '-').split('-')[0]; 1371 } 1372 1373 function detectLocale() { 1374 var firstPathSegment = normalizeLocale(window.location.pathname.split('/').filter(Boolean)[0]); 1375 if (supportedLocales.indexOf(firstPathSegment) > -1) return firstPathSegment; 1376 var root = ''; 1377 try { root = window.Shopify && window.Shopify.routes && window.Shopify.routes.root; } catch (e) {} 1378 var rootLocale = normalizeLocale(String(root || '').split('/').filter(Boolean)[0]); 1379 if (supportedLocales.indexOf(rootLocale) > -1) return rootLocale; 1380 var shopifyLocale = normalizeLocale(window.Shopify && window.Shopify.locale); 1381 if (supportedLocales.indexOf(shopifyLocale) > -1) return shopifyLocale; 1382 var htmlLocale = normalizeLocale(document.documentElement && document.documentElement.lang); 1383 if (supportedLocales.indexOf(htmlLocale) > -1) return htmlLocale; 1384 return ''; 1385 } 1386 1387 function localePrefix(locale) { 1388 if (!locale) return ''; 1389 var sources = []; 1390 try { sources.push(window.Shopify && window.Shopify.routes && window.Shopify.routes.root); } catch (e) {} 1391 sources.push(window.location.pathname); 1392 for (var i = 0; i < sources.length; i += 1) { 1393 var segment = String(sources[i] || '').split('/').filter(Boolean)[0] || ''; 1394 if (segment && normalizeLocale(segment) === locale) return '/' + segment; 1395 } 1396 return '/' + locale; 1397 } 1398 1399 function normalizePathForLocale(path, locale) { 1400 var clean = String(path || '/'); 1401 if (clean.charAt(0) !== '/') clean = '/' + clean; 1402 var parts = clean.split('/').filter(Boolean); 1403 var firstSegment = parts.length ? String(parts[0] || '').trim().toLowerCase() : ''; 1404 var firstLocale = normalizeLocale(firstSegment); 1405 var hasLocalePrefix = supportedLocales.indexOf(firstLocale) > -1 || 1406 (firstLocale === 'en' && /^en(?:-[a-z]{2})?$/.test(firstSegment)); 1407 if (hasLocalePrefix) { 1408 parts.shift(); 1409 clean = parts.length ? '/' + parts.join('/') : '/'; 1410 } 1411 if (!clean) clean = '/'; 1412 return localePrefix(locale) + (clean === '/' ? '' : clean); 1413 } 1414 1415 function explicitEnglishLinkLocale() { 1416 var sources = ['/', window.location.pathname]; 1417 try { sources.unshift(window.Shopify && window.Shopify.routes && window.Shopify.routes.root); } catch (e) {} 1418 for (var i = 0; i < sources.length; i += 1) { 1419 var segment = String(sources[i] || '').split('/').filter(
1419Boolean)[0] || ''; 1420 if (/^en-[a-z]{2}$/.test(String(segment).toLowerCase())) return 'en'; 1421 } 1422 return ''; 1423 } 1424 1425 function localizeStoreUrl(value, locale) { 1426 if (!value) return value; 1427 var raw = String(value); 1428 if (raw.charAt(0) === '#') return raw; 1429 raw = raw.replace(/\/collections\/spinning(?:%C2%AE|®)(?:%20|\s+)essentials(?=[/?#]|$)/i, '/collections/spinning%C2%AE-essentials'); 1430 try { 1431 var url = new URL(raw, window.location.origin); 1432 var host = url.hostname.toLowerCase(); 1433 if (host === 'spinu.spinning.com') { 1434 var spinUPath = url.pathname.replace(/\/+$/, ''); 1435 if (!spinUPath) { 1436 return url.toString(); 1437 } 1438 url.hostname = 'spinu.spinning.eu'; 1439 return url.toString(); 1440 } 1441 if (host === 'spinning.eu' || host === 'www.spinning.eu') { 1442 var legacyKey = url.pathname.replace(/\/+$/, '') + url.search; 1443 var legacyMap = { 1444 '/i/spin-member-benefits': '/pages/spin®-membership-benefits', 1445 '/instructors/spin-membership': '/pages/spin-membership', 1446 '/spinlife/getting-started-with-the-new-spinning-app-': '/blogs/default-blog/spinlife-meet-the-new-spinning-connect-app', 1447 '/blog.html?category=12&name=Gear%20and%20Accessories': '/pages/spinning-apps', 1448 '/blog.html?category=12&name=Gear and Accessories': '/pages/spinning-apps' 1449 }; 1450 if (legacyMap[legacyKey]) { 1451 var mappedPath = locale ? normalizePathForLocale(legacyMap[legacyKey], locale) : legacyMap[legacyKey]; 1452 return window.location.origin + mappedPath + url.hash; 1453 } 1454 } 1455 if (locale && (host === 'spinning.com' || host === 'www.spinning.com' || host === 'd1fuiy-um.myshopify.com' || host === window.location.hostname.toLowerCase())) { 1456 var localizedPath = normalizePathForLocale(url.pathname, locale); 1457 return window.location.origin + localizedPath + url.search + url.hash; 1458 } 1459 } catch (e) {} 1460 return value; 1461 } 1462 1463 function labelKeyForUrl(value) { 1464 var text = String(value || '').toLowerCase(); 1465 if (text.indexOf('/collections/bikes') > -1 || text.indexOf('/collections/spin-bikes') > -1) return 'bikes'; 1466 if (text.indexOf('/pages/ride-at-home') > -1) return 'home'; 1467 if (text.indexOf('/pages/commercial-spinner-bikes') > -1 || text.indexOf('/collections/commercial-spin-bikes') > -1) return 'commercial'; 1468 if (text.indexOf('/collections/best-sellers') > -1 || text.indexOf('/collections/all') > -1 || text.indexOf('/collections/shop') > -1) return 'shop'; 1469 if (text.indexOf('/pages/instructors') > -1) return 'instructors'; 1470 return ''; 1471 } 1472 1473 function localizeKnownHomeTileLinks(locale) { 1474 if (!locale || !document.querySelectorAll) return 0; 1475 var count = 0; 1476 var attrs = ['href', 'data-href', 'data-url', 'data-link', 'data-pf-link', 'data-pf-href']; 1477 var selector = attrs.map(function (attr) { return '[' + attr + ']'; }).join(','); 1478 Array.prototype.slice.call(document.querySelectorAll(selector)).forEach(function (el) { 1479 attrs.forEach(function (attr) { 1480 if (!el.hasAttribute || !el.hasAttribute(attr)) return; 1481 var original = el.getAttribute(attr); 1482 if (!labelKeyForUrl(original)) return; 1483 var updated = localizeStoreUrl(original, locale); 1484 if (updated && updated !== original) { 1485 el.setAttribute(attr, updated); 1486 count += 1; 1487 } 1488 }); 1489 }); 1490 return count; 1491 } 1492 1493 function fixDutchSpinULoginPage(locale) { 1494 if (locale !== 'nl' || window.location.pathname.toLowerCase().indexOf('/pages/instructors-spinulogin') === -1) return 0; 1495 var count = 0; 1496 1497 Array.prototype.slice.call(document.querySelectorAll('p, li')).forEac
1497h(function (el) { 1498 var text = String(el.textContent || '').replace(/\s+/g, ' ').trim().toLowerCase(); 1499 if ( 1500 text.indexOf('in europa, het midden-oosten of afrika woont') === -1 || 1501 (text.indexOf('spinu.spinning.eu') === -1 && text.indexOf('emea-website') === -1) 1502 ) return; 1503 1504 while (el.firstChild) el.removeChild(el.firstChild); 1505 el.appendChild(document.createTextNode('Als je in de Verenigde Staten, Canada, Latijns-Amerika of Azië-Pacific woont, kun je inloggen op de Amerikaanse website via ')); 1506 var link = document.createElement('a'); 1507 link.href = 'https://spinu.spinning.com/'; 1508 link.textContent = 'spinu.spinning.com'; 1509 el.appendChild(link); 1510 el.appendChild(document.createTextNode('.')); 1511 count += 1; 1512 }); 1513 1514 Array.prototype.slice.call(document.querySelectorAll('img')).forEach(function (img) { 1515 if (!img.complete || img.naturalWidth !== 0 || !(img.currentSrc || img.getAttribute('src'))) return; 1516 var holder = img.closest('[data-pf-type="Image"]') || img; 1517 if (holder.style.display !== 'none') { 1518 holder.style.display = 'none'; 1519 holder.setAttribute('aria-hidden', 'true'); 1520 count += 1; 1521 } 1522 }); 1523 1524 return count; 1525 } 1526 1527 function knownHomeTileUrlFromElement(el) { 1528 if (!el || !el.getAttribute) return ''; 1529 var attrs = ['href', 'data-href', 'data-url', 'data-link', 'data-pf-link', 'data-pf-href']; 1530 for (var i = 0; i < attrs.length; i += 1) { 1531 if (!el.hasAttribute || !el.hasAttribute(attrs[i])) continue; 1532 var value = el.getAttribute(attrs[i]); 1533 if (labelKeyForUrl(value)) return value; 1534 } 1535 return ''; 1536 } 1537 1538 function findKnownHomeTileLink(target) { 1539 if (!target || !target.closest) return null; 1540 var selector = '[href], [data-href], [data-url], [data-link], [data-pf-link], [data-pf-href], [data-action="url"]'; 1541 var current = target.closest(selector); 1542 while (current && current !== document.documentElement) { 1543 var url = knownHomeTileUrlFromElement(current); 1544 if (url) return { element: current, url: url }; 1545 current = current.parentElement && current.parentElement.closest ? current.parentElement.closest(selector) : null; 1546 } 1547 return null; 1548 } 1549 1550 function installHomeTileClickInterceptor() { 1551 if (window.__MaddoggHomeTileClickInterceptorInstalled || !document.addEventListener) return; 1552 window.__MaddoggHomeTileClickInterceptorInstalled = true; 1553 document.addEventListener('click', function (event) { 1554 if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return; 1555 var match = findKnownHomeTileLink(event.target); 1556 if (!match) return; 1557 var locale = detectLocale(); 1558 var targetUrl = localizeStoreUrl(match.url, locale); 1559 if (!targetUrl || targetUrl === match.url) return; 1560 event.preventDefault(); 1561 event.stopImmediatePropagation(); 1562 window.location.assign(targetUrl); 1563 }, true); 1564 } 1565 1566 function hasVisibleBackground(el) { 1567 if (!el || !window.getComputedStyle) return false; 1568 var bg = window.getComputedStyle(el).backgroundColor || ''; 1569 return bg && bg !== 'transparent' && bg !== 'rgba(0, 0, 0, 0)' && bg !== 'rgba(0,0,0,0)'; 1570 } 1571 1572 function findOriginalTileBox(labelEl) { 1573 if (!labelEl || !labelEl.getBoundingClientRect) return labelEl; 1574 var root = labelEl.closest ? labelEl.closest('.__pf') : null; 1575 var textRect = labelEl.getBoundingClientRect(); 1576 var current = labelEl; 1577 var best = labelEl; 1578 while (current && current !== root) { 1579 if (current.querySelector && current.querySelector('img')) break; 1580 var rect = current.getBoundingClientRect ? current.getBoundingClientRect() : null; 1581 if (rect && rect.width && rect.height && hasVisibleBackgroun
1581d(current)) { 1582 var wideEnough = rect.width >= Math.max(textRect.width + 24, 90); 1583 var tallEnough = rect.height >= Math.max(textRect.height + 8, 28); 1584 var notWholeTile = rect.height <= Math.max(textRect.height * 5, 120); 1585 if (wideEnough && tallEnough && notWholeTile) best = current; 1586 } 1587 current = current.parentElement; 1588 } 1589 return best; 1590 } 1591 1592 function applyOriginalTileBox(overlay, wrapper, key) { 1593 var box = originalTileBoxes[key]; 1594 if (!box || !box.getBoundingClientRect || !wrapper || !wrapper.getBoundingClientRect) return false; 1595 var boxRect = box.getBoundingClientRect(); 1596 var wrapperRect = wrapper.getBoundingClientRect(); 1597 if (!boxRect.width || !boxRect.height || !wrapperRect.width || !wrapperRect.height) return false; 1598 var left = ((boxRect.left - wrapperRect.left) / wrapperRect.width) * 100; 1599 var top = ((boxRect.top - wrapperRect.top) / wrapperRect.height) * 100; 1600 var width = (boxRect.width / wrapperRect.width) * 100; 1601 var height = (boxRect.height / wrapperRect.height) * 100; 1602 if (width < 20 || width > 95 || height < 5 || height > 40) return false; 1603 overlay.style.left = left + '%'; 1604 overlay.style.top = top + '%'; 1605 overlay.style.right = 'auto'; 1606 overlay.style.bottom = 'auto'; 1607 overlay.style.width = width + '%'; 1608 overlay.style.height = height + '%'; 1609 overlay.style.minHeight = '0'; 1610 overlay.style.maxHeight = 'none'; 1611 overlay.style.transform = 'none'; 1612 return true; 1613 } 1614 1615 function wrapImageWithOverlay(img, label, key) { 1616 if (!img || img.dataset.maddoggPageflyOverlay === '1') return false; 1617 img.dataset.maddoggPageflyOverlay = '1'; 1618 var parent = img.parentNode; 1619 if (!parent) return false; 1620 var wrapper = document.createElement('span'); 1621 wrapper.className = 'maddogg-pagefly-tile-wrap'; 1622 wrapper.style.position = 'relative'; 1623 wrapper.style.zIndex = '1'; 1624 wrapper.style.display = 'block'; 1625 wrapper.style.width = '100%'; 1626 wrapper.style.lineHeight = '0'; 1627 parent.insertBefore(wrapper, img); 1628 wrapper.appendChild(img); 1629 1630 var overlay = document.createElement('span'); 1631 overlay.className = 'maddogg-pagefly-tile-label'; 1632 overlay.textContent = label; 1633 var overlayStyle = tileOverlayStyles[key] || tileOverlayStyles.bikes; 1634 overlay.style.position = 'absolute'; 1635 overlay.style.zIndex = '3'; 1636 overlay.style.boxSizing = 'border-box'; 1637 overlay.style.left = '50%'; 1638 overlay.style.right = 'auto'; 1639 overlay.style.width = overlayStyle.width; 1640 overlay.style.transform = 'translateX(-50%)'; 1641 overlay.style.bottom = overlayStyle.bottom; 1642 overlay.style.minHeight = overlayStyle.minHeight; 1643 overlay.style.height = overlayStyle.height; 1644 overlay.style.maxHeight = overlayStyle.maxHeight; 1645 applyOriginalTileBox(overlay, wrapper, key); 1646 overlay.style.display = 'flex'; 1647 overlay.style.alignItems = 'center'; 1648 overlay.style.justifyContent = 'center'; 1649 overlay.style.padding = '0 10px'; 1650 overlay.style.background = '#000'; 1651 overlay.style.color = '#fff'; 1652 overlay.style.fontFamily = 'Montserrat, Arial, sans-serif'; 1653 overlay.style.fontWeight = '800'; 1654 overlay.style.fontSize = 'clamp(13px, 1.2vw, 20px)'; 1655 overlay.style.letterSpacing = '0.04em'; 1656 overlay.style.textTransform = 'uppercase'; 1657 overlay.style.textAlign = 'center'; 1658 overlay.style.pointerEvents = 'none'; 1659 overlay.style.lineHeight = '1.1'; 1660 wrapper.appendChild(overlay); 1661 return true; 1662 } 1663 1664 function normalizeText(value) { 1665 return String(value || '').replace(/\s+/g, ' ').trim(); 1666 } 1667 1668 1669 function hideOriginalTileLabels(root) { 1670 if (!root) return 0; 1671 var hidden = 0; 1672 var candidates = Array.prototype.slice.call(root.querySelectorAll('*'));
1673 candidates.forEach(function (el) { 1674 if (!el || el.dataset.maddoggPageflyOriginalTileHidden === '1') return; 1675 if (el.classList && el.classList.contains('maddogg-pagefly-tile-label')) return; 1676 if (el.children && el.children.length > 0) return; 1677 var label = normalizeText(el.textContent).toUpperCase(); 1678 var key = originalTileLabels[label]; 1679 if (!key) return; 1680 var box = findOriginalTileBox(el); 1681 originalTileBoxes[key] = box || el; 1682 el.dataset.maddoggPageflyOriginalTileHidden = '1'; 1683 if (box && box !== el) { 1684 box.dataset.maddoggPageflyOriginalTileHidden = '1'; 1685 box.style.visibility = 'hidden'; 1686 } else { 1687 el.style.visibility = 'hidden'; 1688 } 1689 hidden += 1; 1690 }); 1691 return hidden; 1692 } 1693 1694 function preserveOuterWhitespace(original, replacement) { 1695 var text = String(original || ''); 1696 var leading = (text.match(/^\s*/) || [''])[0]; 1697 var trailing = (text.match(/\s*$/) || [''])[0]; 1698 return leading + replacement + trailing; 1699 } 1700 1701 function shouldSkipTextNode(node) { 1702 if (!node || !node.nodeValue || !normalizeText(node.nodeValue)) return true; 1703 var parent = node.parentElement; 1704 if (!parent) return true; 1705 var tag = String(parent.tagName || '').toLowerCase(); 1706 if (tag === 'script' || tag === 'style' || tag === 'noscript' || tag === 'textarea' || tag === 'select') return true; 1707 if (parent.closest && parent.closest('[data-maddogg-pagefly-i18n-skip], script, style, noscript, textarea, select')) return true; 1708 return false; 1709 } 1710 1711 function translatePageFlyText(root, translationMap) { 1712 if (!root || !translationMap) return { text: 0, attrs: 0 }; 1713 var textCount = 0; 1714 var attrCount = 0; 1715 var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { 1716 acceptNode: function (node) { 1717 return shouldSkipTextNode(node) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT; 1718 } 1719 }); 1720 var node; 1721 while ((node = walker.nextNode())) { 1722 var source = normalizeText(node.nodeValue); 1723 var translated = translationMap[source]; 1724 if (translated && translated !== source) { 1725 node.nodeValue = preserveOuterWhitespace(node.nodeValue, translated); 1726 textCount += 1; 1727 } 1728 } 1729 1730 root.querySelectorAll('[alt], [title], [aria-label]').forEach(function (el) { 1731 ['alt', 'title', 'aria-label'].forEach(function (attr) { 1732 if (!el.hasAttribute(attr)) return; 1733 var current = el.getAttribute(attr); 1734 var source = normalizeText(current); 1735 var translated = translationMap[source]; 1736 if (translated && translated !== source && translated !== current) { 1737 el.setAttribute(attr, translated); 1738 attrCount += 1; 1739 } 1740 }); 1741 }); 1742 1743 return { text: textCount, attrs: attrCount }; 1744 } 1745 1746 function translationMapForLocale(locale) { 1747 if (!i18nPayload || !i18nPayload.translations) return null; 1748 return i18nPayload.translations[locale] || null; 1749 } 1750 1751 function ensureTranslationsLoaded(callback) { 1752 if (i18nLoaded) { 1753 callback(); 1754 return; 1755 } 1756 if (i18nLoading) return; 1757 i18nLoading = true; 1758 fetch(translationsUrl, { credentials: 'same-origin', cache: 'force-cache' }) 1759 .then(function (response) { 1760 if (!response.ok) throw new Error('HTTP ' + response.status); 1761 return response.json(); 1762 }) 1763 .then(function (payload) { 1764 i18nPayload = payload || {}; 1765 i18nVersion = String(i18nPayload.generated_at || i18nPayload.version || ''); 1766 i18nLoaded = true; 1767 i18nLoading = false;
1768 i18nLoadError = ''; 1769 callback(); 1770 }) 1771 .catch(function (error) { 1772 i18nLoading = false; 1773 i18nLoadError = error && error.message ? error.message : String(error || 'unknown'); 1774 publishDebug(detectLocale(), 0, 0, 0, 0, 0, 0, 0); 1775 }); 1776 } 1777 1778 function publishDebug(locale, roots, overlayCount, linkCount, textCount, attrCount, hiddenLabelCount, mapSize) { 1779 lastStats = { 1780 marker: marker, 1781 locale: locale, 1782 roots: roots, 1783 overlays: overlayCount, 1784 linksLocalized: linkCount, 1785 textTranslated: textCount, 1786 attrsTranslated: attrCount, 1787 originalLabelsHidden: hiddenLabelCount || 0, 1788 mapLoaded: i18nLoaded, 1789 mapSize: mapSize || 0, 1790 version: i18nVersion, 1791 loadError: i18nLoadError, 1792 updatedAt: new Date().toISOString() 1793 }; 1794 window.MaddoggPageFlyI18n = lastStats; 1795 } 1796 1797 function pageFlyRoots() { 1798 var selectors = ['.__pf', '[data-pf-type]', '.pagefly-section', '[class*="pagefly"]', '[id*="pagefly"]']; 1799 var nodes = []; 1800 selectors.forEach(function (selector) { 1801 Array.prototype.slice.call(document.querySelectorAll(selector)).forEach(function (node) { 1802 if (node && nodes.indexOf(node) === -1) nodes.push(node); 1803 }); 1804 }); 1805 return nodes.filter(function (node) { 1806 return !nodes.some(function (other) { return other !== node && other.contains && other.contains(node); }); 1807 }); 1808 } 1809 1810 function applyPageFlyI18n() { 1811 var locale = detectLocale(); 1812 var linkLocale = locale || explicitEnglishLinkLocale(); 1813 var roots = pageFlyRoots(); 1814 var linkCount = 0; 1815 if (document.body && roots.indexOf(document.body) === -1) { 1816 roots.push(document.body); 1817 } 1818 1819 Array.prototype.slice.call(document.querySelectorAll('a[href]')).forEach(function (el) { 1820 var original = el.getAttribute('href'); 1821 var updated = localizeStoreUrl(original, linkLocale); 1822 if (updated && updated !== original) { 1823 el.setAttribute('href', updated); 1824 linkCount += 1; 1825 } 1826 }); 1827 1828 if (!locale || !roots.length) { 1829 publishDebug(locale, roots.length, 0, linkCount, 0, 0, 0, 0); 1830 return; 1831 } 1832 1833 var labels = localeLabels[locale] || {}; 1834 var translationMap = translationMapForLocale(locale); 1835 var overlayCount = 0; 1836 var textCount = 0; 1837 var attrCount = 0; 1838 var hiddenLabelCount = 0; 1839 linkCount += localizeKnownHomeTileLinks(locale); 1840 1841 roots.forEach(function (root) { 1842 var textOnlyRoot = root === document.body; 1843 if (!textOnlyRoot) { 1844 hiddenLabelCount += hideOriginalTileLabels(root); 1845 1846 root.querySelectorAll('[href], [data-href]').forEach(function (el) { 1847 ['href', 'data-href'].forEach(function (attr) { 1848 if (!el.hasAttribute(attr)) return; 1849 var original = el.getAttribute(attr); 1850 var updated = localizeStoreUrl(original, locale); 1851 if (updated && updated !== original) { 1852 el.setAttribute(attr, updated); 1853 linkCount += 1; 1854 } 1855 }); 1856 }); 1857 1858 root.querySelectorAll('img[data-href], img[data-action="url"]').forEach(function (img) { 1859 var key = labelKeyForUrl(img.getAttribute('data-href') || img.getAttribute('href') || ''); 1860 if (key && labels[key] && wrapImageWithOverlay(img, labels[key], key)) overlayCount += 1; 1861 }); 1862 } 1863 1864 if (translationMap) { 1865 var result = translatePageFlyText(root, translationMap); 1866 textCount += result.text; 1867 attrCount += result.attrs; 1868 } 1869 }); 1870 1871 attrCount += fixDutchSpinULoginPage(locale); 1872 1873 publishDebug(locale, roots.length, overlayCount, linkCount, textCount, attrCount, hiddenLabelCount, translationMap ? Object.keys(translationMap).length : 0); 1874 } 1875 1876 function applyNowAndAfterLoad() { 1877 applyPageFlyI18n(); 1878 ensureTranslationsLoaded(applyPageFlyI18n); 1879 } 1880 1881 installHomeTileClickInterceptor(); 1882 1883 if (document.readyState === 'loading') { 1884 document.addEventListener('DOMContentLoaded', applyNowAndAfterLoad); 1885 } else { 1886 applyNowAndAfterLoad(); 1887 } 1888 1889 var attempts = 0; 1890 var timer = window.setInterval(function () { 1891 attempts += 1; 1892 applyNowAndAfterLoad(); 1893 if (attempts >= 60) window.clearInterval(timer); 1894 }, 250); 1895 })(); 1896 </script>
1896 1897 1898
1898<script id="maddogg-host-training-powr-locale"> 1899 (function () { 1900 if (window.__MaddoggHostTrainingPowrInstalled) return; 1901 window.__MaddoggHostTrainingPowrInstalled = true; 1902 1903 var formIdsByLocale = { 1904 en: '9b07da4b_1648678467', 1905 es: '7572b6a5_1648680870', 1906 nl: 'eb1c8129_1648680649', 1907 de: 'a4658b91_1783329175', 1908 fr: 'f0bf39af_1783333039', 1909 it: 'f6fbb036_1783335314' 1910 }; 1911 1912 var allFormIds = Object.keys(formIdsByLocale).map(function (locale) { return formIdsByLocale[locale]; }); 1913 var renderStartedFor = ''; 1914 var documentObserver = null; 1915 var scheduleTimer = null; 1916 1917 function normalizeLocale(value) { 1918 return String(value || '').trim().toLowerCase().replace('_', '-').split('-')[0]; 1919 } 1920 1921 function supportedLocale(value) { 1922 var locale = normalizeLocale(value); 1923 return formIdsByLocale[locale] ? locale : ''; 1924 } 1925 1926 function detectLocale() { 1927 var pathLocale = supportedLocale(window.location.pathname.split('/').filter(Boolean)[0]); 1928 if (pathLocale) return pathLocale; 1929 var rootLocale = ''; 1930 try { rootLocale = supportedLocale(window.Shopify && window.Shopify.routes && window.Shopify.routes.root); } catch (e) {} 1931 if (rootLocale) return rootLocale; 1932 var shopifyLocale = ''; 1933 try { shopifyLocale = supportedLocale(window.Shopify && window.Shopify.locale); } catch (e) {} 1934 if (shopifyLocale) return shopifyLocale; 1935 var htmlLocale = supportedLocale(document.documentElement && document.documentElement.lang); 1936 if (htmlLocale) return htmlLocale; 1937 return 'en'; 1938 } 1939 1940 function normalizedPagePath() { 1941 var parts = String(window.location.pathname || '').replace(/\/+/g, '/').split('/').filter(Boolean); 1942 if (parts.length && supportedLocale(parts[0])) parts.shift(); 1943 return '/' + parts.join('/'); 1944 } 1945 1946 function isHostTrainingPage() { 1947 return /\/pages\/spin-studios-host-a-training\/?$/.test(normalizedPagePath()); 1948 } 1949 1950 function ensureStyle() { 1951 if (document.getElementById('maddogg-host-training-powr-locale-style')) return; 1952 var style = document.createElement('style'); 1953 style.id = 'maddogg-host-training-powr-locale-style'; 1954 style.textContent = '.powr-form-builder[data-maddogg-host-training-pending="true"]{opacity:0;min-height:900px;}'; 1955 (document.head || document.documentElement).appendChild(style); 1956 } 1957 1958 function normalizeClassName(value) { 1959 return String(value || '').replace(/\bpowrLoaded\b/g, '').replace(/\s+/g, ' ').trim(); 1960 } 1961 1962 function findHostTrainingForm() { 1963 var forms = Array.prototype.slice.call(document.querySelectorAll('.powr-form-builder')); 1964 for (var i = 0; i < forms.length; i += 1) { 1965 if (allFormIds.indexOf(forms[i].id) > -1) return forms[i]; 1966 if (forms[i].querySelector('iframe[src*="powr.io/form-builder/u/"]')) return forms[i]; 1967 } 1968 return forms[0] || null; 1969 } 1970 1971 function formHasTargetIframe(form, targetId) { 1972 var iframe = form && form.querySelector('iframe[src*="powr.io/form-builder/u/"]'); 1973 return !!(iframe && iframe.src.indexOf(targetId) > -1); 1974 } 1975 1976 function revealForm(form, locale, targetId, status) { 1977 if (!form) return; 1978 form.removeAttribute('data-maddogg-host-training-pending'); 1979 window.MaddoggHostTrainingPowr = { locale: locale, formId: targetId, applied: true, mode: 'powr-native-once', status: status || 'revealed' }; 1980 } 1981 1982 function waitForPowrAndRender(form, locale, targetId, startedAt) { 1983 if (!form || !document.documentElement.contains(form)) return; 1984 if (formHasTargetIframe(form, targetId)) { 1985 revealForm(form, locale, targetId, 'target-iframe-existing'); 1986 return; 1987 } 1988 1989 var elapsed = Date.now() - startedAt; 1990 var powrReady = false;
1991 try { powrReady = !!(window.POWR && typeof window.POWR.renderAll === 'function'); } catch (e) {} 1992 1993 if (powrReady) { 1994 try { window.POWR.renderAll(); } catch (e) {} 1995 watchForTargetIframe(form, locale, targetId); 1996 return; 1997 } 1998 1999 if (elapsed < 4500) { 2000 window.setTimeout(function () { waitForPowrAndRender(form, locale, targetId, startedAt); }, 150); 2001 } else { 2002 revealForm(form, locale, targetId, 'powr-timeout'); 2003 } 2004 } 2005 2006 function watchForTargetIframe(form, locale, targetId) { 2007 var revealed = false; 2008 function done(status) { 2009 if (revealed) return; 2010 revealed = true; 2011 if (observer) observer.disconnect(); 2012 revealForm(form, locale, targetId, status); 2013 } 2014 var observer = new MutationObserver(function () { 2015 var iframe = form.querySelector('iframe[src*="powr.io/form-builder/u/"]'); 2016 if (iframe && iframe.src.indexOf(targetId) > -1) { 2017 iframe.addEventListener('load', function () { done('iframe-loaded'); }, { once: true }); 2018 window.setTimeout(function () { done('iframe-present'); }, 900); 2019 } 2020 }); 2021 observer.observe(form, { childList: true, subtree: true, attributes: true, attributeFilter: ['src', 'class'] }); 2022 if (formHasTargetIframe(form, targetId)) done('target-iframe-existing-after-render'); 2023 window.setTimeout(function () { done('iframe-wait-timeout'); }, 5000); 2024 } 2025 2026 function applyHostTrainingPowr() { 2027 if (!isHostTrainingPage()) return false; 2028 ensureStyle(); 2029 var locale = detectLocale(); 2030 var targetId = formIdsByLocale[locale] || formIdsByLocale.en; 2031 var form = findHostTrainingForm(); 2032 if (!form || !targetId) return false; 2033 2034 if (form.id === targetId && formHasTargetIframe(form, targetId)) { 2035 revealForm(form, locale, targetId, 'already-correct'); 2036 return true; 2037 } 2038 2039 var renderKey = locale + ':' + targetId + ':' + Date.now(); 2040 renderStartedFor = renderKey; 2041 form.setAttribute('data-maddogg-host-training-pending', 'true'); 2042 form.setAttribute('data-maddogg-host-training-locale', locale); 2043 form.id = targetId; 2044 2045 var className = normalizeClassName(form.className); 2046 if (!/\bpowr-form-builder\b/.test(className)) className = (className + ' powr-form-builder').trim(); 2047 var existingIframe = form.querySelector('iframe[src*="powr.io/form-builder/u/"]'); 2048 var hasWrongIframe = existingIframe && existingIframe.src.indexOf(targetId) === -1; 2049 var wasAlreadyRendered = /\bpowrLoaded\b/.test(form.className); 2050 form.className = className; 2051 if (hasWrongIframe || wasAlreadyRendered) form.innerHTML = ''; 2052 2053 window.setTimeout(function () { 2054 if (renderStartedFor !== renderKey) return; 2055 waitForPowrAndRender(form, locale, targetId, Date.now()); 2056 }, 80); 2057 return true; 2058 } 2059 2060 function scheduleApply() { 2061 if (scheduleTimer) return; 2062 scheduleTimer = window.setTimeout(function () { 2063 scheduleTimer = null; 2064 applyHostTrainingPowr(); 2065 }, 100); 2066 } 2067 2068 function start() { 2069 if (!isHostTrainingPage()) return; 2070 applyHostTrainingPowr(); 2071 documentObserver = new MutationObserver(function () { 2072 var form = findHostTrainingForm(); 2073 if (!form) return; 2074 var locale = detectLocale(); 2075 var targetId = formIdsByLocale[locale] || formIdsByLocale.en; 2076 if (form.getAttribute('data-maddogg-host-training-pending') === 'true') return; 2077 if (form.id !== targetId || !formHasTargetIframe(form, targetId)) scheduleApply(); 2078 }); 2079 documentObserver.observe(document.body || document.documentElement, { childList: true, subtree: true }); 2080 window.setTimeout(function () { 2081 if (documentObserver) documentObserver.disconnect(); 2082 documentObserver = null; 2083 if (scheduleTimer) window.clearTimeout(scheduleTimer); 2084 }, 7000); 2085 } 2086 2087 start(); 2088 if (document.readyState === 'loading') { 2089 document.addEventListener('DOMContentLoaded', scheduleApply); 2090 } 2091 })(); 2092 </script>
2092 2093 2094
2094<script id="maddogg-meteor-menu-i18n-override"> 2095 (function () { 2096 var marker = 'MADDOGG_METEOR_MENU_I18N_OVERRIDE'; 2097 if (window.__MaddoggMeteorMenuI18nInstalled) { 2098 return; 2099 } 2100 window.__MaddoggMeteorMenuI18nInstalled = true; 2101 2102 var localizedRevisionFiles = { 2103 base: { 2104 de: "//spinning.eu/cdn/shop/t/9/assets/meteor-mega-menus.de.json?v=91574297550529015631788350492", 2105 es: "//spinning.eu/cdn/shop/t/9/assets/meteor-mega-menus.es.json?v=159771146062375890781788350492", 2106 fr: "//spinning.eu/cdn/shop/t/9/assets/meteor-mega-menus.fr.json?v=89309128476913393791788350492", 2107 it: "//spinning.eu/cdn/shop/t/9/assets/meteor-mega-menus.it.json?v=4681790072995600381788350492", 2108 nl: "//spinning.eu/cdn/shop/t/9/assets/meteor-mega-menus.nl.json?v=111697410021410294181788350492" 2109 }, 2110 current: { 2111 de: "//spinning.eu/cdn/shop/t/9/assets/meteor-mega-menus-4057c652.de.json?v=146286110121603832931788350492", 2112 es: "//spinning.eu/cdn/shop/t/9/assets/meteor-mega-menus-4057c652.es.json?v=159340133210421706121788350492", 2113 fr: "//spinning.eu/cdn/shop/t/9/assets/meteor-mega-menus-4057c652.fr.json?v=37946648063211762291788350492", 2114 it: "//spinning.eu/cdn/shop/t/9/assets/meteor-mega-menus-4057c652.it.json?v=42519139532518565001788350492", 2115 nl: "//spinning.eu/cdn/shop/t/9/assets/meteor-mega-menus-4057c652.nl.json?v=118341931391001511391788350492" 2116 } 2117 }; 2118 2119 function normalizeLocale(value) { 2120 return String(value || '').trim().toLowerCase().replace('_', '-').split('-')[0]; 2121 } 2122 2123 function supportedLocale(value) { 2124 var locale = normalizeLocale(value); 2125 return localizedRevisionFiles.base[locale] ? locale : ''; 2126 } 2127 2128 function localeFromRoot(root) { 2129 var first = String(root || '').split('/').filter(Boolean)[0]; 2130 return supportedLocale(first); 2131 } 2132 2133 function detectLocale() { 2134 var paramsLocale = ''; 2135 try { 2136 var params = new URLSearchParams(window.location.search || ''); 2137 paramsLocale = supportedLocale(params.get('locale') || params.get('language')); 2138 } catch (e) {} 2139 if (paramsLocale) return paramsLocale; 2140 2141 var pathLocale = supportedLocale(window.location.pathname.split('/').filter(Boolean)[0]); 2142 if (pathLocale) return pathLocale; 2143 2144 var shopifyRootLocale = ''; 2145 try { 2146 shopifyRootLocale = localeFromRoot(window.Shopify && window.Shopify.routes && window.Shopify.routes.root); 2147 } catch (e) {} 2148 if (shopifyRootLocale) return shopifyRootLocale; 2149 2150 var shopifyLocale = ''; 2151 try { 2152 shopifyLocale = supportedLocale(window.Shopify && window.Shopify.locale); 2153 } catch (e) {} 2154 if (shopifyLocale) return shopifyLocale; 2155 2156 var htmlLocale = supportedLocale(document.documentElement && document.documentElement.lang); 2157 if (htmlLocale) return htmlLocale; 2158 2159 return ''; 2160 } 2161 2162 function localeRootPathFor(locale) { 2163 var root = ''; 2164 try { 2165 root = window.Shopify && window.Shopify.routes && window.Shopify.routes.root; 2166 } catch (e) {} 2167 if (localeFromRoot(root) === locale) { 2168 return root.charAt(root.length - 1) === '/' ? root : root + '/'; 2169 } 2170 return '/' + locale + '/'; 2171 } 2172 2173 function sourceKeyForUrl(url) { 2174 var text = String(url || ''); 2175 if (/meteor-mega-menus[_-]4057c652/i.test(text) || text.indexOf('4057c652') !== -1) { 2176 return 'current'; 2177 } 2178 if (/meteor-mega-menus\.json/i.test(text)) { 2179 return 'base'; 2180 } 2181 return 'current'; 2182 } 2183 2184 function isMeteorMenuRevisionUrl(url) { 2185 var text = String(url || ''); 2186 return /meteor-mega-menus/i.test(text) && /\.json(?:\?|$)/i.test(text); 2187 } 2188 2189 function localizedUrlFor(originalUrl) { 2190 if (!isMeteorMenuRevisionUrl(originalUrl)) { 2191 return ''; 2192 } 2193 var locale = detectLocale(); 2194 if (!locale) { 2195 return ''; 2196 } 2197 var sourceKey = sourceKeyForUrl(originalUrl); 2198 var url = localizedRevisionFiles[sourceKey] && localizedRevisionFiles[sourceKey][locale]; 2199 if (!url) { 2200 return ''; 2201 } 2202 window.MaddoggMeteorMenuI18n = window.MaddoggMeteorMenuI18n || {}; 2203 window.MaddoggMeteorMenuI18n.marker = marker; 2204 window.MaddoggMeteorMenuI18n.locale = locale; 2205 window.MaddoggMeteorMenuI18n.localeRootPath = localeRootPathFor(locale); 2206 window.MaddoggMeteorMenuI18n.languageCode = locale.toUpperCase(); 2207 window.MaddoggMeteorMenuI18n.sourceKey = sourceKey; 2208 window.MaddoggMeteorMenuI18n.originalRevisionFileUrl = String(originalUrl || ''); 2209 window.MaddoggMeteorMenuI18n.localizedRevisionFileUrl = url; 2210 window.MaddoggMeteorMenuI18n.updatedAt = new Date().toISOString(); 2211 return url; 2212 } 2213 2214 function patchMeteorMenu(menu) { 2215 if (!menu || typeof menu !== 'object') { 2216 return menu; 2217 } 2218 var locale = detectLocale(); 2219 if (locale) { 2220 menu.__maddoggOriginalLanguageCode = menu.__maddoggOriginalLanguageCode || menu.languageCode;
2221 menu.__maddoggOriginalLocaleRootPath = menu.__maddoggOriginalLocaleRootPath || menu.localeRootPath; 2222 menu.languageCode = locale.toUpperCase(); 2223 menu.localeRootPath = localeRootPathFor(locale); 2224 } 2225 if (menu.revisionFileUrl) { 2226 var localizedUrl = localizedUrlFor(menu.revisionFileUrl); 2227 if (localizedUrl && menu.revisionFileUrl !== localizedUrl) { 2228 menu.__maddoggOriginalRevisionFileUrl = menu.__maddoggOriginalRevisionFileUrl || menu.revisionFileUrl; 2229 menu.revisionFileUrl = localizedUrl; 2230 menu.__maddoggLocalizedRevisionFileUrl = localizedUrl; 2231 } 2232 } 2233 return menu; 2234 } 2235 2236 var meteorMenuBacking = window.MeteorMenu; 2237 function installMeteorMenuSetter() { 2238 try { 2239 Object.defineProperty(window, 'MeteorMenu', { 2240 configurable: true, 2241 enumerable: true, 2242 get: function () { 2243 return meteorMenuBacking; 2244 }, 2245 set: function (value) { 2246 meteorMenuBacking = patchMeteorMenu(value); 2247 } 2248 }); 2249 if (meteorMenuBacking) { 2250 meteorMenuBacking = patchMeteorMenu(meteorMenuBacking); 2251 } 2252 } catch (e) { 2253 if (window.MeteorMenu) { 2254 patchMeteorMenu(window.MeteorMenu); 2255 } 2256 } 2257 } 2258 2259 function patchExistingMeteorMenu() { 2260 try { 2261 if (meteorMenuBacking) { 2262 meteorMenuBacking = patchMeteorMenu(meteorMenuBacking); 2263 } else if (window.MeteorMenu) { 2264 window.MeteorMenu = patchMeteorMenu(window.MeteorMenu); 2265 } 2266 } catch (e) {} 2267 } 2268 2269 function installFetchRedirect() { 2270 if (!window.fetch || window.fetch.__maddoggMeteorMenuI18nPatched) { 2271 return; 2272 } 2273 var originalFetch = window.fetch; 2274 var patchedFetch = function (input, init) { 2275 try { 2276 var requestUrl = typeof input === 'string' ? input : (input && input.url) || ''; 2277 var localizedUrl = localizedUrlFor(requestUrl); 2278 if (localizedUrl) { 2279 window.MaddoggMeteorMenuI18n.fetchRedirects = (window.MaddoggMeteorMenuI18n.fetchRedirects || 0) + 1; 2280 if (typeof Request !== 'undefined' && input instanceof Request) { 2281 input = new Request(localizedUrl, input); 2282 } else { 2283 input = localizedUrl; 2284 } 2285 } 2286 } catch (e) {} 2287 return originalFetch.call(this, input, init); 2288 }; 2289 patchedFetch.__maddoggMeteorMenuI18nPatched = true; 2290 window.fetch = patchedFetch; 2291 } 2292 2293 function installXhrRedirect() { 2294 if (!window.XMLHttpRequest || !window.XMLHttpRequest.prototype || window.XMLHttpRequest.prototype.open.__maddoggMeteorMenuI18nPatched) { 2295 return; 2296 } 2297 var originalOpen = window.XMLHttpRequest.prototype.open; 2298 window.XMLHttpRequest.prototype.open = function (method, url) { 2299 try { 2300 var localizedUrl = localizedUrlFor(url); 2301 if (localizedUrl) { 2302 window.MaddoggMeteorMenuI18n.xhrRedirects = (window.MaddoggMeteorMenuI18n.xhrRedirects || 0) + 1; 2303 arguments[1] = localizedUrl; 2304 } 2305 } catch (e) {} 2306 return originalOpen.apply(this, arguments); 2307 }; 2308 window.XMLHttpRequest.prototype.open.__maddoggMeteorMenuI18nPatched = true; 2309 } 2310 2311 installMeteorMenuSetter(); 2312 installFetchRedirect(); 2313 installXhrRedirect(); 2314 patchExistingMeteorMenu(); 2315 2316 var attempts = 0; 2317 var timer = window.setInterval(function () { 2318 attempts += 1; 2319 patchExistingMeteorMenu(); 2320 if (attempts >= 100) { 2321 window.clearInterval(timer); 2322 } 2323 }, 50); 2324 })(); 2325 </script>
2325 2326 2327
2327<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
2327<meta name="google-site-verification" content="_vXXxEuV0FLZwJlgLr1ulxghGgMAIky5SoFZmB5HZJo"> 2328<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/90871169351/digital_wallets/dialog"> 2329<meta id="in-context-paypal-metadata" data-shop-id="90871169351" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="EUR"> 2330<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="alternate" hreflang="x-default" href="https://spinning.eu/cart"> 2331<link rel="alternate" hreflang="en" href="https://spinning.eu/cart"> 2332<link rel="alternate" hreflang="es" href="https://spinning.eu/es/cart"> 2333<link rel="alternate" hreflang="de" href="https://spinning.eu/de/cart"> 2334<link rel="alternate" hreflang="nl" href="https://spinning.eu/nl/cart"> 2335<link rel="alternate" hreflang="fr" href="https://spinning.eu/fr/cart"> 2336<link rel="alternate" hreflang="it" href="https://spinning.eu/it/cart"> 2337<link rel="alternate" hreflang="en-ES" href="https://spinning.eu/en-es/cart"> 2338<link rel="alternate" hreflang="es-ES" href="https://spinning.eu/es-es/cart">
2339<script async="async" src="/checkouts/internal/preloads.js?locale=en-NL&default_configuration_id=4088136007"></script>
2339 2340<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
2341<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-NL&default_configuration_id=4088136007&shop_id=90871169351" crossorigin="anonymous"></script>
vendor: 1 bytes, line 2341
2341
2342<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":90871169351,"countryCode":"NL","currencyCode":"EUR","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/90871169351","merchantName":"Spinning EU","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","maestro","masterCard","amex"],"total":{"type":"pending","label":"Spinning EU","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 2342
2342
2343<script id="shopify-features" type="application/json">{"accessToken":"32d1a4b5d15724c5b558b0b63c527380","betas":["rich-media-storefront-analytics"],"domain":"spinning.eu","predictiveSearch":true,"shopId":90871169351,"locale":"en"}</script>
vendor: 1 bytes, line 2343
2343
2344<script>var Shopify = Shopify || {}; 2345Shopify.shop = "d1fuiy-um.myshopify.com"; 2346Shopify.locale = "en"; 2347Shopify.currency = {"active":"EUR","rate":"1.0"}; 2348Shopify.country = "NL"; 2349Shopify.theme = {"name":"QA Language Choice NL 2026-09-02","id":200171290951,"schema_name":"Impact","schema_version":"6.5.0","theme_store_id":null,"role":"main"}; 2350Shopify.theme.handle = "null"; 2351Shopify.theme.style = {"id":null,"handle":null}; 2352Shopify.cdnHost = "spinning.eu/cdn"; 2353Shopify.routes = Shopify.routes || {}; 2354Shopify.routes.root = "/"; 2355Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 2356Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 2357Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 2358Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 2358
2358
2359<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 2359
2359
2360<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 2360
2360
2361<script> 2362 window.ShopifyPay = window.ShopifyPay || {}; 2363 window.ShopifyPay.apiHost = "shop.app\/pay"; 2364 window.ShopifyPay.redirectState = null; 2365</script>
vendor: 1 bytes, line 2365
2365
2366<script> 2367 window.Shopify = window.Shopify || {}; 2368 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 2369 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 2370 window.Shopify.SignInWithShop.eligible = true; 2371</script>
vendor: 1 bytes, line 2371
2371
2372<script id="shop-js-analytics" type="application/json">{"pageType":"cart"}</script>
vendor: 1 bytes, line 2372
2372
2373<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 2373
2373
2374<script type="module"> 2375 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 2376 2377 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 2378 2379</script>
vendor: 1 bytes, line 2379
2379
2380<script> 2381 window.Shopify = window.Shopify || {}; 2382 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 2383 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 2384</script>
vendor: 1 bytes, line 2384
2384
2385<script>(function() { 2386 var isLoaded = false; 2387 function asyncLoad() { 2388 if (isLoaded) return; 2389 isLoaded = true; 2390 var urls = ["https:\/\/loox.io\/widget\/_XrwNy4cUp\/loox.1753193234820.js?shop=d1fuiy-um.myshopify.com"]; 2391 for (var i = 0; i < urls.length; i++) { 2392 var s = document.createElement('script'); 2393 if ((!1741336271524 || Date.now() < 1741336271524) && 2394 (!window.AVADA_SPEED_BLACKLIST || window.AVADA_SPEED_BLACKLIST.some(pattern => pattern.test(s))) && 2395 (!window.AVADA_SPEED_WHITELIST || window.AVADA_SPEED_WHITELIST.every(pattern => !pattern.test(s)))) s.type = 'lightJs'; else s.type = 'text/javascript'; 2396 s.async = true; 2397 s.src = urls[i]; 2398 var x = document.getElementsByTagName('script')[0]; 2399 x.parentNode.insertBefore(s, x); 2400 } 2401 }; 2402 if(window.attachEvent) { 2403 window.attachEvent('onload', asyncLoad); 2404 } else { 2405 window.addEventListener('load', asyncLoad, false); 2406 } 2407})();</script>
vendor: 1 bytes, line 2407
2407
2408<script id="__st">var __st={"a":90871169351,"offset":7200,"reqid":"829f7ef1-3fbb-4825-b29e-fb242eac9370-1790953696","pageurl":"spinning.eu\/cart","u":"61fcce9f57ff","p":"cart"};</script>
vendor: 1 bytes, line 2408
2408
2409<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 2409
2409
2410<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 2410
2410
2411<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//spinning.eu/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 2411
2411
2412<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//spinning.eu/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
2412<script crossorigin="anonymous" defer="defer" src="//spinning.eu/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 2412
2412
2413<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 2413
2413
2414<script> 2415 window.Shopify = window.Shopify || {}; 2416 window.Shopify.MCP = window.Shopify.MCP || {}; 2417 window.Shopify.MCP.enabled = true; 2418 window.Shopify.MCP.shop = "d1fuiy-um.myshopify.com"; 2419 window.Shopify.MCP.mcpEndpoint = "https:\/\/spinning.eu\/api\/mcp"; 2420 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 2421</script>
vendor: 1 bytes, line 2421
2421
2422<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/spinning.eu\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 2423</script>
vendor: 1 bytes, line 2423
2423
2424<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://spinning.eu/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 2425</script>
vendor: 1 bytes, line 2425
2425
2426<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 2427 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 2428</script>
vendor: 1 bytes, line 2428
2428
2429<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}})); 2430</script>
vendor: 1 bytes, line 2430
2430
2431<script id='scb4127' type='text/javascript' async='' src='https://spinning.eu/cdn/shopifycloud/privacy-banner/storefront-banner.js'></script>
2431<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://spinning.eu/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 2432<style id="shopify-accelerated-checkout-cart"> 2433 #shopify-buyer-consent { 2434 margin-top: 1em; 2435 display: inline-block; 2436 width: 100%; 2437} 2438 2439#shopify-buyer-consent.hidden { 2440 display: none; 2441} 2442 2443#shopify-subscription-policy-button { 2444 background: none; 2445 border: none; 2446 padding: 0; 2447 text-decoration: underline; 2448 font-size: inherit; 2449 cursor: pointer; 2450} 2451 2452#shopify-subscription-policy-button::before { 2453 box-shadow: none; 2454} 2455 2456 </style> 2457
2458<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
2458 2459<link href="//spinning.eu/cdn/shop/t/9/assets/theme.css?v=66558542309975359531788350492" rel="stylesheet" type="text/css" media="all" /> 2460 2461<!-- BEGIN app block: shopify://apps/pagefly-ai-page-builder/blocks/app-embed/83e179f7-59a0-4589-8c66-c0dddf959200 --> 2462 2463<!-- BEGIN app snippet: pagefly-cro-ab-testing-main --> 2464 2465 2466 2467 2468 2469 2470
2471<script> 2472 ;(function () { 2473 const url = new URL(window.location) 2474 const viewParam = url.searchParams.get('view') 2475 if (viewParam && viewParam.includes('variant-pf-')) { 2476 url.searchParams.set('pf_v', viewParam) 2477 url.searchParams.delete('view') 2478 window.history.replaceState({}, '', url) 2479 } 2480 })() 2481</script>
2481 2482 2483 2484
2485<script type='module'> 2486 2487 window.PAGEFLY_CRO = window.PAGEFLY_CRO || {} 2488 2489 window.PAGEFLY_CRO['data_debug'] = { 2490 original_template_suffix: "", 2491 allow_ab_test: false, 2492 ab_test_start_time: 0, 2493 ab_test_end_time: 0, 2494 today_date_time: 1790953696000, 2495 } 2496 window.PAGEFLY_CRO['GA4'] = { enabled: false} 2497</script>
2497 2498 2499<!-- END app snippet --> 2500 2501 2502 2503 2504 2505 2506 2507 2508
2508<script src='https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-helper.js' defer='defer'></script>
2508 2509 2510
2510<script src='https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-general-helper.js' defer='defer'></script>
2510 2511 2512
2512<script src='https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-snap-slider.js' defer='defer'></script>
2512 2513 2514
2514<script src='https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-slideshow-v3.js' defer='defer'></script>
2514 2515 2516
2516<script src='https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-slideshow-v4.js' defer='defer'></script>
2516 2517 2518
2518<script src='https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-glider.js' defer='defer'></script>
2518 2519 2520
2520<script src='https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-slideshow-v1-v2.js' defer='defer'></script>
2520 2521 2522
2522<script src='https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-product-media.js' defer='defer'></script>
2522 2523 2524
2524<script src='https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-product.js' defer='defer'></script>
2524 2525 2526
2527<script id='pagefly-helper-data' type='application/json'> 2528 { 2529 "page_optimization": { 2530 "assets_prefetching": false 2531 }, 2532 "elements_asset_mapper": { 2533 "Accordion": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-accordion.js", 2534 "Accordion3": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-accordion3.js", 2535 "CountDown": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-countdown.js", 2536 "GMap1": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-gmap.js", 2537 "GMap2": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-gmap.js", 2538 "GMapBasicV2": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-gmap.js", 2539 "GMapAdvancedV2": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-gmap.js", 2540 "HTML.Video": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-htmlvideo.js", 2541 "HTML.Video2": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-htmlvideo2.js", 2542 "HTML.Video3": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-htmlvideo2.js", 2543 "BackgroundVideo": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-htmlvideo2.js", 2544 "Instagram": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-instagram.js", 2545 "Instagram2": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-instagram.js", 2546 "Insta3": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-instagram3.js", 2547 "Tabs": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-tab.js", 2548 "Tabs3": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-tab3.js", 2549 "ProductBox": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-cart.js", 2550 "FBPageBox2": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-facebook.js", 2551 "FBLikeButton2": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-facebook.js", 2552 "TwitterFeed2": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-twitter.js", 2553 "Paragraph4": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-paragraph4.js", 2554 2555 "AliReviews": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2556 "BackInStock": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2557 "GloboBackInStock": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2558 "GrowaveWishlist": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2559 "InfiniteOptionsShopPad": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2560 "InkybayProductPersonalizer": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder
2560-363/assets/pagefly-3rd-elements.js", 2561 "LimeSpot": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2562 "Loox": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2563 "Opinew": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2564 "Powr": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2565 "ProductReviews": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2566 "PushOwl": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2567 "ReCharge": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2568 "Rivyo": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2569 "TrackingMore": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2570 "Vitals": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js", 2571 "Wiser": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-3rd-elements.js" 2572 }, 2573 "custom_elements_mapper": { 2574 "pf-click-action-element": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-click-action-element.js", 2575 "pf-dialog-element": "https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-dialog-element.js" 2576 } 2577 } 2578</script>
2578 2579
2580<script id='pagefly-heatmap-config' type='application/json'> 2581 {"version":8,"enabled_page_ids":[],"tracking_paused":false,"pause_reason":null,"paused_until":null} 2582</script>
vendor: 1 bytes, line 2582
2582
2583<script> 2584 (function () { 2585 var el = document.getElementById('pagefly-heatmap-config') 2586 if (!el) { window.__pagefly_heatmap_config__ = {}; return } 2587 try { 2588 window.__pagefly_heatmap_config__ = JSON.parse(el.textContent || '{}') || {} 2589 } catch (e) { 2590 window.__pagefly_heatmap_config__ = {} 2591 } 2592 })() 2593</script>
vendor: 1 bytes, line 2593
2593
2594<script> 2595 // Heatmap overlay loader. Three gates, all of them cheap, none of them trusting the URL: 2596 // the visitor must have arrived on a pf_heatmap link, the SERVER must have published an 2597 // overlay path in the metafield, and this page must already be one the merchant enabled 2598 // tracking for. The last gate is what stops a crafted link pulling the asset onto an 2599 // arbitrary storefront page. Everything else is decided inside the asset, and by the server. 2600 (function () { 2601 var cfg = window.__pagefly_heatmap_config__ || {} 2602 var id = (window.__pagefly_page_setting__ || {}).pageId 2603 if (!/[#&]pf_heatmap=/.test(window.location.hash || '')) return 2604 if (!cfg.overlay_data_path || !Array.isArray(cfg.enabled_page_ids)) return 2605 if (!id || cfg.enabled_page_ids.indexOf(id) === -1) return 2606 var s = document.createElement('script') 2607 s.src = 'https://cdn.shopify.com/extensions/01a0f807-168f-7fcf-a3d0-e91e9a539d12/pagefly-ai-page-builder-363/assets/pagefly-heatmap-overlay.js' 2608 s.defer = true 2609 document.head.appendChild(s) 2610 })() 2611</script>
2611 2612 2613<!-- BEGIN app snippet: pf-ai-schema --> 2614<!-- END app snippet --> 2615 2616 2617<!-- END app block --><!-- BEGIN app block: shopify://apps/meteor-mega-menu/blocks/app_embed/9412d6a7-f8f8-4d65-b9ae-2737c2f0f45b --> 2618 2619 2620
2620<script> 2621 window.MeteorMenu = { 2622 // These will get handled by the Meteor class constructor 2623 registeredCallbacks: [], 2624 api: { 2625 on: (eventName, callback) => { 2626 window.MeteorMenu.registeredCallbacks.push([eventName, callback]); 2627 } 2628 }, 2629 revisionFileUrl: "\/\/spinning.eu\/cdn\/shop\/files\/meteor-mega-menus_4057c652-a8d4-4c5c-a627-7eb0f6d2e8e8.json?v=8578441178749559712", 2630 storefrontAccessToken: "30654666d5d033cee6b15d29e9074d91", 2631 localeRootPath: "\/", 2632 languageCode: "en".toUpperCase(), 2633 countryCode: "NL", 2634 shop: { 2635 domain: "spinning.eu", 2636 permanentDomain: "d1fuiy-um.myshopify.com", 2637 moneyFormat: "â¬{{amount_with_comma_separator}}", 2638 currency: "EUR" 2639 }, 2640 options: { 2641 desktopSelector: "", 2642 mobileSelector: "", 2643 disableDesktop: false, 2644 disableMobile: false, 2645 navigationLinkSpacing: 16, 2646 navigationLinkCaretStyle: "outline", 2647 menuDisplayAnimation: "none", 2648 menuCenterInViewport: false, 2649 menuVerticalOffset: 10, 2650 menuVerticalPadding: 0, 2651 menuJustifyContent: "flex-start", 2652 menuFontSize: 16, 2653 menuFontWeight: "400", 2654 menuTextTransform: "none", 2655 menuDisplayAction: "hover", 2656 menuDisplayDelay: "0", 2657 externalLinksInNewTab: "true", 2658 mobileBreakpoint: 0, 2659 addonsEnabled: false 2660 } 2661 } 2662 </script>
2662 2663 2664<style data-app-injected='MeteorMenu'> 2665 2666 </style><!-- END app block -->
2666<script src="https://cdn.shopify.com/extensions/01a0e9f8-8c23-78e5-9b4c-2314965136de/bacon-menu-40/assets/meteor-menu.js" type="text/javascript" defer="defer"></script>
2666 2667<link href="https://cdn.shopify.com/extensions/01a0e9f8-8c23-78e5-9b4c-2314965136de/bacon-menu-40/assets/meteor-menu.css" rel="stylesheet" type="text/css" media="all"> 2668<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
2669<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 90871169351,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "cart"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 2669
2669
2670<script> 2671 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 2672</script>
vendor: 1 bytes, line 2672
2672
2673<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
2673).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 90871169351,storefrontBaseUrl: "https://spinning.eu",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://spinning.eu/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"3938517319","configuration":"{\"appProxyPath\":\"\/apps\/pagefly\",\"analyticsEndpoint\":\"undefined\/analytics-v2\/events\",\"focusDuration\":\"3\",\"enableAdvancedTracking\":\"true\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"1e023fb0c721518c0dce4129e4d87a86","type":"APP","apiClientId":1743893,"privacyPurposes":["ANALYTICS","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Spinning EU","paymentSettings":{"currencyCode":"EUR"},"myshopifyDomain":"d1fuiy-um.myshopify.com","countryCode":"NL","storefrontUrl":"https:\/\/spinning.eu"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://spinning.eu/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"false","themeId":"200171290951","themePublished":"true","eventMetadataId":"cc136bf7-046d-48de-bc1c-2402c78fd1e2","pageType":"cart","shopId":"90871169351","storefrontBaseUrl":"https:\/\/spinning.eu","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
2673<script> 2674 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 2675 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 2676 window.ShopifyAnalytics.meta.currency = 'EUR'; 2677 var meta = {"page":{"pageType":"cart","requestId":"829f7ef1-3fbb-4825-b29e-fb242eac9370-1790953696"}}; 2678 for (var attr in meta) { 2679 window.ShopifyAnalytics.meta[attr] = meta[attr]; 2680 } 2681</script>
vendor: 1 bytes, line 2681
2681
2682<script class="analytics"> 2683 (function () { 2684 var customDocumentWrite = function(content) { 2685 var jquery = null; 2686 2687 if (window.jQuery) { 2688 jquery = window.jQuery; 2689 } else if (window.Checkout && window.Checkout.$) { 2690 jquery = window.Checkout.$; 2691 } 2692 2693 if (jquery) { 2694 jquery('body').append(content); 2695 } 2696 }; 2697 2698 var hasLoggedConversion = function(token) { 2699 if (token) { 2700 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 2701 } 2702 return false; 2703 } 2704 2705 var setCookieIfConversion = function(token) { 2706 if (token) { 2707 var twoMonthsFromNow = new Date(Date.now()); 2708 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 2709 2710 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 2711 } 2712 } 2713 2714 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 2715 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 2716 if (trekkie.integrations) { 2717 return; 2718 } 2719 trekkie.methods = [ 2720 'identify', 2721 'page', 2722 'ready', 2723 'track', 2724 'trackForm', 2725 'trackLink' 2726 ]; 2727 trekkie.factory = function(method) { 2728 return function() { 2729 var args = Array.prototype.slice.call(arguments); 2730 args.unshift(method); 2731 trekkie.push(args); 2732 if (method == 'track' || method == 'page') { 2733 var pageUrl; 2734 try { 2735 pageUrl = window.location.href; 2736 } catch (e) {} 2737 var pageReferrer; 2738 try { 2739 pageReferrer = document.referrer; 2740 } catch (e) {} 2741 try { 2742 if (window.__TREKKIE_SHIM_QUEUE == null) { 2743 window.__TREKKIE_SHIM_QUEUE = []; 2744 } 2745 window.__TREKKIE_SHIM_QUEUE.push({ 2746 from: 'trekkie-stub', 2747 method: method, 2748 args: args.slice(1), 2749 pageContext: { 2750 url: pageUrl, 2751 referrer: pageReferrer 2752 } 2753 }); 2754 } catch (e) { 2755 // no-op 2756 } 2757 } 2758 return trekkie; 2759 }; 2760 }; 2761 for (var i = 0; i < trekkie.methods.length; i++) { 2762 var key = trekkie.methods[i]; 2763 trekkie[key] = trekkie.factory(key); 2764 } 2765 trekkie.load = function(config) { 2766 trekkie.config = config || {}; 2767 trekkie.config.initialDocumentCookie = document.cookie; 2768 var first = document.getElementsByTagName('script')[0]; 2769var script = document.createElement('script'); 2770script.type = 'text/javascript'; 2771script.onerror = function(e) { 2772 var scriptFallback = document.createElement('script'); 2773 scriptFallback.type = 'text/javascript'; 2774 scriptFallback.onerror = function(error) { 2775 var Monorail = { 2776 produce: function produce(monorailDomain, schemaId, payload) { 2777 var currentMs = new Date().getTime(); 2778 var event = { 2779 schema_id: schemaId, 2780 payload: payload, 2781 metadata: { 2782 event_created_at_ms: currentMs, 2783 event_sent_at_ms: currentMs 2784 } 2785 }; 2786 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 2787 }, 2788 sendRequest: function sendRequest(endpointUrl, payload) { 2789 // Try the sendBeacon API 2790 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 2791 var blobData = new window.Blob([payload], { 2792 type: 'text/plain' 2793 }); 2794 2795 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 2796 return true; 2797 } // sendBeacon was not successful 2798 2799 } // XHR beacon 2800 2801 var xhr = new XMLHttpRequest(); 2802 2803 try { 2804 xhr.open('POST', endpointUrl); 2805 xhr.setRequestHeader('Content-Type', 'text/plain'); 2806 xhr.send(payload); 2807 } catch (e) { 2808 console.log(e); 2809 } 2810 2811 return false; 2812 }, 2813 isIos12: function isIos12() { 2814 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 2815 } 2816 }; 2817 Monorail.produce('monorail-edge.shopifysvc.com', 2818 'trekkie_storefront_load_errors/1.1', 2819 {shop_id: 90871169351, 2820 theme_id: 200171290951, 2821 app_name: "storefront", 2822 context_url: window.location.href, 2823 source_url: "//spinning.eu/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 2824 2825 }; 2826 scriptFallback.async = true; 2827 scriptFallback.src = '//spinning.eu/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 2828 first.parentNode.insertBefore(scriptFallback, first); 2829}; 2830script.async = true; 2831script.src = '//spinning.eu/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 2832first.parentNode.insertBefore(script, first); 2833 2834 }; 2835 trekkie.load( 2836 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":90871169351,"isMerchantRequest":null,"themeId":200171290951,"themeCityHash":"7357115938780251311","contentLanguage":"en","currency":"EUR","eventMetadataId":"cc136bf7-046d-48de-bc1c-2402c78fd1e2"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":false,"source":"trekkie-storefront-renderer","apiClientId":580111}} 2837 ); 2838 2839 var loaded = false;
2840 trekkie.ready(function() { 2841 if (loaded) return; 2842 loaded = true; 2843 2844 window.ShopifyAnalytics.lib = window.trekkie; 2845 2846 var originalDocumentWrite = document.write; 2847 document.write = customDocumentWrite; 2848 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 2849 document.write = originalDocumentWrite; 2850 2851 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 2852 var token = match? match[1]: undefined; 2853 if (!hasLoggedConversion(token)) { 2854 setCookieIfConversion(token); 2855 2856 } 2857 }); 2858 2859 window.ShopifyAnalytics.lib.page(null,{"pageType":"cart","requestId":"829f7ef1-3fbb-4825-b29e-fb242eac9370-1790953696","shopifyEmitted":true}); 2860 2861 var eventsListenerScript = document.createElement('script'); 2862 eventsListenerScript.async = true; 2863 eventsListenerScript.src = "//spinning.eu/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 2864 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 2865})();</script>
vendor: 1 bytes, line 2865
2865
2866<script 2867 defer 2868 src="https://spinning.eu/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 2869 data-application="storefront-renderer" 2870 data-shop-id="90871169351" 2871 data-render-region="gcp-us-west1" 2872 data-page-type="cart" 2873 data-theme-instance-id="200171290951" 2874 data-theme-name="Impact" 2875 data-theme-version="6.5.0" 2876 data-monorail-region="shop_domain" 2877 data-resource-timing-sampling-rate="10" 2878 data-shs="true" 2879 data-shs-beacon="true" 2880 data-shs-export-with-fetch="true" 2881 data-shs-logs-sample-rate="1" 2882 data-shs-beacon-endpoint="https://spinning.eu/api/collect" 2883></script>
2883 2884<meta name="shopify-y" content="2e6614db-57b8-4279-bef7-f8867a0d5aaf" data-expiration="1822511296000"><meta name="shopify-s" content="eefde8d3-e6c4-4305-9c2b-dd5bf40a11d1" data-expiration="1790955496000"><meta name="new-cookie-storage-activated" content="t"> 2885</head> 2886 2887 <body class="zoom-image--enabled"><!-- DRAWER --> 2888<template id="drawer-default-template"> 2889 <style> 2890 [hidden] { 2891 display: none !important; 2892 } 2893 </style> 2894 2895 <button part="outside-close-button" is="close-button" aria-label="Close"><svg role="presentation" stroke-width="2" focusable="false" width="24" height="24" class="icon icon-close" viewBox="0 0 24 24"> 2896 <path d="M17.658 6.343 6.344 17.657M17.658 17.657 6.344 6.343" stroke="currentColor"></path> 2897 </svg></button> 2898 2899 <div part="overlay"></div> 2900 2901 <div part="content"> 2902 <header part="header"> 2903 <slot name="header"></slot> 2904 2905 <button part="close-button" is="close-button" aria-label="Close"><svg role="presentation" stroke-width="2" focusable="false" width="24" height="24" class="icon icon-close" viewBox="0 0 24 24"> 2906 <path d="M17.658 6.343 6.344 17.657M17.658 17.657 6.344 6.343" stroke="currentColor"></path> 2907 </svg></button> 2908 </header> 2909 2910 <div part="body"> 2911 <slot></slot> 2912 </div> 2913 2914 <footer part="footer"> 2915 <slot name="footer"></slot> 2916 </footer> 2917 </div> 2918</template> 2919 2920<!-- POPOVER --> 2921<template id="popover-default-template"> 2922 <button part="outside-close-button" is="close-button" aria-label="Close"><svg role="presentation" stroke-width="2" focusable="false" width="24" height="24" class="icon icon-close" viewBox="0 0 24 24"> 2923 <path d="M17.658 6.343 6.344 17.657M17.658 17.657 6.344 6.343" stroke="currentColor"></path> 2924 </svg></button> 2925 2926 <div part="overlay"></div> 2927 2928 <div part="content"> 2929 <header part="title"> 2930 <slot name="title"></slot> 2931 </header> 2932 2933 <div part="body"> 2934 <slot></slot> 2935 </div> 2936 </div> 2937</template><a href="#main" class="skip-to-content sr-only">Skip to content</a><!-- BEGIN sections: header-group --> 2938<aside id="shopify-section-sections--30366605934919__announcement-bar" class="shopify-section shopify-section-group-header-group shopify-section--announcement-bar"><style> 2939 :root { 2940 --sticky-announcement-bar-enabled:1; 2941 }#shopify-section-sections--30366605934919__announcement-bar { 2942 position: sticky; 2943 top: 0; 2944 z-index: 20; 2945 } 2946 2947 .shopify-section--header ~ #shopify-section-sections--30366605934919__announcement-bar { 2948 top: calc(var(--sticky-header-enabled, 0) * var(--header-height, 0px)); 2949 }</style><height-observer variable="announcement-bar"> 2950 <div class="announcement-bar bg-gradient text-custom"style="--gradient: linear-gradient(180deg, rgba(196, 18, 46, 1), rgba(221, 39, 57, 1) 100%); --text-color: 255 255 255;"><div class="container"> 2951 <div class="announcement-bar__wrapper justify-center"><announcement-bar swipeable autoplay="6" id="announcement-bar" class="announcement-bar__static-list"><p class="bold text-xs " > 2952 2953 2954 2955 2956 2957 <a href="/collections/commercial-spin-bikes">Check out our Spinning® Studio Bikes HERE</a></p></announcement-bar></div> 2958 </div></div> 2959 </height-observer> 2960 2961
2961<script> 2962 document.documentElement.style.setProperty('--announcement-bar-height', Math.round(document.getElementById('shopify-section-sections--30366605934919__announcement-bar').clientHeight) + 'px'); 2963 </script>
2963</aside><header id="shopify-section-sections--30366605934919__header" class="shopify-section shopify-section-group-header-group shopify-section--header"><style> 2964 :root { 2965 --sticky-header-enabled:1; 2966 } 2967 2968 #shopify-section-sections--30366605934919__header { 2969 --header-grid-template: "main-nav logo secondary-nav" / minmax(0, 1fr) auto minmax(0, 1fr); 2970 --header-padding-block: var(--spacing-3); 2971 --header-background-opacity: 0.0; 2972 --header-background-blur-radius: 6px; 2973 --header-transparent-text-color: 0 0 0;--header-logo-width: 100px; 2974 --header-logo-height: 22px;position: sticky; 2975 top: 0; 2976 z-index: 10; 2977 }.shopify-section--announcement-bar ~ #shopify-section-sections--30366605934919__header { 2978 top: calc(var(--sticky-announcement-bar-enabled, 0) * var(--announcement-bar-height, 0px)); 2979 }@media screen and (min-width: 700px) { 2980 #shopify-section-sections--30366605934919__header {--header-logo-width: 220px; 2981 --header-logo-height: 48px;--header-padding-block: var(--spacing-6); 2982 } 2983 }@media screen and (min-width: 1150px) {#shopify-section-sections--30366605934919__header { 2984 --header-grid-template: "logo main-nav secondary-nav" / minmax(0, 1fr) fit-content(55%) minmax(0, 1fr); 2985 } 2986 }</style> 2987 2988<height-observer variable="header"> 2989 <store-header class="header" sticky> 2990 <div class="header__wrapper"><div class="header__main-nav"> 2991 <div class="header__icon-list"> 2992 <button type="button" class="tap-area lg:hidden" aria-controls="header-sidebar-menu"> 2993 <span class="sr-only">Menu</span><svg role="presentation" stroke-width="1" focusable="false" width="22" height="22" class="icon icon-hamburger" viewBox="0 0 22 22"> 2994 <path d="M1 5h20M1 11h20M1 17h20" stroke="currentColor" stroke-linecap="round"></path> 2995 </svg></button> 2996 2997 <a href="/search" class="tap-area sm:hidden" aria-controls="search-drawer"> 2998 <span class="sr-only">Search</span><svg role="presentation" stroke-width="1" focusable="false" width="22" height="22" class="icon icon-search" viewBox="0 0 22 22"> 2999 <circle cx="11" cy="10" r="7" fill="none" stroke="currentColor"></circle> 3000 <path d="m16 15 3 3" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path> 3001 </svg></a><nav class="header__link-list justify-center wrap" role="navigation"> 3002 <ul class="contents" role="list"> 3003 3004 <li><a href="/" class="bold link-faded-reverse" >Home</a></li> 3005 3006 <li><a href="/" class="bold link-faded-reverse" >Shop</a></li> 3007 3008 <li><a href="/" class="bold link-faded-reverse" >HOME</a></li> 3009 3010 <li><a href="/pages/ride-at-home" class="bold link-faded-reverse" >RIDE AT HOME</a></li> 3011 3012 <li><a href="/pages/spinning-apps" class="bold link-faded-reverse" >SPINNING APP</a></li> 3013 3014 <li><a href="/pages/instructors" class="bold link-faded-reverse" >INSTRUCTORS</a></li> 3015 3016 <li><a href="/" class="bold link-faded-reverse" >SHOP</a></li></ul> 3017 </nav></div> 3018 </div> 3019 <a href="/" class="header__logo"><span class="sr-only">Spinning EU</span><img src="//spinning.eu/cdn/shop/files/980a76ddb6079d3906d4089b704bc7c9.w917.h917.png?v=1753188756&width=917" alt="" srcset="//spinning.eu/cdn/shop/files/980a76ddb6079d3906d4089b704bc7c9.w917.h917.png?v=1753188756&width=440 440w, //spinning.eu/cdn/shop/files/980a76ddb6079d3906d4089b704bc7c9.w917.h917.png?v=1753188756&width=660 660w" width="917" height="199" sizes="220px" class="header__logo-image"><img src="//spinning.eu/cdn/shop/files/SP_SpinMan_Wordmark_Wht_Low.png?v=1753188729&width=701" alt="" srcset="//spinning.eu/cdn/shop/files/SP_SpinMan_Wordmark_Wht_Low.png?v=1753188729&width=440 440w, //spinning.eu/cdn/shop/files/SP_SpinMan_Wordmark_Wht_Low.png?v=1753188729&width=660 660w" width="701" height="199" sizes="220px" class="header__logo-image header__logo-image--transparent"></a> 3020 3021<div class="header__secondary-nav"><ul class="header__icon-list"><li class="hidden md:block shrink-0"><link rel="stylesheet" href="//spinning.eu/cdn/shop/t/9/assets/country-flags.css?v=105120918595178899651788351188" media="print" onload="this.media='all'; this.onload = null"><div class="relative"> 3022 <button type="button" class="text-with-icon gap-2.5 group" aria-label="Change country or currency" aria-controls="popover-localization-form-country-end-sections--30366605934919__header" aria-expanded="false"> 3023 <div class="h-stack gap-2"><span class="country-flags country-flags--NL"></span><span class="bold text-sm">EUR â¬</span> 3024 </div><svg role="presentation" focusable="false" width="10" height="7" class="icon icon-chevron-bottom" viewBox="0 0 10 7"> 3025 <path d="m1 1 4 4 4-4" fill="none" stroke="currentColor" stroke-width="2"></path> 3026 </svg></button> 3027 3028 <x-popover id="popover-localization-form-country-end-sections--30366605934919__header" initial-focus="[aria-selected='true']" anchor-horizontal="end" anchor-vertical="end" class="popover"> 3029 <p class="h5" slot="title">Country</p><form method="post" action="/localization" id="localization-form-country-end-sections--30366605934919__header" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/cart" /><x-listbox class="popover-listbox popover-listbox--sm" role="listbox"><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AF" >
3030 <span class="country-flags country-flags--AF"></span> 3031 <span>Afghanistan (AFN Ø)</span> 3032 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AL" > 3033 <span class="country-flags country-flags--AL"></span> 3034 <span>Albania (ALL L)</span> 3035 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DZ" > 3036 <span class="country-flags country-flags--DZ"></span> 3037 <span>Algeria (DZD د.ج)</span> 3038 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AD" > 3039 <span class="country-flags country-flags--AD"></span> 3040 <span>Andorra (EUR â¬)</span> 3041 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AO" > 3042 <span class="country-flags country-flags--AO"></span> 3043 <span>Angola (EUR â¬)</span> 3044 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AM" > 3045 <span class="country-flags country-flags--AM"></span> 3046 <span>Armenia (AMD Õ¤Ö.)</span> 3047 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AT" > 3048 <span class="country-flags country-flags--AT"></span> 3049 <span>Austria (EUR â¬)</span> 3050 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AZ" > 3051 <span class="country-flags country-flags--AZ"></span> 3052 <span>Azerbaijan (AZN â¼)</span> 3053 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BH" > 3054 <span class="country-flags country-flags--BH"></span> 3055 <span>Bahrain (EUR â¬)</span> 3056 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BY" > 3057 <span class="country-flags country-flags--BY"></span> 3058 <span>Belarus (EUR â¬)</span> 3059 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BE" > 3060 <span class="country-flags country-flags--BE"></span> 3061 <span>Belgium (EUR â¬)</span> 3062 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BJ" > 3063 <span class="country-flags country-flags--BJ"></span> 3064 <span>Benin (XOF Fr)</span> 3065 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BA" > 3066 <span class="country-flags country-flags--BA"></span> 3067 <span>Bosnia & Herzegovina (BAM ÐÐ)</span> 3068 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BW" > 3069 <span class="country-flags country-flags--BW"></span> 3070 <span>Botswana (BWP P)</span> 3071 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BG" > 3072 <span class="country-flags country-flags--BG"></span> 3073 <span>Bulgaria (EUR â¬)</span> 3074 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BF" > 3075 <span class="country-flags country-flags--BF"></span> 3076 <span>Burkina Faso (XOF Fr)</span> 3077 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BI" > 3078 <span class="country-flags country-flags--BI"></span> 3079 <span>Burundi (BIF Fr)</span> 3080 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CM" >
3081 <span class="country-flags country-flags--CM"></span> 3082 <span>Cameroon (XAF CFA)</span> 3083 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CV" > 3084 <span class="country-flags country-flags--CV"></span> 3085 <span>Cape Verde (CVE $)</span> 3086 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CF" > 3087 <span class="country-flags country-flags--CF"></span> 3088 <span>Central African Republic (XAF CFA)</span> 3089 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TD" > 3090 <span class="country-flags country-flags--TD"></span> 3091 <span>Chad (XAF CFA)</span> 3092 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="HR" > 3093 <span class="country-flags country-flags--HR"></span> 3094 <span>Croatia (EUR â¬)</span> 3095 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CY" > 3096 <span class="country-flags country-flags--CY"></span> 3097 <span>Cyprus (EUR â¬)</span> 3098 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CZ" > 3099 <span class="country-flags country-flags--CZ"></span> 3100 <span>Czechia (CZK KÄ)</span> 3101 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DK" > 3102 <span class="country-flags country-flags--DK"></span> 3103 <span>Denmark (DKK kr.)</span> 3104 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DJ" > 3105 <span class="country-flags country-flags--DJ"></span> 3106 <span>Djibouti (DJF Fdj)</span> 3107 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="EG" > 3108 <span class="country-flags country-flags--EG"></span> 3109 <span>Egypt (EGP ج.Ù )</span> 3110 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ER" > 3111 <span class="country-flags country-flags--ER"></span> 3112 <span>Eritrea (EUR â¬)</span> 3113 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="EE" > 3114 <span class="country-flags country-flags--EE"></span> 3115 <span>Estonia (EUR â¬)</span> 3116 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ET" > 3117 <span class="country-flags country-flags--ET"></span> 3118 <span>Ethiopia (ETB Br)</span> 3119 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="FI" > 3120 <span class="country-flags country-flags--FI"></span> 3121 <span>Finland (EUR â¬)</span> 3122 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="FR" > 3123 <span class="country-flags country-flags--FR"></span> 3124 <span>France (EUR â¬)</span> 3125 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GA" > 3126 <span class="country-flags country-flags--GA"></span> 3127 <span>Gabon (XOF Fr)</span> 3128 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GM" > 3129 <span class="country-flags country-flags--GM"></span> 3130 <span>Gambia (GMD D)</span> 3131 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GE" >
3132 <span class="country-flags country-flags--GE"></span> 3133 <span>Georgia (EUR â¬)</span> 3134 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DE" > 3135 <span class="country-flags country-flags--DE"></span> 3136 <span>Germany (EUR â¬)</span> 3137 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GH" > 3138 <span class="country-flags country-flags--GH"></span> 3139 <span>Ghana (EUR â¬)</span> 3140 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GI" > 3141 <span class="country-flags country-flags--GI"></span> 3142 <span>Gibraltar (GBP £)</span> 3143 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GR" > 3144 <span class="country-flags country-flags--GR"></span> 3145 <span>Greece (EUR â¬)</span> 3146 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GN" > 3147 <span class="country-flags country-flags--GN"></span> 3148 <span>Guinea (GNF Fr)</span> 3149 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GW" > 3150 <span class="country-flags country-flags--GW"></span> 3151 <span>Guinea-Bissau (XOF Fr)</span> 3152 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="HU" > 3153 <span class="country-flags country-flags--HU"></span> 3154 <span>Hungary (HUF Ft)</span> 3155 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IS" > 3156 <span class="country-flags country-flags--IS"></span> 3157 <span>Iceland (ISK kr)</span> 3158 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IQ" > 3159 <span class="country-flags country-flags--IQ"></span> 3160 <span>Iraq (EUR â¬)</span> 3161 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IE" > 3162 <span class="country-flags country-flags--IE"></span> 3163 <span>Ireland (EUR â¬)</span> 3164 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IL" > 3165 <span class="country-flags country-flags--IL"></span> 3166 <span>Israel (ILS âª)</span> 3167 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IT" > 3168 <span class="country-flags country-flags--IT"></span> 3169 <span>Italy (EUR â¬)</span> 3170 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="JO" > 3171 <span class="country-flags country-flags--JO"></span> 3172 <span>Jordan (EUR â¬)</span> 3173 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="KZ" > 3174 <span class="country-flags country-flags--KZ"></span> 3175 <span>Kazakhstan (KZT â¸)</span> 3176 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="KE" > 3177 <span class="country-flags country-flags--KE"></span> 3178 <span>Kenya (KES KSh)</span> 3179 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="KW" > 3180 <span class="country-flags country-flags--KW"></span> 3181 <span>Kuwait (EUR â¬)</span> 3182 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LV" >
3183 <span class="country-flags country-flags--LV"></span> 3184 <span>Latvia (EUR â¬)</span> 3185 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LB" > 3186 <span class="country-flags country-flags--LB"></span> 3187 <span>Lebanon (LBP Ù.Ù)</span> 3188 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LS" > 3189 <span class="country-flags country-flags--LS"></span> 3190 <span>Lesotho (EUR â¬)</span> 3191 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LR" > 3192 <span class="country-flags country-flags--LR"></span> 3193 <span>Liberia (EUR â¬)</span> 3194 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LI" > 3195 <span class="country-flags country-flags--LI"></span> 3196 <span>Liechtenstein (EUR â¬)</span> 3197 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LT" > 3198 <span class="country-flags country-flags--LT"></span> 3199 <span>Lithuania (EUR â¬)</span> 3200 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LU" > 3201 <span class="country-flags country-flags--LU"></span> 3202 <span>Luxembourg (EUR â¬)</span> 3203 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MG" > 3204 <span class="country-flags country-flags--MG"></span> 3205 <span>Madagascar (EUR â¬)</span> 3206 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MW" > 3207 <span class="country-flags country-flags--MW"></span> 3208 <span>Malawi (MWK MK)</span> 3209 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ML" > 3210 <span class="country-flags country-flags--ML"></span> 3211 <span>Mali (XOF Fr)</span> 3212 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MT" > 3213 <span class="country-flags country-flags--MT"></span> 3214 <span>Malta (EUR â¬)</span> 3215 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MR" > 3216 <span class="country-flags country-flags--MR"></span> 3217 <span>Mauritania (EUR â¬)</span> 3218 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MU" > 3219 <span class="country-flags country-flags--MU"></span> 3220 <span>Mauritius (MUR â¨)</span> 3221 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MC" > 3222 <span class="country-flags country-flags--MC"></span> 3223 <span>Monaco (EUR â¬)</span> 3224 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ME" > 3225 <span class="country-flags country-flags--ME"></span> 3226 <span>Montenegro (EUR â¬)</span> 3227 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MA" > 3228 <span class="country-flags country-flags--MA"></span> 3229 <span>Morocco (MAD د.Ù .)</span> 3230 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MZ" > 3231 <span class="country-flags country-flags--MZ"></span> 3232 <span>Mozambique (EUR â¬)</span> 3233 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NA" >
3234 <span class="country-flags country-flags--NA"></span> 3235 <span>Namibia (EUR â¬)</span> 3236 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NL" aria-selected="true"> 3237 <span class="country-flags country-flags--NL"></span> 3238 <span>Netherlands (EUR â¬)</span> 3239 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NE" > 3240 <span class="country-flags country-flags--NE"></span> 3241 <span>Niger (XOF Fr)</span> 3242 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NG" > 3243 <span class="country-flags country-flags--NG"></span> 3244 <span>Nigeria (NGN â¦)</span> 3245 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MK" > 3246 <span class="country-flags country-flags--MK"></span> 3247 <span>North Macedonia (MKD ден)</span> 3248 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NO" > 3249 <span class="country-flags country-flags--NO"></span> 3250 <span>Norway (CHF CHF)</span> 3251 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="OM" > 3252 <span class="country-flags country-flags--OM"></span> 3253 <span>Oman (EUR â¬)</span> 3254 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="PK" > 3255 <span class="country-flags country-flags--PK"></span> 3256 <span>Pakistan (PKR â¨)</span> 3257 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="PL" > 3258 <span class="country-flags country-flags--PL"></span> 3259 <span>Poland (PLN zÅ)</span> 3260 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="PT" > 3261 <span class="country-flags country-flags--PT"></span> 3262 <span>Portugal (EUR â¬)</span> 3263 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="QA" > 3264 <span class="country-flags country-flags--QA"></span> 3265 <span>Qatar (QAR ر.Ù)</span> 3266 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RO" > 3267 <span class="country-flags country-flags--RO"></span> 3268 <span>Romania (RON Lei)</span> 3269 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RU" > 3270 <span class="country-flags country-flags--RU"></span> 3271 <span>Russia (EUR â¬)</span> 3272 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RW" > 3273 <span class="country-flags country-flags--RW"></span> 3274 <span>Rwanda (RWF FRw)</span> 3275 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SM" > 3276 <span class="country-flags country-flags--SM"></span> 3277 <span>San Marino (EUR â¬)</span> 3278 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SA" > 3279 <span class="country-flags country-flags--SA"></span> 3280 <span>Saudi Arabia (SAR ر.س)</span> 3281 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SN" > 3282 <span class="country-flags country-flags--SN"></span> 3283 <span>Senegal (XOF Fr)</span> 3284 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RS" >
3285 <span class="country-flags country-flags--RS"></span> 3286 <span>Serbia (RSD РСÐ)</span> 3287 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SL" > 3288 <span class="country-flags country-flags--SL"></span> 3289 <span>Sierra Leone (SLL Le)</span> 3290 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SK" > 3291 <span class="country-flags country-flags--SK"></span> 3292 <span>Slovakia (EUR â¬)</span> 3293 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SI" > 3294 <span class="country-flags country-flags--SI"></span> 3295 <span>Slovenia (EUR â¬)</span> 3296 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SO" > 3297 <span class="country-flags country-flags--SO"></span> 3298 <span>Somalia (EUR â¬)</span> 3299 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ZA" > 3300 <span class="country-flags country-flags--ZA"></span> 3301 <span>South Africa (EUR â¬)</span> 3302 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ES" > 3303 <span class="country-flags country-flags--ES"></span> 3304 <span>Spain (EUR â¬)</span> 3305 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SD" > 3306 <span class="country-flags country-flags--SD"></span> 3307 <span>Sudan (EUR â¬)</span> 3308 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SE" > 3309 <span class="country-flags country-flags--SE"></span> 3310 <span>Sweden (SEK kr)</span> 3311 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CH" > 3312 <span class="country-flags country-flags--CH"></span> 3313 <span>Switzerland (CHF CHF)</span> 3314 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TJ" > 3315 <span class="country-flags country-flags--TJ"></span> 3316 <span>Tajikistan (TJS Ð Ð)</span> 3317 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TZ" > 3318 <span class="country-flags country-flags--TZ"></span> 3319 <span>Tanzania (TZS Sh)</span> 3320 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TG" > 3321 <span class="country-flags country-flags--TG"></span> 3322 <span>Togo (XOF Fr)</span> 3323 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TN" > 3324 <span class="country-flags country-flags--TN"></span> 3325 <span>Tunisia (EUR â¬)</span> 3326 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TR" > 3327 <span class="country-flags country-flags--TR"></span> 3328 <span>Türkiye (EUR â¬)</span> 3329 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TM" > 3330 <span class="country-flags country-flags--TM"></span> 3331 <span>Turkmenistan (EUR â¬)</span> 3332 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="UG" > 3333 <span class="country-flags country-flags--UG"></span> 3334 <span>Uganda (UGX USh)</span> 3335 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="UA" >
3336 <span class="country-flags country-flags--UA"></span> 3337 <span>Ukraine (UAH â´)</span> 3338 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AE" > 3339 <span class="country-flags country-flags--AE"></span> 3340 <span>United Arab Emirates (AED د.Ø¥)</span> 3341 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GB" > 3342 <span class="country-flags country-flags--GB"></span> 3343 <span>United Kingdom (GBP £)</span> 3344 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="VA" > 3345 <span class="country-flags country-flags--VA"></span> 3346 <span>Vatican City (EUR â¬)</span> 3347 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="EH" > 3348 <span class="country-flags country-flags--EH"></span> 3349 <span>Western Sahara (MAD د.Ù .)</span> 3350 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="YE" > 3351 <span class="country-flags country-flags--YE"></span> 3352 <span>Yemen (YER ï·¼)</span> 3353 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ZM" > 3354 <span class="country-flags country-flags--ZM"></span> 3355 <span>Zambia (EUR â¬)</span> 3356 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ZW" > 3357 <span class="country-flags country-flags--ZW"></span> 3358 <span>Zimbabwe (USD $)</span> 3359 </button></x-listbox></form></x-popover> 3360 </div></li><li class="hidden md:block shrink-0"><div class="relative"> 3361 <button type="button" class="text-with-icon gap-2.5 group" aria-label="Change language" aria-controls="popover-localization-form-locale-end-sections--30366605934919__header" aria-expanded="false"> 3362 <span class="bold text-sm">English</span><svg role="presentation" focusable="false" width="10" height="7" class="icon icon-chevron-bottom" viewBox="0 0 10 7"> 3363 <path d="m1 1 4 4 4-4" fill="none" stroke="currentColor" stroke-width="2"></path> 3364 </svg></button> 3365 3366 <x-popover id="popover-localization-form-locale-end-sections--30366605934919__header" initial-focus="[aria-selected='true']" anchor-horizontal="end" anchor-vertical="end" class="popover"> 3367 <p class="h5" slot="title">Language</p><form method="post" action="/localization" id="localization-form-locale-end-sections--30366605934919__header" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/cart" /><x-listbox class="popover-listbox popover-listbox--sm" role="listbox"><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="en" aria-selected="true">English</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="es" >Español</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="de" >Deutsch</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="nl" >Nederlands</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="fr" >Français</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="it" >Italiano</button></x-listbox></form></x-popover> 3368 </div></li><li> 3369 <a href="/search" class="hidden tap-area sm:block" aria-controls="search-drawer"> 3370 <span class="sr-only">Search</span><svg role="presentation" stroke-width="1" focusable="false" width="22" height="22" class="icon icon-search" viewBox="0 0 22 22"> 3371 <circle cx="11" cy="10" r="7" fill="none" stroke="currentColor"></circle> 3372 <path d="m16 15 3 3" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path> 3373 </svg></a> 3374 </li><li> 3375 <a href="https://spinning.eu/customer_authentication/redirect?locale=en®ion_country=NL" class="hidden tap-area sm:block">
3376 <span class="sr-only">Login</span><svg role="presentation" stroke-width="1" focusable="false" width="22" height="22" class="icon icon-account" viewBox="0 0 22 22"> 3377 <circle cx="11" cy="7" r="4" fill="none" stroke="currentColor"></circle> 3378 <path d="M3.5 19c1.421-2.974 4.247-5 7.5-5s6.079 2.026 7.5 5" fill="none" stroke="currentColor" stroke-linecap="round"></path> 3379 </svg></a> 3380 </li><li> 3381 <a href="/cart" data-no-instant class="relative block tap-area" > 3382 <span class="sr-only">Cart</span><svg role="presentation" stroke-width="1" focusable="false" width="22" height="22" class="icon icon-cart" viewBox="0 0 22 22"> 3383 <path d="M11 7H3.577A2 2 0 0 0 1.64 9.497l2.051 8A2 2 0 0 0 5.63 19H16.37a2 2 0 0 0 1.937-1.503l2.052-8A2 2 0 0 0 18.422 7H11Zm0 0V1" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path> 3384 </svg><div class="header__cart-count"> 3385 <cart-count class="count-bubble opacity-0"> 3386 <span class="sr-only">0 items</span> 3387 <span aria-hidden="true">0</span> 3388 </cart-count> 3389 </div> 3390 </a> 3391 </li> 3392 </ul> 3393 </div> 3394 </div> 3395 </store-header> 3396</height-observer><navigation-drawer mobile-opening="bottom" open-from="left" id="header-sidebar-menu" class="navigation-drawer drawer lg:hidden" > 3397 <button is="close-button" aria-label="Close"class="sm-max:hidden"><svg role="presentation" stroke-width="2" focusable="false" width="19" height="19" class="icon icon-close" viewBox="0 0 24 24"> 3398 <path d="M17.658 6.343 6.344 17.657M17.658 17.657 6.344 6.343" stroke="currentColor"></path> 3399 </svg></button><div class="panel-list__wrapper"> 3400 <div class="panel"> 3401 <div class="panel__wrapper" > 3402 <div class="panel__scroller v-stack gap-8"><ul class="v-stack gap-4"> 3403<li class="h3 sm:h4"><a href="/" class="group block w-full"> 3404 <span><span class="reversed-link">Home</span></span> 3405 </a></li> 3406<li class="h3 sm:h4"><a href="/" class="group block w-full"> 3407 <span><span class="reversed-link">Shop</span></span> 3408 </a></li> 3409<li class="h3 sm:h4"><a href="/" class="group block w-full"> 3410 <span><span class="reversed-link">HOME</span></span> 3411 </a></li> 3412<li class="h3 sm:h4"><a href="/pages/ride-at-home" class="group block w-full"> 3413 <span><span class="reversed-link">RIDE AT HOME</span></span> 3414 </a></li> 3415<li class="h3 sm:h4"><a href="/pages/spinning-apps" class="group block w-full"> 3416 <span><span class="reversed-link">SPINNING APP</span></span> 3417 </a></li> 3418<li class="h3 sm:h4"><a href="/pages/instructors" class="group block w-full"> 3419 <span><span class="reversed-link">INSTRUCTORS</span></span> 3420 </a></li> 3421<li class="h3 sm:h4"><a href="/" class="group block w-full"> 3422 <span><span class="reversed-link">SHOP</span></span> 3423 </a></li></ul></div><div class="panel-footer v-stack gap-5"><ul class="social-media " role="list"><li> 3424 <a href="https://www.facebook.com/Spinning" class="tap-area" target="_blank" rel="noopener" aria-label="Follow on Facebook"><svg role="presentation" focusable="false" width="27" height="27" class="icon icon-facebook" viewBox="0 0 24 24"> 3425 <path fill-rule="evenodd" clip-rule="evenodd" d="M10.183 21.85v-8.868H7.2V9.526h2.983V6.982a4.17 4.17 0 0 1 4.44-4.572 22.33 22.33 0 0 1 2.667.144v3.084h-1.83a1.44 1.44 0 0 0-1.713 1.68v2.208h3.423l-.447 3.456h-2.97v8.868h-3.57Z" fill="currentColor"/> 3426 </svg></a> 3427 </li><li> 3428 <a href="https://www.instagram.com/spinninghq/" class="tap-area" target="_blank" rel="noopener" aria-label="Follow on Instagram"><svg role="presentation" focusable="false" width="27" height="27" class="icon icon-instagram" viewBox="0 0 24 24"> 3429 <path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.4c-2.607 0-2.934.011-3.958.058-1.022.046-1.72.209-2.33.446a4.705 4.705 0 0 0-1.7 1.107 4.706 4.706 0 0 0-1.108 1.7c-.237.611-.4 1.31-.446 2.331C2.41 9.066 2.4 9.392 2.4 12c0 2.607.011 2.934.058 3.958.046 1.022.209 1.72.446 2.33a4.706 4.706 0 0 0 1.107 1.7c.534.535 1.07.863 1.7 1.108.611.237 1.309.4 2.33.446 1.025.
3429047 1.352.058 3.959.058s2.934-.011 3.958-.058c1.022-.046 1.72-.209 2.33-.446a4.706 4.706 0 0 0 1.7-1.107 4.706 4.706 0 0 0 1.108-1.7c.237-.611.4-1.31.446-2.33.047-1.025.058-1.352.058-3.959s-.011-2.934-.058-3.958c-.047-1.022-.209-1.72-.446-2.33a4.706 4.706 0 0 0-1.107-1.7 4.705 4.705 0 0 0-1.7-1.108c-.611-.237-1.31-.4-2.331-.446C14.934 2.41 14.608 2.4 12 2.4Zm0 1.73c2.563 0 2.867.01 3.88.056.935.042 1.443.199 1.782.33.448.174.768.382 1.104.718.336.336.544.656.718 1.104.131.338.287.847.33 1.783.046 1.012.056 1.316.056 3.879 0 2.563-.01 2.867-.056 3.88-.043.935-.199 1.444-.33 1.782a2.974 2.974 0 0 1-.719 1.104 2.974 2.974 0 0 1-1.103.718c-.339.131-.847.288-1.783.33-1.012.046-1.316.056-3.88.056-2.563 0-2.866-.01-3.878-.056-.936-.042-1.445-.199-1.783-.33a2.974 2.974 0 0 1-1.104-.718 2.974 2.974 0 0 1-.718-1.104c-.131-.338-.288-.847-.33-1.783-.047-1.012-.056-1.316-.056-3.879 0-2.563.01-2.867.056-3.88.042-.935.199-1.443.33-1.782.174-.448.382-.768.718-1.104a2.974 2.974 0 0 1 1.104-.718c.338-.131.847-.288 1.783-.33C9.133 4.14 9.437 4.13 12 4.13Zm0 11.07a3.2 3.2 0 1 1 0-6.4 3.2 3.2 0 0 1 0 6.4Zm0-8.13a4.93 4.93 0 1 0 0 9.86 4.93 4.93 0 0 0 0-9.86Zm6.276-.194a1.152 1.152 0 1 1-2.304 0 1.152 1.152 0 0 1 2.304 0Z" fill="currentColor"/> 3430 </svg></a> 3431 </li><li> 3432 <a href="https://www.youtube.com/@spinning" class="tap-area" target="_blank" rel="noopener" aria-label="Follow on YouTube"><svg role="presentation" focusable="false" width="27" height="27" class="icon icon-youtube" viewBox="0 0 24 24"> 3433 <path fill-rule="evenodd" clip-rule="evenodd" d="M20.44 5.243c.929.244 1.66.963 1.909 1.876.451 1.654.451 5.106.451 5.106s0 3.452-.451 5.106a2.681 2.681 0 0 1-1.91 1.876c-1.684.443-8.439.443-8.439.443s-6.754 0-8.439-.443a2.682 2.682 0 0 1-1.91-1.876c-.45-1.654-.45-5.106-.45-5.106s0-3.452.45-5.106a2.681 2.681 0 0 1 1.91-1.876c1.685-.443 8.44-.443 8.44-.443s6.754 0 8.438.443Zm-5.004 6.982L9.792 15.36V9.091l5.646 3.134Z" fill="currentColor"/> 3434 </svg></a> 3435 </li></ul><div class="panel-footer__localization-wrapper h-stack gap-6 border-t md:hidden"><link rel="stylesheet" href="//spinning.eu/cdn/shop/t/9/assets/country-flags.css?v=105120918595178899651788351188" media="print" onload="this.media='all'; this.onload = null"><div class="relative"> 3436 <button type="button" class="text-with-icon gap-2.5 group" aria-label="Change country or currency" aria-controls="popover-localization-form-country--sections--30366605934919__header" aria-expanded="false"> 3437 <div class="h-stack gap-2"><span class="country-flags country-flags--NL"></span><span class="bold text-sm">EUR â¬</span> 3438 </div><svg role="presentation" focusable="false" width="10" height="7" class="icon icon-chevron-bottom" viewBox="0 0 10 7"> 3439 <path d="m1 1 4 4 4-4" fill="none" stroke="currentColor" stroke-width="2"></path> 3440 </svg></button> 3441 3442 <x-popover id="popover-localization-form-country--sections--30366605934919__header" initial-focus="[aria-selected='true']" anchor-horizontal="end" anchor-vertical="start" class="popover"> 3443 <p class="h5" slot="title">Country</p><form method="post" action="/localization" id="localization-form-country--sections--30366605934919__header" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/cart" /><x-listbox class="popover-listbox popover-listbox--sm" role="listbox"><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AF" > 3444 <span class="country-flags country-flags--AF"></span> 3445 <span>Afghanistan (AFN Ø)</span> 3446 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AL" > 3447 <span class="country-flags country-flags--AL"></span> 3448 <span>Albania (ALL L)</span> 3449 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DZ" >
3450 <span class="country-flags country-flags--DZ"></span> 3451 <span>Algeria (DZD د.ج)</span> 3452 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AD" > 3453 <span class="country-flags country-flags--AD"></span> 3454 <span>Andorra (EUR â¬)</span> 3455 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AO" > 3456 <span class="country-flags country-flags--AO"></span> 3457 <span>Angola (EUR â¬)</span> 3458 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AM" > 3459 <span class="country-flags country-flags--AM"></span> 3460 <span>Armenia (AMD Õ¤Ö.)</span> 3461 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AT" > 3462 <span class="country-flags country-flags--AT"></span> 3463 <span>Austria (EUR â¬)</span> 3464 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AZ" > 3465 <span class="country-flags country-flags--AZ"></span> 3466 <span>Azerbaijan (AZN â¼)</span> 3467 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BH" > 3468 <span class="country-flags country-flags--BH"></span> 3469 <span>Bahrain (EUR â¬)</span> 3470 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BY" > 3471 <span class="country-flags country-flags--BY"></span> 3472 <span>Belarus (EUR â¬)</span> 3473 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BE" > 3474 <span class="country-flags country-flags--BE"></span> 3475 <span>Belgium (EUR â¬)</span> 3476 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BJ" > 3477 <span class="country-flags country-flags--BJ"></span> 3478 <span>Benin (XOF Fr)</span> 3479 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BA" > 3480 <span class="country-flags country-flags--BA"></span> 3481 <span>Bosnia & Herzegovina (BAM ÐÐ)</span> 3482 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BW" > 3483 <span class="country-flags country-flags--BW"></span> 3484 <span>Botswana (BWP P)</span> 3485 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BG" > 3486 <span class="country-flags country-flags--BG"></span> 3487 <span>Bulgaria (EUR â¬)</span> 3488 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BF" > 3489 <span class="country-flags country-flags--BF"></span> 3490 <span>Burkina Faso (XOF Fr)</span> 3491 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BI" > 3492 <span class="country-flags country-flags--BI"></span> 3493 <span>Burundi (BIF Fr)</span> 3494 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CM" > 3495 <span class="country-flags country-flags--CM"></span> 3496 <span>Cameroon (XAF CFA)</span> 3497 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CV" > 3498 <span class="country-flags country-flags--CV"></span> 3499 <span>Cape Verde (CVE $)</span> 3500 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CF" >
3501 <span class="country-flags country-flags--CF"></span> 3502 <span>Central African Republic (XAF CFA)</span> 3503 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TD" > 3504 <span class="country-flags country-flags--TD"></span> 3505 <span>Chad (XAF CFA)</span> 3506 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="HR" > 3507 <span class="country-flags country-flags--HR"></span> 3508 <span>Croatia (EUR â¬)</span> 3509 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CY" > 3510 <span class="country-flags country-flags--CY"></span> 3511 <span>Cyprus (EUR â¬)</span> 3512 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CZ" > 3513 <span class="country-flags country-flags--CZ"></span> 3514 <span>Czechia (CZK KÄ)</span> 3515 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DK" > 3516 <span class="country-flags country-flags--DK"></span> 3517 <span>Denmark (DKK kr.)</span> 3518 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DJ" > 3519 <span class="country-flags country-flags--DJ"></span> 3520 <span>Djibouti (DJF Fdj)</span> 3521 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="EG" > 3522 <span class="country-flags country-flags--EG"></span> 3523 <span>Egypt (EGP ج.Ù )</span> 3524 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ER" > 3525 <span class="country-flags country-flags--ER"></span> 3526 <span>Eritrea (EUR â¬)</span> 3527 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="EE" > 3528 <span class="country-flags country-flags--EE"></span> 3529 <span>Estonia (EUR â¬)</span> 3530 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ET" > 3531 <span class="country-flags country-flags--ET"></span> 3532 <span>Ethiopia (ETB Br)</span> 3533 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="FI" > 3534 <span class="country-flags country-flags--FI"></span> 3535 <span>Finland (EUR â¬)</span> 3536 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="FR" > 3537 <span class="country-flags country-flags--FR"></span> 3538 <span>France (EUR â¬)</span> 3539 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GA" > 3540 <span class="country-flags country-flags--GA"></span> 3541 <span>Gabon (XOF Fr)</span> 3542 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GM" > 3543 <span class="country-flags country-flags--GM"></span> 3544 <span>Gambia (GMD D)</span> 3545 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GE" > 3546 <span class="country-flags country-flags--GE"></span> 3547 <span>Georgia (EUR â¬)</span> 3548 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DE" > 3549 <span class="country-flags country-flags--DE"></span> 3550 <span>Germany (EUR â¬)</span> 3551 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GH" >
3552 <span class="country-flags country-flags--GH"></span> 3553 <span>Ghana (EUR â¬)</span> 3554 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GI" > 3555 <span class="country-flags country-flags--GI"></span> 3556 <span>Gibraltar (GBP £)</span> 3557 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GR" > 3558 <span class="country-flags country-flags--GR"></span> 3559 <span>Greece (EUR â¬)</span> 3560 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GN" > 3561 <span class="country-flags country-flags--GN"></span> 3562 <span>Guinea (GNF Fr)</span> 3563 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GW" > 3564 <span class="country-flags country-flags--GW"></span> 3565 <span>Guinea-Bissau (XOF Fr)</span> 3566 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="HU" > 3567 <span class="country-flags country-flags--HU"></span> 3568 <span>Hungary (HUF Ft)</span> 3569 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IS" > 3570 <span class="country-flags country-flags--IS"></span> 3571 <span>Iceland (ISK kr)</span> 3572 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IQ" > 3573 <span class="country-flags country-flags--IQ"></span> 3574 <span>Iraq (EUR â¬)</span> 3575 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IE" > 3576 <span class="country-flags country-flags--IE"></span> 3577 <span>Ireland (EUR â¬)</span> 3578 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IL" > 3579 <span class="country-flags country-flags--IL"></span> 3580 <span>Israel (ILS âª)</span> 3581 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IT" > 3582 <span class="country-flags country-flags--IT"></span> 3583 <span>Italy (EUR â¬)</span> 3584 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="JO" > 3585 <span class="country-flags country-flags--JO"></span> 3586 <span>Jordan (EUR â¬)</span> 3587 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="KZ" > 3588 <span class="country-flags country-flags--KZ"></span> 3589 <span>Kazakhstan (KZT â¸)</span> 3590 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="KE" > 3591 <span class="country-flags country-flags--KE"></span> 3592 <span>Kenya (KES KSh)</span> 3593 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="KW" > 3594 <span class="country-flags country-flags--KW"></span> 3595 <span>Kuwait (EUR â¬)</span> 3596 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LV" > 3597 <span class="country-flags country-flags--LV"></span> 3598 <span>Latvia (EUR â¬)</span> 3599 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LB" > 3600 <span class="country-flags country-flags--LB"></span> 3601 <span>Lebanon (LBP Ù.Ù)</span> 3602 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LS" >
3603 <span class="country-flags country-flags--LS"></span> 3604 <span>Lesotho (EUR â¬)</span> 3605 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LR" > 3606 <span class="country-flags country-flags--LR"></span> 3607 <span>Liberia (EUR â¬)</span> 3608 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LI" > 3609 <span class="country-flags country-flags--LI"></span> 3610 <span>Liechtenstein (EUR â¬)</span> 3611 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LT" > 3612 <span class="country-flags country-flags--LT"></span> 3613 <span>Lithuania (EUR â¬)</span> 3614 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LU" > 3615 <span class="country-flags country-flags--LU"></span> 3616 <span>Luxembourg (EUR â¬)</span> 3617 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MG" > 3618 <span class="country-flags country-flags--MG"></span> 3619 <span>Madagascar (EUR â¬)</span> 3620 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MW" > 3621 <span class="country-flags country-flags--MW"></span> 3622 <span>Malawi (MWK MK)</span> 3623 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ML" > 3624 <span class="country-flags country-flags--ML"></span> 3625 <span>Mali (XOF Fr)</span> 3626 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MT" > 3627 <span class="country-flags country-flags--MT"></span> 3628 <span>Malta (EUR â¬)</span> 3629 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MR" > 3630 <span class="country-flags country-flags--MR"></span> 3631 <span>Mauritania (EUR â¬)</span> 3632 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MU" > 3633 <span class="country-flags country-flags--MU"></span> 3634 <span>Mauritius (MUR â¨)</span> 3635 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MC" > 3636 <span class="country-flags country-flags--MC"></span> 3637 <span>Monaco (EUR â¬)</span> 3638 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ME" > 3639 <span class="country-flags country-flags--ME"></span> 3640 <span>Montenegro (EUR â¬)</span> 3641 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MA" > 3642 <span class="country-flags country-flags--MA"></span> 3643 <span>Morocco (MAD د.Ù .)</span> 3644 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MZ" > 3645 <span class="country-flags country-flags--MZ"></span> 3646 <span>Mozambique (EUR â¬)</span> 3647 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NA" > 3648 <span class="country-flags country-flags--NA"></span> 3649 <span>Namibia (EUR â¬)</span> 3650 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NL" aria-selected="true"> 3651 <span class="country-flags country-flags--NL"></span> 3652 <span>Netherlands (EUR â¬)</span> 3653 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NE" >
3654 <span class="country-flags country-flags--NE"></span> 3655 <span>Niger (XOF Fr)</span> 3656 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NG" > 3657 <span class="country-flags country-flags--NG"></span> 3658 <span>Nigeria (NGN â¦)</span> 3659 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MK" > 3660 <span class="country-flags country-flags--MK"></span> 3661 <span>North Macedonia (MKD ден)</span> 3662 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NO" > 3663 <span class="country-flags country-flags--NO"></span> 3664 <span>Norway (CHF CHF)</span> 3665 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="OM" > 3666 <span class="country-flags country-flags--OM"></span> 3667 <span>Oman (EUR â¬)</span> 3668 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="PK" > 3669 <span class="country-flags country-flags--PK"></span> 3670 <span>Pakistan (PKR â¨)</span> 3671 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="PL" > 3672 <span class="country-flags country-flags--PL"></span> 3673 <span>Poland (PLN zÅ)</span> 3674 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="PT" > 3675 <span class="country-flags country-flags--PT"></span> 3676 <span>Portugal (EUR â¬)</span> 3677 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="QA" > 3678 <span class="country-flags country-flags--QA"></span> 3679 <span>Qatar (QAR ر.Ù)</span> 3680 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RO" > 3681 <span class="country-flags country-flags--RO"></span> 3682 <span>Romania (RON Lei)</span> 3683 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RU" > 3684 <span class="country-flags country-flags--RU"></span> 3685 <span>Russia (EUR â¬)</span> 3686 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RW" > 3687 <span class="country-flags country-flags--RW"></span> 3688 <span>Rwanda (RWF FRw)</span> 3689 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SM" > 3690 <span class="country-flags country-flags--SM"></span> 3691 <span>San Marino (EUR â¬)</span> 3692 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SA" > 3693 <span class="country-flags country-flags--SA"></span> 3694 <span>Saudi Arabia (SAR ر.س)</span> 3695 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SN" > 3696 <span class="country-flags country-flags--SN"></span> 3697 <span>Senegal (XOF Fr)</span> 3698 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RS" > 3699 <span class="country-flags country-flags--RS"></span> 3700 <span>Serbia (RSD РСÐ)</span> 3701 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SL" > 3702 <span class="country-flags country-flags--SL"></span> 3703 <span>Sierra Leone (SLL Le)</span> 3704 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SK" >
3705 <span class="country-flags country-flags--SK"></span> 3706 <span>Slovakia (EUR â¬)</span> 3707 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SI" > 3708 <span class="country-flags country-flags--SI"></span> 3709 <span>Slovenia (EUR â¬)</span> 3710 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SO" > 3711 <span class="country-flags country-flags--SO"></span> 3712 <span>Somalia (EUR â¬)</span> 3713 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ZA" > 3714 <span class="country-flags country-flags--ZA"></span> 3715 <span>South Africa (EUR â¬)</span> 3716 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ES" > 3717 <span class="country-flags country-flags--ES"></span> 3718 <span>Spain (EUR â¬)</span> 3719 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SD" > 3720 <span class="country-flags country-flags--SD"></span> 3721 <span>Sudan (EUR â¬)</span> 3722 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SE" > 3723 <span class="country-flags country-flags--SE"></span> 3724 <span>Sweden (SEK kr)</span> 3725 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CH" > 3726 <span class="country-flags country-flags--CH"></span> 3727 <span>Switzerland (CHF CHF)</span> 3728 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TJ" > 3729 <span class="country-flags country-flags--TJ"></span> 3730 <span>Tajikistan (TJS Ð Ð)</span> 3731 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TZ" > 3732 <span class="country-flags country-flags--TZ"></span> 3733 <span>Tanzania (TZS Sh)</span> 3734 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TG" > 3735 <span class="country-flags country-flags--TG"></span> 3736 <span>Togo (XOF Fr)</span> 3737 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TN" > 3738 <span class="country-flags country-flags--TN"></span> 3739 <span>Tunisia (EUR â¬)</span> 3740 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TR" > 3741 <span class="country-flags country-flags--TR"></span> 3742 <span>Türkiye (EUR â¬)</span> 3743 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TM" > 3744 <span class="country-flags country-flags--TM"></span> 3745 <span>Turkmenistan (EUR â¬)</span> 3746 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="UG" > 3747 <span class="country-flags country-flags--UG"></span> 3748 <span>Uganda (UGX USh)</span> 3749 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="UA" > 3750 <span class="country-flags country-flags--UA"></span> 3751 <span>Ukraine (UAH â´)</span> 3752 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AE" > 3753 <span class="country-flags country-flags--AE"></span> 3754 <span>United Arab Emirates (AED د.Ø¥)</span> 3755 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GB" >
3756 <span class="country-flags country-flags--GB"></span> 3757 <span>United Kingdom (GBP £)</span> 3758 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="VA" > 3759 <span class="country-flags country-flags--VA"></span> 3760 <span>Vatican City (EUR â¬)</span> 3761 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="EH" > 3762 <span class="country-flags country-flags--EH"></span> 3763 <span>Western Sahara (MAD د.Ù .)</span> 3764 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="YE" > 3765 <span class="country-flags country-flags--YE"></span> 3766 <span>Yemen (YER ï·¼)</span> 3767 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ZM" > 3768 <span class="country-flags country-flags--ZM"></span> 3769 <span>Zambia (EUR â¬)</span> 3770 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ZW" > 3771 <span class="country-flags country-flags--ZW"></span> 3772 <span>Zimbabwe (USD $)</span> 3773 </button></x-listbox></form></x-popover> 3774 </div><div class="relative"> 3775 <button type="button" class="text-with-icon gap-2.5 group" aria-label="Change language" aria-controls="popover-localization-form-locale--sections--30366605934919__header" aria-expanded="false"> 3776 <span class="bold text-sm">English</span><svg role="presentation" focusable="false" width="10" height="7" class="icon icon-chevron-bottom" viewBox="0 0 10 7"> 3777 <path d="m1 1 4 4 4-4" fill="none" stroke="currentColor" stroke-width="2"></path> 3778 </svg></button> 3779 3780 <x-popover id="popover-localization-form-locale--sections--30366605934919__header" initial-focus="[aria-selected='true']" anchor-horizontal="end" anchor-vertical="start" class="popover"> 3781 <p class="h5" slot="title">Language</p><form method="post" action="/localization" id="localization-form-locale--sections--30366605934919__header" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/cart" /><x-listbox class="popover-listbox popover-listbox--sm" role="listbox"><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="en" aria-selected="true">English</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="es" >Español</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="de" >Deutsch</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="nl" >Nederlands</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="fr" >Français</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="it" >Italiano</button></x-listbox></form></x-popover> 3782 </div><a href="/account" class="panel-footer__account-link bold text-sm">Account</a></div></div></div> 3783 </div></div></navigation-drawer>
3783<script> 3784 document.documentElement.style.setProperty('--header-height', Math.round(document.getElementById('shopify-section-sections--30366605934919__header').clientHeight) + 'px'); 3785</script>
3785 3786 3787<style> #shopify-section-sections--30366605934919__header a {font-weight: 700 !important;} #shopify-section-sections--30366605934919__header .header {background-color: white;} </style></header> 3788<!-- END sections: header-group --><!-- BEGIN sections: overlay-group --> 3789<div id="shopify-section-sections--30366606983495__newsletter-popup" class="shopify-section shopify-section-group-overlay-group shopify-section--popup"></div><div id="shopify-section-sections--30366606983495__cart-drawer" class="shopify-section shopify-section-group-overlay-group"><cart-drawer class="cart-drawer drawer drawer--lg" id="cart-drawer"><button is="close-button" aria-label="Close"><svg role="presentation" stroke-width="2" focusable="false" width="24" height="24" class="icon icon-close" viewBox="0 0 24 24"> 3790 <path d="M17.658 6.343 6.344 17.657M17.658 17.657 6.344 6.343" stroke="currentColor"></path> 3791 </svg></button> 3792 3793 <div class="empty-state align-self-center"> 3794 <div class="empty-state__icon-wrapper"><svg role="presentation" stroke-width="1" focusable="false" width="32" height="32" class="icon icon-cart" viewBox="0 0 22 22"> 3795 <path d="M11 7H3.577A2 2 0 0 0 1.64 9.497l2.051 8A2 2 0 0 0 5.63 19H16.37a2 2 0 0 0 1.937-1.503l2.052-8A2 2 0 0 0 18.422 7H11Zm0 0V1" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path> 3796 </svg><span class="count-bubble count-bubble--lg">0</span> 3797 </div> 3798 3799 <div class="prose"> 3800 <p class="h5">Your cart is empty</p> 3801<a class="button button--xl button--outline" 3802 3803 3804 3805 3806 3807 href="/collections/all" 3808 3809 3810 >Continue shopping</a></div> 3811 </div></cart-drawer> 3812 3813 3814</div><div id="shopify-section-sections--30366606983495__search-drawer" class="shopify-section shopify-section-group-overlay-group"><search-drawer class="search-drawer drawer drawer--lg" id="search-drawer"> 3815 <form action="/search" method="get" class="v-stack gap-5 sm:gap-8" role="search"> 3816 <div class="search-input"> 3817 <input type="search" name="q" placeholder="Search for..." autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" aria-label="Search"> 3818 <button type="reset" class="text-subdued">Clear</button> 3819 <button type="button" is="close-button"> 3820 <span class="sr-only">Close</span><svg role="presentation" stroke-width="2" focusable="false" width="24" height="24" class="icon icon-close" viewBox="0 0 24 24"> 3821 <path d="M17.658 6.343 6.344 17.657M17.658 17.657 6.344 6.343" stroke="currentColor"></path> 3822 </svg></button> 3823 </div> 3824 3825 <style> 3826 #shopify-section-sections--30366606983495__search-drawer { 3827 --predictive-search-column-count: 3; 3828 } 3829 </style> 3830 3831 <input type="hidden" name="type" value="product"> 3832 3833 <predictive-search class="predictive-search" section-id="sections--30366606983495__search-drawer"><div slot="results"></div> 3834 3835 <div slot="loading"> 3836 <div class="v-stack gap-5 sm:gap-6 "> 3837 <div class="h-stack gap-4 sm:gap-5"><span class="skeleton skeleton--tab"></span><span class="skeleton skeleton--tab"></span><span class="skeleton skeleton--tab"></span></div> 3838 3839 <div class="v-stack gap-4 sm:gap-6"><div class="h-stack align-center gap-5 sm:gap-6"> 3840 <span class="skeleton skeleton--thumbnail"></span> 3841 3842 <div class="v-stack gap-3 w-full"> 3843 <span class="skeleton skeleton--text" style="--skeleton-text-width: 20%"></span> 3844 <span class="skeleton skeleton--text" style="--skeleton-text-width: 80%"></span> 3845 <span class="skeleton skeleton--text" style="--skeleton-text-width: 40%"></span> 3846 </div> 3847 </div><div class="h-stack align-center gap-5 sm:gap-6"> 3848 <span class="skeleton skeleton--thumbnail"></span> 3849 3850 <div class="v-stack gap-3 w-full"> 3851 <span class="skeleton skeleton--text" style="--skeleton-text-width: 20%"></span> 3852 <span class="skeleton skeleton--text" style="--skeleton-text-width: 80%"></span>
3853 <span class="skeleton skeleton--text" style="--skeleton-text-width: 40%"></span> 3854 </div> 3855 </div><div class="h-stack align-center gap-5 sm:gap-6"> 3856 <span class="skeleton skeleton--thumbnail"></span> 3857 3858 <div class="v-stack gap-3 w-full"> 3859 <span class="skeleton skeleton--text" style="--skeleton-text-width: 20%"></span> 3860 <span class="skeleton skeleton--text" style="--skeleton-text-width: 80%"></span> 3861 <span class="skeleton skeleton--text" style="--skeleton-text-width: 40%"></span> 3862 </div> 3863 </div><div class="h-stack align-center gap-5 sm:gap-6"> 3864 <span class="skeleton skeleton--thumbnail"></span> 3865 3866 <div class="v-stack gap-3 w-full"> 3867 <span class="skeleton skeleton--text" style="--skeleton-text-width: 20%"></span> 3868 <span class="skeleton skeleton--text" style="--skeleton-text-width: 80%"></span> 3869 <span class="skeleton skeleton--text" style="--skeleton-text-width: 40%"></span> 3870 </div> 3871 </div></div> 3872 </div></div> 3873 </predictive-search> 3874 </form> 3875</search-drawer> 3876 3877</div> 3878<!-- END sections: overlay-group --><cart-notification-drawer open-from="bottom" class="quick-buy-drawer drawer"></cart-notification-drawer><main role="main" id="main" class="anchor"> 3879 <section id="shopify-section-template--30366617403719__main" class="shopify-section shopify-section--main-cart"><div class="container"><div class="empty-state"> 3880 <div class="empty-state__icon-wrapper"><svg role="presentation" stroke-width="1" focusable="false" width="32" height="32" class="icon icon-cart" viewBox="0 0 22 22"> 3881 <path d="M11 7H3.577A2 2 0 0 0 1.64 9.497l2.051 8A2 2 0 0 0 5.63 19H16.37a2 2 0 0 0 1.937-1.503l2.052-8A2 2 0 0 0 18.422 7H11Zm0 0V1" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"></path> 3882 </svg><span class="count-bubble count-bubble--lg">0</span> 3883 </div> 3884 3885 <div class="prose"> 3886 <p class="h4">Your cart is empty</p> 3887<a class="button button--xl button--outline" 3888 3889 3890 3891 3892 3893 href="/collections/all" 3894 3895 3896 >Continue shopping</a></div> 3897 </div></div> 3898 3899</section> 3900<!-- BEGIN sections: footer-group --> 3901<footer id="shopify-section-sections--30366605869383__footer" class="shopify-section shopify-section-group-footer-group shopify-section--footer"><style> 3902 @media screen and (min-width: 1000px) { 3903 #shopify-section-sections--30366605869383__footer {--footer-block-list-gap: var(--spacing-10);--footer-block-list-justify-content: space-between; 3904 } 3905 } 3906</style><div class="footer"> 3907 <div class="container"> 3908 <div class="footer__wrapper"><div class="footer__block-list empty:hidden"><div class="footer__block footer__block--newsletter" ><div class="v-stack gap-6"><p class="h6">Sign up for news updates and promos</p><div class="prose text-subdued"><p>Enter your email below.</p></div><form method="post" action="/contact#footer-newsletter" id="footer-newsletter" accept-charset="UTF-8" class="footer__newsletter-form form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="contact[tags]" value="newsletter"><div class="form-control" ><input id="input-sections--30366605869383__footer--contactemail" class="input is-floating" type="email" dir="ltr" name="contact[email]" placeholder=" " 3909 3910 3911 3912 3913 autocomplete="email" 3914 3915 enterkeyhint="send" 3916 required 3917 3918><label for="input-sections--30366605869383__footer--contactemail" class="floating-label">E-mail</label><div class="self-submit-button"> 3919 <button type="submit" class="circle-chevron hover:colors"> 3920 <span class="sr-only">Subscribe</span><svg role="presentation" focusable="false" width="5" height="8" class="icon icon-chevron-right-small reverse-icon" viewBox="0 0 5 8"> 3921 <path d="m.75 7 3-3-3-3" fill="none" stroke="currentColor" stroke-width="1.5"></path> 3922 </svg></button> 3923 </div></div></form></div> 3924 </div><div class="footer__block footer__block--menu" ><p class="bold">EDUCATION</p><ul class="v-stack gap-3" role="list"><li> 3925 <a href="/pages/find-a-class" class="inline-block link-faded break-all">Find a Class</a> 3926 </li><li> 3927 <a href="/pages/training" class="inline-block link-faded break-all">Find Local Workshops</a> 3928 </li><li> 3929 <a href="/pages/become-an-instructor" class="inline-block link-faded break-all">
3929Become an Instructor</a> 3930 </li><li> 3931 <a href="/pages/instructors-education-certification-renewal" class="inline-block link-faded break-all">Certification Renewal</a> 3932 </li><li> 3933 <a href="/pages/instructors-certification-faq" class="inline-block link-faded break-all">Certification FAQ</a> 3934 </li><li> 3935 <a href="/pages/instructors-international-education-distributors" class="inline-block link-faded break-all">Education Distributors</a> 3936 </li><li> 3937 <a href="/pages/spin-membership" class="inline-block link-faded break-all">SPIN® Membership</a> 3938 </li><li> 3939 <a href="https://spinu.spinning.eu/" class="inline-block link-faded break-all">SpinU</a> 3940 </li></ul> 3941 </div><div class="footer__block footer__block--menu" ><p class="bold">SUPPORT</p><ul class="v-stack gap-3" role="list"><li> 3942 <a href="/pages/contact-us" class="inline-block link-faded break-all">Contact Us</a> 3943 </li><li> 3944 <a href="/pages/order-faqs" class="inline-block link-faded break-all">FAQs</a> 3945 </li><li> 3946 <a href="/pages/studio-bike-comparison-chart" class="inline-block link-faded break-all">Studio Bike Comparison</a> 3947 </li><li> 3948 <a href="/pages/home-bike-comparison-chart" class="inline-block link-faded break-all">Home Bike Comparison</a> 3949 </li><li> 3950 <a href="/pages/warranty" class="inline-block link-faded break-all">Warranty and Manuals</a> 3951 </li><li> 3952 <a href="/pages/shipping-handling" class="inline-block link-faded break-all">Shipping and Handling</a> 3953 </li><li> 3954 <a href="/pages//prepare-for-your-commercial-bikes" class="inline-block link-faded break-all">Prepare for Your Commercial Bikes</a> 3955 </li><li> 3956 <a href="/pages/get-ready-for-your-new-bike" class="inline-block link-faded break-all">Prepare for Your Home Bike</a> 3957 </li><li> 3958 <a href="/search" class="inline-block link-faded break-all">Search</a> 3959 </li><li data-mda-eu-withdrawal-link> 3960 <a href="https://shopify.com/90871169351/account" class="inline-block link-faded break-all"> 3961 Request return/cancellation / Withdrawal 3962 </a> 3963 </li></ul> 3964 </div><div class="footer__block footer__block--menu" ><p class="bold">BRANDS</p><ul class="v-stack gap-3" role="list"><li> 3965 <a href="/" class="inline-block link-faded break-all">Spinning®</a> 3966 </li><li> 3967 <a href="https://peakpilates.eu/" class="inline-block link-faded break-all">Peak Pilates®</a> 3968 </li><li> 3969 <a href="/collections/crosscore" class="inline-block link-faded break-all">CrossCore®</a> 3970 </li></ul> 3971 </div><div class="footer__block footer__block--menu" ><p class="bold">ABOUT US</p><ul class="v-stack gap-3" role="list"><li> 3972 <a href="/pages/spinning-history" class="inline-block link-faded break-all">Spinning® History</a> 3973 </li><li> 3974 <a href="/pages/legal-trademark" class="inline-block link-faded break-all">Legal & Trademark</a> 3975 </li><li> 3976 <a href="/pages/patents" class="inline-block link-faded break-all">Patents</a> 3977 </li><li> 3978 <a href="/pages/privacy-policy" class="inline-block link-faded break-all">Privacy Policy</a> 3979 </li><li> 3980 <a href="/pages/terms-and-conditions" class="inline-block link-faded break-all">Terms & Conditions</a> 3981 </li><li> 3982 <a href="/pages/press" class="inline-block link-faded break-all">Press</a> 3983 </li><li> 3984 <a href="https://e.issuu.com/embed.html?backgroundColor=%23000000&d=sp_catalog&u=spinning.com" class="inline-block link-faded break-all">Catalog</a> 3985 </li><li> 3986 <a href="https://www.youtube.com/watch?v=sZFrbD9Y36M" class="inline-block link-faded break-all">Brand Video</a> 3987 </li><li> 3988 <a href="/pages/newsletter" class="inline-block link-faded break-all">Newsletter</a> 3989 </li></ul> 3990 </div></div><div class="footer__aside empty:hidden"><div class="footer__aside-top"><ul class="social-media " role="list"><li> 3991 <a href="https://www.facebook.com/Spinning" class="tap-area" target="_blank" rel="noopener" aria-label="Follow on Facebook"><svg role="presentation" focusable="false" width="27" height="27" class="icon icon-facebook" viewB
3991ox="0 0 24 24"> 3992 <path fill-rule="evenodd" clip-rule="evenodd" d="M10.183 21.85v-8.868H7.2V9.526h2.983V6.982a4.17 4.17 0 0 1 4.44-4.572 22.33 22.33 0 0 1 2.667.144v3.084h-1.83a1.44 1.44 0 0 0-1.713 1.68v2.208h3.423l-.447 3.456h-2.97v8.868h-3.57Z" fill="currentColor"/> 3993 </svg></a> 3994 </li><li> 3995 <a href="https://www.instagram.com/spinninghq/" class="tap-area" target="_blank" rel="noopener" aria-label="Follow on Instagram"><svg role="presentation" focusable="false" width="27" height="27" class="icon icon-instagram" viewBox="0 0 24 24"> 3996 <path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.4c-2.607 0-2.934.011-3.958.058-1.022.046-1.72.209-2.33.446a4.705 4.705 0 0 0-1.7 1.107 4.706 4.706 0 0 0-1.108 1.7c-.237.611-.4 1.31-.446 2.331C2.41 9.066 2.4 9.392 2.4 12c0 2.607.011 2.934.058 3.958.046 1.022.209 1.72.446 2.33a4.706 4.706 0 0 0 1.107 1.7c.534.535 1.07.863 1.7 1.108.611.237 1.309.4 2.33.446 1.025.047 1.352.058 3.959.058s2.934-.011 3.958-.058c1.022-.046 1.72-.209 2.33-.446a4.706 4.706 0 0 0 1.7-1.107 4.706 4.706 0 0 0 1.108-1.7c.237-.611.4-1.31.446-2.33.047-1.025.058-1.352.058-3.959s-.011-2.934-.058-3.958c-.047-1.022-.209-1.72-.446-2.33a4.706 4.706 0 0 0-1.107-1.7 4.705 4.705 0 0 0-1.7-1.108c-.611-.237-1.31-.4-2.331-.446C14.934 2.41 14.608 2.4 12 2.4Zm0 1.73c2.563 0 2.867.01 3.88.056.935.042 1.443.199 1.782.33.448.174.768.382 1.104.718.336.336.544.656.718 1.104.131.338.287.847.33 1.783.046 1.012.056 1.316.056 3.879 0 2.563-.01 2.867-.056 3.88-.043.935-.199 1.444-.33 1.782a2.974 2.974 0 0 1-.719 1.104 2.974 2.974 0 0 1-1.103.718c-.339.131-.847.288-1.783.33-1.012.046-1.316.056-3.88.056-2.563 0-2.866-.01-3.878-.056-.936-.042-1.445-.199-1.783-.33a2.974 2.974 0 0 1-1.104-.718 2.974 2.974 0 0 1-.718-1.104c-.131-.338-.288-.847-.33-1.783-.047-1.012-.056-1.316-.056-3.879 0-2.563.01-2.867.056-3.88.042-.935.199-1.443.33-1.782.174-.448.382-.768.718-1.104a2.974 2.974 0 0 1 1.104-.718c.338-.131.847-.288 1.783-.33C9.133 4.14 9.437 4.13 12 4.13Zm0 11.07a3.2 3.2 0 1 1 0-6.4 3.2 3.2 0 0 1 0 6.4Zm0-8.13a4.93 4.93 0 1 0 0 9.86 4.93 4.93 0 0 0 0-9.86Zm6.276-.194a1.152 1.152 0 1 1-2.304 0 1.152 1.152 0 0 1 2.304 0Z" fill="currentColor"/> 3997 </svg></a> 3998 </li><li> 3999 <a href="https://www.youtube.com/@spinning" class="tap-area" target="_blank" rel="noopener" aria-label="Follow on YouTube"><svg role="presentation" focusable="false" width="27" height="27" class="icon icon-youtube" viewBox="0 0 24 24"> 4000 <path fill-rule="evenodd" clip-rule="evenodd" d="M20.44 5.243c.929.244 1.66.963 1.909 1.876.451 1.654.451 5.106.451 5.106s0 3.452-.451 5.106a2.681 2.681 0 0 1-1.91 1.876c-1.684.443-8.439.443-8.439.443s-6.754 0-8.439-.443a2.682 2.682 0 0 1-1.91-1.876c-.45-1.654-.45-5.106-.45-5.106s0-3.452.45-5.106a2.681 2.681 0 0 1 1.91-1.876c1.685-.443 8.44-.443 8.44-.443s6.754 0 8.438.443Zm-5.004 6.982L9.792 15.36V9.091l5.646 3.134Z" fill="currentColor"/> 4001 </svg></a> 4002 </li></ul><div class="h-stack gap-6"><link rel="stylesheet" href="//spinning.eu/cdn/shop/t/9/assets/country-flags.css?v=105120918595178899651788351188" media="print" onload="this.media='all'; this.onload = null"><div class="relative"> 4003 <button type="button" class="text-with-icon gap-2.5 group" aria-label="Change country or currency" aria-controls="popover-localization-form-country--sections--30366605869383__footer" aria-expanded="false"> 4004 <div class="h-stack gap-2"><span class="country-flags country-flags--NL"></span><span class="bold text-sm">Netherlands (EUR â¬)</span> 4005 </div><svg role="presentation" focusable="false" width="10" height="7" class="icon icon-chevron-bottom" viewBox="0 0 10 7"> 4006 <path d="m1 1 4 4 4-4" fill="none" stroke="currentColor" stroke-width="2"></path> 4007 </svg></button> 4008 4009 <x-popover id="popover-localization-form-country--sections--30366605869383__footer" initial-focus="[aria-selected='true']" anchor-horizontal="end" anchor-vertical="start" class="popover"> 4010 <p class="h5" slot="title">Country</p><form method="post" action="/localization" id="localization-form-country--sections--30366605869383__footer" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/cart" /><x-listbox class="popover-listbox popover-listbox--sm" role="listbox"><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AF" >
4011 <span class="country-flags country-flags--AF"></span> 4012 <span>Afghanistan (AFN Ø)</span> 4013 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AL" > 4014 <span class="country-flags country-flags--AL"></span> 4015 <span>Albania (ALL L)</span> 4016 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DZ" > 4017 <span class="country-flags country-flags--DZ"></span> 4018 <span>Algeria (DZD د.ج)</span> 4019 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AD" > 4020 <span class="country-flags country-flags--AD"></span> 4021 <span>Andorra (EUR â¬)</span> 4022 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AO" > 4023 <span class="country-flags country-flags--AO"></span> 4024 <span>Angola (EUR â¬)</span> 4025 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AM" > 4026 <span class="country-flags country-flags--AM"></span> 4027 <span>Armenia (AMD Õ¤Ö.)</span> 4028 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AT" > 4029 <span class="country-flags country-flags--AT"></span> 4030 <span>Austria (EUR â¬)</span> 4031 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AZ" > 4032 <span class="country-flags country-flags--AZ"></span> 4033 <span>Azerbaijan (AZN â¼)</span> 4034 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BH" > 4035 <span class="country-flags country-flags--BH"></span> 4036 <span>Bahrain (EUR â¬)</span> 4037 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BY" > 4038 <span class="country-flags country-flags--BY"></span> 4039 <span>Belarus (EUR â¬)</span> 4040 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BE" > 4041 <span class="country-flags country-flags--BE"></span> 4042 <span>Belgium (EUR â¬)</span> 4043 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BJ" > 4044 <span class="country-flags country-flags--BJ"></span> 4045 <span>Benin (XOF Fr)</span> 4046 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BA" > 4047 <span class="country-flags country-flags--BA"></span> 4048 <span>Bosnia & Herzegovina (BAM ÐÐ)</span> 4049 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BW" > 4050 <span class="country-flags country-flags--BW"></span> 4051 <span>Botswana (BWP P)</span> 4052 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BG" > 4053 <span class="country-flags country-flags--BG"></span> 4054 <span>Bulgaria (EUR â¬)</span> 4055 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BF" > 4056 <span class="country-flags country-flags--BF"></span> 4057 <span>Burkina Faso (XOF Fr)</span> 4058 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="BI" > 4059 <span class="country-flags country-flags--BI"></span> 4060 <span>Burundi (BIF Fr)</span> 4061 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CM" >
4062 <span class="country-flags country-flags--CM"></span> 4063 <span>Cameroon (XAF CFA)</span> 4064 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CV" > 4065 <span class="country-flags country-flags--CV"></span> 4066 <span>Cape Verde (CVE $)</span> 4067 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CF" > 4068 <span class="country-flags country-flags--CF"></span> 4069 <span>Central African Republic (XAF CFA)</span> 4070 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TD" > 4071 <span class="country-flags country-flags--TD"></span> 4072 <span>Chad (XAF CFA)</span> 4073 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="HR" > 4074 <span class="country-flags country-flags--HR"></span> 4075 <span>Croatia (EUR â¬)</span> 4076 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CY" > 4077 <span class="country-flags country-flags--CY"></span> 4078 <span>Cyprus (EUR â¬)</span> 4079 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CZ" > 4080 <span class="country-flags country-flags--CZ"></span> 4081 <span>Czechia (CZK KÄ)</span> 4082 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DK" > 4083 <span class="country-flags country-flags--DK"></span> 4084 <span>Denmark (DKK kr.)</span> 4085 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DJ" > 4086 <span class="country-flags country-flags--DJ"></span> 4087 <span>Djibouti (DJF Fdj)</span> 4088 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="EG" > 4089 <span class="country-flags country-flags--EG"></span> 4090 <span>Egypt (EGP ج.Ù )</span> 4091 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ER" > 4092 <span class="country-flags country-flags--ER"></span> 4093 <span>Eritrea (EUR â¬)</span> 4094 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="EE" > 4095 <span class="country-flags country-flags--EE"></span> 4096 <span>Estonia (EUR â¬)</span> 4097 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ET" > 4098 <span class="country-flags country-flags--ET"></span> 4099 <span>Ethiopia (ETB Br)</span> 4100 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="FI" > 4101 <span class="country-flags country-flags--FI"></span> 4102 <span>Finland (EUR â¬)</span> 4103 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="FR" > 4104 <span class="country-flags country-flags--FR"></span> 4105 <span>France (EUR â¬)</span> 4106 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GA" > 4107 <span class="country-flags country-flags--GA"></span> 4108 <span>Gabon (XOF Fr)</span> 4109 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GM" > 4110 <span class="country-flags country-flags--GM"></span> 4111 <span>Gambia (GMD D)</span> 4112 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GE" >
4113 <span class="country-flags country-flags--GE"></span> 4114 <span>Georgia (EUR â¬)</span> 4115 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="DE" > 4116 <span class="country-flags country-flags--DE"></span> 4117 <span>Germany (EUR â¬)</span> 4118 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GH" > 4119 <span class="country-flags country-flags--GH"></span> 4120 <span>Ghana (EUR â¬)</span> 4121 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GI" > 4122 <span class="country-flags country-flags--GI"></span> 4123 <span>Gibraltar (GBP £)</span> 4124 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GR" > 4125 <span class="country-flags country-flags--GR"></span> 4126 <span>Greece (EUR â¬)</span> 4127 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GN" > 4128 <span class="country-flags country-flags--GN"></span> 4129 <span>Guinea (GNF Fr)</span> 4130 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GW" > 4131 <span class="country-flags country-flags--GW"></span> 4132 <span>Guinea-Bissau (XOF Fr)</span> 4133 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="HU" > 4134 <span class="country-flags country-flags--HU"></span> 4135 <span>Hungary (HUF Ft)</span> 4136 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IS" > 4137 <span class="country-flags country-flags--IS"></span> 4138 <span>Iceland (ISK kr)</span> 4139 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IQ" > 4140 <span class="country-flags country-flags--IQ"></span> 4141 <span>Iraq (EUR â¬)</span> 4142 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IE" > 4143 <span class="country-flags country-flags--IE"></span> 4144 <span>Ireland (EUR â¬)</span> 4145 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IL" > 4146 <span class="country-flags country-flags--IL"></span> 4147 <span>Israel (ILS âª)</span> 4148 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="IT" > 4149 <span class="country-flags country-flags--IT"></span> 4150 <span>Italy (EUR â¬)</span> 4151 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="JO" > 4152 <span class="country-flags country-flags--JO"></span> 4153 <span>Jordan (EUR â¬)</span> 4154 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="KZ" > 4155 <span class="country-flags country-flags--KZ"></span> 4156 <span>Kazakhstan (KZT â¸)</span> 4157 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="KE" > 4158 <span class="country-flags country-flags--KE"></span> 4159 <span>Kenya (KES KSh)</span> 4160 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="KW" > 4161 <span class="country-flags country-flags--KW"></span> 4162 <span>Kuwait (EUR â¬)</span> 4163 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LV" >
4164 <span class="country-flags country-flags--LV"></span> 4165 <span>Latvia (EUR â¬)</span> 4166 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LB" > 4167 <span class="country-flags country-flags--LB"></span> 4168 <span>Lebanon (LBP Ù.Ù)</span> 4169 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LS" > 4170 <span class="country-flags country-flags--LS"></span> 4171 <span>Lesotho (EUR â¬)</span> 4172 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LR" > 4173 <span class="country-flags country-flags--LR"></span> 4174 <span>Liberia (EUR â¬)</span> 4175 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LI" > 4176 <span class="country-flags country-flags--LI"></span> 4177 <span>Liechtenstein (EUR â¬)</span> 4178 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LT" > 4179 <span class="country-flags country-flags--LT"></span> 4180 <span>Lithuania (EUR â¬)</span> 4181 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="LU" > 4182 <span class="country-flags country-flags--LU"></span> 4183 <span>Luxembourg (EUR â¬)</span> 4184 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MG" > 4185 <span class="country-flags country-flags--MG"></span> 4186 <span>Madagascar (EUR â¬)</span> 4187 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MW" > 4188 <span class="country-flags country-flags--MW"></span> 4189 <span>Malawi (MWK MK)</span> 4190 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ML" > 4191 <span class="country-flags country-flags--ML"></span> 4192 <span>Mali (XOF Fr)</span> 4193 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MT" > 4194 <span class="country-flags country-flags--MT"></span> 4195 <span>Malta (EUR â¬)</span> 4196 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MR" > 4197 <span class="country-flags country-flags--MR"></span> 4198 <span>Mauritania (EUR â¬)</span> 4199 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MU" > 4200 <span class="country-flags country-flags--MU"></span> 4201 <span>Mauritius (MUR â¨)</span> 4202 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MC" > 4203 <span class="country-flags country-flags--MC"></span> 4204 <span>Monaco (EUR â¬)</span> 4205 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ME" > 4206 <span class="country-flags country-flags--ME"></span> 4207 <span>Montenegro (EUR â¬)</span> 4208 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MA" > 4209 <span class="country-flags country-flags--MA"></span> 4210 <span>Morocco (MAD د.Ù .)</span> 4211 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MZ" > 4212 <span class="country-flags country-flags--MZ"></span> 4213 <span>Mozambique (EUR â¬)</span> 4214 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NA" >
4215 <span class="country-flags country-flags--NA"></span> 4216 <span>Namibia (EUR â¬)</span> 4217 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NL" aria-selected="true"> 4218 <span class="country-flags country-flags--NL"></span> 4219 <span>Netherlands (EUR â¬)</span> 4220 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NE" > 4221 <span class="country-flags country-flags--NE"></span> 4222 <span>Niger (XOF Fr)</span> 4223 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NG" > 4224 <span class="country-flags country-flags--NG"></span> 4225 <span>Nigeria (NGN â¦)</span> 4226 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="MK" > 4227 <span class="country-flags country-flags--MK"></span> 4228 <span>North Macedonia (MKD ден)</span> 4229 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="NO" > 4230 <span class="country-flags country-flags--NO"></span> 4231 <span>Norway (CHF CHF)</span> 4232 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="OM" > 4233 <span class="country-flags country-flags--OM"></span> 4234 <span>Oman (EUR â¬)</span> 4235 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="PK" > 4236 <span class="country-flags country-flags--PK"></span> 4237 <span>Pakistan (PKR â¨)</span> 4238 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="PL" > 4239 <span class="country-flags country-flags--PL"></span> 4240 <span>Poland (PLN zÅ)</span> 4241 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="PT" > 4242 <span class="country-flags country-flags--PT"></span> 4243 <span>Portugal (EUR â¬)</span> 4244 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="QA" > 4245 <span class="country-flags country-flags--QA"></span> 4246 <span>Qatar (QAR ر.Ù)</span> 4247 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RO" > 4248 <span class="country-flags country-flags--RO"></span> 4249 <span>Romania (RON Lei)</span> 4250 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RU" > 4251 <span class="country-flags country-flags--RU"></span> 4252 <span>Russia (EUR â¬)</span> 4253 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RW" > 4254 <span class="country-flags country-flags--RW"></span> 4255 <span>Rwanda (RWF FRw)</span> 4256 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SM" > 4257 <span class="country-flags country-flags--SM"></span> 4258 <span>San Marino (EUR â¬)</span> 4259 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SA" > 4260 <span class="country-flags country-flags--SA"></span> 4261 <span>Saudi Arabia (SAR ر.س)</span> 4262 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SN" > 4263 <span class="country-flags country-flags--SN"></span> 4264 <span>Senegal (XOF Fr)</span> 4265 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="RS" >
4266 <span class="country-flags country-flags--RS"></span> 4267 <span>Serbia (RSD РСÐ)</span> 4268 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SL" > 4269 <span class="country-flags country-flags--SL"></span> 4270 <span>Sierra Leone (SLL Le)</span> 4271 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SK" > 4272 <span class="country-flags country-flags--SK"></span> 4273 <span>Slovakia (EUR â¬)</span> 4274 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SI" > 4275 <span class="country-flags country-flags--SI"></span> 4276 <span>Slovenia (EUR â¬)</span> 4277 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SO" > 4278 <span class="country-flags country-flags--SO"></span> 4279 <span>Somalia (EUR â¬)</span> 4280 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ZA" > 4281 <span class="country-flags country-flags--ZA"></span> 4282 <span>South Africa (EUR â¬)</span> 4283 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ES" > 4284 <span class="country-flags country-flags--ES"></span> 4285 <span>Spain (EUR â¬)</span> 4286 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SD" > 4287 <span class="country-flags country-flags--SD"></span> 4288 <span>Sudan (EUR â¬)</span> 4289 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="SE" > 4290 <span class="country-flags country-flags--SE"></span> 4291 <span>Sweden (SEK kr)</span> 4292 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="CH" > 4293 <span class="country-flags country-flags--CH"></span> 4294 <span>Switzerland (CHF CHF)</span> 4295 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TJ" > 4296 <span class="country-flags country-flags--TJ"></span> 4297 <span>Tajikistan (TJS Ð Ð)</span> 4298 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TZ" > 4299 <span class="country-flags country-flags--TZ"></span> 4300 <span>Tanzania (TZS Sh)</span> 4301 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TG" > 4302 <span class="country-flags country-flags--TG"></span> 4303 <span>Togo (XOF Fr)</span> 4304 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TN" > 4305 <span class="country-flags country-flags--TN"></span> 4306 <span>Tunisia (EUR â¬)</span> 4307 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TR" > 4308 <span class="country-flags country-flags--TR"></span> 4309 <span>Türkiye (EUR â¬)</span> 4310 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="TM" > 4311 <span class="country-flags country-flags--TM"></span> 4312 <span>Turkmenistan (EUR â¬)</span> 4313 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="UG" > 4314 <span class="country-flags country-flags--UG"></span> 4315 <span>Uganda (UGX USh)</span> 4316 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="UA" >
4317 <span class="country-flags country-flags--UA"></span> 4318 <span>Ukraine (UAH â´)</span> 4319 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="AE" > 4320 <span class="country-flags country-flags--AE"></span> 4321 <span>United Arab Emirates (AED د.Ø¥)</span> 4322 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="GB" > 4323 <span class="country-flags country-flags--GB"></span> 4324 <span>United Kingdom (GBP £)</span> 4325 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="VA" > 4326 <span class="country-flags country-flags--VA"></span> 4327 <span>Vatican City (EUR â¬)</span> 4328 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="EH" > 4329 <span class="country-flags country-flags--EH"></span> 4330 <span>Western Sahara (MAD د.Ù .)</span> 4331 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="YE" > 4332 <span class="country-flags country-flags--YE"></span> 4333 <span>Yemen (YER ï·¼)</span> 4334 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ZM" > 4335 <span class="country-flags country-flags--ZM"></span> 4336 <span>Zambia (EUR â¬)</span> 4337 </button><button type="submit" class="popover-listbox__option" name="country_code" role="option" value="ZW" > 4338 <span class="country-flags country-flags--ZW"></span> 4339 <span>Zimbabwe (USD $)</span> 4340 </button></x-listbox></form></x-popover> 4341 </div><div class="relative"> 4342 <button type="button" class="text-with-icon gap-2.5 group" aria-label="Change language" aria-controls="popover-localization-form-locale--sections--30366605869383__footer" aria-expanded="false"> 4343 <span class="bold text-sm">English</span><svg role="presentation" focusable="false" width="10" height="7" class="icon icon-chevron-bottom" viewBox="0 0 10 7"> 4344 <path d="m1 1 4 4 4-4" fill="none" stroke="currentColor" stroke-width="2"></path> 4345 </svg></button> 4346 4347 <x-popover id="popover-localization-form-locale--sections--30366605869383__footer" initial-focus="[aria-selected='true']" anchor-horizontal="end" anchor-vertical="start" class="popover"> 4348 <p class="h5" slot="title">Language</p><form method="post" action="/localization" id="localization-form-locale--sections--30366605869383__footer" accept-charset="UTF-8" class="shopify-localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/cart" /><x-listbox class="popover-listbox popover-listbox--sm" role="listbox"><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="en" aria-selected="true">English</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="es" >Español</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="de" >Deutsch</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="nl" >Nederlands</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="fr" >Français</button><button type="submit" class="popover-listbox__option" name="locale_code" role="option" value="it" >Italiano</button></x-listbox></form></x-popover> 4349 </div></div></div><div class="footer__aside-bottom"><div class="footer__copyright v-stack gap-1"> 4350 <p class="text-sm text-subdued">© 2026, Spinning EU. <a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=p
4350oweredby&utm_medium=shopify&utm_source=onlinestore">Powered by Shopify</a></p></div> 4351 </div> 4352 </div> 4353 </div> 4354 </div> 4355</div> 4356 4357<style> #shopify-section-sections--30366605869383__footer .footer {background-color: #000000;} #shopify-section-sections--30366605869383__footer a {font-weight: 500; font-size:14px;} </style></footer> 4358<!-- END sections: footer-group --></main> 4359 4360<!-- MDA_EU_WITHDRAWAL_START --> 4361<style> 4362 .mda-eu-withdrawal-policy { max-width: 920px; margin: 32px auto; padding: 28px; border: 1px solid rgba(0,0,0,.12); background: #fff; color: #1f1f1f; } 4363 .mda-eu-withdrawal-policy h2 { margin: 0 0 14px; font-size: clamp(24px, 3vw, 34px); line-height: 1.12; text-transform: none; } 4364 .mda-eu-withdrawal-policy p { margin: 0 0 14px; } 4365 .mda-eu-withdrawal-policy__button { display: inline-flex; align-items: center; justify-content: center; margin-top: 8px; padding: 12px 18px; background: #000; color: #fff !important; text-decoration: none; font-weight: 700; letter-spacing: .02em; } 4366 .mda-eu-withdrawal-footer { margin-top: .65rem; } 4367 .mda-eu-withdrawal-footer a, [data-mda-eu-withdrawal-link] a { color: inherit; text-decoration: underline; text-underline-offset: .18em; } 4368</style>
4369<script> 4370(function() { 4371 var COPY = {"en":{"footer":"Returns & cancellations / Withdrawal","title":"Return and refund policy","html":"<h2>Returns, cancellations and EU right of withdrawal</h2> 4372<p>If you are an EU consumer, you may cancel an unfulfilled order or withdraw from a delivered order within 14 days from delivery of the last item, unless a legal exception applies.</p> 4373<p>Use the return/cancellation link in your customer account. Shopify will send an automatic confirmation and we will review the request before approving any cancellation, return or refund.</p> 4374<p>Products must be returned complete, clean, undamaged, not used beyond what is necessary to inspect them, and with all accessories and manuals. Please use the original packaging whenever possible. For bikes/equipment, the original packaging or equivalent protective packaging is required for safe transport. If the product, accessories or packaging are damaged, incomplete, or handled beyond what is necessary for inspection, we may reduce the refund to reflect the loss in value.</p> 4375<p>Unless the product is faulty, incorrectly supplied, or applicable law requires otherwise, return shipping/collection costs and damage caused by inadequate return packaging are the customerâs responsibility.</p> 4376<p>Approved refunds are issued to the original payment method. We may withhold reimbursement until we have received the goods back or you have provided proof of return shipment. Standard outbound delivery costs are refunded where legally required; upgraded delivery or extra services are not refundable.</p> 4377<p>This policy does not affect your statutory rights.</p>","button":"Start a return or cancellation request","accountIntro":"You can submit a return or cancellation request from your customer account."},"es":{"footer":"Devoluciones y cancelaciones / desistimiento","title":"PolÃtica de devoluciones y reembolsos","html":"<h2>Devoluciones, cancelaciones y derecho de desistimiento en la UE</h2> 4378<p>Si eres consumidor de la UE, puedes cancelar un pedido no preparado o ejercer tu derecho de desistimiento de un pedido entregado dentro de los 14 dÃas desde la entrega del último artÃculo, salvo que aplique una excepción legal.</p> 4379<p>Usa el enlace de devolución/cancelación en tu cuenta de cliente. Shopify enviará una confirmación automática y revisaremos la solicitud antes de aprobar cualquier cancelación, devolución o reembolso.</p> 4380<p>Los productos deben devolverse completos, limpios, sin daños, sin un uso superior al necesario para comprobarlos, y con todos sus accesorios y manuales. Usa el embalaje original siempre que sea posible. Para bicicletas/equipos, se requiere el embalaje original o un embalaje protector equivalente para un transporte seguro. Si el producto, los accesorios o el embalaje están dañados, incompletos o han sido manipulados más allá de lo necesario para su comprobación, podremos reducir el reembolso para reflejar la pérdida de valor.</p> 4381<p>Salvo que el producto sea defectuoso, incorrecto o la ley aplicable disponga otra cosa, los costes de devolución/recogida y los daños causados por un embalaje de devolución inadecuado son responsabilidad del cliente.</p> 4382<p>Los reembolsos aprobados se realizan al método de pago original. Podemos retener el reembolso hasta recibir los productos o hasta que aportes una prueba de envÃo de la devolución. Los gastos de envÃo estándar originales se reembolsarán cuando la ley lo exija; los servicios de entrega mejorados o adicionales no son reembolsables.</p> 4383<p>Esta polÃtica no afecta a tus derechos legales.</p>","button":"Iniciar una solicitud de devolución o cancelación","accountIntro":"Puedes enviar una solicitud de devolución o cancelación desde tu cuenta de cliente."},"fr":{"footer":"Retours et annulations / rétractation","title":"Politique de retours et remboursements","html":"<h2>Retours, annulations et droit de rétractation dans lâUE</h2> 4384<p>Si vous êtes un consommateur de lâUE, vous pouvez annuler une commande non préparée ou exercer votre droit de rétractation pour une commande livrée dans un délai de 14 jours à compter de la livraison du dernier article, sauf exception légale applicable.</p> 4385<p>Utilisez le lien de retour/annulation dans votre compte client. Shopify enverra une confirmation automatique et nous examinerons la demande avant dâapprouver toute annulation, retour ou remboursement.</p> 4386<p>Les produits doivent être retournés complets, propres, non endommagés, sans utilisation au-delà de ce qui est nécessaire pour les inspecter, et avec tous les accessoires et manuels. Veuillez utiliser lâemballage dâorigine chaque fois que possible. Pour les vélos/équipements, lâemballage dâorigine ou un emballage protecteur équivalent est requis pour un transport sûr. Si le produit, les accessoires ou lâemballage sont endommagés, incomplets ou manipulés au-delà de ce qui est nécessaire à lâinspection, nous pouvons rédu
4386ire le remboursement pour refléter la perte de valeur.</p> 4387<p>Sauf si le produit est défectueux, incorrectement fourni, ou si la loi applicable lâexige autrement, les frais de retour/enlèvement et les dommages causés par un emballage de retour insuffisant sont à la charge du client.</p> 4388<p>Les remboursements approuvés sont effectués sur le moyen de paiement initial. Nous pouvons différer le remboursement jusquâà réception des biens ou jusquâà ce que vous fournissiez une preuve dâexpédition du retour. Les frais de livraison standard initiaux sont remboursés lorsque la loi lâexige ; les services de livraison améliorés ou supplémentaires ne sont pas remboursables.</p> 4389<p>Cette politique nâaffecte pas vos droits légaux.</p>","button":"Démarrer une demande de retour ou dâannulation","accountIntro":"Vous pouvez envoyer une demande de retour ou dâannulation depuis votre compte client."},"de":{"footer":"Rückgaben und Stornierungen / Widerruf","title":"Rückgabe- und Erstattungsrichtlinie","html":"<h2>Rückgaben, Stornierungen und EU-Widerrufsrecht</h2> 4390<p>Wenn Sie Verbraucher in der EU sind, können Sie eine noch nicht erfüllte Bestellung stornieren oder bei einer gelieferten Bestellung innerhalb von 14 Tagen ab Lieferung des letzten Artikels widerrufen, sofern keine gesetzliche Ausnahme gilt.</p> 4391<p>Nutzen Sie den Rückgabe-/Stornierungslink in Ihrem Kundenkonto. Shopify sendet eine automatische Bestätigung, und wir prüfen die Anfrage, bevor eine Stornierung, Rückgabe oder Erstattung genehmigt wird.</p> 4392<p>Produkte müssen vollständig, sauber, unbeschädigt, nicht über das zur Prüfung erforderliche Maà hinaus benutzt und mit allem Zubehör sowie allen Handbüchern zurückgegeben werden. Bitte verwenden Sie nach Möglichkeit die Originalverpackung. Für Fahrräder/Geräte ist die Originalverpackung oder eine gleichwertige Schutzverpackung für einen sicheren Transport erforderlich. Wenn Produkt, Zubehör oder Verpackung beschädigt, unvollständig oder über das zur Prüfung erforderliche Maà hinaus behandelt wurden, können wir die Erstattung entsprechend dem Wertverlust reduzieren.</p> 4393<p>Sofern das Produkt nicht mangelhaft oder falsch geliefert wurde oder das anwendbare Recht nichts anderes vorschreibt, trägt der Kunde die Rücksende-/Abholkosten sowie Schäden, die durch unzureichende Rücksendeverpackung entstehen.</p> 4394<p>Genehmigte Erstattungen erfolgen auf die ursprüngliche Zahlungsmethode. Wir können die Rückzahlung zurückhalten, bis wir die Waren zurückerhalten haben oder Sie einen Nachweis über die Rücksendung erbracht haben. Standardversandkosten der ursprünglichen Lieferung werden erstattet, soweit gesetzlich vorgeschrieben; verbesserte Lieferdienste oder Zusatzleistungen sind nicht erstattungsfähig.</p> 4395<p>Diese Richtlinie berührt Ihre gesetzlichen Rechte nicht.</p>","button":"Rückgabe oder Stornierung beantragen","accountIntro":"Sie können eine Rückgabe- oder Stornierungsanfrage über Ihr Kundenkonto senden."},"it":{"footer":"Resi e cancellazioni / recesso","title":"Politica di resi e rimborsi","html":"<h2>Resi, cancellazioni e diritto di recesso nellâUE</h2> 4396<p>Se sei un consumatore dellâUE, puoi cancellare un ordine non ancora evaso o esercitare il diritto di recesso per un ordine consegnato entro 14 giorni dalla consegna dellâultimo articolo, salvo eventuali eccezioni di legge.</p> 4397<p>Usa il link per reso/cancellazione nel tuo account cliente. Shopify invierà una conferma automatica e noi esamineremo la richiesta prima di approvare qualsiasi cancellazione, reso o rimborso.</p> 4398<p>I prodotti devono essere restituiti completi, puliti, non danneggiati, non utilizzati oltre quanto necessario per ispezionarli, e con tutti gli accessori e manuali. Ti chiediamo di utilizzare lâimballaggio originale ogni volta che sia possibile. Per biciclette/attrezzature, lâimballaggio originale o un imballaggio protettivo equivalente è richiesto per un trasporto sicuro. Se il prodotto, gli accessori o lâimballaggio sono danneggiati, incompleti o manipolati oltre quanto necessario per lâispezione, potremo ridurre il rimborso per riflettere la perdita di valore.</p> 4399<p>Salvo che il prodotto sia difettoso, fornito in modo errato o la legge applicabile preveda diversamente, i costi di reso/ritiro e i danni causati da un imballaggio di reso inadeguato sono a carico del cliente.</p> 4400<p>I rimborsi approvati vengono effettuati sul metodo di pagamento originale. Possiamo trattenere il rimborso fino alla ricezione dei beni o fino a quando fornisci prova della spedizione del reso. I costi di consegna standard iniziali sono rimborsati quando richiesto dalla legge; servizi di consegna migliorati o aggiuntivi non sono rimborsabili.</p> 4401<p>Questa politica non pregiudica i tuoi diritti di legge.</p>","button":"Avvia una richiesta di reso o cancellazione","accountIntro":"Puoi inviare una richiesta di reso o cancellazione dal tuo account cliente."}
4401,"nl":{"footer":"Retouren en annuleringen / herroeping","title":"Retour- en terugbetalingsbeleid","html":"<h2>Retouren, annuleringen en EU-herroepingsrecht</h2> 4402<p>Als je een EU-consument bent, kun je een nog niet verwerkte bestelling annuleren of je herroepingsrecht uitoefenen voor een geleverde bestelling binnen 14 dagen vanaf de levering van het laatste artikel, tenzij een wettelijke uitzondering van toepassing is.</p> 4403<p>Gebruik de retour-/annuleringslink in je klantaccount. Shopify stuurt een automatische bevestiging en wij beoordelen het verzoek voordat een annulering, retour of terugbetaling wordt goedgekeurd.</p> 4404<p>Producten moeten compleet, schoon, onbeschadigd, niet verder gebruikt dan nodig is om ze te inspecteren, en met alle accessoires en handleidingen worden geretourneerd. Gebruik waar mogelijk de originele verpakking. Voor fietsen/apparatuur is de originele verpakking of gelijkwaardige beschermende verpakking vereist voor veilig transport. Als het product, de accessoires of de verpakking beschadigd of incompleet zijn, of verder zijn behandeld dan nodig is voor inspectie, kunnen wij de terugbetaling verminderen om het waardeverlies weer te geven.</p> 4405<p>Tenzij het product defect of verkeerd geleverd is, of toepasselijke wetgeving anders vereist, zijn retour-/ophaalkosten en schade veroorzaakt door onvoldoende retourverpakking de verantwoordelijkheid van de klant.</p> 4406<p>Goedgekeurde terugbetalingen worden uitgevoerd naar de oorspronkelijke betaalmethode. Wij kunnen de terugbetaling uitstellen totdat wij de goederen hebben ontvangen of totdat je bewijs van retourzending hebt verstrekt. Standaardkosten voor de oorspronkelijke levering worden terugbetaald wanneer dit wettelijk vereist is; verbeterde levering of extra diensten worden niet terugbetaald.</p> 4407<p>Dit beleid doet geen afbreuk aan je wettelijke rechten.</p>","button":"Start een retour- of annuleringsverzoek","accountIntro":"Je kunt een retour- of annuleringsverzoek indienen via je klantaccount."}}; 4408 var ACCOUNT_URL = "https://shopify.com/90871169351/account"; 4409 var MARKER_ID = 'returns-cancellations-withdrawal'; 4410 function locale() { var raw = (window.Shopify && Shopify.locale) || document.documentElement.getAttribute('lang') || 'en'; raw = String(raw).toLowerCase().split('-')[0]; return COPY[raw] ? raw : 'en'; } 4411 function t() { return COPY[locale()] || COPY.en; } 4412 function esc(s) { return String(s || '').replace(/[&<>"']/g, function(c) { return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]; }); } 4413 function rootUrl() { var root = '/'; try { root = (window.Shopify && Shopify.routes && Shopify.routes.root) || '/' || '/'; } catch (e) {} if (!root) root = '/'; if (root.charAt(root.length - 1) !== '/') root += '/'; return root; } 4414 function infoUrl() { return rootUrl() + 'pages/order-faqs#' + MARKER_ID; } 4415 function addFooterLink() { 4416 var copy = t(); var footer = document.querySelector('footer') || document.querySelector('#shopify-section-footer') || document.querySelector('[id*=footer]'); 4417 if (!footer || footer.querySelector('[data-mda-eu-withdrawal-link]')) return; 4418 var faq = footer.querySelector('a[href*="/pages/order-faqs"]'); 4419 if (faq && faq.parentElement && faq.parentElement.tagName && faq.parentElement.tagName.toLowerCase() === 'li') { var li = document.createElement('li'); li.setAttribute('data-mda-eu-withdrawal-link', ''); li.innerHTML = '<a href="' + esc(infoUrl()) + '">' + esc(copy.footer) + '</a>'; faq.parentElement.insertAdjacentElement('afterend', li); return; } 4420 var wrap = document.createElement('div'); wrap.className = 'mda-eu-withdrawal-footer'; wrap.setAttribute('data-mda-eu-withdrawal-link', ''); wrap.innerHTML = '<a href="' + esc(infoUrl()) + '">' + esc(copy.footer) + '</a>'; footer.appendChild(wrap); 4421 } 4422 function renderPolicyBlock() { 4423 var path = window.location.pathname.replace(/\/$/, ''); if (!/\/pages\/order-faqs$/.test(path)) return; if (document.getElementById(MARKER_ID)) return; 4424 var copy = t(); var section = document.createElement('section'); section.id = MARKER_ID; section.className = 'mda-eu-withdrawal-policy'; 4425 section.innerHTML = copy.html + '<p>' + esc(copy.accountIntro) + '</p><p><a class="mda-eu-withdrawal-policy__button" href="' + esc(ACCOUNT_URL) + '">' + esc(copy.button) + '</a></p>'; 4426 var main = document.querySelector('main') || document.querySelector('#MainContent') || document.body; main.insertBefore(section, main.firstChild); 4427 if (window.location.hash === '#' + MARKER_ID) setTimeout(function() { section.scrollIntoView({ block: 'start' }); }, 80); 4428 }
4429 function init() { addFooterLink(); renderPolicyBlock(); } 4430 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init); else init(); 4431})(); 4432</script>
4432 4433<!-- MDA_EU_WITHDRAWAL_END --> 4434<style> .button {background-color: #000000; color: #ffffff; letter-spacing: 2px; font-weight: 200; text-transform: capitalize !important;} .image-with-text-overlay {margin-top: 2px;} .product-info__sku {font-size:14px;} </style> 4435<div id="shopify-block-AakNoTzR0N0NkN3Z2W__11532412952436166569" class="shopify-block shopify-app-block"> 4436 4437 4438 <!-- __LXV: 1789461825802;__LXR: https://loox.io;__LXC: _XrwNy4cUp; -->
4438<script>var loox_global_hash = '1789461825802'; 4439var loox_bundle_reviews_enabled = false;</script>
4439<style>.loox-reviews-default { max-width: 1200px; margin: 0 auto; }.loox-rating .loox-icon { color:#EBBF20; } 4440:root { --lxs-rating-icon-color: #EBBF20; }</style> 4441 4442 4443 4444 4445 4446 4447 4448</div>
4448<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
4448 4449</body> 4450</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.