PageSourceSearch

https://approvedcycling.com/assets/index-DDAMwjJi.js

js approvedcycling.com collected 2026-09-25 04:58:57 UTC 355,141 bytes, 207 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BsJNhvVh.js","assets/i18n-ihZqhrc0.js","assets/vendor-C04vJPsG.js","assets/query-BmvMDath.js","assets/router-B4yW8KeN.js","assets/ui-Bapdov8S.js","assets/motion-0KOHo2FU.js","assets/batch2Overrides-Bp76LU_3.js","assets/keyAliases-DLjCq5u_.js","assets/index-Cam1lWK5.js","assets/myBunch-C_KnRSp4.js","assets/growthMachine-DVq5BHEu.js","assets/betaRideOverrides-DaWoAdcH.js","assets/socialGraphOverrides-Btkww4VK.js","assets/letsRideSlOverrides-CmLuD52z.js","assets/letsRideSlPolishOverrides-DZS9xzNa.js","assets/client-DdmAFbQ5.js","assets/tslib.es6-eMSY344_.js","assets/rideContentUrl-DeDmW3GL.js","assets/events-BIZUDMla.js","assets/RequireAuth-BE2VWdMn.js","assets/useLocalizedPath-arPTpLPN.js","assets/RequireClubConsent-DGGGq3Dl.js","assets/useClubMembership-BDig4kGl.js","assets/useClubRideConsent-BHZHUrK7.js","assets/dialog-Do-Za5A8.js","assets/index-Cp1oxHzu.js","assets/index-D_DOLP4U.js","assets/x-RXnnznVP.js","assets/createLucideIcon-DZL7XTw-.js","assets/button-UJcix7WD.js","assets/index-vjSr7hyW.js","assets/checkbox-CoekOJGb.js","assets/index-B1TKY7Dn.js","assets/check-qBl4c0sL.js","assets/input-CjlAO9nc.js","assets/label-ByU_TV6v.js","assets/shield-alert-B8pw6MVB.js","assets/arrow-right-TiqmH-9T.js","assets/RequireClubMember-D9-G8wgu.js","assets/useIsAdmin-BhIy0gaq.js","assets/AccountShell-Cg_CQvv7.js","assets/useFocusTrap-37gGiwvt.js","assets/useDashboardNotifications-CzHq9r0k.js","assets/PhasePasswordGate-SOeTt1Lk.js","assets/chevron-right-B5eh2VQY.js","assets/circle-dollar-sign-BdwXDlgZ.js","assets/users-ry_94Wc7.js","assets/shield-check-DZIUiNE1.js","assets/file-text-Cft5OOCH.js","assets/chart-column-CBgKUMkO.js","assets/settings-BQigpwww.js","assets/arrow-left-jF16gdcY.js","assets/RequireAdmin-DWLgmvt-.js","assets/dropdown-menu-BdA67kmZ.js","assets/index-CLeiKM8v.js","assets/index-Tt1wjO87.js","assets/circle-QWOGUO3w.js","assets/route-Bj415wnL.js","assets/package-_Muq2cI7.js","assets/user-sdaXCII0.js","assets/chevron-down-CIMDReZy.js","assets/lock-CjsvAkuG.js","assets/calendar-nI4dJcdj.js","assets/image-B1Fjw6xd.js","assets/bike-BVQ5pIg6.js","assets/activity-TAkH15jk.js","assets/sparkles-ivpMSwAc.js","assets/bookmark-qgFmOa8u.js","assets/apple-COjG7JfT.js","assets/gauge-RVJjPBMm.js","assets/zap-DiA04ikS.js","assets/tag-3Xx2iH1M.js","assets/heart-RXndjjoq.js","assets/shopping-cart-DoUfxx8x.js","assets/trophy-7kRh6jrf.js","assets/gift-CUaBXtmG.js","assets/shirt-CmgxdGJ3.js","assets/message-square-KL-UhQXe.js","assets/wrench-f3MWD6Em.js","assets/Index-CpTUZr_9.js","assets/Navbar-CW4VXVdl.js","assets/activeLanguage-Bu8AruQz.js","assets/formatMoney-DdHexnJZ.js","assets/badge-De_lOOvh.js","assets/shippingPolicy-Du6eOEOl.js","assets/LocalizedLink-BK5DMr_M.js","assets/globe-B8XCjpJ9.js","assets/search-CJHVNKO8.js","assets/NotFound-KrM9Wq6S.js","assets/Footer-BNkhSb0V.js","assets/InstagramGlyph-BFW_i1El.js","assets/LegacyRedirect-BNYsI3pZ.js","assets/LegacyCollectionFacetRedirect-DE-UDdif.js","assets/ProductDetail-BxvOiX8T.js","assets/sanitizeHtml-DPit_Skb.js","assets/merchantPolicies-B6caGwO-.js","assets/SummerSetupCallout-IpSMQPf3.js","assets/compareStore-NPnbkEfe.js","assets/slider-CzOp6mb1.js","assets/index-BdQq_4o_.js","assets/skeleton-Dc4JUjwe.js","assets/shopping-bag-BM4sbWEW.js","assets/loader-circle-DEb5QqH3.js","assets/arrow-up-right-BHwBrRsV.js","assets/scale-JJRjtcPu.js","assets/productCategory-BvGOzxfN.js","assets/productMetafields-BuknK7hj.js","assets/LoadError-UM2PZtgW.js","assets/chevron-left-UfWLFGSU.js","assets/truck-DBQtJQrv.js","assets/bell-ring-AZ0-PT9g.js","assets/map-pin-BNnbh0AP.js","assets/ruler-C6NxEcki.js","assets/ClubPriceBadge-BcMap0Fz.js","assets/message-circle-question-mark-Cm_8Jt5-.js","assets/rotate-ccw-CHtSzu7I.js","assets/productGender-DERWK3l0.js","assets/target-Cf8VUZv2.js","assets/thermometer-Bb7oI0Ph.js","assets/wind-a-erkqzS.js","assets/shield-D1AmIHdJ.js","assets/eye-deD4nv6x.js","assets/sun-BI6PCTAi.js","assets/layers-DQXBiu-0.js","assets/trending-up-uQM0Guvc.js","assets/circle-dot-DzALxhVJ.js","assets/mountain-HQVzyrk9.js","assets/message-circle-CujIolYi.js","assets/star-
1B6Td2DK6.js","assets/settings-2-Cbvc8zVY.js","assets/RelatedToolsBlock-Dp-rn7Wx.js","assets/flame-DdfveSmL.js","assets/list-checks-D6Nd4xyF.js","assets/RelatedBuildsBlock-CQDkNQtv.js","assets/BuildCard-CeWJclIA.js","assets/AskApprovedCTA-jnxh--kE.js","assets/builds-D7k3dwqf.js","assets/pinarello-dogma-f-blue-CTGYxiaJ.js","assets/nich-faith-cc-red-Dp9UxH2X.js","assets/nich-faith-white-DvWrlYsc.js","assets/pinarello-x5-sand-BTtc10zm.js","assets/accordion-CaKl3doI.js","assets/FAQBlock-Cdku_gjS.js","assets/circle-alert-CuIyx9Ub.js","assets/CollectionPage-DOTyTRgm.js","assets/book-open-q2Z8wgL1.js","assets/use-toast-CHJ54OWu.js","assets/useRiderKit-DI7mKMmG.js","assets/cyclist-outline-women-CSD7BCgs.js","assets/zoom-in-CD3CYh9v.js","assets/zoom-out-DkPhojxe.js","assets/plus-C1xG6yyh.js","assets/minus-CvlKXyOu.js","assets/EditorialLinkBlock-BH5GPlmh.js","assets/customBuildGuides-Cxtg4STc.js","assets/compass-DrZZZiRw.js","assets/CustomBuildPortfolio-BwJqJvlS.js","assets/sliders-horizontal-BSULb08C.js","assets/BikeFitFixer-Dolyp26A.js","assets/requiredFields-Do8BzMOM.js","assets/select-BiFBRY6e.js","assets/chevron-up-jcfqP44_.js","assets/ToolFormShell-kgbEzd91.js","assets/useLocalizedMeta-CRAxa9R4.js","assets/staticPagesMeta-d_gZDB-J.js","assets/toolAnalytics-D6RqGj2w.js","assets/GrowthMachineRail-DaCxpk0y.js","assets/nextStepMap-CLTVqnEq.js","assets/mail-Cwjud4wv.js","assets/FeaturedBanner-qumuLtXn.js","assets/SaveResultBlock-BHrDEeJ7.js","assets/send-oIFORDm1.js","assets/BreadcrumbJsonLd-CASqkI4l.js","assets/ToolNextStepBlock-DsamdOPo.js","assets/OrganicCtaBlock-BO83R1m2.js","assets/ctas-DjjfFfd8.js","assets/TirePressureCalculator-fzuMmlGq.js","assets/RideFuelCalculator-B8it_SbB.js","assets/lazyBundle-CSXWmrxP.js","assets/save-lgQUL-lx.js","assets/TrainingPlanGenerator-Djp84Wte.js","assets/textarea-D0eRW3_S.js","assets/circle-check-CVLDeWzk.js","assets/WheelRecommendation-Dxf8VLG1.js","assets/ExpertCheckCTA-vD7xP12z.js","assets/WheelRecommendationThankYou-DHbB7lHY.js","assets/CustomBikeBuild-DDTG1KWK.js","assets/CustomBuildThankYou-CcVkAdzd.js","assets/CustomBuildLibrary-CONweZr3.js","assets/PageMeta-BmUkDjMF.js","assets/BuildOfTheMonthBlock-DwwuWL4_.js","assets/StartYourBuildCTA-DV4MRHjG.js","assets/BuildStory-k1r4lVTG.js","assets/RiderStories-Dhaygals.js","assets/BuyingGuide-DFd8dq8N.js","assets/sections-lLhUrRzf.js","assets/triangle-alert-C-vYwkxs.js","assets/buyingGuides-CVpdoR1D.js","assets/Phase5ProductGuide-D8duPZeo.js","assets/batch1-CkL2NvQ6.js","assets/BuyingGuidesIndex-BELQsUjr.js","assets/Comparison-vIjWflF8.js","assets/comparisons-CHAL1Jdu.js","assets/ComparisonsIndex-bgdTNwb-.js","assets/AskApproved-BovoRAqV.js","assets/submitLead-B0tF1Fy9.js","assets/types-BRVS20bW.js","assets/AskApprovedThankYou-55mUMsgn.js","assets/ThankYouNextSteps-CfABIdKt.js","assets/UpgradeFinder-B_P2YvuL.js","assets/UpgradeFinderThankYou-SAi3O2FX.js","assets/BikeFitFixerThankYou-BxrNu3c6.js","assets/AdminOverview-2x4i-mvl.js","assets/AdminSalesHome-CL1ZDsBO.js","assets/AdminCustomersHome-D8NT_0v-.js","assets/inbox-BAHgf3fG.js","assets/AdminClubHome-D32GFbUB.js","assets/ticket-BZqic_Ck.js","assets/AdminContentHome-iY0DDehE.js","assets/megaphone-DXhuKxYI.js","assets/AdminGrowthHome-C3Foibai.js","assets/refresh-cw-B4-jrSbx.js","assets/circle-dashed-DGMt-HvS.js","assets/map-DF5ka8lj.js","assets/link-2-DRaPl-gT.js","assets/AdminSystemHome-RpsTUJUH.js","assets/webhook-yOA6ahZW.js","assets/package-check-BMq4331H.js","assets/AdminLeads-CX-5ZC3f.js","assets/table-BTRV9paB.js","assets/DashboardSurface-D7bVojo9.js","assets/sheet-B_o-i3Dy.js","assets/copy-CyvAMq7e.js","assets/external-link-BhvUCOWF.js","assets/AdminPublishBlogArticle-DI1Ki8nm.js","assets/AdminCanonicalProductLinks-DSrlv_rB.js","assets/card-BQHl_sYZ.js","assets/download-DHfr95Wd.js","assets/SecondRideBrowse-Bt9dgN9Y.js","assets/SecondRideSeoHead-hRwb5s6e.js","assets/photos-iaVh-qCp.js","assets/categorySeo-9D757iy0.js","assets/image-off-CjRtluvF.js","assets/filters-muL8Mrfn.js","assets/useSecondRidePhotoUrls-CDR0yrLp.js","assets/funnel-BGTqhohm.js","assets/circle-plus-BOzxMCOV.js","assets/SecondRideCategoryPage-DPsnn50m.js","assets/SecondRideListing-B3WEM3Cm.js","assets/useSecondRideSeller-dMN90K4r.js","assets/flag-CvjAjFd_.js","assets/useSecondRideListing-CIkhKimO.js","assets/DashboardSecondRide-eOXyuoZj.js","assets/alert-dialog-CymqoSQ3.js","assets/clock-B-W6VRWi.js","assets/eye-off-uNPtj_l7.js","assets/ban-sHHVF8HV.js","assets/DashboardSecondRideEditor-COag2bEq.js","assets/switch-Dx0aO5Qm.js","assets/trash-2-CFmQvasf.js","assets/image-plus-DwK4IRjZ.js","assets/rocket-sOS8FrRH.js","assets/DashboardSecondRideAdmin-CjfB5caI.js","assets/ToolsHub-IRs44W2c.js","assets/LetsRideCyclingClub-CAP-PdHj.js","assets/EcosystemLinkGrid-BOhg6Hu1.js","assets/JerseyVoteSection-Bmbz1WcB.js","assets/useJerseyVote-ISlhGrB_.js","assets/play-Dkjwf5Cj.js","assets/credit-card-BBw27Mfq.js","assets/smartphone-BCbWzzSU.js","assets/banknote-DqEkeqN2.js","assets/club-hero-BoMsYAyK.js","assets/club-matej-lovse-Bb0CGDmL.js","assets/LetsRideMembers-DlZr7sWD.js","assets/useClubPhotoUrl-D8r64Gyx.js","assets/clubPhotoUrls-DObVWE1H.js","assets/clubBadges-DbAEFZzZ.js","assets/KolesarskaTrgovinaLjubljana-YC9WxPM_.js","assets/separator-znQleNDz.js","assets/LocalBusinessJsonLd-kOM9P4WX.js","assets/KoloPoMeri-D-kLAqRY.js","assets/CustomBikeAtelier-D1KGstlY.js","assets/PinarelloBikesSlovenia-DbThh1Ol.js","assets/NichBikesSlovenia-CfmF4jpX.js","assets/PrincetonCarbonworksObroci-Bc5PPWsz.js","assets/KarbonskiObrociPriporocilo-cMv4mUhj.js","assets/PoletnaKolesarskaOprema-B8YlqrIf.js","assets/ApprovedFutureRiders-BDRBPKfT.js","assets/AdminFutureRiders-McCyzebF.js","assets/tabs-poop9tck.js","assets/AdminMemberSocialTasks-C3SOqw-A.js","assets/AdminSponsorValue-Df18Xfn-.js","assets/AdminSponsorPitchBuilder-QL9ogmC-.js","assets/AdminMarathon2027-BZdNUxT_.js","assets/AdminLifecycleFlows-Clrf9Nim.js","assets/AdminSocialMedia-3uK3aKSL.js","assets/AdminPodcast-kN_Wq7ct.js","assets/PhasePasswordPage-BPUQHpM6.js","assets/EventPrepHub-mdYHLfhq.js","assets/MediaToCommerceCTA-DD62CGk9.js","assets/eventPrepGuides-Dff5xY-8.js","assets/EventPrepGuidePage-BY-A9u2k.js","assets/Marathon2027Page-DGExc5yW.js","assets/MarathonLeadForm-Dqx63dIL.js","assets/SponsorshipPage-kDsB3X8q.js","assets/FutureRidersPlatformPage-BY7AzDSv.js","assets/DashboardClubMember-C7i8VE20.js","assets/riderErrors-Ce1D61AX.js","assets/progress-M515pHyU.js","assets/DashboardFutureRiders-fl7NexYL.js","assets/Contact-Ci9RiiCx.js","assets/phone-DC3oPOoZ.js","assets/BlogArticle-D-6xVjIG.js","assets/articleJsonLd-CJKM41to.js","assets/BlogListing-DXJwwi7Z.js","assets/BlogCresVacation-D9njtFxB.js","assets/OAuthConsent-
1BtmDDHNx.js","assets/OfferPage-D9XF1QN9.js","assets/radio-group-Da14gORX.js","assets/ClubInviteConfirm-B7opSp8I.js","assets/Auth-BX_mEOyT.js","assets/authErrors-iVymSEwP.js","assets/ResetPassword-CH8n2lIB.js","assets/PrivacyPolicy-CSdzd7Sj.js","assets/businessDetails-QWCER1Ki.js","assets/privacyCookie-C6_mo4Um.js","assets/CookiePolicy-BBAiNXF5.js","assets/TermsPage-oFGh91Go.js","assets/commercePolicies-QbURaA8i.js","assets/ReturnsPage-BJ-er-Ut.js","assets/ShippingPage-DcWpuAPh.js","assets/LegalNoticePage-CDM6NfY0.js","assets/RequireLetsRideAccess-BzMH4VNs.js","assets/useLetsRideAccess-cNFrPoG3.js","assets/useLetsRideRuntimeFlags-A6mSDsUK.js","assets/RequireLetsRideOnboarding-Cd0kBg2G.js","assets/useLetsRideProfile-WJOZHrT7.js","assets/routes-ClPG8cy_.js","assets/onboardingRedirect-Bj3yW7Sc.js","assets/RequireLetsRideSurface-DenazItp.js","assets/RequireLetsRideBetaWelcome-Bwfp6awd.js","assets/LetsRideAppShell-gaIZimVT.js","assets/LetsRideNotificationBell-DzYt4729.js","assets/useLetsRideNotifications-BGaV3XM6.js","assets/notifications-DDh2au7u.js","assets/bell-gj2zvzDY.js","assets/LetsRideOnboarding-BxFiIF_R.js","assets/discoveryVocab-BwTsdHIq.js","assets/analytics-DAyzIB_-.js","assets/LetsRideActivitiesList-Cde-767N.js","assets/useLetsRideMyActivities-DAAz4_9m.js","assets/activityMessagingUI-dzfIfKtj.js","assets/useLetsRideActivityMessageUnreadCounts-CgKBK4dY.js","assets/LetsRideCreateActivity-C9dShe46.js","assets/LetsRideOverlayLayer-FyheMyYh.js","assets/useLetsRideShellMetrics-ydOtGlGR.js","assets/consentLayout-C38kIjMC.js","assets/LetsRideMeetingPointPicker-DaMx-QG-.js","assets/letsRideMap-BbPzJf_A.js","assets/letsRideMap-3HZ4yLXC.css","assets/areaCoordinates-D-rNVlW7.js","assets/meetingPoint-CdFS5mfb.js","assets/activities-3HCc0iko.js","assets/lookingForRiders-CDkm_JW4.js","assets/useLetsRideActivities-oBW0sHcL.js","assets/letsRideMapStore-BLAJKIfI.js","assets/useLetsRideGpx-BmeFcfLw.js","assets/pencil-Bg7aZpUi.js","assets/LetsRideActivityDetail-C214KN7R.js","assets/zod-By5TWKfk.js","assets/LetsRidePublicActivityDetail-vCKb34dI.js","assets/useLetsRideFeed-CwW5l5Dk.js","assets/photos-B__UDpjm.js","assets/LetsRideTrustSafetyDialog-BgfyebK3.js","assets/trustSafety-dLNTL8iu.js","assets/useLetsRideTrustSafety-G9-uivc4.js","assets/LetsRideClubBadge-CPhqnLQr.js","assets/LetsRideBuddyAction-ePOnOig5.js","assets/discoveryAnalytics-D-HQO3ct.js","assets/user-plus-D7uixd9r.js","assets/rideAnalytics-By9G1NZs.js","assets/rideViewModel-DvHOtpz_.js","assets/useLetsRideMyBunch-NMBIwFUz.js","assets/share-2-BZgs2agC.js","assets/useLetsRideParticipation-yHxlANSL.js","assets/useLetsRideRiderIdentity-DAOvmrst.js","assets/attendance-BuDeJgE5.js","assets/useLetsRidePush-D_KJ3Qny.js","assets/LetsRideVerdictControl-6-DGLABN.js","assets/calendar-clock-BYq2k7V7.js","assets/LetsRideOrganiserManage-Q4QFOwfU.js","assets/LetsRideNotifications-8crl07yK.js","assets/LetsRideNotificationSettings-Cu4QoSvr.js","assets/LetsRideActivityMessages-C-C7coPl.js","assets/LetsRideAdminTrustSafety-CaIxMIm_.js","assets/LetsRideAdminBetaOps-DJKTwZ0q.js","assets/LetsRideAttendanceHistory-BWqitGOv.js","assets/LetsRideLookingForRiders-qwINl5Rz.js","assets/LetsRideCreateSeries-CepIhT0S.js","assets/useLetsRideSeries-DUC8v_wf.js","assets/LetsRideSeriesDetail-CPAD_chh.js","assets/useLetsRideSeriesInvitations-CXuzNGip.js","assets/LetsRideDiscoveryError-BFvWHH3p.js","assets/LetsRideCalendar-DCObl3Su.js","assets/LetsRideCommunityPage-3iSst9VB.js","assets/LetsRideEditSeries-D4GsGBjv.js","assets/LetsRideInviteSeries-CjNcrp4d.js","assets/LetsRidePublicSeries-BW-xxVbS.js","assets/LetsRideLanding-Bx7wbm45.js","assets/landingAnalytics-BydGMCSc.js","assets/LjubljanaCyclingHub-DfFtWgDK.js","assets/useLetsRidePublicSeo-CLbpB24D.js","assets/LjubljanaCyclingRide-CwTLwXuo.js","assets/LetsRideRideDeepLink-x9Fbln3n.js","assets/LetsRideBetaWelcome-DteADbl_.js","assets/LetsRideRideSearch-CNugmh0z.js","assets/LetsRidePremiumRideCard-DqA_IycW.js","assets/rideCardViewModel-DkQBDvi5.js","assets/bookmark-check-DfZjZN0J.js","assets/calendar-days-Bb-N9LnT.js","assets/LetsRideMapShell-B3HQLIwZ.js","assets/discoveryFilters-BgE9JqVy.js","assets/letsRideDiscoveryStore-Cgd4ZCim.js","assets/LetsRideDiscoverV2-BLoFVt9E.js","assets/LetsRideRiderPreviewCard-0H98PSbE.js","assets/LetsRideSavedV2-DhrTMf5k.js","assets/LetsRideProfileV2-B8ZZFo7d.js","assets/camera-Cp2t5meb.js","assets/LetsRidePeople-BQLJ1Mah.js","assets/LetsRideBunchButton-wsvRJ6kE.js","assets/LetsRideRiderProfile-B_Yv003a.js","assets/LetsRideProfileEdit-DaMjI22N.js","assets/DashboardOverview-Ce1g3ZEV.js","assets/useClubRideRsvps-Cak6isDn.js","assets/useBikeSetups-CAooTxk3.js","assets/UpcomingBikeCard-Cn960oap.js","assets/supabaseFilters-Cp5cjN62.js","assets/AccountNextBestAction-GbRgiMwB.js","assets/useSavedSetups-BaB2Jt0_.js","assets/retentionEvents-C9Tvd3lw.js","assets/DashboardProfile-BZFNi4Id.js","assets/useClubMemberProfile-C3W80y5v.js","assets/DashboardPerformanceProfile-CqOE5Ned.js","assets/DashboardKitSetup--xA4BJ5G.js","assets/useShopifyProducts-C7Qf3v0F.js","assets/useStyleStudioKeywords-Luqy-LqV.js","assets/FormField-Bfs0B-nV.js","assets/DashboardBikeGarage-BKrq8F9b.js","assets/BikeGarageAskApprovedCTA-DOMAcX8j.js","assets/DashboardBikeGarageDetail-Cek7vfTS.js","assets/ServiceReminderDialog-Cyzp7S6I.js","assets/DashboardSavedSetups-BLv2VvlY.js","assets/SavedSetupAskApprovedCTA-D9ZuP4ZP.js","assets/DashboardSavedSetupDetail-CEj3jubh.js","assets/DashboardRecommendations-DlRc1KHS.js","assets/DashboardServiceReminders-B7dvyCX7.js","assets/DashboardTrainingLog-B_vlQn1S.js","assets/TrainingLogForm-CMU8S5k9.js","assets/lightbulb-UWG6t7Zc.js","assets/DashboardTrainingLogNew-Dg4hgr3q.js","assets/DashboardOrders-CnGOfrrn.js","assets/circle-x-v_5X67rC.js","assets/DashboardStrava-BTYcrfhR.js","assets/DashboardWishlist-CxrjLwSP.js","assets/DashboardRew
1ards-DePWZOew.js","assets/DashboardTraining-Dpm0VhPr.js","assets/DashboardClub-DDmjW-bQ.js","assets/gpxDownload-OC1weEn3.js","assets/useRidePhotos-DD2CUYhm.js","assets/useClubValueContent-DX8qmLKl.js","assets/upload-CGYgC_2O.js","assets/DashboardClubSettings-C0d-vJBY.js","assets/useClubPlanNotifications-UlZOBpI0.js","assets/useClubPlanPhase4-azo2KNXg.js","assets/DashboardClubRidePhotos-Cyqk6wFD.js","assets/DashboardClubRideFuel-DSFkMq_C.js","assets/DashboardClubTrainingPlan-C5Q5WRUp.js","assets/useClubTrainingPlans-B5iwZXuU.js","assets/EditPlanSummaryDialog-CyFnXakN.js","assets/ellipsis-BFqcxWWe.js","assets/wand-sparkles-DYx1-StP.js","assets/DashboardClubSharedPlan-BSBhNpzE.js","assets/useClubPlanSocial-f6xvhWDK.js","assets/history-CluYyEUL.js","assets/PlanStatusPill-DgqMGMF5.js","assets/useClubPlanDayLogs-CPR7APSG.js","assets/user-minus-BR23pgKu.js","assets/DashboardClubRiderProfile-DYCLmlS_.js","assets/DashboardClubMyRiderProfile-aKzwgs8u.js","assets/imageCompression--vwrq2RN.js","assets/DashboardClubFollowing-_Ybhh33g.js","assets/DashboardClubSavedPlans-B-L-r_97.js","assets/DashboardClubBrowsePlans-u72CD1R9.js","assets/ClubTrainingPlanTeaser-036x7CBL.js","assets/ClubTrainingPlanAliasRedirect-BT0ji7hh.js","assets/DashboardClubFtp-CI_9HhuL.js","assets/DashboardClubFeedback-BgQXEpTn.js","assets/DashboardClubFeedbackAdmin-rvEkP9JN.js","assets/BuildsArchive-kYfV-T-C.js","assets/ContentPageShell-BmZ7h2x6.js","assets/types-BnzmhYs7.js","assets/hubIndex-DFMZ9b4L.js","assets/BuildDetail-BJeyTp_B.js","assets/ContentJsonLd-DvWRVi8N.js","assets/ContentConversionLayer-CXRoTCeA.js","assets/ContentGallery-BdubPqrO.js","assets/AuthorByline-r5NbaeCX.js","assets/ComparisonsArchive-BtIQ_EHI.js","assets/ComparisonDetail-BX6vkdCO.js","assets/GuidesIndex-BumzOtfP.js","assets/GuideTopicRoute-VEpZq-2_.js","assets/DecisionGuideTemplate-DRc9JakF.js","assets/GuideDetailRoute-CO66-swu.js","assets/BrandsIndex-BbTRsbAQ.js","assets/BrandHubPage-BXr6G2zU.js","assets/DashboardContentStudio-DvZj2f_9.js","assets/useContentAdmin-x_NeTrvV.js","assets/DashboardContentEditor-yt1QNBrj.js","assets/DashboardOrganicLeads-kBsRyNdr.js","assets/DashboardClubMembers-CENTBa7o.js","assets/DashboardClubEvents-BEPNmQaV.js","assets/ClubEventRsvpRoster-C1BGDvB4.js","assets/useClubMarathonDiscounts-alnL2RzH.js","assets/user-x-OLSFhzXT.js","assets/DashboardClubEventsAdmin-Dt0uRdJv.js","assets/DashboardClubWeekendAdmin-CHIZL8TW.js","assets/DashboardClubMarathonDiscountsAdmin-7HVBpXYP.js","assets/arrow-up-CkHUNhm3.js","assets/DashboardClubMarathonSignupClicks-B-UnHIYo.js","assets/DashboardClubMembersAdmin-CjSuH0Wd.js","assets/DashboardFreeJerseyGrants-CMMwmytP.js","assets/DashboardLeaderboardAdmin-XViNzrLL.js","assets/DashboardStravaCompliance-DM3U7Pr8.js","assets/DashboardMonthlyLeaderboardAudit-CWV38vU_.js","assets/DashboardWaitlist-ZdUGHZq-.js","assets/ShopifyProductPicker-CNKX0CYH.js","assets/DashboardWeeklyRides-B77IOBd-.js","assets/DashboardClubBeginnerRidesAdmin-DwgItWEJ.js","assets/useBeginnerRides-B70YjV2v.js","assets/DashboardClubBeginnerRides-hOyMRXPg.js","assets/DashboardEmailLog-CmRkk9u0.js","assets/DashboardClubSubscribers-D8htRLzX.js","assets/DashboardClubKit-CnlBmOhA.js","assets/DashboardEmailPreview-BmfHtSQu.js","assets/transactionalEmailPreviews-CeZSEPxz.js","assets/DashboardBikeOrders-Bqs5rxbE.js","assets/jspdf.es.min-DBGh1HOa.js","assets/jspdf.plugin.autotable--NsDeQP_.js","assets/DashboardOrdersAdmin-O_HzYe2U.js","assets/DashboardSeoTools-C2HKZ24_.js","assets/DashboardGscMonitor-z8HXWRK8.js","assets/heavy-charts-u7Z7V3AU.js","assets/DashboardWebhookTester-BKjernDL.js","assets/DashboardShopifyWebhooks-25lO8a3s.js","assets/DashboardStravaWebhooks-DIl_WCnp.js","assets/DashboardStravaReviewPrep-DEv9QzCA.js","assets/DashboardShopifySeoBulk-DygoQt_K.js","assets/DashboardFaviconPreview-DZIRvtja.js","assets/DashboardAbandonedCheckouts-CGh-hiDV.js","assets/DashboardWaitlistDemand-D4K1XiXN.js","assets/DashboardContactMessages-C1pLixOb.js","assets/DashboardBuildRequests-DtOxQXul.js","assets/DashboardReferrals-C2AH6rQx.js","assets/DashboardShippingTest-DzS-IU0L.js","assets/DashboardPerfBudget-DneiYnQh.js","assets/trending-down-D1IWIFSA.js","assets/DashboardBlankPageReports-ETYzOgsB.js","assets/DashboardSettings-BoMM3iXr.js","assets/DashboardKitMannequinOverlays-CxjnCNlp.js","assets/DashboardNews-CZfj1TsF.js","assets/circle-play-DczOQYKZ.js","assets/DashboardA
1nnouncements-cCxXTD1B.js","assets/DashboardSocialMediaImages-BTn62kYM.js","assets/jszip.min-dj_p115k.js","assets/DashboardSeoGeo-D1pBF3Cr.js","assets/DashboardJerseyVote-nEwBQsoP.js","assets/DashboardJerseyVoteMember-BOZ_cMcI.js","assets/DashboardJerseyPreorderSetup-CJf6Z3nf.js","assets/DashboardJerseyPreorders-CqWk4rsL.js","assets/DashboardMyPreorders-tDcAW0fH.js","assets/DashboardStyleStudioKeywords-CcSWOxsj.js","assets/DashboardHeatmap-EfeoixI3.js","assets/DashboardClickHeatmap-B8Jf5HoP.js","assets/DashboardToolAnalytics-CVLAW3WF.js","assets/DashboardRateMyBike-hpLO2_Fy.js","assets/DashboardAiCommandCenter-gWijBr39.js","assets/mouse-pointer-click-BhqASCsw.js","assets/DashboardConversionFunnel-CyUuzSP3.js","assets/DashboardClubConsent-BezTYAp7.js","assets/DashboardClubLicense-WNJ-se5b.js","assets/DashboardClubLicenseAdmin-Zc5e3s09.js","assets/DashboardClubConsentAdmin-Dqws7S_-.js","assets/DashboardClubSettingsAdmin-EZarno2o.js","assets/DashboardClubValueAdmin-Bq8-QjSr.js","assets/power-DYbHaIlL.js","assets/DashboardClubInteractiveAdmin-D8aui-Y0.js","assets/DashboardWarrantyClaims-0zeW2CFA.js","assets/useWarrantyClaims-CIe3rwiT.js","assets/warrantyClaims-BFZmwL8y.js","assets/DashboardWarrantyClaimDetail-RVbwgubg.js","assets/DashboardWarrantyNewAdmin-DbmmM45P.js","assets/WarrantyClaim-CqeJp7DF.js","assets/index-D6svClht.js","assets/DashboardWarranty-Btx8IH7y.js","assets/WarrantyTrack-BMG7sL-v.js","assets/CookieConsent-Bf_TtZ2Q.js","assets/shopifyCustomerPrivacy-C-atXHqV.js","assets/DiscountPopup-Czg8Z-8t.js","assets/welcomeOffer-sqr86L8b.js","assets/CompareDrawer-Br25fWN9.js","assets/ComparePage-DdLXsUTw.js","assets/blankPageDetector-dDjtOFMO.js"])))=>i.map(i=>d[i]);
2var Yt=Object.defineProperty;var Gt=(t,o,r)=>o in t?Yt(t,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[o]=r;var Ge=(t,o,r)=>Gt(t,typeof o!="symbol"?o+"":o,r);import{aC as qt,r as y,j as e,aD as Kt,a as Jt,aE as $t,aF as zt,aG as Qt,aH as Xt}from"./vendor-C04vJPsG.js";import{i as C,B as Zt,a as eo,u as Oe}from"./i18n-ihZqhrc0.js";import{Q as to,a as oo}from"./query-BmvMDath.js";import{u as ee,N as G,a as io,b as ro,O as vt,c as ao,B as no,R as so,d as i}from"./router-B4yW8KeN.js";import{$ as lo,C as Et,P as co,u as k}from"./ui-Bapdov8S.js";import{M as uo}from"./motion-0KOHo2FU.js";(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))s(l);new MutationObserver(l=>{for(const d of l)if(d.type==="childList")for(const c of d.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&s(c)}).observe(document,{childList:!0,subtree:!0});function r(l){const d={};return l.integrity&&(d.integrity=l.integrity),l.referrerPolicy&&(d.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?d.credentials="include":l.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function s(l){if(l.ep)return;l.ep=!0;const d=r(l);fetch(l.href,d)}})();const po="modulepreload",ho=function(t){return"/"+t},qe={},a=function(o,r,s){let l=Promise.resolve();if(r&&r.length>0){document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),u=(c==null?void 0:c.nonce)||(c==null?void 0:c.getAttribute("nonce"));l=Promise.allSettled(r.map(p=>{if(p=ho(p),p in qe)return;qe[p]=!0;const m=p.endsWith(".css"),b=m?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${p}"]${b}`))return;const f=document.createElement("link");if(f.rel=m?"stylesheet":po,m||(f.as="script"),f.crossOrigin="",f.href=p,u&&f.setAttribute("nonce",u),document.head.appendChild(f),m)return new Promise((E,v)=>{f.addEventListener("load",E),f.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${p}`)))})}))}function d(c){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=c,window.dispatchEvent(u),!u.defaultPrevented)throw c}return l.then(c=>{for(const u of c||[])u.status==="rejected"&&d(u.reason);return o().catch(d)})},mo={editorialLinks:{heading:"Related products, guides and tools",customBuild:"Start your custom build"},navMenu:{men:"MEN",women:"WOMEN",customBikeBuilds:"CUSTOM BIKE BUILDS",customBikeBuildsChild:"Custom Bike Builds",bikeParts:"BIKE PARTS",tools:"TOOLS",wheelRecommendation:"Wheel Recommendation",tirePressureCalculator:"Tire Pressure Calculator",bikeFitFixer:"Bike Fit Fixer",monthlyTrainingPlan:"Monthly Training Plan",fuelGuide:"Fuel Guide",ftpCalculator:"FTP Calculator",advancedTraining:"Advanced Training Guide",rideFuelCalculator:"Ride Fuel Calculator",rateMyBike:"Rate My Bike",membersOnlyBadge:"Members",letsRideCyclingClub:"APPROVED CLUB",letsRide:"LETSRIDE",jerseys:"Jerseys",longSleeveJerseys:"Long Sleeve Jerseys",bibShorts:"Bib Shorts",jackets:"Jackets",casual:"Casual",baseLayers:"Base Layers",socks:"Socks",helmets:"Helmets",sunglasses:"Eyewear",gloves:"Gloves",overshoes:"Overshoes",windRainShells:"Wind & Rain Shells",headbands:"Headbands",monumentsCollection:"Monuments",lifeIsAJourney:"Life Is A Journey",clubMembersDrops:"Club Members Drops",allMen:"All Men",allWomen:"All Women",pinarello:"Pinarello",nichBikes:"Nich Bikes",frames:"Frames",viewAllBuilds:"View All Builds",wheels:"Wheels",tires:"Tires",tubes:"Tubes",sa
2ddles:"Saddles",handlebars:"Handlebars",pedals:"Pedals",cassettes:"Cassettes",discRotors:"Disc Rotors",chains:"Chains",brakePads:"Brake Pads",derailleurHangers:"Derailleur Hangers",bottomBrackets:"Bottom Brackets",ospw:"OSPW",bikeComputers:"Bike Computers",bikeLights:"Bike Lights",bikeStands:"Bike Stands",pumps:"Pumps",maintenance:"Maintenance",allParts:"All Parts",tights:"Tights",warmers:"Arm & Leg Warmers",shoes:"Cycling Shoes",bags:"Bags",waterBottles:"Water Bottles",sportmedics:"Sportmedics",newArrivals:"New Arrivals",sale:"Sale",bikeAccessories:"Bike Accessories",cyclingGear:"Cycling Gear",indoorTraining:"Indoor Training",gravelGear:"Gravel Gear",usedBikes:"Used Bikes",usedGear:"Used Gear",group:{apparel:"APPAREL",accessories:"ACCESSORIES",shopAll:"SHOP ALL",collections:"COLLECTIONS",brands:"BRANDS & FRAMES",driveRoll:"DRIVETRAIN & ROLLING",contact:"CONTACT POINTS",electronics:"ELECTRONICS & CARE",toolkit:"RIDE TOOLKIT",buyingHelp:"BUYING HELP",freeTools:"FREE TOOLS",membersTools:"MEMBERS ONLY",community:"COMMUNITY",atelier:"ATELIER",gear:"GEAR & TRAINING",used:"USED"},startYourBuild:"Start Your Custom Bike Build",customBuildLibrary:"Custom Road Bike Build Library",riderStories:"Rider Stories",buyingGuides:"Buying Guides",comparisons:"Comparisons",intro:{men:"Race-tested apparel and accessories engineered for long days in the saddle.",women:"Women-specific cuts, materials, and accessories built for serious riders.",builds:"Hand-curated frames and bespoke builds. Assembled in our Ljubljana atelier.",parts:"Performance components, drivetrain upgrades, and rider essentials.",tools:"Free calculators for every rider, plus deeper training, fueling and FTP tools with Approved Club."},feature:{cta:"EXPLORE",startBuildCta:"START YOUR BUILD",upgradeCta:"UPGRADE WHEELS",toolsCta:"GET RECOMMENDATION",menTitle:"Built for the long ride",menDesc:"Premium kit chosen rider-by-rider. No filler, no gimmicks.",womenTitle:"Engineered for women who ride hard",womenDesc:"Performance-first apparel, properly fitted.",buildsTitle:"Custom built in Ljubljana",buildsDesc:"Pinarello, Nich and bespoke frames, fully tailored to you.",partsTitle:"Wheels that change everything",partsDesc:"Princeton CarbonWorks, Nich, and the parts pros choose.",toolsTitle:"Get a free wheel recommendation",toolsDesc:"Tell us how you ride. We'll match you to the right pair."}},nav:{startCustomBuild:"Start Your Custom Bike Build",monthlyTrainingPlan:"Monthly Training Plan",tirePressureCalculator:"Tire Pressure Calculator",bikeFitFixer:"Bike Fit Fixer",skipToContent:"Skip to content",search:"Search",account:"Account",menu:"Menu",expand:"Expand {{label}}",cart:"Cart",wishlist:"Wishlist",newDashboardContent:"New dashboard content",cartCount:"Cart ({{count}})",home:"Home",showSubmenu:"Show the {{name}} menu"},common:{close:"Close",faqTitle:"Frequently asked questions",loadErrorTitle:"This page didn't load",loadErrorBody:"It's on our side, not yours. Try again in a moment.",tryAgain:"Try again",backHome:"Back to home"},search:{placeholder:"Search products...",typeToSearch:"TYPE TO SEARCH PRODUCTS",correctedTo:"Showing results for {{term}}",noResults:'No results for "{{query}}"',noMatch:"NO_MATCH",tryInstead:"TRY INSTEAD",popularNow:"POPULAR NOW",suggestEyebrowSummer:"SUMMER ESSENTIAL",suggestEyebrowEditors:"EDITOR'S PICK",suggestEyebrowSpec:"BUILT TO SPEC",suggestEyebrowWheels:"WHEEL UPGRADE",suggestVision:"Approved Vision sunglasses",suggestAirbender:"airBENDER helmet",suggestCustomBuild:"Custom bike build",suggestWheelRec:"Wheel recommendation",resultsCount:"Results: {{count}}"},cart:{title:"CART",errorAdd:"Could not add item to cart",errorUpdate:"Could not update cart",errorQuantity:"Could not update quantity",errorRemove:"Could not remove item from cart",checkoutError:"Checkout didn't open. Try again, or email [email protected] if it keeps happening.",removeItem:"Remove {{title}}",decreaseQty:"Decrease quantity of {{title}}",increaseQty:"Increase quantity of {{title}}",empty:"Your cart is empty",emptyHint:"Start with a path below",emptyPaths:"PICK YOUR PATH",pathSummer:"Summer setup: Vision, airBENDER, LIAJ",pathWheels:"Wheel recommendation",pathCustom:"Custom bike build consultation",pathExplore:"Browse all products",itemCount:"{{count}}
2 item in your cart",itemCount_plural:"{{count}} items in your cart",subtotal:"Subtotal",total:"Total",checkout:"CHECKOUT",checkoutCta:"Continue to secure checkout",handoffEyebrow:"NEXT: SECURE SHOPIFY CHECKOUT",handoffBody:"Enter shipping & payment on the next screen. Shipping and taxes are calculated there. You'll review the full total before paying.",trustSecure:"Secure · Shopify",trustShipping:"Free EU shipping from {{eu}}",trustShippingRest:"Delivery calculated at checkout",shippingCalculatedAtCheckout:"Delivery calculated at checkout",trustReturns:"14-day returns",viewCart:"View cart",keepShopping:"Keep shopping",clubBadge:"APPROVED CLUB · MEMBER PRICING",clubSavings:"You save {{amount}} as a club member, applied at checkout.",welcome20Hint:"Your welcome code {{code}} applies from {{min}}. Add {{remaining}} more to use it at checkout.",welcome20HintExcludesClub30:"{{code}} doesn't apply to Approved Cycling or Nich Frames items (already -30% for Club members). Eligible subtotal: {{eligible}} of {{min}}.",suggestVision:"Add Approved Vision sunglasses",suggestVisionSub:"The third piece riders forget: clarity at speed.",suggestHelmet:"Add the airBENDER helmet",suggestHelmetSub:"Vented, stable, editor's pick for summer.",suggestLiaj:"Pair with a Life Is A Journey jersey",suggestLiajSub:"Limited capsule, designed around the Vision palette.",freeShippingUnlocked:"Free EU shipping on this order",freeShippingSiUnlocked:"Free shipping in Slovenia on this order",freeShippingEuRemaining:"{{amount}} to free EU shipping",freeShippingSiRemaining:"{{amount}} to free shipping in Slovenia",lineUnavailable:"No longer available. Remove it to check out.",unavailableBlock:"Some items are no longer available. Remove them, then check out.",clubNotApplied:"Club pricing is not applying to this cart right now, so checkout would show regular prices. Ask us at [email protected], or continue at the regular price.",continueRegularPrice:"Continue at the regular price",unitEach:"{{price}} each"},cookies:{kicker:"PRIVACY // YOUR CHOICE",title:"Privacy, handled with restraint.",description:"We use strictly necessary technologies to keep the site working. Optional preferences, analytics, and marketing tools stay off unless you choose them.",summaryEssential:"Necessary always on",summaryAnalytics:"Analytics optional",summaryMarketing:"Marketing optional",acceptAll:"ACCEPT ALL",rejectAll:"REJECT ALL",essentialOnly:"ESSENTIAL ONLY",managePreferences:"MANAGE PREFERENCES",preferencesTitle:"COOKIE PREFERENCES",essential:"Strictly necessary",essentialDesc:"Needed for security, checkout continuity, language routing, account access, and storing your privacy choices.",preferences:"Preferences",preferencesDesc:"Optional convenience features that remember how you like to use the site.",analytics:"Analytics",analyticsDesc:"Helps us understand which pages and journeys work well, only after you allow it.",marketing:"Marketing",marketingDesc:"Advertising and campaign measurement tools. These stay off unless you explicitly opt in.",controlTitle:"What happens",controlBody:"Optional tracking stays blocked until you allow it. You can revisit these settings later from the footer or privacy pages.",savePreferences:"SAVE PREFERENCES",back:"BACK"},brands:{heading:"TRUSTED BY RIDERS WHO CHOOSE THE BEST"},process:{label:"OUR PROCESS",heading:"HOW YOUR CUSTOM BUILD COMES TOGETHER",step1Title:"You tell us how you ride",step1Desc:"Through a short questionnaire, we learn about your riding style, position, goals and budget. Nothing unnecessary.",step2Title:"We define the right direction",step2Desc:"Based on real experience, we recommend a clear build direction: frame, geometry, groupset and key components.",step3Title:"You decide, we build",step3Desc:"No pressure. If it feels right, we build your bike exactly as specified: assembled, tuned and ready to ride.",cta:"START YOUR CUSTOM BUILD",step1Code:"INPUT",step2Code:"DESIGN",step3Code:"BUILD"},builds:{label:"REAL BUILDS",heading:"CUSTOM BUILDS FOR REAL RIDERS",subtitle:"Every bike starts with how the rider actually rides. These are a few examples of custom builds we've delivered.",allRound:"All-Round Performance Build",allRoundSub:"A fast, balanced build for riders who want speed without losing comfort.",endurance:"Refined Endurance Build",enduranceSub:"A clean custom build focused on long rides, smooth power transfer and timeless design.",race:"Dream Race Build",raceSub:"A no-compromise race machine built exactly to the rider's vision.",statement:"Statement Build",statementSub:"Created for a rider who wanted the absolute best, without limits.",seeMore:"SEE HOW YOUR CUSTOM BUILD COULD LOOK",featuredBuild:"FEATURED BUILD",view:"VIEW"},wheels:{label:"CUSTOM UPGRADES",heading:"THE MOST EFFECTIVE UPGRADE WE RECOMMEND",description:"For many riders, the right wheels deliver most of the performance benefit of a new bike without replacing the bike. Wheels change how a bike accelerates, handles and feels on the road.",benefit1:"Lighter rotating mass for faster acceleration",benefit2:"Improved aerodynamics without sacrificing comfort",benefit3:"A ride feel that transforms your existing bike",cta:"FIND THE RIGHT WHEELS",browseCta:"BROWSE WHEELS",eyebrow:"THE SINGLE BIGGEST UPGRADE"},clubPulse:{eyebrow:"RIDE WITH US",heading:"REAL RIDES. REAL PEOPLE. A REASON TO SHOW UP.",liveBadge:"CLUB",liveSource:"APPROVED CYCLING",intro:"Approved Club is built around actual group rides, shared experiences, and a healthier rhythm on the bike.",rewards:"Club challenges and recognition use Approved Cycling first-party club activity only. Your optional Strava connection is separate and private.",step1Title:"Join the club",step1Desc:"Become a member and get access to the club rhythm.",step2Title:"Pick a ride",step2Desc:"Choose a ride that fits your day, pace, and goals.",step3Title:"Show up",step3Desc:"Ride with the group and build consistency through real club activity.",step4Title:"Stay involved",step4Desc:"Photos, events, kit, challenges, and the people behind the rides.",mensRank:"CLUB",womensRank:"RIDES",emptySlot:"New rides are added by the team.",anonymousRider:"Club rider",footer:"See the rides, membership benefits, people, and how to join.",footerCta:"DISCOVER THE CLUB"},tools:{label:"FREE CYCLING TOOLS",heading:"FREE PERFORMANCE TOOLS. BUILT FOR REAL RIDERS.",tirePressure:"Tire Pressure Calculator",tirePressureDesc:"Dial in front + rear pressure for grip and comfort, based on your setup.",bikeFit:"Bike Fit Fixer",bikeFitDesc:"Pick what hurts and get fast adjustments to reduce discomfort and ride better.",trainingPlan:"Monthly Training Plan",trainingPlanDesc:"Generate your next 4-week plan with clear sessions and progression.",useTool:"USE TOOL →"},testimonials:{heading:"TRUSTED BY RIDERS WHO CARE ABOUT THEIR SETUP",googleReviews:"Google reviews",reviews:{ziga:{title:"A unique experience",text:"The moment I stepped into the shop, Anže introduced himself and shook my hand, setting the tone for a unique customer experience. The vibe was like chatting with an old friend giving me advice, rather than someone just trying to make a sale."},aleksander:{title:"A little gem in Slovenia",text:"ApprovedCycling is a little gem store in Slovenia. Anže the owner is awesome, and how every owner of such business should be. Very responsive, and holds his word. Excellent service."},jure:{title:"Truly a great boutique",text:"Approved is truly a great boutique bike shop where you really feel welcome. Anže is super friendly, approachable, and always ready to help with useful advice. They have an excellent selection of cycling gear."},miha:{title:"Impressive performance",text:"I tested the Atem Silkroad 3.8 carbon wheels at Approved Cycling and was impressed with their performance. Anže provided excellent customer service and was very knowledgeable about the product."},eva:{title:"Top-notch products",text:"I highly recommend Approved Cycling store. Their products are top-notch, and they have a deep understanding of what they sell. They respond quickly, and their prices are very competitive in the market."},demi:{title:"Stylish & comfortable",text:"Great quality sunglasses, stylish and comfortable. I recommend the Cherries sunglasses. The Polarized lenses are perfect since they enhance vision and reduce glare in bright environments."}}},club:{label:"LICENSED CYCLING CLUB",heading:"APPROVED CLUB",description:"Join our licensed cycling club under the Slovenian Cycling Federation. Ride Maraton Franja under Approved Club. Everyone who wants to ride with us, can. For €100/year you get a racing license and exclusive member perks.",license:"Amateur Racing License",licenseDesc:"Official amateur cycling license under the Slovenian Cycling Federation.",community:"Community & Events",communityDesc:"Group rides, Maraton Franja under Approved Club, and club events year-round.",discount:"20% Off Approved Gear",discountDesc:"Members get 20% discount on all Approved Cycling gear plus partner deals.",annualMembership:"ANNUAL MEMBERSHIP"},footer:{slogan:"THE MORE YOU APPROVE OF YOUR OWN DECISIONS IN LIFE, THE LESS YOU FEEL THE NEED TO HAVE THEM APPROVED BY OTHERS.",shop:"SHOP",men:"Men",women:"Women",gear:"Gear",bikeParts:"Bike Parts",used:"Used",services:"SERVICES",customBikeBuilds:"Custom Bike Builds",wheelRecommendation:"Wheel Recommendation",tirePressureCalculator:"Tire Pressure Calculator",bikeFitFixer:"Bike Fit Fixer",trainingPlanGenerator:"Training Plan Generator",letsRideCyclingClub:"Approved Club",letsRide:"LetsRide",approvedBuilds:"APPROVED BUILDS",customBuildLibrary:"Custom Bike Build Library",riderStories:"Rider Stories",startYourBuild:"Start Your Custom Bike Build",buyingGuides:"Buying Guides",comparisons:"Comparisons",followUs:"FOLLOW US",copyright:"© {{year}} Approved Cycling. All rights reserved.",contact:"Contact",blog:"BLOG",allArticles:"All Articles",blogRoutes:"Cycling Routes in Slovenia",blogCustomBike:"Custom Road Bike Advantage",blogWheels:"How to Choose Wheels",blogBikeBuilds:"Art of Custom Bike Builds",blogWhichBike:"Which Road Bike to Buy",legal:"LEGAL",hoursMonWed:"Mon–Wed: 10:00 – 17:00",hoursThuFri:"Thu–Fri: 7:00 – 14:00",address:"Ziherlova 10, 1000 Ljubljana, Slovenia",discover:"Discover",media:"Media",podcast:"Podcast",marathon:"Marathon 2027",sponsorship:"Sponsorship",futureRiders:"Future Riders"},legal:{privacyTitle:"Privacy Policy",cookieTitle:"Cookie Policy",termsTitle:"Terms and Conditions",returnsTitle:"Returns and Refunds",shippingTitle:"Shipping Information",noticeTitle:"Legal Notice",cookieSettings:"Cookie settings",cookieEyebrow:"PRIVACY // COOKIES",cookieIntro:"What runs on the site, what needs your consent, and how you stay in control.",noticeEyebrow:"LEGAL // DETAILS",noticeIntro:"Company and contact details for Approved Cycling, useful for customer support and legal enquiries.",privacyEyebrow:"PRIVACY // POLICY",privacyIntro:"How Approved Cycling handles personal data, privacy requests and customer communication.",returnsEyebrow:"CUSTOMER CARE // RETURNS",returnsIntro:"What can be returned, when refunds arrive, and how to contact us before sending anything back.",shippingEyebrow:"CUSTOMER CARE // SHIPPING",shippingIntro:"How Approved Cycling handles dispatch timing, shipping regions, and delivery support.",termsEyebrow:"LEGAL // TERMS",termsIntro:"The core terms for using the site, placing orders, and working with Approved Cycling."},notFound:{title:"404",description:"This page doesn't exist or has been moved.",backHome:"BACK TO HOME",shopAll:"SHOP ALL",joinClub:"JOIN THE CLUB"},collection:{home:"Home",pageOf:"Page {{current}} of {{total}} · Showing {{shown}} of {{all}} products",pageShowing:"Page {{current}} · {{count}} product shown",pageShowing_plural:"Page {{current}} · {{count}} products shown",noProducts:"No products found in this collection.",backHome:"← BACK TO HOME",sort:"SORT",relevance:"Relevance",priceLowHigh:"Price: Low → High",priceHighLow:"Price: High → Low",newest:"Newest",bestSelling:"Best Selling",previousPage:"Previous page",nextPage:"Next page",filters:"FILTERS",filter:"FILTER",browse:"BROWSE",category:"Category",price:"Price",priceMinLabel:"Minimum price",priceMaxLabel:"Maximum price",productC
2ount_one:"{{count}} product",productCount_other:"{{count}} products",size:"Size",color:"Color",brand:"Brand",availability:"Availability",inStockOnly:"In stock only",clearAll:"Clear",apply:"Apply",showResults:"Show {{count}} results",activeFilters:"Active filters",density:"Density",resultWord_one:"RESULT",resultWord_other:"RESULTS",genderFilter:"Gender filter",columnsLabel:"Columns: {{count}}",helpContact:"Talk to the atelier",helpCustomBuild:"Custom bike build",helpWheelRec:"Wheel recommendation",noMatchHelp:"Try removing a size, color or brand, or pick one of the paths below. We can also build to your exact spec.",noMatchHelpEmpty:"This collection is currently empty. Explore a nearby path below. We can also build to your exact spec.",noMatchTitle:"Nothing matches this combination",related:{heading:"// COMPLETE THE SETUP"},relatedTools:{heading:"Tools that go with this category"},noMatchHelpApparel:"Try removing a size, colour or brand, or pick one of the paths below.",noMatchHelpEmptyApparel:"Nothing here right now. Try one of the paths below.",helpAllClothing:"All cycling clothing",helpSecondRideClothing:"Used clothing on Second Ride"},product:{priceFrom:"From {{price}}",badgeLtdLiaj:"LTD · LIAJ",badgeEditorsPick:"EDITOR'S PICK",badgeSummerEssential:"SUMMER ESSENTIAL",home:"Home",backToShop:"Back to shop",notFound:"Product not found",inStock:"In Stock",soldOut:"Sold Out",addToCart:"ADD TO CART",combinationUnavailable:"This combination is not available. Please choose another option.",unavailable:"Unavailable",addedToCart:"Added to cart",adding:"Adding…",added:"Added to cart",selectOptions:"Select options",quickAdd:"Quick add",options:"Options",noImage:"No image",productDetails:"PRODUCT DETAILS",technicalSpecs:"TECHNICAL SPECIFICATIONS",expertSupport:"Expert Support",expertSupportDesc:"Need help choosing? Contact us at [email protected]",completeYourKit:"COMPLETE YOUR KIT",completeYourKitDesc:"Products that pair well with this item.",trustSecure:"Secure checkout",needHelpChoosing:"Need help choosing?",sectionAtAGlance:"AT A GLANCE",sectionAboutThisProduct:"About This Product",sectionAboutThisProductTag:"// 01 / OVERVIEW",sectionFabricTech:"Fabric & Technology",sectionFabricTechTag:"// 02 / FABRIC",sectionTechnology:"Technology",sectionTechnologyTag:"// 02 / TECH",sectionTireTechnology:"Tire Technology",sectionFitmentGuidance:"Fitment Guidance",sectionFitmentGuidanceTag:"// 03 / FITMENT",sectionTechnicalSpecs:"Technical Specifications",sectionKeyHighlights:"Key Highlights",sectionPerformanceRatings:"Performance Ratings",sectionIdealFor:"Ideal For",sectionSizeFit:"Size & Fit",sectionCompatibility:"Compatibility",sectionTechnicalSpecsTag:"// 04 / SPECS",sectionWhyWeRecommend:"Why We Recommend It",sectionWhyWeRecommendTag:"// 05 / VERDICT",sectionKeyFeatures:"Key Features",sectionWhyRidersChoose:"Why Riders Choose This",teamSignature:"THE APPROVED CYCLING TEAM",pairingEyebrow:"PAIRING",extrasEyebrow:"EXTRAS",curatedByApproved:"CURATED BY APPROVED",crossSellTitle:"COMPLETE YOUR SETUP",crossSellSubhead:"What we'd actually pair with this. Chosen by riders, not algorithms.",crossSellSubheadShort:"What we'd actually pair with this.",authenticProducts:"Authentic Products",authenticProductsDesc:"Official retailer",expertSupportShort:"Expert Support",expertSupportShortDesc:"Cycling advice",sectionWhyRiders:"Why Riders Choose This",sectionQuickSpecs:"QUICK SPECS",benefit_apparel_fit:"{{v}} cut for a closer, on-bike fit that doesn't flap or ride up.",benefit_apparel_temp:"Built for {{v}} so you stay comfortable in your typical riding conditions.",benefit_apparel_riding:"Engineered for {{v}}. The right balance of breathability and protection.",benefit_wheel_shallow:"Shallow {{v}} mm rim profile keeps the wheel light and lively for climbs and accelerations.",benefit_wheel_mid:"{{v}} mm rim depth balances aero gain and crosswind stability for all-round road riding.",benefit_wheel_deep:"Deep {{v}} mm aero profile holds speed on flats and rolling terrain so you save energy for the climbs.",benefit_wheel_weight:"At {{v}}, accelerations and climbs feel noticeably lighter under pedaling.",benefit_wheel_weight_from:"{{v}}, accelerations and climbs feel noticeably lighter under pedaling.",benefit_wheel_brake:"{{v}} compatibility means a clean install on modern road frames.",benefit_wheel_tubeless:"Tubeless-ready for lower pressures, better grip, and far fewer pinch flats.",benefit_tire_tubeless:"Tubeless-compatible setup lets you run lower pressure for more grip and fewer flats.",benefit_tire_surface:"Tuned for {{v}} so the tread and casing match the surface you actually ride.",benefit_tire_casing:"{{v}} casing gives a smoother, more compliant ride feel over rough tarmac.",benefit_tube_material:"{{v}} construction balances weight, durability and easy on-the-road repairs.",benefit_tube_valve:"{{a}} valve in {{b}} length fits modern deeper rims without an extender.",benefit_helmet_use:"Designed for {{v}}. The protection, fit and ventilation are tuned to that ride style.",benefit_eyewear_use:"Built for {{v}}. Lens, coverage and grip are matched to that environment.",benefit_ideal_for:"Ideal for {{v}}. Chosen by riders who do exactly that.",chooseThisOption:"Choose this option",selected:"Selected",savedToWishlist:"Saved to wishlist",removedFromWishlist:"Removed from wishlist",removeFromWishlist:"Remove from wishlist",saveToWishlist:"Save to wishlist",freeConsultation:"Free consultation before purchase",whiteGloveDelivery:"Free EU shipping from {{eu}}",required:"Required",chooseOptions:"Choose options",sticky:{chooseSize:"Cho
2ose your size",chooseColor:"Choose a color",chooseLength:"Choose length",retry:"Retry"},viewProduct:"View product",quickSpecs:"Quick Specs",stickyAddError:"Couldn't add. Tap to retry",aiGuide:{sectionLabel:"Expert product guide",bestFor:"Best for",notIdealFor:"Not ideal for",designedFor:"Designed for",whoIsThisFor:"Who is this for?",experienceLevel:"Experience level",priorities:"Priorities",typicalUse:"Typical use",bestUsedOn:"Best used on",useCases:"Use cases",suitableFor:"Suitable for",ratingsTitle:"Where it performs",terrain:"Terrain",performance:"Performance",whyChooseIt:"Why choose it",keyBenefits:"Key benefits",honestGuidance:"Honest guidance",limitations:"Limitations",idealConditions:"Ideal conditions",compatibleWith:"Compatible with",compatibility:"Compatibility",expertOpinion:"Expert opinion",approvedRecommendation:"Approved recommendation",chooseThisWhen:"Choose this when",considerAlternativeWhen:"Consider another option when",comparedWith:"Compared with",comparisonTitle:"Product comparison",thisProduct:"This product",price:"Price",buyingQuestions:"Buying questions",faqTitle:"Frequently asked questions",terrainKeys:{flat:"Flat",rolling:"Rolling",climbing:"Climbing",descending:"Descending",crosswind:"Crosswind"},performanceKeys:{weightEfficiency:"Weight efficiency",climbing:"Climbing",aerodynamics:"Aerodynamics",weight:"Low weight",stiffness:"Stiffness",comfort:"Comfort",durability:"Durability",handling:"Handling",breathability:"Breathability",weather_protection:"Weather protection",ease_of_use:"Ease of use",value:"Value"}},combinationUnavailablePrice:"Price unavailable for this combination",findRightWheelset:"NOT SURE WHICH WHEELSET? FIND YOUR MATCH IN 60 SECONDS",clubPrice:{line:"Your club price: {{price}}. Applied automatically at checkout."},relatedCollections:{heading:"// PAIR THIS WITH",tubes:"Inner tubes",wheels:"Wheelsets",tires:"Road tires",saddles:"Saddles",pedals:"Pedals",eyewear:"Eyewear",helmets:"Helmets",jerseys:"Jerseys",bibs:"Bib shorts",socks:"Cycling socks"},relatedTools:{heading:"Tools that go with this product",pressure:{title:"Dial in your tire pressure",desc:"Get a starting front/rear pressure tuned to your weight, tires and surface."},wheel:{title:"Find the right wheelset",desc:"Match depth, width and weight to your riding style."},fit:{title:"Fix what's wrong with your fit",desc:"Translate on-bike pain into the exact adjustment that solves it."}},sizeFinder:{title:"Find my size",height:"Height (cm)",weight:"Weight (kg)",build:"Build",build_slim:"Slim",build_regular:"Regular",build_athletic:"Athletic",suggestion:"Suggested starting size",use:"Use this",prompt:"Enter your height and weight for a starting size.",disclaimer:"Estimate only. Fit varies by brand and cut. Use the size chart for measured sizing."},trust:{deliveryLabel:"Free shipping",deliverySub:"EU from {{eu}} · Slovenia from {{si}}",deliveryLabelRest:"Delivery",deliverySubRest:"Calculated at checkout",returnsLabel:"Returns",returnsSub:"14-day EU withdrawal · see policy",secureLabel:"Secure Checkout",secureSub:"Encrypted payments",supportLabel:"Expert Support",supportSub:"Cyclist-to-cyclist advice"},sizeChart:{trigger:"Size chart",unitsHint:"All measurements in centimetres"},soldOutOptions:"Sold out · see options"},pdp_glance:{apparel_fit_fallback_label:"Race-ready cut",apparel_fit_fallback_value:"Stays in place on long rides. No flapping or riding up.",apparel_fit_label:"{{v}} cut",apparel_fit_value:"Stays in place on long rides. No flapping or riding up.",apparel_temp_label:"Built for {{v}}",apparel_temp_value:"Matched to your real riding conditions, not generic seasons.",apparel_fabric_label:"Performance fabric",apparel_fabric_value:"Breathable and quick-drying so you stay cool and dry on hot efforts.",apparel_real_rides_label:"Made for real rides",apparel_real_rides_value:"Tuned for {{v}}. The right balance of comfort and performance.",apparel_men_label:"Men's fit",apparel_men_value:"Men's specific cut and sizing.",apparel_women_label:"Women's fit",apparel_women_value:"Women's specific cut and sizing.",helmet_vent_label:"Strong ventilation",helmet_vent_value:"Stays cool on hot climbs so you don't overheat at threshold.",helmet_light_label:"Lightweight feel ({{v}})",helmet_light_value:"Disappears on long rides. Less neck fatigue at the end.",helmet_purpose_label:"Purpose-built shape",helmet_purpose_value:"Aero, fit and protection tuned for {{v}}.",helmet_cert_label:"Certified protection",helmet_cert_value:"{{v}}. Meets the safety standards riders expect.",eyewear_lens_label:"{{v}} lens",eyewear_lens_value:"Sharper contrast on the road. See surface changes earlier.",eyewear_photo_label:"All-day clarity",eyewear_photo_value:"Lens adapts from bright sun to shadow without swapping pairs.",eyewear_coverage_label:"Tuned coverage",eyewear_coverage_value:"Frame, lens and grip are matched to {{v}}.",eyewear_frame_label:"Secure frame",eyewear_frame_value:"Stays put on rough roads. No slipping when you're sweating.",eyewear_extra_label:"Extra lenses included",eyewear_extra_value:"Ready for changing light without buying spares separately.",wheels_light_label:"Light {{v}} mm rims",wheels_light_value:"Lively under acceleration and quick on steep climbs.",wheels_balanced_label:"Balanced {{v}} mm profile",wheels_balanced_value:"Aero gain without crosswind drama. True all-rounder.",wheels_deep_label:"Deep {{v}} mm aero",wheels_deep_value:"Holds speed on flats and rollers, saving watts for the climbs.",wheels_depth_label:"{{v}} mm rim depth",wheels_depth_value:"Profile chosen to balance aero gain and handling.",wheels_weight_label:"Light at {{v}}",wheels_weight_value:"Accelerations and climbs feel noticeably easier under pedaling.",wheels_tubeless_label:"Tubeless-ready",wheels_tubeless_value:"Run lower pressure for more grip and far fewer pinch flats.",wheels_brake_label:"{{v}} ready",wheels_brake_value:"Clean install on modern road and gravel frames.",wheels_purpose_label:"Purpose-built",wheels_purpose_value:"Optimized for {{v}}, not a generic do-everything wheel.",tires_tubeless_label:"Tubeless ready",tires_tubeless_value:"Lower pressure, more grip, and far fewer flats on the road.",tires_casing_label:"Supple casing",tires_casing_value:"Smoother ride feel and better grip on rough or cold tarmac.",tires_surface_label:"Surface-tuned tread",tires_surface_value:"Pattern and rubber chosen for {{v}}. Predictable in corners.",tires_size_label:"Size {{v}}",tires_size_value:"Modern width for real-world comfort and rolling speed.",tubes_tpu_label:"Ultralight TPU",tubes_tpu_value:"A fraction of the weight of butyl. Saves real grams per wheel.",tubes_material_label:"{{v}} construction",tubes_material_value:"Reliable, easy to patch on the road when it matters.",tubes_rims_label:"Fits modern rims",tubes_rims_value:"{{v}}. Works with deeper aero rims without an extender.",tubes_compat_label:"Fits {{v}}",tubes_compat_value:"Wide compatibility across road and endurance tire widths.",bikes_geo_label:"Purpose-built geometry",bikes_geo_value:"Built for {{v}}. Handling and fit are tuned to that ride style.",bikes_frame_label:"{{v}} frame",bikes_frame_carbon_value:"Stiff where it matters for power, compliant where it matters for comfort.",bikes_frame_other_value:"Proven material balance of weight, comfort and durability.",b
2ikes_clearance_label:"{{v}} tire clearance",bikes_clearance_value:"Room for wider, more comfortable tires on rough roads or gravel.",bikes_groupset_label:"Spec: {{v}}",bikes_groupset_value:"Reliable shifting and braking from a proven complete build.",bikes_frameset_label:"Frameset only",bikes_frameset_value:"Build it your way with the components you actually want.",components_compat_label:"Wide compatibility",components_compat_value:"{{v}}. Drops into modern setups without surprises.",components_weight_label:"Light at {{v}}",components_weight_value:"Real grams saved where you actually feel them.",components_material_label:"{{v}} construction",components_material_value:"Stiffness and durability where the part is loaded most.",components_purpose_label:"Purpose-built",components_purpose_value:"Designed for {{v}}, not a generic do-everything part.",acc_compat_label:"Drop-in fit",acc_compat_value:"{{v}}. Installs cleanly without extra adapters.",acc_conn_label:"{{v}} connectivity",acc_conn_value:"Pairs with the head units and apps riders actually use.",acc_type_value:"Built for the road: durable, weatherproof and ride-ready.",acc_light_label:"Light at {{v}}",acc_light_value:"Disappears in your jersey or on the bike."},pdp_specs:{Model:"Model",Dimensions:"Dimensions","Stack Height":"Stack Height","Q Factor":"Q Factor",Float:"Float",Cleats:"Cleats",Bearings:"Bearings",Spindle:"Spindle",Body:"Body","Power Accuracy":"Power Accuracy",Battery:"Battery","Battery Life":"Battery Life",Charging:"Charging","Water Resistance":"Water Resistance",Mount:"Mount",Included:"Included","Lens Material":"Lens Material","Lens Options":"Lens Options","Frame Options":"Frame Options",Polarized:"Polarized","Filter Category":"Filter Category","Light Transmission":"Light Transmission",Transition:"Transition",Testing:"Testing","Product Type":"Product type","Rim Type":"Rim type",Freehub:"Freehub",Construction:"Construction",Ventilation:"Ventilation",Weight:"Weight",Certification:"Certification",Safety:"Safety","Fit System":"Fit System",Buckle:"Buckle","Intended Use":"Intended Use",Lens:"Lens","Lens Type":"Lens Type","UV Protection":"UV Protection",Frame:"Frame","Extra Lenses":"Extra Lenses","Rim Depth":"Rim Depth","Brake Type":"Brake Type",Tubeless:"Tubeless",Material:"Material","Frame Material":"Frame Material","Tire Clearance":"Tire Clearance",Groupset:"Groupset",Compatibility:"Compatibility",Connectivity:"Connectivity",Type:"Type",Casing:"Casing",TPI:"TPI",Surface:"Surface",Size:"Size",Valve:"Valve","Valve Length":"Valve Length","Width Range":"Width Range",Temperature:"Temperature","Best For":"Best For",Conditions:"Conditions",Fit:"Fit",Gender:"Gender",valueVents:"{{count}} vents"},availability_msg:{availableToOrder:"Available to order",availableToOrderContact:"Contact us for current lead time.",inStock:"In stock · ships from Ljubljana",inStockMadeToOrder:"Made to order · ships in 10–14 days from Ljubljana",outOfStock:"Currently out of stock",notifyMe:"Notify me",emailLabel:"Email address",emailPlaceholder:"[email protected]",invalidEmail:"Please enter a valid email",notifySuccess:"We'll email you the moment it's back.",notifyConfirmed:"You're on the list. We'll email you when it's back.",notifyError:"Something went wrong. Try again.",privacyNote:"One email when it lands. Unsubscribe anytime.",collection:{wheels:"Wheels are built to order. We confirm the lead time before dispatch.",customBuilds:"Custom builds are made to order. Typical lead time 2 weeks to 6 months depending on spec and component availability. Leave your email and we'll confirm a delivery window.",bikes:"Complete bikes: typical lead time 2 weeks to 6 months depending on model and component availability.",frames:"Frames: typical lead time 2 weeks to 6 months depending on model and supplier availability.",groupsets:"We do not currently sell groupsets separately. Contact us for a custom build.",apparel:"Apparel typically restocks within 2–6 weeks.",casual:"Casual collection: delivered in 5–10 business days.",default:""},notifyAlreadyOnList:"You're already on the list. We'll email you when it's back.",pickupLabel:"Reserve for in-store pickup at our Ljubljana atelier",restockAsk:"Want to know when it's back? Ask us and we'll tell you what we know.",restockAskLink:"Ask about this product",seeSimilar:"See other {{collection}}"},shopAll:"SHOP ALL",loadMore:"LOAD MORE",failedToLoad:"Failed to load products: {{error}}
2",noProductsFound:"No products found",bikeFitPage:{title:"BIKE FIT FIXER",subtitle:"Get personalized solutions for your cycling discomfort",whatsBothering:"WHAT'S BOTHERING YOU?",selectIssue:"Select your issue",whenHappens:"WHEN DOES IT HAPPEN?",whenOccur:"When does it occur?",whatBike:"WHAT BIKE DO YOU RIDE?",bikeType:"Your bike type",experience:"YOUR CYCLING EXPERIENCE",experienceLevel:"Experience level",getMyFixes:"GET MY FIXES",personalizedFixes:"Your personalized fixes",followSteps:"Follow these steps to resolve your issue",moreTips:"Get more bike fit tips",subscribeTips:"Subscribe for personalized advice based on your fit issue",subscribe:"SUBSCRIBE",emailPlaceholder:"[email protected]",safetyNotice:"These are general bike fit recommendations. If pain persists or worsens, consult a professional bike fitter or medical professional. Always make small adjustments and test before long rides.",safetyLabel:"Safety Notice:",kneeFront:"Knee pain (front)",kneeBack:"Knee pain (back)",kneeOutside:"Knee pain (outside)",numbHands:"Numb hands",saddleDiscomfort:"Saddle discomfort",numbFeet:"Numb feet",lowerBack:"Lower back pain",neckPain:"Neck pain",startOfRide:"Start of ride",duringRide:"During ride",endOfRide:"End of ride",afterRide:"After ride",roadBike:"Road bike",gravelBike:"Gravel bike",mountainBike:"Mountain bike",ttTri:"Time trial / Triathlon",beginner:"Beginner (0-1 year)",intermediate:"Intermediate (1-3 years)",advanced:"Advanced (3-5 years)",expert:"Expert (5+ years)"},customBuild:{title:"START YOUR CUSTOM ROAD BIKE BUILD",subtitle:"Answer a few questions and we'll recommend a custom build direction based on how you ride, your position and your goals.",noPressure:"Premium & calm. No pressure. We usually reply within",oneWorkingDay:"1 working day",budgetDirection:"1) BUDGET & DIRECTION",budgetRange:"Budget range",bikeBestAt:"What should the bike be best at?",howYouRide:"2) HOW YOU RIDE",ridingStyle:"Riding style",preferredPosition:"Preferred riding position",equipmentPref:"3) EQUIPMENT PREFERENCE",preferredGroupset:"Preferred Shimano groupset",riderInfo:"4) RIDER INFO",height:"Height (cm)",weight:"Weight (kg)",yourName:"Your name",email:"Email",consent:"Save my details so Approved Cycling can contact me about my custom bike build.",submit:"GET MY CUSTOM BUILD RECOMMENDATION",thankYou:"THANK YOU, {{name}}!",thankYouDesc:"We'll review your build preferences and get back to you within 1 working day with a custom recommendation.",select:"Select"},tirePressurePage:{title:"TIRE PRESSURE CALCULATOR",subtitle:"Developed by <strong>Approved Cycling</strong> using real-world custom builds, modern tire casings and rider feedback. Optimized for speed, comfort and control, not conservative lab safety margins.",riderWeight:"RIDER WEIGHT (KG)",bikeWeight:"BIKE + KIT WEIGHT (KG)",bikeType:"BIKE TYPE",tireWidth:"TIRE WIDTH (MM)",setup:"SETUP",surface:"SURFACE",priority:"PRIORITY",getMyPressure:"GET MY PRESSURE",reset:"RESET",recommendedTitle:"Your recommended starting pressures",front:"FRONT",rear:"REAR",note:'Our recommendations are intentionally slightly lower than many "safe default" calculators. They reflect modern tires, wider rims and performance-focused riding. Fine-tune ±0.1–0.2 bar based on feel.',noteLabel:"Ap
2proved Cycling note:",safety:"Never exceed your tire or rim pressure limits (especially hookless). If you feel rim strikes or instability → add pressure. If the bike chatters or lacks grip → reduce slightly.",safetyLabel:"Safety:"},trainingPlan:{title:"MONTHLY CYCLING TRAINING PLAN",subtitle:"Get your personalized 4-week training plan with nutrition and gear recommendations",emailLabel:"📧 Your Email",emailDesc:"We'll save your progress and remind you next month",emailPlaceholder:"[email protected]",todayDate:"1. Today's Date",fitnessLevel:"2. What is your current fitness level?",currentActivity:"3. What have you been doing until this point?",currentActivityPlaceholder:"Be specific - this helps us create the perfect progression for you",weeklyVolume:"4. Current weekly cycling volume?",ftpKnowledge:"5. Do you know your current FTP?",ftpValue:"6. Your FTP in watts",sessionTime:"7. Average time per training session?",sessionTimeNote:"Be realistic - we'll design workouts that fit your schedule",injuries:"8. Any current injuries or limitations?",injuriesPlaceholder:"We'll adjust your plan to work around any issues",planExperience:"9. Completed a structured training plan before?",yearlyVolume:"10. Last year's total cycling volume?",upcomingEvent:"11. Do you have an upcoming event?",eventDate:"12. Event Date",eventType:"13. Event Type",distance:"14. Distance (km)",elevation:"15. Elevation (meters)",trainingDays:"16. Training days per week?",gymTraining:"17. Do you do gym/strength training?",goals:"18. Goals (select all that apply)",longRideDays:"19. Preferred long ride days (select 1-2)",indoorTraining:"20. Indoor training access?",trainWith:"21. Do you train with a...?",trainWithNote:"We'll customize workouts based on your available metrics",submit:"🚀 GENERATE MY 4-WEEK PLAN",thankYou:"🎉 THANK YOU!",thankYouTitle:"Your Personalized 1-Month Training Plan is Being Generated",thankYouDesc:"We've saved your progress. Check your email at <strong>{{email}}</strong> for your plan.",seeYou:"📅 See you in 4 weeks! We'll remind you to generate your next month's plan.",startNew:"START NEW PLAN",yes:"Yes",no:"No",select:"Select..."},wheelRec:{label:"WHEEL RECOMMENDATION",title:"FIND THE RIGHT WHEELS FOR HOW YOU RIDE",subtitle:"Answer a few focused questions and we'll recommend the wheel setup that makes the biggest difference for your riding, without guesswork or pressure.",yourRiding:"1) YOUR RIDING",whatBike:"What bike do you ride?",bikePlaceholder:"Brand & model",howRide:"How do you mostly ride?",performanceFocus:"2) PERFORMANCE FOCUS",whatImprove:"What do you want to improve most?",typicalTerrain:"Typical terrain",riderSetup:"3) RIDER & SETUP",yourWeight:"Your weight (kg)",currentTireWidth:"Current tire width (mm)",budgetDirection:"4) BUDGET & DIRECTION",wheelBudget:"Wheel budget range",yourName:"Your name",email:"Email",submit:"GET MY WHEEL RECOMMENDATION",noSpam:"No spam. Personal reply within 1 working day.",thankYou:"THANK YOU, {{name}}!",thankYouDesc:"We'll review your riding profile and send a personal wheel recommendation within 1 working day.",select:"Select"},letsRidePage:{label:"A CLUB BUILT BY RIDERS",heading:"APPROVED CLUB",description:"A real cycling club for riders who actually show up. Licensed under the Slovenian Cycling Federation, open to anyone serious about training, racing, and weekends on two wheels.",franjaLabel:"MARATON FRANJA 2026",franjaHeading:"RIDE WITH US",franjaDesc:"Pin a Approved Club number at Maraton Franja 2026 and ride in the colors of a club that takes the road seriously. Doors open end of May 2026.",license:"Race Under Our License",licenseDesc:"An official KZS license, ready to pin on. Toe the line at amateur races without the paperwork headache.",communityRides:"Saturday Crew, Always",communityRidesDesc:"Group rides, café stops, and a chat full of riders who actually answer when you ping them.",organizedEvents:"Camps, Races, Big Days",organizedEventsDesc:"Training camps, club races, and seasonal challenges. Show up, clip in, ride hard.",basedInSlovenia:"Rooted In Ljubljana",basedInSloveniaDesc:"Home base in Ljubljana, routes across Slovenia and the borders. We ride where the roads are good.",memberBenefits:"WHY YOU'LL JOIN",discountTitle:"20% Off, Year Round",discountDesc:"Club members get 20% off the entire Approved Cycling range. Apparel, parts, the lot.",jerseysTitle:"LTD Club Jerseys",jerseysDesc:"Limited-run, custom club kit. Made for members. Not sold to anyone else. Ever.",partnerTitle:"Partner Perks",partnerDesc:"Insider pricing on Nich, CeramicSpeed, PCW, Chaser, Assos, Assioma and Berk. The brands we actually ride.",annualMembership:"ANNUAL MEMBERSHIP",registrationOpens:"Doors open end of May 2026",heroAlt:"Approved Club: riders, racers and weekend crews built on real kilometers",heroDescriptionLong:"A real cycling club for riders who actually show up. Licensed under the Slovenian Cycling Federation, open to anyone serious about training, racing, and weekends on two wheels.",ctaJoin:"RIDE WITH US",ctaBenefits:"WHAT YOU GET",ctaOpenDirectory:"MEET THE RIDERS",earlyBirdEyebrow:"// FIRST 100 RIDERS · LIMITED",earlyBirdHeading:"SIGN UP BEFORE 15 MAY · FREE LTD CLUB JERSEY",earlyBirdDesc:`Get in early and we'll send you a free LTD 
2jersey from our "Life Is A Journey" collection. Members only. Never restocked, never resold.`,earlyBirdDeadline:"DEADLINE",earlyBirdDate:"15 MAY 2026",franjaEyebrow:"// MARATON FRANJA 2026",franjaTitle:"PIN A NUMBER. RIDE WITH THE CREW.",franjaDescLong:"Race Maraton Franja in Approved Club colors, surrounded by club mates instead of strangers. Membership opens end of May 2026. First come, first on the start line.",franjaCountdown:"COUNTDOWN",franjaWhen:"MAY 2026",stravaEyebrow:"OPTIONAL STRAVA CONNECTION",stravaTitle:"CONNECT STRAVA · PRIVATE RECENT ACTIVITY",stravaDesc:"Optional Strava connection shows only your own recent activities privately for up to seven days. It does not power rankings, rewards, training recommendations, analytics or AI.",includedEyebrow:"// WHAT'S IN THE BOX",includedHeading:"EVERYTHING YOU NEED TO RIDE LIKE A PRO",perksEyebrow:"// THE GOOD STUFF",perksHeading:"REAL PERKS, NOT FINE PRINT",perkHighlight20:"20%",perkHighlightLtd:"LTD",perkHighlightVip:"VIP",directoryEyebrow:"// MEET THE CLUB",directoryHeading:"FACES, WATTS & KILOMETERS",directoryDesc:"Every member gets a rider card: your photo, your nickname, your season in numbers. You decide what shows. Nothing is forced.",directoryOpen:"OPEN DIRECTORY",directorySignIn:"SIGN IN TO ENTER",directoryFootnote:"// REAL MEMBERS · EMPTY SEASONS START AT 0",cardEyebrow:"// RACE CARD",cardFounding:"FOUNDING",cardNoPhoto:"NO PHOTO",cardAnonymous:"Anonymous Rider",cardDefaultLine:"Approved Club rider",cardClubSince:"CLUB SINCE {{year}} · RIDER_{{num}}",cardKmYear:"KM / YEAR",cardElevM:"ELEV / M",cardEff30d:"EFF · 30D",cardFtpEst:"FTP EST",cardEarnedBadges:"EARNED BADGES",cardClubMember:"CLUB MEMBER",cardJoin:"JOIN →",membershipEyebrow:"// MEMBERSHIP",membershipHeading:"ONE PRICE. ONE SEASON. ALL IN.",membershipSeason:"/ SEASON 2026",membershipPerk:"SIGN UP BY 15 MAY · FREE LTD JERSEY",emailPlaceholder:"[email protected]",notifyMe:"KEEP ME POSTED",sending:"SENDING",subscribed:"YOU'RE IN",consentLabel:"Send me Approved Club and Approved Cycling updates: drops, rides, club news. Unsubscribe whenever.",privacyPolicy:"Privacy Policy",consentRequired:"Tick the box so we can email you when doors open.",subscribeSuccess:"You're on the list. We'll ping you the moment doors open.",subscribeError:"Couldn't sign you up. Give it another go."},letsRideMembersPage:{metaTitle:"Approved Club Members Directory | Approved Cycling Club",metaDescription:"Join Approved Club. €100/year membership, club rides, events, community and member benefits.",eyebrow:"THE WHOLE CLUB · ONE PAGE",heading:"THE RIDERS",description:"Every member who chose to show up on the directory. Filter by country and discipline, scan the cards, and see who's riding what: kilometers, climbing, badges, the lot.",filter:"FILTER",country:"Country",discipline:"Discipline",allCountries:"ALL COUNTRIES",allDisciplines:"ALL DISCIPLINES",clear:"CLEAR",ridersCounter:"RIDERS",noMatchesEyebrow:"// NO MATCHES",noMatchesTitle:"No riders found",noMatchesDesc:"Try clearing the filters, or be the first to fly the flag for this country & discipline.",clearFilters:"CLEAR FILTERS",ctaOpen:"OPEN →",ctaJoin:"JOIN →",ctaEyebrow:"// YOUR CARD, YOUR CALL",ctaHeading:"Want your race card on this page?",ctaDesc:"Join the Approved Club, flip the visibility switch, and your card lands here. Photo, stats, badges: everything stays opt-in.",ctaBuildCard:"BUILD MY CARD",ctaJoinClub:"JOIN THE CLUB",notInClub:"NOT IN CLUB",notInClubLine:"Riding solo · not a club member",guestRider:"GUEST RIDER",statusLabel:"// STATUS",groupClub:"// CLUB MEMBERS · {{count}}",groupGuests:"// GUEST RIDERS · NOT IN CLUB · {{count}}"},hero:{eyebrow:"PREMIUM CYCLING SHOP · LJUBLJANA",headline:"Custom road bikes, built in Ljubljana.",subhead:"A premium road cycling shop in Ljubljana building custom road bikes with Pinarello, carbon wheels and pro-grade kit from ASSOS, Princeton CarbonWorks and CeramicSpeed. Free EU shipping from {{eu}}, Slovenia from {{si}}.",ctaPrimary:"START YOUR CUSTOM BUILD",ctaSecondary:"SHOP ROAD BIKES",exploreLabel:"EXPLORE",exploreCustom:"Custom builds",exploreRoad:"Road bikes",exploreWheels:"Carbon wheels",exploreApparel:"Cycling clothing",exploreConsult:"Book consultation",ctaShort:"Custom build"}
2,why:{label:"WHY APPROVED",heading:"Built around how you actually ride.",realRiders:"Real rider experience",realRidersDesc:"We ride, test and build every day. Our advice comes from the road, not a spec sheet.",premiumBrands:"Premium brands only",premiumBrandsDesc:"Pinarello, Nich, Princeton CarbonWorks, Assos, CeramicSpeed and more. Carefully curated.",customBuilds:"Custom builds, done right",customBuildsDesc:"From frame to finishing kit. Built for your position, riding style and goals.",honestHelp:"Honest help choosing",honestHelpDesc:"Real guidance, not a sales pitch. We tell you what actually makes a difference."},categories:{label:"SHOP BY CATEGORY",heading:"Find the right thing for your next ride.",subtitle:"Whether you're after a full custom bike, a meaningful upgrade or fresh kit, start here.",customBikes:"Custom Bikes",wheels:"Wheels",apparel:"Apparel",helmets:"Helmets",bikeParts:"Bike Parts",shop:"SHOP",shopByCategory:"Shop by category"},language:{label:"Language",current:"{{language}}",change:"Change language"},meta:{homeTitle:"Custom Road Bike Builds in Ljubljana | Approved Cycling"},account:{signOut:"SIGN OUT",shell:{title:"Account",user:"User",club:"Club",admin:"Admin",backToShop:"Back to shop",clubLocked:"Club members only",openMenu:"Open account menu",closeMenu:"Close menu",primaryNav:"Account navigation"},nav:{groupRider:"RIDER",groupClub:"CLUB",Overview:"Overview",Profile:"Profile",Orders:"Orders",Riding:"Riding",Rewards:"Rewards",Referrals:"Referrals",Saved:"Saved",Settings:"Settings",LetsRide:"Approved Club",groupClubEssentials:"CLUB ESSENTIALS",groupClubTools:"CLUB TOOLS",groupMore:"MORE",groupMyRiding:"MY RIDING",groupNews:"NEWS"},overview:{welcomeEyebrow:"WELCOME BACK",context:"Your next ride, recent club activity and everything waiting on you.",rider:"Rider",lastRide:"Last logged ride · {{name}} on {{date}}.",untitled:"Untitled",stravaPending:"Strava is connected. Sync to populate your ride history.",stravaPitch:"Optional Strava connection shows only your own recent activities privately for up to seven days. It does not power rankings, rewards, training recommendations, analytics or AI.",openRiding:"OPEN RIDING HUB",connectStrava:"CONNECT STRAVA",viewRewards:"VIEW REWARDS",statOrders:"ORDERS",statLatest:"Latest · {{name}}",statNoOrders:"No orders yet",statRewards:"ACTIVE REWARDS",statRewardsNote:"{{m}} milestone · {{l}} loyalty",statRides:"RIDES THIS MONTH",statCurrentMonth:"Current month",statSaved:"SAVED ITEMS",statBrowseSave:"Browse to save",statInWishlist:"In your wishlist",stravaStatus:"STRAVA STATUS",connected:"Connected",lastSync:"Last sync · {{when}}",awaitSync:"Awaiting first sync",kmThisSeason:"{{km}} km this season",notConnected:"Not connected",connectPitch:"Connect to track distance, climbing, and earn rewards.",connectNow:"CONNECT NOW",nextUp:"NEXT UP",clubRide:"Club ride",viewClub:"VIEW CLUB",noUpcoming:"No upcoming rides",browseClub:"Browse club rides to RSVP.",discoverPitch:"Discover Approved Club for group rides.",discoverLetsRide:"DISCOVER APPROVED CLUB",snapshotEyebrow:"REWARDS SNAPSHOT",snapshotTitle:"Your active perks",milestonesUnlocked:"MILESTONES REACHED",loyaltyGifts:"LOYALTY GIFTS",rolling12:"ROLLING 12-MO SPEND",openRewards:"OPEN REWARDS HUB",recentOrders:"Recent orders",ordersHint:"View order history and shipments",savedProducts:"Saved products",savedHintEmpty:"Tap the heart on any product to save it",savedHintCount_one:"{{count}} item in your wishlist",savedHintCount_other:"{{count}} items in your wishlist",letsRideClub:"Approved Club",clubMemberHint:"Club rides, memory archive, and members-only drops",clubGuestHint:"Rides, memories, and limited drops: the community layer",enterClub:"ENTER CLUB HUB"},profile:{eyebrow:"RIDER PROFILE",title:"Your details",loading:"LOADING...",saving:"SAVING...",save:"SAVE",savedToast:"Profile updated.",displayName:"DISPLAY NAME",location:"LOCATION",discipline:"DISCIPLINE",selectPlaceholder:"Select…",weight:"WEIGHT (KG)",ftp:"FTP (W)",birthday:"BIRTHDAY",gender:"GENDER",genderNone:"Prefer not to say",genderMen:"Men",genderWomen:"Women",genderHint:"Used to tailor kit suggestions to fit.",email:"EMAIL"},wishlist:{eyebrow:"SAVED PRODUCTS",title:"Your wishlist",emptyTitle:"No saved products yet.",emptyHint:"Tap the heart on any product to save it here.",browseCta:"BROWSE THE STORE",savedBadge:"SAVED",noImage:"No image",removeAria:"Remove from wishlist",footer:"Saved across all devices when signed in · Tap a product to view details and add to cart"},settings:{eyebrow:"DASHBOARD // PREFERENCES",title:"Navigation settings",statusChecking:"CHECKING…",statusDisabled:"SWIPE DISABLED",statusEnabled:"SWIPE ENABLED",reasonLoading:"Loading your saved preference.",reasonDisabled:"Your device requests reduced motion and your preference respects it.",reasonRespects:"Reduced motion is not active on this device.",reasonOverride:"You've chosen to keep swipe on regardless of reduced motion.",toggleLabel:"Disable swipe navigation when reduced motion is on",toggleDesc:"When your device requests reduced motion, horizontal swipe between Overview, Profile and Orders will be turned off. Tap the bottom tab bar instead.",reducedActive:"REDUCED MOTION ACTIVE ON THIS DEVICE",toggleAria:"Disable swipe navigation when reduced motion is enabled",toastErrorTitle:"Couldn't save preference",toastErrorDesc:"Please try again in a moment."},strava:{loading:"LOADING...",connectEyebrow:"STRAVA INTEGRATION",connectTitle:"Connect Strava",connectIntro:"Optional Strava connection shows only your own recent activities privately for up to seven days. It does not power rankings, rewards, training recommendations, analytics or AI.",connectCta:"CONNECT WITH STRAVA",connEyebrow:"STRAVA // CONNECTION",connTitle:"Connected",syncing:"SYNCING...",syncNow:"SYNC NOW",badgeConnected:"CONNECTED",athleteId:"Athlete ID",syncStatus:"SYNC STATUS",lastSync:"LAST SYNC",pen
2dingFirst:"Pending first sync",disconnectCta:"DISCONNECT STRAVA",totalDistance:"TOTAL DISTANCE",elevationGain:"ELEVATION GAIN",ridesMonth:"RIDES THIS MONTH",avgWeeklyHours:"AVG WEEKLY HOURS",thisSeason:"This season",currentMonth:"Current month",last4Weeks:"Last 4 weeks",riderProfile:"RIDER PROFILE",ftpHintBefore:"Add FTP in",ftpHintLink:"profile",ftpHintAfter:"for power-accurate TSS.",ctl:"FITNESS (CTL)",ctlNote:"28-day load",atl:"FATIGUE (ATL)",atlNote:"7-day load",tsb:"FORM (TSB)",weeklyHours:"WEEKLY HOURS",fourWeekAvg:"4-week avg",last6Weeks:"LAST 6 WEEKS",volumeIntensity:"Volume & intensity",legendTss:"TSS (LOAD)",legendHours:"HOURS",recoveryEyebrow:"RECOVERY STATE",tsbFormula:"FORM (TSB) = CTL − ATL · NEGATIVE = LOAD · POSITIVE = FRESH",planEyebrow:"NEXT 7 DAYS",planTitle:"Suggested plan",targetLoad:"TARGET LOAD",planFooter:"PLAN ADAPTS WEEKLY · BASED ON YOUR ROLLING 4-WEEK LOAD AND RIDER PROFILE",historyEyebrow:"RIDE HISTORY",historyTitle:"Recent rides",untitledRide:"Untitled ride",thisWeek:"THIS WEEK",routesTitle:"Routes, GPX & gallery",routesIntro:"Curated routes for the week ahead. Download the GPX, scan the gallery from past rides, and show up ready.",gpx:"GPX",morePhotos:"+{{count}} PHOTOS",clubsEyebrow:"CLUBS",clubMemberTitle:"Approved Club: your club",clubGuestTitle:"Club status",clubMemberLine:"You're a Approved Club member.",nextClubRide:"NEXT CLUB RIDE",clubRideFallback:"Club ride",noClubRides:"No upcoming rides on your calendar.",openClubHub:"OPEN CLUB HUB",clubGuestPitch:"You haven't joined a club yet. Approved Club is our 
2community: group rides, training camps, and members-first drops.",discoverLetsRide:"DISCOVER APPROVED CLUB",gearEyebrow:"GEAR FOR YOUR PROFILE",gearTitle:"Recommended next",pickedFor:"PICKED FOR {{label}}",footerNote:"Ride readiness uses only your own connected Strava activity summaries.",day:{MON:"MON",TUE:"TUE",WED:"WED",THU:"THU",FRI:"FRI",SAT:"SAT",SUN:"SUN"},rider:{climber:{label:"CLIMBER",description:"High vertical density per kilometre. Built for gradients."},endurance:{label:"ENDURANCE",description:"Long, steady-state efforts dominate. Built for fondos and gravel."},allRound:{label:"ALL-ROUNDER",description:"Balanced volume. Versatile across terrain and intensity."},rouleur:{label:"ROULEUR / TT",description:"Flat, sustained power. Aero gains will move you most."}},recovery:{fresh:{label:"FRESH",cue:"You're rested. Good window for a hard session."},balanced:{label:"BALANCED",cue:"Productive load. Stay consistent and sleep well."},fatigued:{label:"FATIGUED",cue:"Carrying load. Insert recovery rides and prioritise sleep."}},plan:{monRecovery:{title:"Recovery",focus:"Z1 spin · 45 min",note:"Easy legs. Cadence 90+."},tueClimb:{title:"Climbing intervals",focus:"5×6 min @ Z4 on a steady gradient",note:"Long warm-up. Hold form through final rep."},tueTT:{title:"Sweet-spot blocks",focus:"3×15 min @ 88–94% FTP",note:"Long warm-up. Hold form through final rep."},tueThreshold:{title:"Threshold intervals",focus:"4×8 min @ Z4",note:"Long warm-up. Hold form through final rep."},wedEndurance:{title:"Endurance",focus:"Z2 · 1.5–3 h",note:"Nose-breathing pace. Fuel 60g carbs/h."},thuTempo:{title:"Tempo / openers",focus:"1 h with 3×8 min @ Z3",note:"Controlled. Don't dig."},friRest:{title:"Rest or mobility",focus:"Off the bike",note:"Sleep + stretch is training."},satClimbLong:{title:"Long climbing day",focus:"3+ h with 1500 m+ vertical",note:"Pre-fuel. Practise on-bike nutrition."},satLong:{title:"Long ride",focus:"4 h Z2",note:"Pre-fuel. Practise on-bike nutrition."},satGroup:{title:"Group ride / race pace",focus:"2.5–3 h with surges",note:"Pre-fuel. Practise on-bike nutrition."},sunCafe:{title:"Endurance + cafe stop",focus:"Z2 · 2 h",note:"Conversational. Reward miles."}},toastConnected:"Strava connected successfully.",toastConnectFailed:"Strava connection failed.",toastStartFail:"Could not start Strava connection.",toastDisconnectFail:"Could not disconnect.",toastDisconnected:"Strava disconnected.",toastSyncFail:"Sync failed.",toastZero:"Strava returned 0 activities. If wrong profile, disconnect and reconnect.",toastMilestone_one:"🏆 {{count}} new milestone reached!",toastMilestone_other:"🏆 {{count}} new milestones reached!",toastSynced_one:"Synced {{count}} activity.",toastSynced_other:"Synced {{count}} activities."},club:{eyebrow:"APPROVED CLUB",loading:"Loading…",nonMemberTitle:"A deeper layer of riding",nonMemberIntro:"Approved Club is our 
2community of riders who train together, share routes, and ride camps and special days out. It is not a discount tier. It is the human side of Approved Cycling: shared kilometers, real memories, and access to limited drops created for the club.",discoverCta:"DISCOVER APPROVED CLUB",memberTitle:"Welcome back to the club",memberIntro:"Your club hub. Upcoming rides, the season's archive and members-only drops live here.",upcoming:"Upcoming"},startHere:{eyebrow:"START HERE",title:"Three first moves",titleNamed:"Welcome, {{name}}: three first moves",progress:"{{done}} / {{total}}",time:"~3 MIN",done:"DONE",eyebrowStrava:"// 01 · CONNECT",stravaTitle:"CONNECT STRAVA · PRIVATE RECENT ACTIVITY",stravaSub:"Optional Strava connection shows only your own recent activities privately for up to seven days. It does not power rankings, rewards, training recommendations, analytics or AI.",stravaCta:"Connect",eyebrowSetup:"// 02 · LOG",setupTitle:"Log your bike setup",setupSub:"Saddle height, stem, tyres: keep what works on record.",setupCta:"Log my bike setup",eyebrowClub:"// 03 · JOIN",clubTitle:"Discover Approved Club",clubSub:"Three rides a week, scoreboard, members-only drops.",clubCta:"See club rides & perks",clubOpenTitle:"Open your club hub",clubOpenSub:"Routes, rides, and members-only drops are inside.",clubOpenCta:"Go to my club hub"},clubStartHere:{eyebrow:"NEW MEMBER START HERE",title:"A few quick steps",welcome:"WELCOME TO THE APPROVED CLUB",progress:"{{done}} / {{total}} · ~3 MIN",stepConsentLabel:"Accept ride consent",stepConsentCta:"Complete consent",stepWhatsappLabel:"Join WhatsApp community",stepWhatsappCtaJoin:"Join WhatsApp",stepWhatsappCtaSetup:"Set up consent",stepRiderCardLabel:"Create your rider card",stepRiderCardCta:"Edit rider card",stepRidesLabel:"Check upcoming rides",stepRidesCta:"View rides",stepPerksLabel:"View your club perks",stepPerksCta:"View perks"},news:{empty:"Nothing here yet. Check back soon.",feed:"Latest",intro:"New products, fresh stories, upcoming rides, latest videos and announcements, all in one feed.",title:"What's new"}},orders:{eyebrow:"ORDER HISTORY",title:"Your orders",loading:"LOADING...",errorTitle:"Couldn't load orders right now.",errorHint:"Order history requires a Shopify Admin API access token with read_orders scope. Once configured, your purchase history will appear here automatically.",empty:"No orders yet. Your purchases will appear here.",itemCount_one:"{{count}} item",itemCount_other:"{{count}} items"},scoreboardPromo:{badge:"€10 SCOREBOARD TICKET",noMembership:"// NO MEMBERSHIP REQUIRED",title:"Get on the board for €10",description:"Club challenges and recognition use Approved Cycling first-party club activity only.",bullet1:"Eligible from purchase through <1>31 Dec 2026</1>",bullet2:"Club challenges and recognition use Approved Cycling first-party club activity only.",bullet3:"Same monthly prizes as full club members + year-end giveaway entry",priceNote:"ONE-TIME · 2026 SEASON",cta:"ADD TICKET TO CART",ctaAdding:"ADDING…",ctaAdded:"ADDED TO CART",toastTitle:"Ticket added. Your cart is open",toastDesc:"Your €10 scoreboard ticket is in the cart. Finish checkout to lock in your spot for the 2026 season."},monthlyPrizes:{monthlyKicker:"// MONTHLY PRIZE",monthlyTitle:"Top man + top woman, every month",monthlyIntro:"At the end of each month the highest-scoring rider on the men's board and the women's board each win their pick of:",prize1Bold:"2× Approved water bottles (600 ml)",prize1Rest:"(Italian-made, our house bidons)",prize2Bold:"Approved Simple T-Shirt",prize2Rest:"(pick your size at checkout)",pickup:"PICKUP IN LJUBLJANA · OR SHIPPED WITH YOUR NEXT ORDER",yearEndKicker:"// YEAR-END GIVEAWAY · VELO BAR",yearEndTitle:"Full Frameset · valued at €{{value}}",yearEndIntro:"We close the season together at <1>Velo Bar in Ljubljana</1> and draw one rider for a complete <2>Approved Cycling frameset</2>. Same caliber we build our custom bikes around.",drawNoteBold:"Every rider in the scoreboard",drawNoteRest:"(ticket holders and full club members) gets one entry into the draw.",footnote:"DRAW DATE ANNOUNCED IN DECEMBER · MUST BE ON THE 2026 BOARD TO WIN"}
2,leaderboard:{joinTooltip:"Currently only in-person sign-up is available. Payment in cash."},kitMannequin:{yourKit:"YOUR KIT",signInPrompt:"Sign in to see which pieces fill the gaps in your kit, personalised to your rider profile.",signIn:"SIGN IN →",piece:"PIECE",pieces:"PIECES",kitChecklist:"KIT CHECKLIST",allSet:"ALL SET",toAdd:"{{count}} TO ADD",helmet:"Helmet",sunglasses:"Sunglasses",vest:"Vest",jersey:"Jersey",baseLayer:"Base layer",bibShorts:"Bib shorts",socks:"Socks",warmers:"Warmers",clearFilter:"CLEAR FILTER ×",fillTheGaps:"FILL THE GAPS",upgradePicks:"UPGRADE PICKS",pick:"PICK",picks:"PICKS",visibleOf:"{{shown}} OF {{total}}",season:"SEASON //",auto:"AUTO",summer:"SUMMER",springFall:"SPRING / FALL",winter:"WINTER",essentialsCovered:"Your essentials are covered. Browse below for upgrades.",noSuggestions:"No suggestions for the selected items yet.",loadingSuggestions:"Loading suggestions…",why:"WHY?",whyThisPick:"WHY THIS PICK?",noSignals:"No strong signals matched. Picked as a safe default from the {{category}} collection.",total:"TOTAL",manageYourKit:"MANAGE YOUR KIT →",suggestionsAria:"{{count}} suggestion(s) for {{label}}",loadingFor:"Loading suggestions for {{label}}",addToKit:"ADD TO KIT",adding:"ADDING…",equipped:"EQUIPPED ✓",addToKitAria:"Equip {{title}} to your mannequin",addToKitFailed:"Could not add to kit. Try again.",viewProduct:"VIEW",halo:{viewProduct:"View product →",viewProductAria:"View {{title}} product details",listboxAria:"Wardrobe carousel. Use arrow keys to try each item on the mannequin, Enter to open product details",currentlyWearing:"Currently wearing",tryItem:"Try",announce:"Now showing {{title}} on the mannequin. Item {{current}} of {{total}}.",previous:"Previous product",next:"Next product"},dock:{stylist:"Stylist",moving:"Moving. Arrows / Space to drop",showPanel:"Show stylist mannequin panel",panelLabel:"Floating stylist mannequin",expand:"Expand stylist panel",collapse:"Collapse stylist panel",hide:"Hide stylist panel",cornerTL:"top left",cornerTR:"top right",cornerBL:"bottom left",cornerBR:"bottom right",restingCustom:"at a custom position",restingDocked:"docked {{corner}}",handleGrabbed:"Stylist panel grabbed. Use arrow keys to move (Shift for larger steps), Space or Enter to drop here, Escape to cancel.",handleResting:"Stylist panel, currently {{location}}. Press Space or Enter to grab and move with arrow keys. Home or End jumps to top-left or bottom-right corner.",instructionsGrabbed:"Stylist panel is grabbed. Use arrow keys to move it freely anywhere on screen, Shift plus arrow for larger steps, Space or Enter to drop here, Escape to cancel.",instructionsResting:"Floating stylist panel. Drag the header with the mouse or touch to reposition anywhere on screen. With keyboard: Tab to the drag handle, press Space to grab, then arrow keys to move and Space to drop. Home or End jumps to the top-left or bottom-right corner."}},discountPopup:{eyebrow:"WELCOME OFFER",titleLine1:"{{amount}} off",titleLine2:"your first order",description:"Leave your email and get {{amount}} off your first order of {{min}} or more. We'll also email you about launches, offers and expert picks.",emailLabel:"Email address",emailPlaceholder:"[email protected]",consent:"I want Approved Cycling email offers and launch updates. I can unsubscribe anytime.",privacyPolicy:"Privacy Policy",submit:"GET MY CODE",submitting:"SAVING…",fineprint:"Orders of {{min}} or more. One use per customer.",invalidEmail:"Please enter a valid email address.",consentRequired:"Please confirm you want email offers from Approved Cycling.",saveError:"Could not save your email. Please try again.",toastErrorTitle:"Something went wrong",toastErrorDesc:"Please try again in a moment.",closeAria:"Close",closeOfferAria:"Close discount offer",successEyebrow:"WELCOME",successTitle:"Here's your code.",successDescription:"{{amount}} off your first order of {{min}} or more. Enter the code at checkout. One use per customer.",continueBrowsing:"CONTINUE BROWSING",codeLabel:"Your code",successEmailed:"We've also sent it to your inbox.",successReturning:"You're already on our list, so here it is again.",copyCode:"Copy code",copied:"Copied"},homepage:{hero:{imageAlt:"Premium custom road bike on Mediterranean waterfront"},why:{},wheels:{imageAlt:"Performance wheel upgrade for road cycling build",forLabel:"// FOR",forBody:"Riders chasing a real upgrade in climbing, all-round performance or aerodynamics who don't want to gamble four-figure budgets on the wrong rim depth or hub spec.",footnote:"60-second recommendation · free · no signup"}
2,tools:{eyebrow:"// RIDER_TOOLS",heading:"Choose smarter before you buy",intro:"Use our cycling tools to make better decisions before spending money, from wheel choice to bike fit, tyre pressure and training structure.",allCta:"All Cycling Tools",cardTag:"TOOL",wheel:{title:"Wheel Recommendation",copy:"Find the right road bike wheels for your riding style, terrain and upgrade goal.",cta:"Find Your Wheels"},bikeFit:{title:"Bike Fit Fixer",copy:"Solve common comfort problems before changing saddles, stems or frames.",cta:"Fix Your Fit"},tirePressure:{title:"Tire Pressure Calculator",copy:"Get a better starting point for pressure based on tyre width, rider weight and road surface.",cta:"Calculate Pressure"},trainingPlan:{title:"Training Plan Generator",copy:"Build a simple cycling training structure around your current fitness and goals.",cta:"Build Your Plan"}},media:{eyebrow:"// APPROVED_MEDIA",heading:"Watch before you buy",intro:"See how we build, test and ride the products before you choose yours.",allCta:"All Videos",builds:{title:"Custom bike builds",copy:"Watch how we 
2choose parts, build bikes and explain the details behind premium road setups.",cta:"Watch bike builds"},products:{title:"Product tests and upgrades",copy:"Wheels, clothing, helmets and performance upgrades explained from real riding experience.",cta:"Watch product videos"},rides:{title:"Club rides and cycling culture",copy:"Follow the rides, routes and stories behind the Approved Cycling community.",cta:"Watch ride videos"},podcast:{title:"Podcast and rider advice",copy:"Longer conversations about bikes, training, products and the culture around road cycling.",cta:"Watch the podcast"}},builds:{},testimonials:{eyebrow:"// SIGNAL_FROM_RIDERS",intro:"Riders trust Approved with four-figure builds, wheel decisions and race-day fit. Not because we're loud, but because the work holds up on the road."},showroom:{eyebrow:"// LJUBLJANA_ATELIER",heading:"Visit the Approved Cycling showroom in Ljubljana",intro:"See products in person, ask for advice and start your next custom bike build with riders who test, build and ride the equipment we sell.",planVisit:"PLAN YOUR VISIT",startBuild:"START A CUSTOM BIKE BUILD",shopLink:"Our Ljubljana cycling shop",point1:"Premium cycling shop in Ljubljana",point2:"Custom road bike build advice",point3:"Wheels, apparel, helmets and upgrades",point4:"Real cyclist-to-cyclist recommendations",point5:"Online shop with in-person support"},letsRide:{eyebrow:"LetsRide",title:"Find cyclists riding near you.",body:"LetsRide is our home for group rides, open to every rider. Find a ride near you or post your own, and ride with people you'll want to see again.",cta:"Discover LetsRide",imageAlt:"Rider wearing the Approved Cycling Life Is A Journey jersey"},closing:{pathsEyebrow:"// OR PICK YOUR PATH",pathsAria:"Secondary homepage paths by intent",wheelsIntent:"UPGRADING WHEELS",wheelsLabel:"Wheel recommendation",toolsIntent:"JUST EXPLORING",toolsLabel:"Free rider tools",clubIntent:"LOOKING FOR A CLUB",clubLabel:"LetsRide cycling club"}},buildOfTheMonth:{eyebrow:"Build of the Month",intro:"A real Approved Cycling custom build, created around the rider, the terrain and the goal.",keyComponents:"Key Components",viewBuild:"View Build",startBuild:"Start Your Build"},closingCta:{eyebrow:"READY_WHEN_YOU_ARE",titleLine1:"BUILD SOMETHING",titleLine2:"WORTH RIDING.",description:"Talk to us about a custom build, or come see the bikes and parts in person at our Ljubljana atelier.",bookConsultation:"BOOK A CONSULTATION",visitLjubljana:"VISIT LJUBLJANA"},quickConsultation:{eyebrow:"BOOK_A_CONSULTATION",title:"TELL US ABOUT YOUR BUILD.",description:"Leave a quick note. We'll reply within 1 working day.",name:"Name",email:"Email",message:"What kind of bike are you dreaming of?",submit:"SEND REQUEST",validation:"Please fill in all fields with a valid email.",error:"Something went wrong. Please email [email protected].",successEyebrow:"REQUEST_RECEIVED",successTitle:"THANK YOU.",successDescription:"We'll be in touch within 1 working day to discuss your build.",fullFormPrefix:"Want the full questionnaire?",fullFormLink:"Fill the full build questionnaire"},clubPage:{heroEyebrow:"#APPROVED CLUB // APPROVED CYCLING CLUB",heroLine1:"LET'S",heroLine2:"RIDE.",heroSub:"Come ride with us. Three days a week we meet at Ziherlova 10 and roll out on the roads around Ljubljana.",heroCtaJoin:"BECOME A MEMBER",heroCtaKit:"VIEW CLUB KIT",heroCtaRides:"RIDE SCHEDULE",heroStat1:"OPEN COMMUNITY",heroStat2:"EST · LJUBLJANA",heroStat3:"RIDE · TRAIN · TRAVEL",heroStat4:"MEMBER #1 OF X",introEyebrow:"WHY WE RIDE",introHeading:"KILOMETRES ARE BETTER SHARED.",introBody1:"Cycling is a craft, a routine and a way to clear the head. In a group it gets easier, faster and more fun. You push a little more, you laugh a little more, and the road feels shorter.",introBody2:"",introBenefit1:"Group rides for every level",introBenefit2:"Personal rider card with live stats",introBenefit3:"Members-only kit collection",introBenefit7:"End-of-season camp & year-end gathering",introTagline:"Let's ride.",valuesEyebrow:"WHY WE RIDE",valuesHeading:"CONSISTENCY. COMMUNITY. CRAFT.",value1Title:"COMMUNITY THAT RIDES TOGETHER",value1Body:"Tuesday, Thursday, Saturday: Ziherlova 10, in front of the Approved store and Velo Bar. Every level welcome, no-drop. We regroup at the top and finish together.",value3Title:"OFF THE BIKE",value3Body:"End-of-season camp and year-end gathering. The rides build the year; these mark it.",memberEyebrow:"YOUR RIDER CARD",memberHeading:"YOUR SEASON, ON ONE CARD.",memberBody:"Every member gets a rider card using Approved Cycling first-party profile and club data. Strava activity is never shown on member cards.",memberPerk1:"Unique member number for life",memberPerk2:"Strava is optional. Connected riders can view only their own recent activity summaries privately for up to seven days.",memberPerk3:"Earned badges: distance, climbing, founding season",memberPerk4:"Race day & community ride participation",memberPerk5:"Privacy controls per field: show what you want",memberCtaJoin:"JOIN THE CLUB",memberCtaEdit:"EDIT MY CARD",memberCtaSignIn:"SIGN IN",kitEyebrow:"CLUB KIT // BUILT FOR THE GROUP",kitHeading:"KIT FOR THE CLUB.",kitBody:"A modern, members-only collection. On-bike and off-bike, in one consistent look.",kitFootnote:"MEMBERS GET FIRST ACCESS",ridesEyebrow:"RIDE SCHEDULE",ridesHeading:"A WEEKLY RHYTHM.",ridesBody:"Three rides a week from Zi
2herlova 10 in Ljubljana, in front of the Approved store and Velo Bar. Tracked on Strava.",ride1When:"TUESDAY · 18:00 · ZIHERLOVA 10",ride1Title:"Tuesday endurance",ride1Body:"An after-work endurance loop, 60–80 minutes, conversational pace. Designed to recover from harder days and keep weekly volume consistent.",ride2When:"THURSDAY · 18:00 · ZIHERLOVA 10",ride2Title:"Thursday intensity",ride2Body:"Threshold and climbing efforts on selected segments. A faster group up front, a steady group behind. Both regroup at the top.",ride3When:"SATURDAY · 09:00 · ZIHERLOVA 10",ride3Title:"Saturday long ride",ride3Body:"The anchor ride of the week. 80–120 km, planned café stop, no-drop format. The route rotates through the best roads around Ljubljana.",facesEyebrow:"THE MEMBERS",facesHeading:"MEET THE RIDERS.",facesOpenDirectory:"OPEN FULL DIRECTORY",cardAnonymous:"Anonymous Rider",cardFounding:"FOUNDING MEMBER",cardActive:"ACTIVE MEMBER",facesEmpty:"FIRST CARDS DROPPING SOON",facesEmptyBody:"Become one of our founding members. Join the club and your rider card appears here.",partyEyebrow:"YEAR-END EVENT",partyHeading:"ONE EVENING. CLOSE THE SEASON TOGETHER.",partyTag:"DECEMBER · LJUBLJANA",partyTitle:"Annual members' gathering",partyBody:"An evening for every active member: dinner, season highlights and a shared look back at the year.",partyFootnote:"DATE LANDS IN MEMBERS' INBOX · OCTOBER",prizeTag:"MEMBERS' DRAW",prizeTitle:"Members' draw",prizeSub:"FOR ACTIVE MEMBERS",prizeBody:"Among the active members who log the season minimum, we draw one club surprise.",prizeFootnote:"DRAW AT THE PARTY · MUST BE PRESENT TO COLLECT",locationEyebrow:"MEETING POINT",locationHeading:"ZIHERLOVA 10, LJUBLJANA.",locationBody:"In front of the Approved store and Velo Bar. Coffee before, coffee after.",locationCta:"OPEN IN MAPS",joinEyebrow:"JOIN THE CLUB",joinHeading:"RIDE WITH",joinHeading2:"THE CLUB.",joinBody:"Join Approved Club. Every season, every kilometer, every club ride.",joinPrice:"ANNUAL MEMBERSHIP · 2026",joinPerk:"+ FREE LTD JERSEY · FIRST 100",joinSeason:"/ SEASON 2026 · OPEN TO EVERYONE",closingLine:"For the road. For the riders.",stravaConnectTitle:"Connect Strava to see your live card",stravaConnectBody:"Every member gets a rider card using Approved Cycling first-party profile and club data. Strava activity is never shown on member cards.",stravaConnectCta:"CONNECT STRAVA",leaderboardComingSoon:"MONTHLY LEADERBOARD · SEASON 2026",leaderboardComingSoonBody:"Standings open with the 2026 season. Join the club to be on the first board.",jerseyVoteComingSoon:"JERSEY VOTE · SEASON 2026",jerseyVoteComingSoonBody:"Members vote on the next club jersey. Voting opens with the 2026 season.",hashtagEyebrow:"#APPROVED CLUB",hashtagHeading:"FROM THE GROUP.",hashtagBody:"Photos from the road, tagged #letsride. Tag yours to land here."},clubLanding:{raceCardsCtaDownload:"DOWNLOAD RACE CARD",consistencyBody:"If you ride on <0>at least 12 days in a month</0>, all your accumulated points get a 1.1x multiplier. Consistency beats a single monster ride.",whatsappBody:"Quick pre-ride coordination, instant updates, road conditions, and spontaneous coffee rides.",grandPrizeCardNote:"A draw among all entrants once we reach 100 members.",peopleTitleLine2:"THE RESULTS, AND REAL-WORLD EXPERIENCE.",ptsRidesLabel:"NUMBER OF RIDES",whyChip2:"INTERVALS",kitChip5:"CASUAL PIECES",communityChip4:"COFFEE RIDES",kitTitleLine2:"CO-CREATED BY THE MEMBERS.",faq5a:"The goal is to have different types of rides, from relaxed group spins to faster, more competitive challenges.",incl2:"Club rides",whyFeaturedBody:"Group rides for all levels, from relaxed Sunday spins to faster interval sessions and granfondo prep. A team you'll actually meet on the road.",whyChip3:"GRANFONDO",miranStat4k:"GRANFONDO",heroTitleLine1:"BECOME PART OF A CLUB",ptsElevDesc:"Climbing gets extra points.",joinTitleLine2:"€100/year.",priceAnnual:"€100/year",whyLead:"Membership isn't just a name on a list. It's access to people, rides, experience, motivation, and challenges that make it easier to get on the bike, even when you'd rather stay home.",discountsEyebrow:"MEMBER DISCOUNTS",discountsTitle:"Savings that apply automatically.",discountsLead:"As a club member, you get ongoing discounts on selected brands. The discount is applied automatically at checkout. No codes, no hassle.",peopleQuoteLine2:' THAT WORK."',metaDescription:"Join Approved Club. €100/year membership, club rides, events, community and member benefits.",joinTitleLine1:"JOIN FOR",grandPrizeCardFootnote:"GRAND PRIZE · NICH FAITH FRAMESET",matejTitle:"3× Amateur World Time Trial Champion",grandPrizeTitleLine1:"IF WE REACH 100,",finalDeadline:"FREE JERSEY WHEN YOU JOIN BY {{deadline}}",faq1a:"The membership fee is €100/year.",stickyMembership:"€100/YEAR MEMBERSHIP",heroLead:"Approved Cycling Club is a community for everyone who loves to ride, train, compete, improve, and can hold a normal conversation after the ride.",miranStat1k:"15 YEARS",matejStat3k:"19",faqTitleLine1:"FREQUENTLY ASKED",ctaJoin100:"JOIN THE CLUB FOR €100/YEAR",miranStat2k:"2019→",faqTitleLine2:"QUESTIONS.",kitChip3:"GILETS",offerTitleLine2:"AND GET A FREE JERSEY.",grandPrizeBody1:"If at least 100 members sign up for the challenge this year, we will draw a <0>Nich Faith Frameset</0> among all participants. A top-tier frame for one lucky cyclist.",matejStat4k:"3×",rewardsFootnote:"Club challenges and recognition use Approved Cycling first-party club activity only.",notReadyLabel:"NOT READY YET? LEAVE YOUR EMAIL.",whyPerk1:"Discord & WhatsApp community",offerJerseyLine:"+ free jersey until {{deadline}}",valueBarRides:"CLUB RIDES",offerBody:"Join by {{deadline}} and receive a free jersey from our <0>Life is a Journey</0> collection. If you've been thinking about joining, now's the time.",miranBio:"Miran has been an athlete his whole life. Before cycling, he raced motocross for 15 years, becoming a national and cup champion and representing Slovenia at European and World Championships. He took up cycling in 2019, both road and MTB. He's a multiple-time national road and hill-climb champion, with a preference for long-distance events like granfondos. He never advises others to do anything he hasn't tested on himself first.",ctaJoinClub:"JOIN THE CLUB",kitChip1:"JERSEYS",valueBarPeople:"MATEJ & MIRAN",ptsLongestFormula:"+ 50 point bonus",discordBody:"Ride planning, race talk, training tips, post-ride coffee, and voting for the club kit.",communityFootnote:"Members will also vote to choose the club kit from various designs. A club isn't just something you wear. <0>It's something you co-create.</0>",incl3:"Discord + WhatsApp community",heroTitleLine2:"THAT ACTUALLY RIDES.",whyPerk4:"A warm community of enthusiasts and racers",kitCtaJersey:"VIEW THE LIFE IS A JOURNEY JERSEY",matejStat1l:"IN CYCLING",offerJerseyBadgeFree:"FREE WITH MEMBERSHIP",peopleLead:`<0>Matej Lovše</0> and <1>Miran Kovačič</1>, two of Slovenia's best amateur cyclists, will be riding with us in the club. Not as untouchable "coaches," but as people who ride, race, help, and share practical, first-hand experience.`,faq4q:"Do I have to race?",raceCardsTitleLine1:"YOUR RACE CARD. YOUR PROGRESS.",communityTitleLine2:"A GROUP OF PEOPLE WHO A
2CTUALLY TALK.",ctaViewCollection:"VIEW THE LIFE IS A JOURNEY COLLECTION",miranStat3l:"ROAD & CLIMB",matejStat2l:"WORLD CHAMP TT",kitEyebrow:"CLUB KIT",valueBarStrava:"APPROVED CLUB CHALLENGES",whyTitleLine1:"WHAT YOU GET",joinIncludedLabel:"INCLUDED",ctaBecomeMember:"JOIN LETSRIDE FOR €100/YEAR",whyFeaturedTag:"01 · CORE",btnOnList:"✓ YOU'RE ON THE LIST",communityChip3:"RACE TALK",faq8q:"Can I participate in choosing the club kit?",peopleQuoteLine1:'"NO COMPLICATIONS. JUST THINGS,',faq7q:"Will the club have Discord and WhatsApp groups?",faq2a:"The offer is valid for everyone who joins by {{deadline}}.",peopleTitleLine1:"RIDE WITH PEOPLE WHO HAVE THE MILES,",finalEyebrow:"LET'S RIDE // APPROVED CYCLING CLUB",ctaJoinChallengeAlt:"JOIN THE CHALLENGE · 10€",grandPrizeBody2:"The more of us there are, the better it gets. More rides, more stories, more motivation. And more reasons to show up at the start line next time.",kitLead:"We're not just slapping a logo on a jersey. Members will get to choose from different club kit designs to create gear we'll all be proud to wear on rides, at races, and for post-training coffee.",whyCard04Body:"Get your downloadable race card every month. Your progress, your post.",offerTitleLine1:"JOIN BY {{deadline}}",finalTitle2:"RIDE.",incl4:"Advice from Matej Lovše and Miran Kovačič",kitTitleLine1:"A CLUB KIT,",communityChip5:"KIT VOTING",kitChip2:"BIB SHORTS",incl1:"Membership in Klub Approved",memberBannerActive:"YOU'RE ALREADY A MEMBER. WELCOME BACK",ptsKmLabel:"KILOMETERS",whyFeaturedTitle:"CLUB RIDES AND GROUP TRAINING",whyCard04Title:"RACE CARDS FOR INSTAGRAM",rewardsTitleLine1:"ONE MONTH.",ptsKmFormula:"1 point / km",metaTitle:"Klub Approved | Approved Cycling Club Slovenia",offerEyebrow:"LAUNCH OFFER",offerPriceLabel:"MEMBERSHIP FEE",raceCardsEyebrow:"SHARE YOUR RIDE",raceCardsNote:"Race cards are available to club members.",grandPrizeEyebrow:"GRAND PRIZE",faq4a:"No. The club is open to recreational riders and racers alike. Club challenges are optional and use Approved Cycling first-party club activity only.",ptsElevFormula:"1 point / 10 m",heroOfferEyebrow:"LAUNCH OFFER · UNTIL {{deadline}}",finalTitle1:"LET'S",faqEyebrow:"FAQ",whyCard02Title:"MENTORSHIP FROM MATEJ & MIRAN",whatsappTag:"CHANNEL · 02",rewardsTitleLine2:"ONE POINT SYSTEM.",ctaViewJersey:"VIEW THE JERSEY",ctaJoinChallenge:"JOIN THE CHALLENGE · 10€",rewardsEyebrow:"MONTHLY REWARDS",finalBody:"Join Klub Approved and become part of a community that rides, trains, competes, shares stories, and knows how to have a good time off the bike, too.",stickyJoin:"JOIN",stickyJersey:"+ FREE JERSEY BY {{deadline}}",stravaSeoBody:"Approved Club brings together group rides, recreational racing, events and a real cycling community in Ljubljana and beyond.",testPhaseTag:"// MAY = TEST PHASE",testPhaseTitle:"May is the test month. June is when it counts.",testPhaseBody:"We're <0>not awarding any prizes in May</0>. It's the test phase so we can fine-tune the game, scoring, and leaderboard together. Every ride, every bit of feedback, every kilometre still matters right now. You're helping us build the best possible experience. <0>The real game starts on June 1st</0>, and that's when monthly prizes go live. Thanks for riding with us from day one. See you on the bike!",raceCardsBody:"After each monthly challenge, every member can create their own race card with their picture, kilometers, and elevation, ready for your Instagram story. Below are real race cards from current club members. No mockups, just real cyclists and real seasons.",kitChip6:"MEMBER-SELECTED DESIGNS",matejStat1k:"27+ YEARS",communityEyebrow:"COMMUNITY",ptsLongestLabel:"LONGEST RIDE",btnNotify:"NOTIFY ME",ptsRidesDesc:"The more consistent you are, the bigger the bonus.",grandPrizeCardTitle:"NICH FAITH FRAMESET.",grandPrizeCardEyebrow:"GRAND PRIZE · 2026",matejStat2k:"3×",miranStat1l:"MOTOCROSS",heroOfferBody:"Everyone who joins by {{deadline}} gets a free jersey from the <0>Life is a Journey</0> collection.",communityLead:"Members get access to dedicated Discord and WhatsApp groups to organize group rides, share tips, results, experiences, and everything else that c
2omes with cycling.",stravaTitleLine1:"CONNECT STRAVA. RIDE. COMPETE.",matejStat3l:"GRANFONDO WINS",discordTag:"CHANNEL · 01",peopleClubLabel:"APPROVED CYCLING CLUB",valueBarChannels:"DISCORD + WHATSAPP",communityChip2:"TRAINING Q&A",faq1q:"How much is the membership fee?",memberBannerOpenClub:"OPEN MY CLUB",deadlineLabel:"May 15",faq5q:"Are the rides suitable for all levels?",joinEyebrow:"JOIN THE CLUB",whyCard02Body:"Practical advice from two of the best amateur cyclists in Slovenia.",incl8:"A vote in choosing the club kit design",peopleEyebrow:"THE PEOPLE",heroEyebrow:"LET'S RIDE // APPROVED CYCLING CLUB",whyChip4:"WEEKEND",raceCardsCtaShare:"SHARE ON INSTAGRAM",consistencyTag:"CONSISTENCY MULTIPLIER · ×1.1",communityChip1:"RIDE PLANNING",grandPrizeTitleLine2:"WE'LL GO EVEN BIGGER.",faq2q:"How long is the free jersey offer valid?",stravaBody:"Strava is optional. Connected riders can view only their own recent activity summaries privately for up to seven days.",miranStat4l:"SPECIALIST",stravaEyebrow:"OPTIONAL STRAVA CONNECTION",ptsRidesFormula:"5 points / ride",whyChip1:"GROUP",miranStat2l:"ROAD + MTB",matejBio:"Matej has been in cycling for over 27 years. He started in MTB, competing for 14 years and becoming a multiple-time national champion. On the road, he later won 3 amateur world time trial champion titles, reached the world championship podium 10 more times, won 19 granfondos, and the amateur Giro d'Italia 3 times. He still trains and competes while helping recreational and competitive cyclists train smarter, from their first structured workouts to marathon and race prep.",whyPerk2:"Club kit, with the design chosen by members",whyEyebrow:"MEMBERSHIP VALUE",joinFootnote:"For enthusiasts, racers, and everyone who loves a good ride.",ptsKmDesc:"Every kilometer counts.",raceCardsTitleLine2:"YOUR POST.",communityChip6:"RESULTS SHARING",incl9:"Free Life is a Journey jersey (until {{deadline}})",faq8a:"Yes. Members will be able to vote and choose from different club kit designs.",matejStat4l:"GIRO AMATEUR",communityTitleLine1:"NOT JUST A CLUB.",faq7a:"Yes. Members will get access to dedicated groups for organizing rides, asking questions, getting advice, and general chat.",joinBody:"Join Approved Club. Every season, every kilometer, every club ride.",heroOfferTitle:"100€ MEMBERSHIP. FREE JERSEY.",whyTitleLine2:"AS A MEMBER?",miranTitle:"Multiple-time National Road & Hill-Climb Champion",miranStat3k:"NAT'L CHAMPION",emailPlaceholder:"[email protected]",kitChip4:"SOCKS",consentText:"I agree to receive emails from Approved Cycling.",ptsLongestDesc:"A reward for the biggest single ride of the month.",ptsFtpLabel:"FTP GAIN",ptsFtpFormula:"up to +25 pts",ptsFtpDesc:"More watts than last month, more points.",ptsHrLabel:"HR EFFICIENCY",ptsHrFormula:"up to +25 pts",ptsHrDesc:"More watts per beat. Fitter engine.",rewardsLead:"Everything you ride in a month adds up to a single points total. One leaderboard for men, one for women. Those with the most points win the month.",stravaTitleLine2:"PRIVATE RECENT ACTIVITY.",incl5:"Approved Club challenges",ptsElevLabel:"ELEVATION",valueBarSubtext:"Not just a membership. A system for riding, progressing, connecting, and a bit of healthy competition.",discountsFinePrint:"Discounts apply automatically at checkout for signed-in Club members. They cannot be combined with other codes and do not apply to already reduced items or limited editions, unless stated otherwise.",heroImageAlt:"Approved Club riders on a Slovenian road at sunrise",notifyServiceNote:"We'll only email you about joining Approved Club, unless you tick the box below.",consentTextOptional:"Optional: also send me Approved Cycling offers, launches and news. I can unsubscribe anytime.",notifySuccess:"Done. We'll email you about joining Approved Club.",notifyError:"That didn't go through. Check the email address and try again.",discountsTier50Label:"Selected kit",discountsTier30Label:"Approved apparel",discountsTier10Label:"Partner brands and more",discountsTier30Item1:"Approved Cycling jerseys, bibs and shorts",discountsTier30Item2:"Approved Cycling casual wear",discountsTier10Note:"and most other products in the shop",discountsExcluded:"No club discount on bikes and framesets, items already on sale, Favero Assioma, Look, Shimano, SRAM, Garmin or pedals."},kitBuilder:{trigger:{label:"Style The Look",aria:"Open immersive kit builder",unavailableEmpty:"No apparel in stock. Check back soon",unavailableEmptyNamed:"No {{collection}} in stock. Check back soon",unavailableEmptyGeneric:"Nothing in stock right now. Check back soon",unavailableFiltered:"Clear filters to build a kit",ariaDisabled:"Kit builder unavailable: {{reason}}",expand:"Expand kit builder launcher",minimize:"Minimize kit builder launcher"},dialogLabel:"Kit builder",closeBackdrop:"Close kit builder",eyebrow:"Kit Builder · {{c}}",title:"STYLE THE LOOK",showAll:"Show all",close:"Close kit builder",slotsLabel:"Kit slots",slots:"Slots",choose:"Choose · {{slot}}",variants:"Size · Colour",toast:{added:"{{n}} pieces added to your kit",error:"Couldn't add the kit. Try again"},mobile:{unlocked:"€50 earned",toGo:"{{a}} to €50 off",adding:"Adding…",addAll:"Add {{n}}",view:"View Kit",hide:"Hide",empty:"Tap a piece to start",zeroPieces:"0 pieces"},summary:{label:"Your kit summary",eyebrow:"Your kit",emptyTitle:"BUILD THE LOOK",builtTitle:"{{n}}
2 PIECES IN KIT",builtTitleOne:"1 PIECE IN KIT",clear:"Clear",emptyHint:"Click any item around the rider to start building. Hit €401 in apparel to get €50 off.",swap:"Change {{slot}}",remove:"Remove {{slot}}",completeTheKit:"Complete the kit",kitBonus:"Kit bonus",unlocked:"Earned",unlockedCopy:"€{{v}} off applied at checkout.",toUnlock:"Add {{amount}} more in apparel to get €{{v}} off.",threshold:"Apparel subtotal · {{a}} of €{{t}}",progressLabel:"Progress to €{{v}} kit discount",subtotal:"Subtotal",discount:"Kit discount",total:"Total",adding:"Adding to cart…",ctaEmpty:"Pick items to start",cta:"Add {{n}} to cart",ctaKit:"Add kit · {{pieces}} · {{total}}",lookCheck:"Look check"},addKit:"Add kit · {{p}}",addToCart:"Add to cart",adding:"Adding…",board:{eyebrow:"Style the look · {{n}} of {{m}}",headline:"YOUR KIT"},change:"Change",chooseSlot:"Choose {{label}}",clearAll:"Clear all",continue:{label:"Continue your kit",relatedLabel:"Explore collections",title:"Continue your kit"},equip:"Equip",equipped:"Equipped",gender:{all:"All",men:"Men",women:"Women"},genderLabel:"Filter by gender",layers:"Layers",nextProducts:"Next products",preview:{add:"Add",bonusLabel:"Kit Bonus · spend €{{m}} more for €50 off",emptyBody:"Add at least one piece to your kit and the full look will assemble here.",emptyTitle:"PICK A FEW PIECES FIRST",eyebrow:"The Look · {{n}} pieces",headline:"ASSEMBLED",lookCheckLabel:"Look Check",missingLabel:"Complete the kit",total:"Kit total",totalDiscounted:"Total · €50 off",unlocked:"KIT50 earned"},previousProducts:"Previous products",removeSlot:"Remove {{label}}",unlock:"Release lock",view:{build:"Build",preview:"The Look"},viewLabel:"View mode",pieceCount_one:"{{count}} piece",pieceCount_other:"{{count}} pieces"},koloPoMeri:{bannerStatus:"CUSTOM_BUILDS // LJUBLJANA",bannerRange:"PINARELLO · NICH · €4,000–12,000+",eyebrowTop:"// CUSTOM_ROAD_BIKE",reply:"// REPLY_WITHIN_1_WORKING_DAY",builtBadge:"// BUILT_IN_LJUBLJANA",ctaPrimary:"START YOUR BUILD",ctaQuestionnaire:"FILL THE QUESTIONNAIRE",ctaStart:"START YOUR CUSTOM BUILD",ctaBuild:"BUILD YOUR BIKE",ctaBook:"BOOK A CONSULTATION",ctaBuildShort:"BUILD MY BIKE",heroTitle:"A custom road bike.",heroTitleAccent:"For riding that's truly yours.",heroDesc:"Pinarello and Nich, built around your body, your terrain and your goals. No compromise off the shelf: we choose the frame, groupset, wheels and fit together, in our Ljubljana showroom.",heroImgAlt:"Custom Pinarello road bike, Approved Cycling Ljubljana",whyEyebrow:"WHY_NOT_BLINDLY",whyTitle:"A premium bike deserves a proper plan.",whyDesc:"The most expensive mistake when buying a road bike isn't the price. It's a build that doesn't match how you ride. Above €4,000, it pays to think first and buy second.",whyItems:[{t:"Wrong frame size",d:"Even 1 cm off changes your posture, power and comfort on long rides."},{t:"A build with no logic",d:"Aero frame with light climbing wheels, or the other way around. Every combo needs a reason."},{t:"Overpriced, undervalued",d:"A high price tag doesn't make it the right bike. Every euro must work for you."},{t:"Components that hold you back",d:"Wrong gearing, unsuitable geometry and wheels that don't belong on your terrain."}],processEyebrow:"BUILD_PROCESS",processTitle:"Four steps to your bike.",processSteps:[{t:"Tell us how you ride",d:"Terrain, mileage, ambitions, fit, previous bikes."},{t:"We set the frame & size",d:"Pinarello or Nich, the right geometry and size for you."},{t:"We pick the components",d:"Groupset, wheels, cockpit, tyres: every part with a reason."},{t:"We build it in Ljubljana",d:"Assembled in our showroom; you pick it up or we ship across the EU."}],frameEyebrow:"FRAME_CHOICE",frameTitle:"Pinarello or Nich. Two worlds, one level.",frameDesc:"Both are world-class. The difference is character and story. We help you pick the one that fits you better.",pinarelloTitle:"Race DNA, a proven icon.",pinarelloDesc:"Pinarello is the benchmark for top-end road. The Dogma and F-series carry real race genetics, for the rider who knows what they want and needs the right build around the frame.",pinarelloItems:["Dogma F, F-Series, Maat","MyWay colour programme","Race-proven geometry","Ideal for speed and racing"],nichTitle:"Boutique. Less obvious. More yours.",nichDesc:"Nich is a premium boutique brand: carbon frames for riders looking for something less mainstream and more personal, with no compromise on performance.",nichItems:["Signature carbon platform","Personalised builds","Exclusive character","Ideal for clear individuality"],partsEyebrow:"WHAT_WE_PICK_TOGETHER",partsTitle:"Every part of the bike, with a reason.",partsItems:["Frame & size","Groupset (Shimano / SRAM)","Crankset and gearing","Carbon wheels","Tyres & pressure","Cockpit & saddle","Fit / position","Colour (on selected models)","Service & maintenance"],partsNote:"All of it in one clear build. No aftermarket upgrades, no parts you'll be swapping six months later.",galleryEyebrow:"BUILDS_FROM_OUR_SHOWROOM",galleryTitle:"A few of the bikes we've built.",galleryAlts:["Custom Pinarello Dogma F, blue","Custom Nich Faith, white and black","Custom Nich Legend, blue with white speckle","Custom Pinarello X5, sand","Custom Nich Faith, red and black","Custom Pinarello X5, white"],showroomEyebrow:"SHOWROOM_LJUBLJANA",showroomAddress:"ZIHERLOVA 10 · 
2LJUBLJANA",showroomTitle:"Come to the showroom. No pressure, just a clear plan.",showroomDesc:"The showroom is open by appointment, so we can give you our full attention, walk through the options and talk about your bike. No rush, no sales tricks.",whoEyebrow:"WHO_IT_IS_FOR",whoTitle:"Who this process is for.",whoItems:["Riders considering a €4,000+ bike","Anyone looking at Pinarello or Nich","Riders who care about fit and geometry","Those who want every component to have a reason","Riders who don't want to buy twice","Cyclists willing to take the time to buy right"],finalEyebrow:"FINAL_STEP",finalTitle:"Your bike deserves a proper plan.",finalDesc:"Start with the questionnaire. Within one working day we'll come back with concrete first recommendations for the frame, groupset and wheels.",finalCta:"START YOUR BUILD",finalNote:"// FREE · NO_OBLIGATION · REPLY_WITHIN_1_WORKING_DAY",jsonldServiceName:"Custom road bike: Pinarello and Nich",jsonldFaq:[{q:"How much does a custom road bike at Approved Cycling cost?",a:"Premium Pinarello and Nich builds typically range from €4,000 to €12,000+, depending on frame, groupset and wheels. During the consultation we set a realistic range for your riding goal."},{q:"How does the custom bike build process work?",a:"First you fill in a short questionnaire, then we talk about your riding, choose frame and size, groupset, wheels and components, and then we build the bike in Ljubljana."},{q:"Can I choose the Pinarello frame colour?",a:"On selected Pinarello models (MyWay programme) you can choose the colour scheme. With Nich Bikes, each build is more boutique and personalised."},{q:"Where can I find you in Ljubljana?",a:"The Approved Cycling showroom is at Ziherlova 10 in Ljubljana. Visits are by appointment so we can review the options without rush."}]},wheelRecommendationThankYou:{title:"Thank you · Your wheel recommendation | Approved Cycling",requestReceived:"// REQUEST_RECEIVED",thankYou:"THANK YOU",intro:"Your wheel brief is in. We'll review your riding profile and reply within",withinDays:"1 working day",nextStep1:"We read your setup and goals and shortlist 2–3 wheelsets that fit you.",nextStep2:"You get a personal reply with the picks, pricing and trade-offs — within {{days}}.",nextStep3:"We help you decide and arrange a showroom visit or order.",outro:"with a personal wheel recommendation tailored to how you ride.",sectionEyebrow:"// THE_WHEELS_WE_HEARD_ABOUT",brief:"YOUR WHEEL BRIEF",groups:{ridingCode:"YOUR_RIDING",ridingTitle:"Your riding",performanceCode:"PERFORMANCE_FOCUS",performanceTitle:"Performance focus",setupCode:"RIDER_AND_SETUP",setupTitle:"Rider & setup",budgetCode:"BUDGET_AND_CONTACT",budgetTitle:"Budget & contact"},rows:{bike:"Bike",ridingStyle:"Riding style",weeklyVolume:"Weekly volume",improvement:"To improve",terrain:"Terrain",focus:"Focus",priority:"Priority",weight:"Weight",tireWidth:"Tire width",currentWheels:"Current wheels",rimDepth:"Rim depth",budget:"Budget",timeline:"Timeline",name:"Name",email:"Email",notes:"Notes"},fallback:"If you've just submitted your brief, we have it. Check your inbox for our reply within 1 working day.",inboxNote:"Check your inbox (and spam). Your personal wheel reply will land there.",ctaPrimaryLabel:"BROWSE ALL WHEELSETS",ctaSecondaryLabel:"DIAL IN TIRE PRESSURE",backHome:"BACK TO HOMEPAGE"},customBuildThankYou:{title:"Thank you · Your custom bike build | Approved Cycling",requestReceived:"// REQUEST_RECEIVED",thankYou:"THANK YOU",intro:"Your custom build brief is in. We'll review it and reply within",withinDays:"1 working day",nextStep1:"We read your brief and match it to the right frame, groupset and wheels.",nextStep2:"You get a personal reply with options, prices and timing — within {{days}}.",nextStep3:"If it's the right fit, we book a call or showroom visit and start the build.",outro:"with a tailored recommendation built around how you ride.",sectionEyebrow:"// THE_BIKE_WE_BUILT_FOR_YOU",buildBrief:"YOUR BUILD BRIEF",groups:{budgetCode:"BUDGET_AND_DIRECTION",budgetTitle:"Budget & direction",howCode:"HOW_YOU_RIDE",howTitle:"How you ride",equipCode:"EQUIPMENT_AND_CONTEXT",equipTitle:"Equipment & context",profileCode:"RIDER_PROFILE",profileTitle:"Rider profile"},rows:{budget:"Budget",bestAt:"Best at",timeline:"Timeline",terrain:"Terrain",weeklyVolume:"Weekly volume",ridingStyle:"Riding style",position:"Position",priority:"Priority",groupset:"Groupset",wheels:"Wheels",currentBike:"Current bike",fitNotes:"Fit notes",height:"Height",weight:"Weight",name:"Name",email:"Email"},fallback:"If you've just submitted your brief, we have it. Check your inbox for our reply within 1 working day.",inboxNote:"Check your inbox (and spam). Your tailored build proposal will land there.",ctaPrimaryLabel:"SEE COMPLETE BIKE BUILDS",ctaSecondaryLabel:"BOOK A SHOWROOM VISIT",backHome:"BACK TO HOMEPAGE"},customBikeBuild:{eyebrow:"// CUSTOM_BUILD_INTAKE",title:"START YOUR CUSTOM ROAD BIKE BUILD",intro:"Nine quick questions, the rest optional. Real recommendations from cyclists who build bikes daily. We usually reply within",oneWorkingDay:"1 w
2orking day",progress:"PROGRESS",stillNeeded:"Still needed: {{fields}}",s1:{code:"BUDGET_AND_DIRECTION",title:"Budget & direction"},s2:{code:"HOW_YOU_RIDE",title:"How you ride"},s3:{code:"EQUIPMENT_AND_CONTEXT",title:"Equipment & context"},s4:{code:"RIDER_PROFILE",title:"Rider profile"},labels:{budgetRange:"Budget range",bestAt:"What should the bike be best at? (optional)",timeline:"When do you want it?",terrain:"Typical terrain",weeklyVolume:"Weekly riding volume (optional)",ridingStyle:"Riding style",position:"Riding position (optional)",priority:"Priority",priorityHint:"Pick what matters most",groupset:"Preferred groupset (optional)",wheels:"Wheel direction (optional)",currentBike:"Current bike (optional)",currentBikeHint:"Brand · Model · Year",currentBikePlaceholder:"e.g. Pinarello Dogma F · 2022",fitNotes:"Fit issues or pain points (optional)",fitNotesHint:"Lower back, knees, hands…",fitNotesPlaceholder:"Anything we should know about your current setup or comfort",height:"Height",weight:"Weight",name:"Your name",namePlaceholder:"Full name",email:"Email",emailPlaceholder:"[email protected]",consentShort:"Consent"},placeholders:{selectRange:"Select your range",select:"Select",selectTimeline:"Select timeline"},consent:"Save my details so Approved Cycling can contact me about my custom bike build.",photoOptional:"// OPTIONAL",photoConsent:"I agree that Approved Cycling may publicly share photos of my finished build on the website and social channels. I can withdraw this consent anytime by emailing",submit:"GET MY CUSTOM BUILD RECOMMENDATION",submitting:"SENDING REQUEST…",footerLine:"// SECURE_TRANSMISSION · NO_SPAM · REPLY_WITHIN_1_WORKING_DAY",errorToast:"Something went wrong. Please try again or email [email protected].",options:{budget:["€2,000 – €4,000","€4,000 – €6,000","€6,000 – €8,000","€8,000 – €10,000","€10,000+"],bestAt:["Fast on flats (aero)","Climbing / lightweight","Balanced all-round","Not sure, recommend"],terrain:["Mostly flat","Rolling hills","Mountains / climbing","Mixed terrain"],weeklyHours:["< 4 hrs / week","4 – 8 hrs / week","8 – 14 hrs / week","14+ hrs / week"],ridingStyles:["Mostly group rides","Marathons / events","Mostly riding alone","Mix of everything"],positions:["Aggressive / race","Balanced","Endurance / upright","Not sure"],priorities:["Maximum performance","Balanced","Comfort / long rides"],groupsets:["Shimano 105 Di2","Shimano Ultegra Di2","Shimano Dura-Ace Di2","SRAM Red AXS","Not sure, recommend for me"],wheels:["Lightweight climbing","Aero / fast on flats","All-round","Not sure, recommend"],timelines:["ASAP","Within 1 month","1 – 3 months","Just exploring"]},portfolio:{eyebrow:"// RECENT_BUILDS",title:"BIKES WE'VE BUILT",enlarge:"Enlarge +",close:"Close",enlargeAria:"Enlarge {{title}}",dialogAria:"{{title}} full image and specifications",buildSpec:"// BUILD_SPEC",specs:{bike:"Bike",groupset:"Groupset",wheels:"Wheels",extra:"Extra",weight:"Weight",size:"Size",price:"Price"}},learnFirst:"OR LEARN FIRST",atelierLink:"The atelier",showroomLink:"Ljubljana showroom"},summerSetup:{homeEyebrow:"// APPROVED_PICKS · SUMMER_SETUP",homeHeading:"What we'd ride right now.",homeIntro:"Three pieces our team rides as one summer kit: jersey, helmet, eyewear. Picked by the atelier, not by an algorithm.",homeFooterMark:"// ONE_KIT · THREE_PIECES",homeFooterCta:"SEE THE SUMMER KIT",pdpEyebrow:"// APPROVED_SUMMER_SETUP",pdpHeading:"Complete the summer setup",pdpIntro:"Jersey · helmet · eyewear: three pieces our team rides as one kit on hot, long days.",pdpYouAreViewing:"// YOU'RE_VIEWING",featuredEyebrow:"APPROVED_FEATURE",visionPitch:"Wide field, no glare, no slip. Performance eyewear that cuts midday glare from the first climb to the café stop.",visionPitchShort:"Wide field, no glare, no slip. Performance eyewear for full-day rides.",visionPitchFull:"Wide field, no glare, no slip. Lightweight performance eyewear built for full-day rides in changing light.",visionReason:"Cuts midday glare and keeps the road sharp from the first climb to the café stop.",visionCta:"View Vision",airbenderPitch:"Vents the heat off your head s
2o long summer efforts stay comfortable, not cooked. Light, stable, quiet at speed.",airbenderPitchShort:"Light, stable and quiet at speed. Ventilation that actually works in summer heat.",airbenderPitchFull:"Ventilated road helmet. Light, stable and quiet at speed. Designed for riders who notice the small things.",airbenderReason:"Vents the heat off your head so long summer efforts stay comfortable, not cooked.",airbenderCta:"View airBENDER",liajPitch:"Limited summer capsule. Race-cut Italian fabric that breathes on 35 °C climbs and still looks right at the start line.",liajPitchShort:"Limited capsule. Race-cut jerseys and bibs built for long days in the saddle.",liajPitchFull:"Limited capsule. Race-cut bibs and jerseys built for long days in the saddle. Engineered fabrics, quiet detailing.",liajReason:"Race-cut fabric that breathes on 35 °C climbs and still looks right at the start line.",liajCta:"Shop the capsule",roleJersey:"JERSEY",roleHelmet:"HELMET",roleEyewear:"EYEWEAR"},letsride:{clubPrompt:{dismiss:"Not now"},completion:{heading:"Ride status",done:"This ride is recorded as finished. Confirmed attendance now counts towards rider milestones.",help:"Mark the ride finished once it has taken place. Confirm attendance first, then finish the ride so it counts for the riders who turned up.",saving:"Saving…",mark:"Mark ride finished",tooEarly:"Available once the ride has finished."},brandEyebrow:"LETSRIDE · PRIVATE ALPHA",header:{account:"Account",backToAccount:"Back to account",alphaBadge:"Alpha"},status:{loading:"Loading"},home:{heading:"Find your next ride.",body:"LetsRide will help cyclists discover, create and join rides around Ljubljana.",statusHeading:"Foundation",sportLabel:"Sport",sportValue:"Cycling",regionLabel:"Region",regionValue:"Ljubljana",stageLabel:"Stage",stageValue:"Private alpha",foundationStatus:"The product foundation is ready. Profiles and onboarding are next.",adminDiagnosticsLabel:"Admin diagnostics",suspendedHeading:"LetsRide is currently unavailable.",suspendedBody:"This account cannot access LetsRide right now. Please contact support if you need help.",readyHeading:"Your riding profile is ready.",readyBody:"Browse rides that match your profile, or draft one of your own. Joining rides becomes available in the next phase.",browseRidesCta:"Browse rides",createRideCta:"Create a ride",setupHeading:"Finish setting up your riding profile.",setupBody:"A few short steps help LetsRide suggest rides that match your location, experience and schedule.",continueSetupCta:"Continue setup"},firstRide:{welcome:{eyebrow:"Welcome to LetsRide",heading:"Your first ride is closer than you think.",body:"Browse rides happening nearby, post your own plan, or take a look around first. No pressure.",findRides:"Find rides",imRiding:"I'm riding",skip:"Skip for now"},checklist:{heading:"Your first ride checklist",subheading:"{{percent}}% ready. Small steps, real riding.",hide:"Hide",cta:"Open",items:{profile_complete:"Complete your profile",follow_series:"Follow a recurring ride",join_first_ride:"Join your first ride",introduce_yourself:"Say hello in the ride chat"}},reminder:{heading:"Still looking for your first ride?",body:"Rides are happening every week. Here are the ones open near you.",cta:"See open rides",dismiss:"Not yet"},feedback:{heading:"How was your first ride?",subheading:"One quick tap helps us shape LetsRide.",options:{better_than_expected:"Better than expected",good:"Good",okay:"Okay",needs_improvement:"Needs improvement"},commentLabel:"Anything you'd like to share? (optional)",commentPlaceholder:"What worked, what didn't…",submit:"Send feedback",submitting:"Sending…",error:"We couldn't send your feedback. Please try again."}},home2:{greeting:{morning:"Good morning, {{name}}. Ready to ride?",afternoon:"Good afternoon, {{name}}. Ready to ride?",evening:"Good evening, {{name}}. Ready to ride?",night:"Still up, {{name}}? Plan tomorrow's ride.",fallbackName:"rider"},searchPlaceholder:"Search rides, areas, disciplines…",searchSubmit:"Search",createCta:"Create a ride",browseCta:"Browse all rides",orPrefix:"Or",planYourOwn:"plan a full ride",imRidingCta:"I'm riding. Invite others",liveSignal:{none:"No rides open right now. Start one and riders will find you.",count:"{{count}} ride open near you right now.",count_other:"{{count}} rides open near you right now."},card:{hostedBy:"Hosted by"},nextRide:{heading:"Your next ride",emptyTitle:"You're not booked in yet.",empty:"Pick one below, or plan a route and invite friends.",openCta:"Open ride",startsSoon:"Starts soon",countdown:{minutes:"In {{count}} min",minutes_other:"In {{count}} min",hours:"In {{count}} hr",hours_other:"In {{count}} hrs",days:"In {{count}} day",days_other:"In {{count}} days"}},thisWeek:{heading:"Riding this week",subheading:"Meet up in the next 7 days"},featured:{heading:"Open for riders",empty:"Nobody's out yet this week.",emptyBody:"Be the first to plan a ride, even a short one. Others will join.",createCta:"Plan the first ride"},errors:{feed:"We could not load rides. Try again in a moment."}},home3:{continuePlanning:{heading:"Continue planning",subheading:"Rides you're already part of",relationship:{organising:"You're organising",confirmed:"You're going",requested:"Awaiting approval",waitlisted:"On the waitlist"}}
2,rideAgain:{heading:"Ride again",emptyNew:"You haven't ridden with anyone here yet.",emptyBuilding:"As you ride with people, they'll show up here.",helper:"The riders you've shared roads with will appear here so it's easy to plan a second ride together.",cta:"Find your first ride"},suggestedRiders:{heading:"Riders you might enjoy",emptyTitle:"We'll suggest riders once we're confident.",emptyBody:"Suggestions come from real overlap: similar pace, similar rides, similar days. Nothing algorithmic, nothing noisy.",cta:"Explore rides"},communityMoments:{heading:"Community moments",items:{golte:{eyebrow:"Last Saturday · Golte",title:"28 riders climbed to the summit for a slow coffee.",body:"A wide, calm bunch. Nobody dropped. Espresso at the top before rolling home together."},kamnik:{eyebrow:"Sunday morning · Kamnik",title:"Small group ride, big turnout at the café.",body:"Steady tempo along the Kamniška Bistrica, then a long pastry stop that turned into two."},vrsic:{eyebrow:"Saturday · Vršič Pass",title:"Long climbers finally got their sunshine.",body:"24 hairpins, one perfect blue sky, and a shared silence at the top that said enough."},kranjska_gora:{eyebrow:"Weekend · Kranjska Gora",title:"A gravel loop that ended in a lake swim.",body:"Loose surface, easy pace, everyone regrouped at every junction. Then boots off, feet in."}}},organiserSpotlight:{heading:"Organiser spotlight",eyebrow:"Consistently good rides",description:"Next ride: {{title}} ({{date}}).",cta:"See the ride"},personalInsights:{heading:"Your riding this month",monthlyLabel:"Rides attended",monthlyValue_one:"{{count}} ride",monthlyValue_other:"{{count}} rides",favouriteDayLabel:"You usually ride on",favouriteDayValue:"{{day}}",days:{sun:"Sundays",mon:"Mondays",tue:"Tuesdays",wed:"Wednesdays",thu:"Thursdays",fri:"Fridays",sat:"Saturdays"}}},series:{new:{eyebrow:"RECURRING RIDE",heading:"Start a weekly rhythm",subheading:"Recurring rides help a local community become predictable. Every occurrence is still a normal ride: same joining, messaging and attendance.",submit:"Publish series",saving:"Publishing…"},detail:{loading:"Loading series…",notFound:"This ride series is no longer available.",follow:"Follow this series",unfollow:"Following",quickCreateNext:"Quick create next ride",editSeries:"Edit series",invite:"Invite riders",cancelSeries:"Cancel entire series",cancelConfirm:"Cancel this recurring series? Existing occurrences remain untouched.",upcomingHeading:"Upcoming occurrences",virtualBadge:"Planned",virtualNote:"Occurrences are auto-planned from the schedule. Each one becomes a normal ride when the organiser opens it for joining."},reliability:{heading:"Series reliability",loading:"Checking your series…",empty:"No data yet. Check back after the next occurrence is planned.",refresh:"Refresh",followers:"Followers",upcoming:"Planned ahead",nextOccurrence:"Next occurrence",lastPlanned:"Last planned",noneScheduled:"Nothing scheduled yet",notYet:"Not planned yet"},edit:{eyebrow:"EDIT SERIES",heading:"Update this recurring ride",subheading:"Choose what your edit should touch. Schedule changes stay as a cancel + recreate to keep occurrence identity stable.",notOrganiser:"Only the organiser can edit this series.",scopeLabel:"Apply changes to",save:"Save changes",saving:"Saving…",cancel:"Cancel",scope:{this_occurrence:{title:"This occurrence only",subtitle:"Available from the specific ride's page."},future:{title:"This and future occurrences",subtitle:"Updates the series and any upcoming rides that haven't started."},entire_series:{title:"Entire series",subtitle:"Same as above. Used when there's nothing in the past to preserve."}}},invite:{eyebrow:"INVITE RIDERS",heading:"Grow your community",subheading:"Share {{name}} with people who would enjoy showing up.",shareLinkHeading:"Share a link",shareLinkBlurb:"Anyone with the link can preview the series and sign in to follow it.",copyLink:"Copy link",copied:"Copied",directHeading:"Invite a specific rider",directBlurb:"Paste a rider ID (from their profile URL). They'll see an invitation the next time they open LetsRide.",remaining:"{{count}} invitations left today.",riderIdPlaceholder:"Rider ID (UUID)",send:"Send invitation",sending:"Sending…",sent:"Invitation sent.",invalidRider:"That doesn't look like a valid rider ID.",backToSeries:"Back to series",errors:{daily_quota_exceeded:"You've reached today's invitation limit. Try again tomorrow.",blocked:"You can't invite this rider.",cannot_invite_self:"You can't invite yourself.",not_authorised:"You can only invite from series you follow or organise.",series_not_found:"This series is no longer available."}}
2,fields:{name:"Series name",namePlaceholder:"Tuesday Espresso Ride",description:"Short description",descriptionPlaceholder:"What kind of ride is this? Who is it for?",cadence:"How often",weekday:"Day of the week",startTime:"Start time",discipline:"Discipline",pace:"Preferred pace",drop:"Drop policy",region:"Region",area:"Meeting area"},cadence:{weekly:"Every week",biweekly:"Every two weeks",monthly:"Every month"},errors:{generic:"Please review the highlighted fields.",name:"Name should be between 3 and 80 characters.",description:"Description is too long.",discipline:"Choose a discipline.",meeting_region:"Meeting region is required.",cadence:"Choose how often the ride repeats.",weekday:"Choose a day of the week.",start_time_local:"Choose a start time (HH:MM).",auth_required:"Please sign in to publish a series."}},rhythm:{heading:"Your weekly rhythm",today:"Today",viewCalendar:"Open the community calendar",startSeries:"Start a new series"},calendar:{eyebrow:"COMMUNITY CALENDAR",heading:"The next two weeks",subheading:"A quiet view of recurring rides across the community. No agenda builder, no notifications. Just when riders show up.",loading:"Loading rides…",emptyDay:"Nothing scheduled"},community:{eyebrow:"LOCAL COMMUNITY",subheading:"A simple overview of cycling activity in this area. Everything you can join lives on a normal ride page.",unknownLocality:"We don't have a community page for that area yet.",recurringHeading:"Recurring rides",recurringEmpty:"No recurring rides here yet. Someone could be the first to start one.",upcomingHeading:"This week",upcomingEmpty:"No open rides in the next few days.",organisersHeading:"Active organisers",organisersNote_one:"{{count}} organiser is currently running series here.",organisersNote_other:"{{count}} organisers are currently running series here.",loading:"Loading rides…",localities:{ljubljana:"Ljubljana",maribor:"Maribor",celje:"Celje",trieste:"Trieste",zagreb:"Zagreb"}},lfr:{eyebrow:"LOOKING FOR RIDERS",heading:"I'm riding. Anyone want to join?",subheading:"A lightweight invitation. Under a minute to publish. Uses the same messaging and safety tools as any other ride.",badge:"LFR",publishCta:"Publish invitation",publishing:"Publishing…",cancelCta:"Cancel",reuseNote:"Joining, messaging, attendance and reporting all work the same as any LetsRide activity.",fields:{datetime:"When",area:"Starting area",style:"Ride style",pace:"Pace",distance:"Distance",coffee:"Coffee stop afterwards",limitEnabled:"Cap number of riders",note:"Short note",notePlaceholder:"Anything worth mentioning: route, café, mood…",optional:"(optional)"},style:{coffee:"Coffee Ride",endurance:"Endurance",recovery:"Recovery",tempo:"Tempo",fast_group:"Fast Group",long_climbs:"Long Climbs",gravel:"Gravel",social:"Social Ride"},pace:{cruise:"Cruise",steady:"Steady",brisk:"Brisk",fast:"Fast"},errors:{invalid:"Please check the highlighted fields.",save:"We couldn't publish the invitation. Try again in a moment."}},access:{unavailableHeading:"LetsRide is not available yet.",unavailableBody:"We are preparing a private test for cyclists in Ljubljana.",notInvitedHeading:"Private alpha access",notInvitedBody:"LetsRide is currently available to a limited group of test users.",errorHeading:"We could not verify access.",errorBody:"Try again or return to your account.",retry:"Try again",returnToAccount:"Return to account"},onboarding:{loading:"Loading your profile",back:"Back",backToRoot:"Back to LetsRide",progress:{stepOf:"Step {{current}} of {{total}}",ariaLabel:"Onboarding progress: {{percent}}%"},welcome:{heading:"Set up your riding profile.",body:"A few details will help us show you rides that match your location, experience and riding style.",trustNote:"Your private information stays private. You control what other riders can see.",startCta:"Start setup",starting:"Starting…",secondaryCta:"Back to LetsRide",startError:"We couldn't start onboarding. Please try again."},nextPhase:{heading:"Profile setup continues in the next phase.",body:"Your riding profile has been created. The next onboarding steps will arrive shortly during the private alpha.",alphaNote:"You're seeing this because LetsRide is in private alpha. No further details are required from you yet."},error:{heading:"We couldn't load your profile.",body:"Check your connection and try again. Your data is safe.",retry:"Try again"},suspended:{heading:"Onboarding is unavailable.",body:"This account cannot access LetsRide onboarding right now. Please contact support if you need help."},basics:{heading:"Your riding basics.",intro:"A few starting details. You can change any of these later.",displayNameLabel:"Display name",displayNameHelper:"Use the name other riders should call you.",dis
2playNamePlaceholder:"e.g. Nika K.",displayNameError:{required:"Please enter a display name.",tooShort:"Use at least 2 characters.",tooLong:"Keep it under 40 characters.",invalidChars:"Please remove special or HTML-like characters."},bioLabel:"Short bio (optional)",bioHelper:"A sentence or two about the riding you enjoy.",bioPlaceholder:"What kind of rides do you enjoy?",bioError:{tooLong:"Keep your bio under 500 characters.",invalidChars:"Please remove HTML or control characters."},localeLabel:"Preferred language",localeHelper:"We'll use this for LetsRide messages and notifications.",localeError:{unsupported:"Choose a supported language."},regionLabel:"Your region",regionUnavailableNote:"More regions will be added later.",regionConfirmLabel:"Use this as my LetsRide region",regionConfirmError:"Please confirm your LetsRide region.",regionError:{unsupported:"This region is not enabled yet."},visibilityLabel:"Profile visibility",visibilityOptions:{private:"Private",privateDescription:"Only you and administrators can see your profile.",participants:"Ride participants",participantsDescription:"Riders confirmed for a shared ride may see the permitted details."},visibilityError:{unsupported:"Choose a supported visibility option."},visibilityFutureNote:"This setting prepares how your profile will be shown when activity features launch.",privacyNote:"We never share your exact location. You can change visibility at any time.",saveCta:"Save and continue",savingCta:"Saving…",backCta:"Back",savedToast:"Basics saved.",saveError:"We couldn't save your details. Please try again."},cycling:{heading:"How you like to ride.",intro:"These preferences will help LetsRide show you more relevant rides when discovery launches.",disciplinesLabel:"Cycling disciplines",disciplinesHelper:"Choose every type of riding you regularly want to join.",disciplinesError:{required:"Choose at least one discipline.",disabled:"Only road and gravel are available during the private alpha."},disciplineOptions:{road:"Road",roadDescription:"Paved roads, endurance and group rides.",gravel:"Gravel",gravelDescription:"Mixed and unpaved surfaces at a steadier pace."},experienceLabel:"Experience level",experienceHelper:"Self-reported. There is no ranking. This only helps match ride suggestions.",experienceError:{required:"Choose an experience level."},experienceOptions:{beginner:"Beginner",beginnerDescription:"I am still building confidence, group-riding skills or fitness.",recreational:"Recreational",recreationalDescription:"I ride regularly and am comfortable on normal social rides.",experienced:"Experienced",experiencedDescription:"I ride consistently and am comfortable with longer or faster groups.",advanced:"Advanced",advancedDescription:"I train seriously and am comfortable in demanding, performance-focused groups."},intensityLabel:"Usual ride intensity",intensityHelper:"Think effort, not speed. A beginner may still prefer a steady pace.",intensityError:{required:"Choose a usual intensity."},intensityOptions:{easy:"Easy",easyDescription:"Comfortable pace with plenty of time to talk.",steady:"Steady",steadyDescription:"A consistent social pace with moderate effort.",tempo:"Tempo",tempoDescription:"A purposeful training pace with limited conversation.",fast:"Fast",fastDescription:"A demanding pace for experienced, well-prepared riders."},intensityFooterNote:"Ride listings will also show distance, elevation and drop policy before you join.",weeklyHoursLabel:"Typical weekly riding hours",weeklyHoursHelper:"Helps distinguish occasional, regular and high-volume riders. Not a fitness proof.",weeklyHoursError:{required:"Choose a weekly range."},weeklyHoursOptions:{under_3:"Under 3 hours","3_to_5":"3–5 hours","6_to_8":"6–8 hours","9_to_12":"9–12 hours",over_12:"More than 12 hours"},dropPolicyLabel:"Preferred group behaviour",dropPolicyHelper:"This is a preference, not a restriction on every future ride. Activity details remain the source of truth.",dropPolicyError:{required:"Choose a preferred group behaviour."},dropPolicyOptions:{no_drop:"No-drop",no_dropDescription:"The group stays together and n
2obody is intentionally left behind.",regroup:"Regroup",regroupDescription:"The group may split on climbs or faster sections, then waits at agreed points.",drop:"Drop",dropDescription:"Riders are responsible for holding the stated pace and knowing the route."},selfReportedNote:"These values are self-reported and are not a public ranking. You can update them later.",recommendationNote:"Future ride listings will still show actual pace, distance and difficulty before you join.",saveCta:"Save and continue",savingCta:"Saving…",savedToast:"Cycling profile saved.",saveError:"We couldn't save your cycling profile. Please try again."},location:{heading:"Where you like to start.",intro:"Choose the areas you're usually happy to start a ride from. This is not your home location.",notHomeNote:"We only use this to suggest rides you can realistically get to. We never collect an address or an exact location.",regionLabel:"Your region",areasLabel:"Preferred start areas",areasHelper:"Pick every area that works for you. Choose 'Flexible' if you're open to starts anywhere in the region.",flexibleHint:"Selecting 'Flexible' clears the other areas.",areaOptions:{centre:"City centre",centreDescription:"Ljubljana city centre and inner ring.",north:"North",northDescription:"Northern approaches and the Sava valley.",east:"East",eastDescription:"Eastern suburbs toward the Ljubljana Marshes edge.",south:"South",southDescription:"Southern outskirts and rolling terrain.",west:"West",westDescription:"Western outskirts and forested rides.",flexible:"Flexible",flexibleDescription:"I'm open to starts anywhere in the enabled regi
2on."},error:{required:"Choose at least one start area.",tooMany:"That's more areas than we support."},privacyNote:"This is a broad preference, not a live location. Only administrators can see raw preferences.",saveCta:"Save and continue",savingCta:"Saving…",savedToast:"Start areas saved.",saveError:"We couldn't save your start areas. Please try again."},availability:{heading:"When you usually ride.",intro:"A general weekly picture so we can suggest rides you can actually make. No live schedule is shared.",flexibleLabel:"My schedule changes",flexibleDescription:"Show me relevant rides whenever they are available.",flexibleExclusiveHint:"Turning this on clears your selected days and time windows.",dayLabel:"Choose a day",dayHelper:"Pick a day, then add one or more time windows.",summaryLabel:"Your weekly picture",summaryEmpty:"No slots selected yet.",slotCountAria:"{{count}} time windows selected",removeSlotAria:"Remove {{day}} · {{window}}",weekdayOptions:{1:"Monday",2:"Tuesday",3:"Wednesday",4:"Thursday",5:"Friday",6:"Saturday",7:"Sunday"},weekdayShortOptions:{1:"Mon",2:"Tue",3:"Wed",4:"Thu",5:"Fri",6:"Sat",7:"Sun"},timeWindowOptions:{early_morning:"Early morning",early_morningDescription:"Before 08:00.",morning:"Morning",morningDescription:"08:00–11:00.",midday:"Midday",middayDescription:"11:00–14:00.",afternoon:"Afternoon",afternoonDescription:"14:00–18:00.",evening:"Evening",eveningDescription:"After 18:00."},error:{required:"Add at least one slot or switch on 'My schedule changes'.",tooMany:"That's more slots than we support."},privacyNote:"This is a general weekly picture. Only administrators can see raw availability. You can change it later.",saveCta:"Save and continue",savingCta:"Saving…",savedToast:"Availability saved.",saveError:"We couldn't save your availability. Please try again."},photos:{heading:"Add your photos.",body:"Choose photos that help other athletes recognise you before a ride. One is enough; three helps most.",trustNote:"Photos are private during alpha. Only you and administrators can see them.",suggestionsLabel:"Ideas for good photos",suggestions:{portrait:"A clear portrait",cycling:"On the bike",running:"Trail running",hiking:"Hiking / outdoors",coffee:"Coffee stop",group:"Group ride"},slot:{primary:"Primary photo",optionalOne:"Optional",optionalTwo:"Optional"},primaryBadge:"Primary",primaryBadgeAria:"Primary photo",previewAlt:"Your profile photo preview",previewLoading:"Loading preview",emptySlotCta:"Add photo",replaceCta:"Replace",deleteCta:"Delete",setPrimaryCta:"Make primary",moveUpAria:"Move photo earlier",moveDownAria:"Move photo later",fileInputAria:"Choose an image to upload",requirementMet:"You have a primary photo. You're ready to continue.",requirementNotMet:"Add at least one photo and set it as primary to continue.",privacyNote:"Photos are private during alpha. Future visibility will be controlled by your privacy settings.",continueCta:"Continue",continueDisabled:"Add at least one photo",uploadedToast:"Photo uploaded.",deletedToast:"Photo removed.",primarySetToast:"Primary photo updated.",reorderedToast:"Photo order updated.",error:{unauthenticated:"Please sign in and try again.",unsupportedMime:"That image format isn't supported. Use JPG, PNG or WebP.",tooLarge:"That file is over 5 MB. Please choose a smaller photo.",empty:"That file appears to be empty.",prepareFailed:"We couldn't prepare that image. Please try another photo.",noSlot:"You've reached the maximum of 3 photos.",uploadFailed:"We couldn't upload that photo. Please try again.",saveFailed:"We couldn't save that photo. Please try again.",deleteFailed:"We couldn't delete that photo. Please try again.",primaryFailed:"We couldn't set the primary photo. Please try again.",reorderFailed:"We couldn't reorder your photos. Please try again."}},privacy:{heading:"Privacy and consent.",intro:"Choose how much LetsRide may share about you as we build activity features. Nothing on your profile is publicly browsable during the private alpha.",alphaNote:"Enabling a preference here does not create a public profile today. It only prepares what may be shown when activity features launch.",visibilityLabel:"Profile visibility",visibilityError:"Choose a supported visibility option.",consentsLabel:"What may appear on your safe profile",consentsHelper:"These preferences only apply once activity or organiser surfaces launch. They never expose your extra photos, exact location or availability.",consentError:"Choose yes or no for each consent.",saveCta:"Save and continue",savingCta:"Saving…",s
2avedToast:"Privacy preferences saved.",saveError:"We couldn't save your privacy preferences. Please try again.",visibilityOptions:{private:"Private",privateDescription:"Only you and administrators can see your profile.",participants:"Ride participants",participantsDescription:"When you confirm a shared ride, other confirmed riders may see the details you approved.",discoverable:"Discoverable",discoverableDescription:"Signed-in LetsRide riders may find your safe profile where a future feature explicitly supports it."},consents:{photo:"Show my primary photo",photoDescription:"Only the primary photo may ever appear. Additional photos remain private.",name:"Show my display name",nameDescription:"Your chosen display name may appear where activity or organiser features allow."},notes:{location:"Your exact location is never part of the public profile.",availability:"Your recurring availability stays private.",extraPhotos:"Additional social photos remain private until a later decision.",meetingPoint:"Meeting-point access is separate and activity-specific.",changeLater:"You can change these settings later."}},review:{heading:"Review your riding profile.",intro:"Check the details below. When it looks right, complete setup to start using LetsRide.",editCta:"Edit",editSectionAria:"Edit {{section}}",noBio:"No bio added.",flexibleSchedule:"Flexible schedule.",photoAlt:"Your profile photo #{{position}}",primaryBadge:"Primary",consentYes:"Yes",consentNo:"No",yes:"Yes",no:"No",privacyAlphaNote:"LetsRide has no public profile browsing during the private alpha. These preferences only apply once activity features launch.",completeCta:"Complete setup",completingCta:"Completing setup…",completionError:"We couldn't complete your setup. Please review each section and try again.",successHeading:"Your riding profile is ready.",successBody:"You can now browse rides. Joining becomes available in the next phase.",sections:{basics:"Basics",cycling:"Cycling",preferences:"Location and availability",location:"Location and availability",availability:"Availability",photos:"Photos",privacy:"Privacy"},labels:{displayName:"Display name",language:"Preferred language",region:"Region",bio:"Short bio",disciplines:"Disciplines",experience:"Experience",intensity:"Usual intensity",weeklyHours:"Weekly hours",dropPolicy:"Group behaviour",startAreas:"Preferred start areas",availability:"Weekly availability",visibility:"Profile visibility",consentPhoto:"Primary photo may appear",consentName:"Display name may appear",discoverable:"Discoverable"},slotCount:{one:"{{count}} time window selected",other:"{{count}} time windows selected"},photoCount:{one:"{{count}} active photo",other:"{{count}} active photos"}}},activities:{list:{heading:"My activities",newCta:"New activity",loading:"Loading your activities",errorBody:"We couldn't load your activities. Please try again.",retryCta:"Try again",emptyBody:"You haven't created any activities yet. Draft your first ride when you're ready. Nothing is public until you publish.",emptyCta:"Create an activity"},create:{heading:"Create an activity",body:"Draft your ride now, publish it when you're ready. Only you can see drafts."},detail:{loading:"Loading activity",errorBody:"We couldn't load this activity. Please try again.",notFound:"This activity was not found or you do not have access to it.",backToList:"Back to my activities",editCta:"Edit",cancelEdit:"Cancel editing",deleteCta:"Delete draft",deleteConfirm:"Delete this draft? This cannot be undone.",deleteError:"We couldn't delete this draft. Please try again.",deletedToast:"Draft deleted.",cancelCta:"Cancel activity",confirmCancelCta:"Confirm cancellation",cancelReasonLabel:"Reason (optional)",cancelReasonPlaceholder:"Share why the ride is off. Riders will see this later.",cancelReasonHelper:"Optional. Kept private until participant features ship.",cancelError:"We couldn't cancel this activity. Please try again.",cancelledToast:"Activity cancelled.",cancellationReasonLabel:"Cancellation reason",approvalYes:"Approval required",approvalNo:"Open to join (once discovery ships)",alphaScopeNote:"Discovery, joining and messaging are not enabled yet. Nobody else can see this activity even if visibility is public."},status:{draft:"Draft",published:"Published",cancelled:"Cancelled",completed:"Completed"},visibility:{private:"Private",public:"Public"},discipline:{road:"Road",gravel:"Gravel"},rideType:{coffee:"Coffee ride",training:"Training ride",endurance:"Endurance ride",race_simulation:"Race simulation",social:"Social ride",gravel_adventure:"Gravel adventure"},difficulty:{beginner:"Beginner",intermediate:"Intermediate",experienced:"Experienced",advanced:"Advanced"},pace:{easy:"Easy",steady:"Steady",tempo:"Tempo",fast:"Fast"},dropPolicy:{no_drop:"No-drop",regroup:"Regroup",drop:"Drop"},meetingArea:{centre:"City centre",north:"North",east:"East",south:"South",west:"West",flexible:"Flexible"},form:{ariaLabel:"Create or edit activity",stepOf:"Step {{current}} of {{total}}",stepHeadings:{0:"Basic information",1:"Ride details",2:"Meeting",3:"Review"},titleLabel:"Ride title",titlePlaceholder:"e.g. Saturday endurance loop",titleError:{required:"Please add a ride title.",tooShort:"Use at least 3 characters.",tooLong:"Keep it under 120 characters.",invalidChars:"Please remove HTML or c
2ontrol characters."},disciplineLabel:"Discipline",disciplineError:{required:"Choose a discipline."},rideTypeLabel:"Ride type",rideTypeError:{required:"Choose a ride type."},descriptionLabel:"Description (optional)",descriptionPlaceholder:"What should riders expect? Route feel, coffee stops, expected effort.",descriptionError:{tooLong:"Keep the description under 2000 characters.",invalidChars:"Please remove HTML or control characters."},distanceLabel:"Distance (km)",distanceError:{required:"Add a distance.",tooShort:"Distance must be at least 1 km.",tooLong:"Distance must be under 1000 km."},elevationLabel:"Elevation (m, optional)",elevationError:{invalid:"Elevation must be a number.",negative:"Elevation cannot be negative.",tooLarge:"Elevation must be under 10 000 m."},durationLabel:"Duration (min)",durationError:{required:"Add an estimated duration.",tooShort:"Duration must be at least 15 minutes.",tooLong:"Duration must be under 24 hours."},paceLabel:"Pace",paceError:{required:"Choose a pace."},difficultyLabel:"Difficulty",difficultyError:{required:"Choose a difficulty."},dropPolicyLabel:"Group behaviour",dropPolicyError:{required:"Choose a group behaviour."},maxParticipantsLabel:"Maximum riders",maxParticipantsError:{required:"Add a maximum.",tooFew:"Allow at least 2 riders.",tooMany:"Keep it under 100 riders."},approvalRequiredLabel:"Require approval to join",approvalRequiredHelper:"You will approve each request when joining is enabled.",equipmentNotesLabel:"Equipment notes (optional)",equipmentNotesPlaceholder:"Lights, gravel tyres, spare tube: anything riders should bring.",equipmentNotesError:{tooLong:"Keep notes under 1000 characters.",invalidChars:"Please remove HTML or control characters."},meetingAreaLabel:"Meeting area",meetingAreaHelper:"A broad area only. Exact meeting points will be shared with confirmed riders in a later phase.",meetingAreaError:{required:"Choose a meeting area."},meetingDatetimeLabel:"Meeting time",meetingDatetimeHelper:"Local time. Published rides must be in the future.",datetimeError:{required:"Add a meeting date and time.",invalid:"That date and time isn't valid."},visibilityLabel:"Visibility",visibilityDescription:{private:"Only you can see this ride. Use for planning.",public:"Ready to be listed when discovery launches. Still invisible to others in the alpha."},visibilityError:{required:"Choose a visibility."},backCta:"Back",continueCta:"Continue",saveDraftCta:"Save draft",saveEditCta:"Save changes",publishCta:"Publish",publishDisabled:"Complete every field to publish",reviewNote:"Only you can see this ride until you publish. Publishing does not notify anyone yet. Discovery ships in a later phase.",emptyTitle:"Untitled ride",createdToast:"Draft saved.",savedToast:"Changes saved.",publishedToast:"Ride published.",saveError:"We couldn't save this ride. Please try again.",publishError:"We couldn't publish this ride. Please try again."}},notificationCentre:{heading:"Notifications",unreadSummary:"{{count}} unread",allCaughtUp:"You're all caught up.",markAll:"Mark all as read",markingAll:"Marking…",markAllError:"We couldn't mark them as read. Please try again.",loading:"Loading notifications…",loadingMore:"Loading more…",loadMore:"Load more",errorBody:"We couldn't load your notifications. Please try again.",retry:"Try again",bell:"Notifications",bellWithCount:"Notifications, {{count}} unread",unreadIndicator:"Unread",empty:{heading:"No notifications yet.",body:"Updates about your rides and participation will appear here.",browse:"Browse rides",myActivities:"My activities"},settingsLink:"Settings"},notificationSettings:{push:{deviceHeading:"This device",deviceRegistered:"Registered. Ride updates can reach this device.",deviceMissing:"Your settings above are saved, but this device is not registered yet, so nothing can arrive. Registration needs your permission in the browser.",registerDevice:"Register this device",deniedHelp:"Notifications are blocked for this site in your browser settings. Allow them there, then try again.",unsupported:"This browser cannot deliver phone notifications. On iPhone, add Approved to your home screen first.",enableError:"Notifications could not be enabled on this device. Try again later."},heading:"Notification settings",description:"Choose which optional emails LetsRide sends you. In-app notifications stay on.",backToCentre:"Back to notifications",loading:"Loading settings…",loadError:"We couldn't load your settings. Please try again.",retry:"Try again",save:"Save settings",saving:"Saving…",s
2aved:"Settings saved.",saveError:"We couldn't save your settings. Please try again.",unsavedChanges:"You have unsaved changes.",inApp:{heading:"In-app notifications",description:"In-app operational notifications stay on so you can track ride changes and your participation."},email:{heading:"Email notifications",description:"Turn off optional email updates from LetsRide.",toggleLabel:"Email notifications",mandatoryExplanation:"Critical ride cancellations, removals, and meeting-time changes may still be emailed even when optional emails are off."},reminder:{heading:"Ride reminder",description:"Choose when you want a final reminder before rides you've joined.",label:"Remind me before the start",off:"Off",min30:"30 minutes before",min60:"1 hour before",min120:"2 hours before"},categories:{heading:"Email categories",participation:{label:"Participation updates",description:"Approvals, declines, waitlist changes, and confirmations for your ride requests."},activity:{label:"Activity changes",description:"Important updates to a ride you plan to attend."},organiser:{label:"Organiser updates",description:"New join requests and cancellations for rides you organise."}}},notifications:{join_confirmed:{title:"You're in.",body:"You're confirmed for this ride."},join_requested:{title:"Request sent.",body:"The organiser will review your request."},join_waitlisted:{title:"You're on the waitlist.",body:"You'll be moved up if a spot opens."},request_confirmed:{title:"You're in.",body:"The organiser confirmed your request."},request_declined:{title:"Request declined.",body:"The organiser wasn't able to fit you into this ride."},request_waitlisted:{title:"Moved to the waitlist.",body:"The organiser moved your request to the waitlist."},waitlist_promoted:{title:"A place opened up.",body:"You are now confirmed for this ride."},participation_removed:{title:"Removed from the ride.",body:"You're no longer part of this ride."},activity_cancelled:{title:"Ride cancelled.",body:"The organiser cancelled this ride. Open it for the latest details."},activity_updated_important:{title:"Ride details changed.",body_time:"The meeting time has changed. Open the ride for the new time.",body_area:"The meeting area has changed. Open the ride for the new area.",body_timeAndArea:"The meeting time and area have changed. Open the ride for the new details.",body_generic:"The organiser updated this ride. Open it for the latest details."},activity_reminder_24h:{title:"Ride tomorrow.",body:"Your ride starts in about 24 hours. Open it to check the details."},activity_reminder_near_start:{title:"Ride starting soon.",body:"Your ride starts soon. Open it to check the meeting details."},new_join_request:{title:"New join request.",body:"A rider is waiting for your decision."},participant_joined:{title:"A rider joined.",body:"A new rider is confirmed for your ride."},waitlist_joined:{title:"Someone joined the waitlist.",body:"Your ride's waitlist grew."},participant_cancelled:{title:"A rider cancelled.",body:"A confirmed rider left your ride."},activity_messages_unread:{title_one:"New ride message",title_other:"New ride messages",body_one:"There is a new message in your ride conversation.",body_other:"There are new messages in your ride conversation."},ride_invite_received:{title:"Ride invitation",body:"A rider invited you to join their ride."},partner_request_received:{title:"New Cycling Buddy request",body:"A rider wants to be your Cycling Buddy."},partner_added:{title:"Cycling Buddy added",body:"You are now Cycling Buddies."},unknown:{title:"New notification.",body:"Open the notification centre for more."}},myActivities:{heading:"My activities",description:"Rides you organise, join or have joined.",drafts:"Drafts",upcoming:"Upcoming",previous:"Previous",loading:"Loading your activities…",errorBody:"We couldn't load your activities. Please try again.",retry:"Try again",organiserFallback:"Ride organiser",capacityLabel:"{{occupied}}/{{max}} riders",filters:{all:"All",organising:"Organising",confirmed:"Confirmed",requested:"Requested",waitlisted:"Waitlisted",previous:"Previous"},relationship:{organising:"Organising",confirmed:"Confirmed",requested:"Request pending",waitlisted:"Waitlisted",cancelled:"Cancelled",declined:"Request declined",removed:"Removed by organiser"},activityStatus:{draft:"Draft",cancelled:"Activity cancelled",completed:"Completed",past:"Past activity"},actions:{viewRide:"View ride",editRide:"Edit ride",manageParticipants:"Manage participants",continueEditing:"Continue editing",deleteDraft:"Delete draft",viewRequest:"View request",viewWaitlistStatus:"View waitlist status",browseRides:"Browse rides",createRide:"Create a ride"},empty:{none:{heading:"No activities yet.",body:"Browse upcoming rides or create one of your own."},organising:"You are not organising any rides.",confirmed:"You have no confirmed rides.",requested:"You have no pending requests.",waitlisted:"You are not on any waitlists.",previous:"No previous activity relationships yet."}},nav:{home:"Home",discover:"Discover",create:"Create",myActivities:"My activities"},feed:{heading:"Find your next ride.",subheading:"Browse published rides around Ljubljana. Joining ships in the next phase. For now, get a feel for what your neighbours are planning.",loading:"Loading rides",loadingMore:"Loading more…",loadMoreCta:"Load more",errorBody:"We couldn't load the ride feed. Please try again.",retryCta:"Try again",emptyBody:"No rides match your filters yet. Try clearing filters or draft one of your own.",emptyCta:"Create a ride",createCta:"New ride",resultsCount_one:"{{count}} ride shown",resultsCount_other:"{{count}} rides shown",filters:{ariaLabel:"Feed filters",showCta:"Show filters",hideCta:"Hide filters",clearAll:"Clear all filters",searchLabel:"Search titles",searchPlaceholder:"e.g. endurance, coffee",sortLabel:"Sort by",sortOptions:{soonest:"Soonest upcoming",newest:"Newest published",longest_distance:"Longest distance",greatest_elevation:"Greatest elevation",alphabetical:"Alphabetical"},distanceLabel:"Distance",distanceOptions:{short:"Under 40 km",medium:"40–80 km",long:"80–130 km",epic:"130 km+"},approvalLabel:"Joining",approvalOptions:{any:"Any",open:"Open to join",approval:"Approval required"},startDateLabel:"From",endDateLabel:"To",lookingForRidersOnly:"Looking for riders only"},card:{openAria:"Open {{title}}",timeLabel:"Start time",maxRiders_one:"Up to {{count}} rider",maxRiders_other:"Up to {{count}} riders",approvalRequired:"Approval required",openToJoin:"Open",viewCta:"View ride"},organiser:{sectionLabel:"Organiser",fallbackName:"Ride organiser",experienceUnknown:"Experience not shared"},detail:{loading:"Loading ride",errorBody:"We couldn't load this ride. Please try again.",notFound:"This ride isn't available. It may have been cancelled or completed.",backToFeed:"Back to feed",descriptionLabel:"About this ride",joinDeferredNote:"Joining, participant lists and messaging arrive in the next phase."}},participation:{sectionLabel:"Your participation",loading:"Checking your participation…",unavailable:"Joining is not available for this ride right now.",retry:"Try again",suspended:"Your LetsRide account is currently paused. Reach out if you think this is a mistake.",capacity:{summary:"{{occupied}} of {{total}} places filled",available_one:"{{count}} place available",available_other:"{{count}} places available",full:"Ride is full",ariaLabel:"{{occupied}} of {{total}} places filled including the organiser"},incompleteProfile:{body:"Complete your riding profile before joining rides.",cta:"Continue setup"},organiser:{label:"Organiser",body:"You are organising this ride."},join:{openCta:"Join ride",openPending:"Joining…",openNote:"You'll be confirmed instantly.",requestCta:"Request to join",requestPending:"Sending request…",approvalNote:"The organiser reviews each request before confirming your place.",waitlistCta:"Join waitlist",waitlistPending:"Joining waitlist…",waitlistNote:"Waitlist updates are not automatic during the private alpha. Check the ride again for changes."},confirmed:{label:"Confirmed",body:"You are confirmed for this ride."},requested:{label:"Request sent",body:"The organiser has not responded yet."},waitlisted:{label:"On the waitlist",body:"You will stay on the waitlist until the organiser confirms a place."},declined:{label:"Not accepted",body:"Your request was not accepted."},cancelledOwn:{label:"Participation cancelled",body:"You cancelled your participation. Rejoining is not available during the private alpha."},removed:{label:"No longer confirmed",body:"The organiser changed your participation status."},cancel:{confirmedCta:"Cancel participation",requestedCta:"Cancel request",waitlistedCta:"Leave waitlist",confirmHeading:"Cancel your participation?",confirmBody:"Your place will be released. Rejoining is not available during the private alpha.",confirmCta:"Cancel participation",keepCta:"Keep my place",pending:"Cancelling…"},toast:{joined:"You're joining this ride.",requested:"Request sent to the organiser.",waitlisted:"You're on the waitlist.",cancelled:"Your participation was cancelled."},error:{summary:"We couldn't load your participation. Please try again.",unauthenticated:"Please sign in to join this ride.",profile_incomplete:"Complete your riding profile before joining.",profile_suspended:"Your LetsRide account is currently paused.",activity_unavailable:"This ride is no longer available.",activity_started:"This ride has already started.",organiser_cannot_join:"The organiser can't join their own ride.",already_participating:"You already have a participation on this ride.",participation_terminal:"This participation can't be changed.",not_cancellable:"This participation can't be cancelled.",network_error:"Network error. Please try again.",unknown:"Something went wrong. Please try again."}},manage:{eyebrow:"Manage participants",heading:"{{title}}",loading:"Loading participants…",unavailable:"This management view isn't available.",retry:"Try again",backToList:"Back to my rides",backToActivity:"Back to ride",manageCta:"Manage participants",capacity:{sectionLabel:"Capacity",occupied:"Filled",occupiedAria:"{{occupied}} of {{total}} places filled including you",available:"Available",requested:"Requests",waitlisted:"Waitlist"},sections:{requests:"Join requests",confirmed:"Confirmed riders",waitlist:"Waitlist"},empty:{requests:"No pending requests.",confirmed:"No riders have been confirmed yet.",waitlist:"The waitlist is empty."},actions:{confirm:"Confirm",confirmAria:"Confirm {{name}}",confirming:"Working…",waitlist:"Move to waitlist",decline:"Decline",promote:"Confirm rider",promoteAria:"Confirm {{name}} from the waitlist",remove:"Remove rider",removeAria:"Remove {{name}} from the ride"},remove:{heading:"Remove this rider?",body:"The rider will no longer be confirmed. Their place is released for someone on the waitlist. This can't be und
2one.",keep:"Keep rider",confirm:"Remove rider",pending:"Removing…"},decline:{heading:"Decline this request?",body:"The rider will not be able to request this ride again during the private alpha.",keep:"Keep request",confirm:"Decline request",pending:"Declining…"},row:{fallbackName:"Rider",unavailableAria:"Unavailable rider",unavailableName:"Rider unavailable",unavailableNote:"This account is not currently available. No further action needed.",unknownValue:"Not shared",confirmedBadge:"Confirmed",experienceLabel:"Experience",intensityLabel:"Usual intensity",dropPreferenceLabel:"Drop preference",disciplinesLabel:"Disciplines",ridePace:"Ride pace",statusLabel:{requested:"Requested",confirmed:"Confirmed",waitlisted:"Waitlisted"}},compat:{intensityMatch:"Matches ride pace",intensityDiffer:"Different usual intensity",dropMatch:"Matches drop policy",dropDiffer:"Different drop preference",disciplineMatch:"Matches ride discipline",disciplineDiffer:"Different discipline preference"},toast:{confirm:"Rider confirmed.",waitlist:"Rider moved to the waitlist.",decline:"Request declined.",promote:"Rider confirmed from the waitlist.",remove:"Rider removed. Their place is released."},error:{summary:"We couldn't load the participants. Please try again.",unauthenticated:"Please sign in to manage this ride.",not_organiser:"Only the ride organiser can manage participants.",activity_unavailable:"This ride is no longer available.",activity_started:"This ride has already started.",request_changed:"This request has changed. The list has been refreshed.",capacity_full:"The ride is full. Confirm a place isn't available.",capacity_low:"You can't reduce capacity below the riders already confirmed.",not_confirmed:"Only confirmed riders can be removed.",terminal:"This request can no longer be changed.",network_error:"Network error. Please try again.",unknown:"Something went wrong. Please try again."}},regions:{ljubljana:"Ljubljana and surrounding area"},messages:{eyebrow:"RIDE MESSAGES",loading:"Loading messages…",loadingOlder:"Loading earlier messages…",loadOlder:"Load earlier messages",retry:"Retry",backToRide:"Back to ride",backToMyActivities:"Back to My Activities",accessDenied:"You don't have access to these messages.",entry:{open:"Open messages",short:"Messages",shortWithUnread_one:"Messages · 1 unread ride message",shortWithUnread_other:"Messages · {{count}} unread ride messages"},unread:{badgeLabel_one:"1 unread ride message",badgeLabel_other:"{{count}} unread ride messages",capLabel:"9 or more unread ride messages"},empty:{heading:"No messages yet.",body:"Use this space for ride coordination with confirmed riders."},banners:{cancelled:"This ride was cancelled. Messages are read-only.",closed:"This conversation is closed.",accessLost:"You no longer have access to these messages."},composer:{label:"Write a message",ariaLabel:"Write a message",placeholder:"Write a message to the confirmed riders…",send:"Send",sending:"Sending…",remaining:"{{count}} characters left",hint:"Cmd/Ctrl + Enter to send",unavailable:"Sending is not available right now."},sender:{organiser:"Organiser",rider:"Rider",unknown:"Unknown rider"},tombstone:{deletedBySender:"Message deleted.",removedByOrganiser:"Message removed by the organiser.",removedByAdmin:"Message removed."},actions:{delete:"Delete",remove:"Remove",report:"Report"},deleteDialog:{heading:"Delete this message?",body:"It will be replaced with a deleted-message notice.",cancel:"Cancel",confirm:"Delete",pending:"Deleting…",success:"Message deleted."},removeDialog:{heading:"Remove this message?",body:"The message will be hidden from riders. The reason is not shown publicly.",reasonLabel:"Reason",reasons:{off_topic:"Off topic",unsafe:"Unsafe",harassment:"Harassment",personal_information:"Personal information",spam:"Spam",other:"Other"},cancel:"Cancel",confirm:"Remove",pending:"Removing…",success:"Message removed."},errors:{loadFailed:"Messages could not be loaded.",sendFailed:"Your message could not be sent.",rateLimited:"You are sending messages too quickly. Please wait and try again.",accessLost:"You no longer have access to this conversation.",invalidBody:"Please write a message before sending.",bodyTooLong:"Your message is too long.",deleteFailed:"The message could not be deleted.",removeFailed:"The message could not be removed.",conversationClosed:"This conversation is closed.",activityUnavailable:"This ride is no longer available.",unknown:"Something went wrong. Please try again."}},attendance:{heading:"Attendance",loading:"Loading attendance…",retry:"Try again",empty:"No confirmed riders yet.",notEditable:"Attendance opens once the ride starts.",summaryLine:"Pending {{pending}} · Attended {{attended}} · Absent {{absent}} · Excused {{excused}}",state:{pending:"Pending",attended:"Attended",absent:"Absent",excused:"Excused"},row:{fallbackName:"Rider",currentAria:"{{name}}: current attendance {{state}}",stateLabel:"Attendance",noteLabel:"Note (optional)",notePlaceholder:"Optional note for you and other admins",reasonLabel:"Reason for correction (required)",reasonPlaceholder:"Explain why you are correcting this attendance",s
2ave:"Save",correctSave:"Save correction",saving:"Saving…"},toast:{saved:"Attendance recorded.",corrected:"Attendance corrected."},errors:{loadFailed:"We couldn't load attendance. Please try again.",not_authenticated:"Please sign in and try again.",not_authorised:"Only the ride organiser can record attendance.",invalid_arguments:"Missing information. Please refresh and try again.",invalid_state:"That attendance state isn't valid.",note_too_long:"The note is too long.",reason_too_long:"The correction reason is too long.",reason_required:"Please add a short reason for the correction.",activity_not_found:"This ride is no longer available.",activity_not_started:"Attendance opens once the ride starts.",participant_not_confirmed:"Only confirmed riders can have attendance.",attendance_not_found:"No attendance record was found.",attendance_not_confirmed:"This attendance is still pending. Mark it instead of correcting.",attendance_already_set:"This attendance is already set. Use correction to change it.",no_change:"Attendance is already in that state.",network_error:"Network error. Please try again.",unknown:"Something went wrong. Please try again."},batch:{openToggle:"Batch mode",heading:"Batch attendance",close:"Exit batch mode",unsavedBadge:"{{count}} unsaved",filterLabel:"Filter",filterAll:"All",showing:"Showing {{shown}} of {{total}}",bulkActionsLabel:"Bulk actions",selectedCount:"{{count}} selected",selectAllVisible:"Select all visible",clearSelection:"Clear selection",applyAttended:"Mark attended",applyAbsent:"Mark absent",applyExcused:"Mark excused",applyResetPending:"Reset to pending",sharedReasonLabel:"Shared reason for corrections",sharedReasonPlaceholder:"Applied to every correction row unless overridden",rowReasonLabel:"Reason for this correction",rowReasonPlaceholder:"Required for corrections",rowReasonPlaceholderShared:"Overrides the shared reason",currentLabel:"Current",selectRowAria:"Select {{name}}",stagedAria:"Staged attendance for {{name}}",initialMark:"Initial mark",correctionRow:"Correction",resetRow:"Reset to pending",prevPage:"Previous",nextPage:"Next",revert:"Revert changes",review:"Review changes",reviewHelp:"Opens a confirmation before submitting the batch.",reviewHeading:"Confirm batch attendance",reviewMarks:"Initial marks: {{count}}",reviewCorrections:"Corrections: {{count}}",reviewResets:"Reset to pending: {{count}}",reviewConfirmBody:"Submitting will record these attendance changes and cannot be undone from the batch panel. Every correction is audited.",continueEditing:"Continue editing",submit:"Submit batch",submitting:"Submitting…",toastAllApplied:"All attendance changes applied.",toastPartial:"Some rows could not be applied. Review the results.",toastAllFailed:"No changes were applied. Please review the results.",confirmRevert:"Discard all staged attendance changes?",confirmClose:"You have unsaved attendance changes. Leave batch mode anyway?",confirmDiscardOnFilter:"Changing the filter will discard staged changes on rows that leave the view. Continue?",confirmDiscardOnPage:"Changing the page clears the current selection. Continue?",results:{applied:"Applied",unchanged:"No change",stale:"Conflicted: the roster changed. Reload before resubmitting.",invalid_transition:"Invalid transition",validation_error:"Validation error",not_found:"No longer eligible",unauthorised:"Not authorised"}},history:{navLabel:"Attendance history",heading:"Attendance history",body:"A private record of your attendance across LetsRide activities.",privacyNote:"Attendance is confirmed by the activity organiser after the ride begins. These records are private and visible only to you, authorised organisers for their activities, and administrators.",loading:"Loading your attendance history…",loadingMore:"Loading more…",loadMore:"Load more",retry:"Try again",error:"We couldn't load your attendance history. Please try again.",empty:"You don't have any attendance records yet.",emptyFiltered:"No attendance records match the current filters.",correctedLabel:"Corrected",updatedLabel:"Updated {{date}}",missingActivity:"Activity no longer available",stateExplained:{pending:"Attendance has not yet been confirmed.",attended:"The organiser recorded that you attended.",absent:"The organiser recorded that you did not attend.",excused:"The organiser recorded your absence as excused."},filters:{label:"Filters",state:"State",allStates:"All states",dateFrom:"From",dateTo:"To",reset:"Reset filters"},mistake:{heading:"Think a record is incorrect?",body:"Contact the activity organiser or support and include the activity name and date. Riders cannot edit attendance records directly because corrections must remain audited."}}},trust:{actionsLabel:"Safety",actions:{reportActivity:"Report ride",reportOrganiser:"Report organiser",blockOrganiser:"Block organiser",reportRider:"Report rider",blockRider:"Block rider"},dialog:{reportTitle:"Report",reportDescription:"Reports are private. Only our team can see them. The reported person is never notified.",blockTitle:"Block this rider",blockDescription:"Blocking prevents future interaction. You can undo this later in your account.",reasonLabel:"Reason",commentLabel:"Add context (optional)",submitting:"Submitting…",reportSubmit:"Submit report",blockSubmit:"Block",cancel:"Cancel",reportSuccess:"Report received. Thank y
2ou.",blockSuccess:"Blocked. Future interaction is prevented."},reasons:{harassment:"Harassment",unsafe_behaviour:"Unsafe behaviour",spam:"Spam",inappropriate_content:"Inappropriate content",dangerous_riding:"Dangerous riding",fake_activity:"Fake activity",personal_information:"Shares personal information",other:"Other"},errors:{not_authenticated:"Please sign in and try again.",not_authorised:"You cannot report this.",invalid_target:"Invalid target for a report or block.",invalid_reason:"Please pick a reason.",invalid_activity:"This ride is not available.",invalid_message:"This message is not available.",invalid_subject_type:"Unsupported report type.",comment_too_long:"The optional note is too long.",rate_limited:"You have submitted many reports recently. Please wait.",unknown:"Something went wrong. Please try again."}},adminBetaOps:{loading:"Loading…",refresh:"Refresh",close:"Close",prev:"Previous",next:"Next",exportCsv:"Export CSV",deniedTitle:"Admin access required",deniedBody:"This page is only visible to Approved administrators.",backToAccount:"Back to account",header:{admin:"Admin",betaOps:"Beta Operations",title:"Beta Operations",subtitle:"Observe, measure, improve. Every report should help you make one product decision. If it can’t, we don’t show it."},tabs:{overview:"Overview",funnel:"Funnel",community:"Communities",feedback:"Feedback",alerts:"Alerts",journey:"Rider journey"},overview:{title:"Beta dashboard",description:"Signals only. If a metric cannot lead to a decision, it is not shown.",trend:"8-week trend",week:"Week",signups:"Signups",firstRides:"First rides",lfr:"LFR posts"},counters:{invited:"Invited beta riders",active:"Active beta riders",firstRides:"First rides completed",series:"Recurring series",lfr:"Looking For Riders posts",weeklyActive:"Weekly active riders"},funnel:{title:"Activation funnel",description:"New profiles over the selected window and how far each cohort progresses.",from:"From",to:"To",defaultWindow:"Default: last 90 days",cohort:"Cohort size",stage:"Stage",count:"Riders",conversion:"Conversion of total",step:"Step-over-step",dropOff:"drop-off",dropNote:"Rows flagged when fewer than 60% of the previous stage progressed."},stages:{beta_access_granted:"Beta access granted",profile_started:"Profile started",profile_completed:"Profile completed",activated:"Joined or published a ride",first_ride_attended:"First ride attended",returned_next_week:"Returned next week"},community:{title:"Community health",description:"One row per locality. No rankings, no scoring. Just the signals a community organiser would want on their side.",region:"Region",activeRiders:"Riders",organisers:"Organisers",series:"Series",completed:"Completed",cancelled:"Cancelled",lfr:"LFR",avgAttendance:"Avg attend."},feedback:{title:"Beta feedback",description:"Internal moderation. Riders never see notes and there are no replies.",searchPlaceholder:"Search comments…",rating:"Rating",context:"Context",comment:"Comment",created:"Received",actions:"Actions",view:"Notes",resolve:"Resolve",reopen:"Reopen",resolved:"Marked resolved",reopened:"Reopened",empty:"No feedback matches these filters.",noComment:"No comment",pageOf:"Showing {{shown}} of {{total}}",notesTitle:"Internal notes",notesSubtitle:"Append-only. Not visible to the rider.",addNote:"Add note",addNotePlaceholder:"Add a note…",noteAdded:"Note added",noNotes:"No notes yet.",filter:{any:"Any",resolved:"Resolved",unresolved:"Unresolved"}},ratings:{better_than_expected:"Better than expected",good:"Good",okay:"Okay",needs_improvement:"Needs improvement"},alerts:{title:"Operational alerts",description:"Actionable signals only. We deliberately avoid notification fatigue.",empty:"All quiet. Nothing needs action.",kind:{series_materialisation_gap:"Recurring series has no upcoming occurrence",region_quiet_week:"Locality has no rides next week",beta_feedback_needs_improvement:"Beta feedback marked ‘Needs improvement’",organiser_repeat_cancellations:"Organiser cancelled ≥3 rides"},severity:{high:"High",medium:"Medium",low:"Low"}},journey:{title:"Rider journey inspector",description:"Never shows private messages, report history or block relationships.",userId:"Rider user id (UUID)",inspect:"Inspect",hint:"Paste a rider’s user id to see their onboarding, follows, joined and attended rides, and beta feedback.",profile:"Profile",display:"Display",region:"Region",onboarding:"Onboarding",state:"Account",created:"Joined",followed:"Followed series",joined:"Joined rides",title2:"Title",meeting:"Meets",status:"Status",feedback:"Beta feedback"},errors:{not_authorised:"You are not authorised to view this data.",n
2ot_found:"Not found.",invalid_note:"Note must be between 1 and 2000 characters.",network_error:"Network error. Please retry.",unknown:"Something went wrong.",loadFailed:"Failed to load metrics."}},adminTrust:{title:"Trust & Safety",subtitle:"Admin-only moderation queue for LetsRide reports.",loading:"Loading…",refresh:"Refresh",forbidden:{title:"Admin access required",body:"You need an administrator role to open this surface."},filters:{label:"Filters",status:"Status",reason:"Reason",subject:"Subject",from:"From",to:"To",order:"Order"},order:{unresolved_first:"Unresolved first",oldest_first:"Oldest first",newest_first:"Newest first",recently_updated:"Recently updated"},status:{new:"New",under_review:"Under review",resolved:"Resolved",dismissed:"Dismissed",hidden:"Hidden"},subject:{user:"Rider",organiser:"Organiser",message:"Message",activity:"Ride"},queue:{label:"Moderation queue",empty:"No reports match the current filters.",open:"Open",openReport:"Open report"},available:{yes:"Yes",no:"Missing"},columns:{created:"Submitted",reason:"Reason",subject:"Subject",status:"Status",comment:"Comment",available:"Subject",updated:"Updated",actions:"Actions"},pagination:{label:"Pagination",prev:"Previous",next:"Next",count:"{{from}}–{{to}} of {{total}}"},detail:{title:"Report detail",description:"Admin-only. Reporter identity is never disclosed to the reported party.",id:"Report ID",status:"Status",reason:"Reason",subjectType:"Subject type",created:"Submitted",updated:"Updated",reporter:"Reporter",reporterComment:"Reporter comment",subject:"Reported subject",missing:"Subject is no longer available.",blockPresent:"A block exists between reporter and reported user.",audit:"Moderation history",auditEmpty:"No transitions recorded yet.",notes:"Internal notes",notesEmpty:"No internal notes yet.",actions:"Actions",terminal:"This report is in a terminal state.",transitionNotes:"Note (recorded on the report)",transitionPlaceholder:"Optional context for this transition",displayName:"Display name",accountState:"Account state",totalReports:"Reports against this rider",startsAt:"Starts at",activityStatus:"Ride status",messageSentAt:"Sent at",messageStatus:"Message status",messageActivity:"Ride"},notes:{add:"Add internal note",placeholder:"Only admins can see this note. Append-only.",submit:"Add note",adding:"Adding…",added:"Note added."},actions:{take:"Take report",resolve:"Resolve",dismiss:"Dismiss",hide_message:"Hide message",success:"Report updated."},confirm:{cancel:"Cancel",confirm:"Confirm",working:"Working…",take:{title:"Take this report?",body:"This moves the report into review."},resolve:{title:"Resolve this report?",body:"This closes the report as actioned."},dismiss:{title:"Dismiss this report?",body:"This closes the report without action."},hide_message:{title:"Hide this message?",body:"The message will be hidden for all riders. This action is recorded."}},danger:{title:"Danger zone",description:"Immediately revoke this rider's LetsRide access. They will no longer be able to enter LetsRide until re-enabled.",currentStatus:"Access",statusActive:"Active",statusDisabled:"Disabled",reasonPlaceholder:"Internal reason (optional)",disableAction:"Disable LetsRide access",enableAction:"Re-enable access",disabled:"Access disabled.",reenabled:"Access re-enabled."},errors:{not_authorised:"Admin authority is required.",not_found:"Report not found.",invalid_action:"That action is not allowed for this report.",invalid_transition:"That transition is not valid for the current state.",stale_state:"Another moderator changed this report. Reloading…",notes_too_long:"Note is too long.",note_too_long:"Note is too long.",invalid_note:"Please write a short note.",network_error:"Network error. Please try again.",unknown:"Something went wrong. Please try again."}},publicSeries:{eyebrow:"RECURRING RIDE",upcomingHeading:"Upcoming occurrences",loading:"Loading…",notFound:"This series is no longer available.",viewSeries:"Open series",signInToJoin:"Sign in to follow this series"},betaWelcome:{eyebrow:"Welcome to the closed beta",heading:"Welcome to LetsRide.",body:"You're one of the first cyclists helping shape LetsRide. Thank y
2ou for joining the closed beta.",aboutHeading:"What LetsRide is",aboutBody:"LetsRide helps cyclists discover rides, meet people riding at a similar pace and organise real rides together.",stepsHeading:"What to do first",step1:"Complete your rider profile.",step2:"Browse nearby rides.",step3:"Join a ride that matches your pace.",step4:"Enjoy the ride and tell us how we can improve.",expectHeading:"What to expect",expect1:"Riders have different experience levels.",expect2:"Read the ride description before joining.",expect3:"Arrive on time.",expect4:"Respect the organiser and other riders.",expect5:"Have fun.",betaHeading:"A note on the beta",betaBody:"You're using an early version of LetsRide. Some things will improve as we learn from real rides. Your feedback matters.",primaryCta:"Start Riding",secondaryCta:"Community Guidelines",photoAlt:"Cyclists riding together on an open road"}},contact:{eyebrow:"CONTACT // SIGNAL",title:"Talk to a real cyclist.",intro:"Questions about a build, fit, gear, or your order? We answer every message ourselves. No chatbots, no call centers.",channelsLabel:"CHANNELS",channelsHeading:"Reach us your way.",email:"Email",emailHelp:"Best for orders, custom builds, and detailed questions.",phone:"Phone",phoneHelp:"Call or WhatsApp during shop hours.",visit:"Visit the shop",hours:"Opening hours",closed:"Closed",formLabel:"TRANSMISSION",formHeading:"Send a signal.",formIntro:"Pick a topic so the right rider on our team replies. Usually within one business day.",privacyRequestsLabel:"PRIVACY REQUESTS",privacyRequestsBody:"Need access, correction, deletion, objection to marketing, or consent withdrawal? Use this form or email [email protected].",privacyRequestsLink:"READ PRIVACY POLICY",followLabel:"FOLLOW",form:{name:"NAME",email:"EMAIL",subject:"SUBJECT",subjectPlaceholder:"Choose a topic",message:"MESSAGE",send:"SEND MESSAGE →",sending:"SENDING…",privacy:"I understand my details will be used to reply to this request and handled under the Privacy Policy.",marketingNote:"This form is for service and support messages only. It does not sign you up for marketing emails.",successTitle:"Message sent",successBody:"We'll reply within one business day.",errorTitle:"Something went wrong",errorBody:"Please try again or email [email protected].",receivedLabel:"MESSAGE RECEIVED",thanksTitle:"Thanks, we got it.",thanksBody:"We've sent a confirmation to your inbox. A real cyclist on our team will reply within one business day.",sendAnother:"SEND ANOTHER MESSAGE",errors:{name:"Please enter your name",email:"Please enter a valid email address",subject:"Please choose a subject",message:"Please write at least 10 characters",privacy:"Please confirm you have read the privacy notice"},subjects:{order:"Order & shipping",product:"Product question",returns:"Returns & exchanges",privacy:"Privacy request",customBuild:"Custom bike build",wheels:"Wheel recommendation",strava:"Strava support",club:"Approved Club",wholesale:"Wholesale & partnerships",other:"Other"}},faq:{title:"Contact FAQ",intro:"Quick answers about visiting the showroom, getting advice and reaching us.",locationQ:"Where is Approved Cycling located?",locationA:"Our showroom is at Ziherlova 10, 1000 Ljubljana, Slovenia. We work by appointment so we can give every rider our full attention.",visitQ:"Can I visit the showroom before buying?",visitA:"Yes. Book a visit by email or phone and we will set time aside for you. You can see frames, wheels, kit and accessories in person and talk through what you actually need.",adviceQ:"Can I ask for product advice before ordering?",adviceA:"Always. Tell us what bike you ride, how you ride and what you want to improve. We reply with honest, specific recommendations, not catalogue suggestions.",customBuildQ:"Do you help with custom bike builds in person?",customBuildA:"Yes. Custom builds with Pinarello, Nich and partner frames start with a consultation in the Ljubljana showroom or over a video call. You do not need to know the exact parts upfront.",reachQ:"How can I contact Approved Cycling?",reachA:"Email [email protected] or call +386 41 913 475. We reply within one working day, usually the same day."}},clubSignup:{title:"JOIN THE CLUB",intro:"Membership is €{{amount}} per year. We only need your name, email and payment method.",flikCopied:"Flik number copied.",copyFailed:"Could not copy.",invalid:"Check your name, email and payment method.",saveFailedToast:"Could not save your application. Please try again.",alreadyPaidLabel:"PAYMENT ALREADY CONFIRMED",savedLabel:"APPLICATION SAVED",alreadyPaidBody:"This email already has a paid membership application for the current year.",flikInstructions:"Open Flik in your banking app and send €{{amount}} to the number below. We will confirm the payment manually.",copy:"COPY",amountLine:"Amount: €{{amount}}",cashInstructions:"Your application is saved. You can pay the €{{amount}} membership fee in cash in person at Approved Cycling, Ziherlova 10, Ljubljana.",activationNote:"Membership is activated after payment is confirmed.",close:"CLOSE",errorBanner:"We could not save your application. Try again or email [email protected].",nameLabel:"NAME",namePlaceholder:"Your name",emailLabel:"E-MAIL",emailPlaceholder:"[email protected]",paymentLabel:"PAYMENT",cash:"Cash",inPerson:"in person",saving:"SAVING…",submit:"JOIN APPROVED CLUB",privacyNote:"We use your name and email only to process your Ap
2proved Club membership application. This does not subscribe you to marketing emails."},letsRideLanding:{meta:{title:"LetsRide: find your next ride. Meet the people you'll ride with again.",description:"LetsRide helps you find cyclists and rides nearby. Currently in closed beta in Ljubljana. Request access to join.",descriptionPublic:"LetsRide helps you find cyclists and rides nearby. Create an account or sign in to find your next ride."},hero:{eyebrow:"LetsRide · Closed Beta",title:"Find your next ride. Meet the people you'll ride with again.",subtitle:"LetsRide helps you discover rides near you and join cyclists you'll want to ride with again. Simple, quiet, built by cyclists.",openApp:"Open LetsRide",start:"Start LetsRide",joinBeta:"Join Closed Beta",signedInWaiting:"You're signed in. Request access below to be invited.",eyebrowPublic:"LetsRide · Open for everyone"},actions:{title:"Three simple things",findTitle:"Find a ride",findBody:"Browse rides happening this weekend near you.",ridingTitle:"I'm riding",ridingBody:"Post an open invitation in under a minute.",againTitle:"Ride again",againBody:"Meet the same riders next week. No social pressure."},steps:{title:"How it works",s1:"Create your rider profile.",s2:"Find a ride.",s3:"Join.",s4:"Ride."},audience:{title:"Who it's for",seekersTitle:"Looking for people to ride with",seekersBody:"You ride alone and would rather not.",ridersTitle:"Already riding, want company",ridersBody:"You have a weekly ride and want a few more wheels.",organisersTitle:"Organisers",organisersBody:"You run a group and want it to be predictable."},beta:{eyebrow:"Closed Beta",title:"Currently in Ljubljana. Other regions come next.",body:"The beta starts in Ljubljana with a small group of cyclists. Request access below and we'll email you when your region opens."},form:{invalidEmailTitle:"Enter a valid email",invalidEmailDesc:"We'll only use it to invite you to the beta.",successTitle:"You're on the beta list",successDesc:"We'll email you when a spot opens in your region.",errorTitle:"Something went wrong",errorDesc:"Please try again in a moment.",pendingTitle:"Your request is pending",pendingDesc:"We've received it. You'll get an email as soon as a spot opens in your region.",waitlistedTitle:"You're on the waitlist",waitlistedDesc:"The beta is full in your area for now. We'll email you the moment a place opens.",invitedTitle:"You're in",invitedDesc:"Sign in to open LetsRide.",rejectedTitle:"Request closed",rejectedDesc:"This beta round isn't a fit right now. Thanks for your interest.",aria:"Request beta access",emailLabel:"Email",localityLabel:"Where do you ride? (optional)",localityPlaceholder:"Ljubljana, Maribor, Zagreb…",messageLabel:"Anything we should know? (optional)",submitting:"Sending…",submit:"Request beta access"},faq:{title:"Common questions",freeQ:"Is it free?",freeA:"Yes. LetsRide is free during the beta. It's built to help cyclists find each other, not to sell anything.",whoQ:"Who is it for?",whoA:"Anyone who rides a road, gravel or mountain bike and wants company on the road. Solo riders looking for a group, and organisers who already have a weekly ride.",beginnersQ:"Can beginners join?",beginnersA:"Yes. Every ride shows its pace and style so you can pick something comfortable. Many organisers explicitly welcome new riders.",organiseQ:"Can I organise rides?",organiseA:"Yes. Post a one-off invitation in under a minute, or create a recurring weekly ride that others can follow.",regionQ:"Is it available outside Ljubljana?",regionA:"Not yet. The closed beta starts in Ljubljana. Request access from another region and we'll open it there next.",freeAPublic:"Yes. LetsRide is free and open to everyone. It is built to help cyclists find each other, not to sell anything.",regionAPublic:"Yes. LetsRide is open to everyone. Ride availability depends on cyclists and organisers in your area."},rail:{heading:"Useful before your next ride"}},compare:{addMore:"Add another",added:"Added to compare",attribute:"Attribute",backHome:"Back",clear:"Clear",collapse:"Hide",cta:"Compare",empty:"No products to compare yet. Add products from any collection grid.",expand:"Show",full:"Comparison is full (max {{max}})",heading:"Side by side",noSpecs:"No structured specs available for these products yet.",ratings:"Performance ratings",removed:"Removed from compare",title:"Compare"}
2,blog:{backToList:"Back to all articles",pagination:"Journal pages",previous:"Previous",next:"Next",noArticles:"No articles yet. Check back soon.",noImage:"No image"},resetPassword:{eyebrow:"RIDER // RESET",title:"New password",intro:"Choose a new password for your account.",checking:"Checking your reset link…",invalidTitle:"This reset link no longer works",invalidBody:"Reset links expire after a while and work only once. Request a new one and we'll email it to you.",requestNew:"Request a new link",newLabel:"NEW PASSWORD",confirmLabel:"CONFIRM PASSWORD",hint:"At least 8 characters.",tooShort:"Password must be at least 8 characters.",mismatch:"Passwords don't match.",submit:"UPDATE PASSWORD",submitting:"UPDATING…",success:"Password updated. You're signed in.",error:"We couldn't update your password. Request a new link and try again.",metaTitle:"Reset password | Approved Cycling"},authPage:{eyebrow:"RIDER // ACCESS",titleSignIn:"Sign in",titleSignUp:"Create account",introSignIn:"Access your rider dashboard.",introSignUp:"Join Approved Cycling. Track rides and collect rewards.",google:"CONTINUE WITH GOOGLE",or:"OR",nameLabel:"NAME",emailLabel:"EMAIL",passwordLabel:"PASSWORD",passwordHint:"At least 8 characters.",forgot:"FORGOT PASSWORD?",submitting:"PROCESSING…",submitSignIn:"SIGN IN",submitSignUp:"CREATE ACCOUNT",newHere:"New here?",haveAccount:"Already a rider?",toSignUp:"Create an account",toSignIn:"Sign in",privacyNote:"We use your email to run your Approved account.",privacyLink:"Privacy Policy",signupSentTitle:"Check your inbox",signupSentBody:"We sent a confirmation link to {{email}}. Open it to finish creating your account.",welcomeBack:"Welcome back.",forgotNeedEmail:"Enter your email above first.",forgotSent:"If an account exists for that email, we've sent a reset link. Check your inbox and spam folder.",googleFailed:"Google sign-in didn't work. Try again or use your email.",errInvalid:"That email and password don't match. Try again, or reset your password.",errUnconfirmed:"Confirm your email first. We sent you a link when you signed up.",errExists:"An account with this email already exists. Sign in instead.",errWeak:"Choose a password with at least 8 characters.",errRate:"Too many attempts. Wait a minute and try again.",errGeneric:"Something went wrong. Try again, or email [email protected].",metaTitle:"Sign in | Approved Cycling"},askApproved:{eyebrow:"ASK APPROVED",title:"Ask Approved before you buy.",intro:"Send us your bike, riding style and budget. We will tell you what actually makes sense, even if that means not buying the most expensive option.",fields:{name:"Name",email:"Email",phone:"Phone (optional)",contact:"Preferred contact",bike:"Current bike",interest:"What do you want to buy or upgrade?",budget:"Budget",style:"Riding style",message:"Anything else we should know?"},placeholders:{bike:"e.g. Pinarello F8, 2018",interest:"e.g. wheels, helmet, custom build",budget:"Choose a range",style:"Choose one",message:"Tell us about your goals, problems with your current setup, or what you have already considered."},contacts:{email:"Email",phone:"Phone",whatsapp:"WhatsApp"},budgets:{under500:"Under €500","500to1500":"€500 – €1,500","1500to3000":"€1,500 – €3,000","3000to6000":"€3,000 – €6,000","6000to10000":"€6,000 – €10,000",over10000:"€10,000+"},styles:{groupRides:"Group rides",soloEndurance:"Solo endurance",marathons:"Marathons / events",racing:"Racing",mixed:"Mixed riding",indoor:"Indoor / training"},required:{name:"Name",email:"Email"},stillNeeded:"Still needed: {{fields}}",submit:"SEND TO APPROVED",submitting:"SENDING…",errors:{nameRequired:"Name is required",emailInvalid:"Valid email required",checkForm:"Please check the form",submitFailed:"Something went wrong. Please try again."},privacy:"Your details go to the Approved Cycling team only, so we can reply to this request. We do not share them with third parties and this does not sign you up for marketing emails.",privacyLink:"Privacy Policy"},upgradeFinder:{hero:{eyebrow:"// UPGRADE_FINDER",title:"What should you upgrade first?",intro:"Tell us your current bike, wheels, drivetrain and what you want to improve. We will rank your first and second upgrade, and tell you what to skip."},fields:{currentBike:"Current bike",yearModel:"Year / model",currentWheels:"Current wheels",currentDrivetrain:"Current drivetrain",currentTyres:"Current tyres",goal:"What do you want to improve most?",budget:"Budget",ridingType:"Type of riding",weeklyHours:"Hours per week",eventGoal:"Target event (optional)",annoyance:"What annoys you most about your current setup?",name:"Name",email:"Email",phone:"Phone (optional)",preferredContact:"Preferred contact"},placeholders:{currentBike:"e.g. Pinarello Dogma F",yearModel:"e.g. 2021 Disc",currentWheels:"e.g. stock Fulcrum aluminium",currentDrivetrain:"e.g. Ultegra Di2 R8170",currentTyres:"e.g. Continental GP5000 25c",eventGoal:"e.g. Maratona dles Dolomites",annoyance:"e.g. numb hands after 2 hours, slow on climbs, drivetrain feels gritty"}
2,select:{chooseOne:"Choose one",chooseRange:"Choose a range"},goals:{speed:"Speed",climbing:"Climbing",comfort:"Comfort",braking:"Braking",fit:"Fit",drivetrainEfficiency:"Drivetrain efficiency",wheelPerformance:"Wheel performance",racePerformance:"Race performance",longRideComfort:"Long-ride comfort"},ridingTypes:{flatRoad:"Flat road",rollingTerrain:"Rolling terrain",climbs:"Climbs",mixedTerrain:"Mixed terrain",racing:"Racing",groupRides:"Group rides",soloEndurance:"Solo endurance"},hours:{under4:"< 4 hrs / week",from4to8:"4 – 8 hrs / week",from8to14:"8 – 14 hrs / week",over14:"14+ hrs / week"},budgets:{under500:"Under €500",from500to1500:"€500 – €1,500",from1500to3000:"€1,500 – €3,000",from3000to6000:"€3,000 – €6,000",from6000to10000:"€6,000 – €10,000",over10000:"€10,000+"},contacts:{email:"Email",phone:"Phone",whatsapp:"WhatsApp"},required:{whatToImprove:"What to improve",budget:"Budget",typeOfRiding:"Type of riding",hoursPerWeek:"Hours per week",name:"Name",email:"Email"},stillNeeded:"Still needed: {{fields}}",submit:{idle:"GET MY RECOMMENDATION",submitting:"ANALYSING…"},privacy:{note:"Your answers go to the Approved Cycling team so we can follow up if you want a personal recommendation. We do not share them with third parties.",link:"Privacy Policy"},errors:{checkFields:"Please check the highlighted fields.",generic:"Something went wrong. Please try again."},faq:{title:"Upgrade Finder FAQ",biased:{question:"Will the recommendation be biased toward expensive products?",answer:"No. The point of the Upgrade Finder is to stop riders from buying the wrong thing. The result includes what to avoid, including not buying the most expensive option when it does not make sense."},accuracy:{question:"How accurate is the recommendation?",answer:"The logic is rule-based and gives you a strong starting point. For full confidence on a bigger spend, send your setup to the Approved team for a personal check."},data:{question:"Do you store my data?",answer:"Your submission is sent to the Approved Cycling team so we can follow up if you want a personal recommendation. We do not share it with third parties."}}}},go={phase3:{customBuildLibrary:{pageTitle:"Custom Road Bike Build Library | Approved Cycling",pageDescription:"Explore real custom road bike builds from Approved Cycling, from fast group ride bikes to lightweight climbing builds, endurance setups and full dream builds.",eyebrow:"Build Library",heading:"Custom Road Bike Build Library",intro:"Explore real custom road bike builds from Approved Cycling. Each build is created around the rider, the terrain, the budget and the performance goal, from fast group ride bikes to lightweight climbing builds, endurance setups and full dream builds.",countLabel:"{{shown}} of {{total}} builds",emptyState:"No builds match every selected filter. Try removing one."},riderStories:{pageTitle:"Rider Stories | Approved Cycling Custom Builds",pageDescription:"How Approved Cycling plans a custom road bike around the rider: four example briefs, from goals and pain points to the recommended build.",eyebrow:"Rider Stories",heading:"The rider comes before the bike",intro:"Every custom build at Approved Cycling starts with a rider: fit, terrain, riding goal and honest pain points. These four example briefs show how we turn that into a build."}},phase4:{buyingGuidesIndex:{pageTitle:"Cycling Buying Guides | Approved Cycling",pageDescription:"Honest, expert buying guides for road cycling wheels, custom bike builds, bib shorts and more. Approved Cycling, a premium European cycling atelier.",breadcrumb:"Buying guides",heading:"Cycling buying guides",intro:"Real advice from Approved Cycling on how to choose the right cycling gear: wheels, bikes, bibs, helmets and more. Written by riders who use what we sell.",cardEyebrow:"// GUIDE",readGuide:"Read guide"},comparisonsIndex:{pageTitle:"Cycling Product Comparisons | Approved Cycling",pageDescription:"Side-by-side cycling product comparisons from Approved Cycling: wheels, bibs, helmets and drivetrain. Honest, expert-led decisions.",breadcrumb:"C
2omparisons",heading:"Cycling product comparisons",intro:"Which wheelset, which bib, which helmet? Honest side-by-side decisions from Approved Cycling, written for riders, not marketers.",readComparison:"Read comparison"}},phase6:{mediaHub:{eyebrow:"Approved Cycling Media",title:"Approved Cycling Media",intro:"A premium cycling magazine built around a shop. Videos, podcasts, builds, reviews, ride stories, club reports, event prep, and the Slovenian cycling culture we ride in.",featured:"Featured",thisWeek:"This week",latestYT:"Latest from YouTube",watch:"Watch",latestPodcast:"Latest podcast episodes",listen:"Listen",buildStories:"Custom build stories",builds:"Builds",productReviews:"Product reviews",reviews:"Reviews",rideStories:"Ride stories",stories:"Stories",clubReports:"Club reports",approvedClub:"Approved Club",eventPrep:"Event preparation",prepare:"Prepare",eventPrepBody:"Genuine, season-by-season prep guides for the events serious riders actually target.",openEventPrepHub:"Open Event Prep Hub",openEventPrepHubSub:"All 8 prep guides",maratonFranjaSetup:"Maraton Franja setup",climbingMarathonSetup:"Climbing marathon setup",culture:"Slovenian cycling culture",place:"Place",keepGoing:"Keep going",connectedToShop:"Connected to the shop",ytChannel:"Approved Cycling on YouTube",ytChannelSub:"Builds, reviews, club rides",podcast:"Approved Cycling Podcast",podcastSub:"Tech, culture, and the rider's view",startBuild:"Start a custom bike build",startBuildSub:"Talk to Approved",shopCategories:"Shop categories",shopCategoriesSub:"Wheels, apparel, parts, builds",joinClub:"Join Approved Club",joinClubSub:"Rides + members area",wheelRec:"Get a wheel recommendation",libraryCount:"{{count}} items in the media library and growing weekly."},eventPrep:{eyebrow:"Event Prep",title:"Prepare for your next cycling goal",intro:"Eight serious preparation guides for the events, seasons, and ride types Approved Cycling riders actually target. Built to be useful, not generic.",guides:"Preparation guides",pickEvent:"Pick your event",toolsHeading:"Tools that pair with these guides",useTools:"Use the tools",tirePressure:"Tire pressure calculator",trainingPlan:"Training plan generator",rideFuel:"Ride fuel calculator",clubRides:"Approved Club rides",showroomCheck:"Showroom bike check",shopRelevant:"Shop relevant categories"}}},M=[{code:"en",label:"English",flag:"🇬🇧"},{code:"sl",label:"Slovenščina",flag:"🇸🇮"},{code:"hr",label:"Hrvatski",flag:"🇭🇷"},{code:"it",label:"Italiano",flag:"🇮🇹"},{code:"de",label:"Deutsch",flag:"🇩🇪"},{code:"pt",label:"Português",flag:"🇵🇹"},{code:"es",label:"Español",flag:"🇪🇸"}],L="en",Ce={en:"EN",sl:"SL",hr:"HR",it:"IT",de:"DE",pt:"PT",es:"ES"},yo={sl:()=>a(()=>import("./sl-ohfhLJyb.js"),[]),hr:()=>a(()=>import("./hr-D8Je0bMp.js"),[]),it:()=>a(()=>import("./it-Cd1WaNL6.js"),[]),de:()=>a(()=>import("./de-pszFTNuI.js"),[]),pt:()=>a(()=>import("./pt-z1M_Klwq.js"),[]),es:()=>a(()=>import("./es-CxMJxDwt.js"),[])},Se=new Set(["en"]);async function _t(t){if(Se.has(t))return;const o=yo[t];if(!o)return;const r=a(async()=>{const{loadToolsLocale:b}=await import("./index-BsJNhvVh.js");return{loadToolsLocale:b}},__vite__mapDeps([0,1,2,3,4,5,6])).then(({loadToolsLocale:b})=>b(t)).catch(b=>(console.warn("[i18n] tools locale failed to load",t,b),[])),[s,{applyBatch1Overrides:l},{applyBatch2Overrides:d},{applyBatch3Overrides:c},{applyKeyAliases:u}]=await Promise.all([o(),a(()=>import("./batch1Overrides-BenEe8fn.js"),[]),a(()=>import("./batch2Overrides-Bp76LU_3.js"),__vite__mapDeps([7,2,1,3,4,5,6])),a(()=>import("./batch3Overrides-CPT9bkC0.js"),[]),a(()=>import("./keyAliases-DLjCq5u_.js"),__vite__mapDeps([8,1,2]))]),p=JSON.parse(JSON.stringify(s.default));l(t,p),d(t,p),c(t,p);const m=await r;C.addResourceBundle(t,"translation",p,!0,!0);for(const b of m)C.addResourceBundle(t,"translation",b,!0,!0);Se.add(t),u(t)}const bo=()=>{if(typeof window>"u")return L;const t=window.location.pathname.split("/").filter(Boolean)[0];return t&&M.some(o=>o.code===t)?t:L},ce=bo();C.use(Zt).use(eo).init({resources:{en:{translation:{...mo,...go}}},lng:ce,fallbackLng:L,react:{bindI18nStore:"added"},interpolation:{escapeValue:!1},detection:{order:["path","localStorage","navigator"],lookupFromPathIndex:0,caches:["localStorage"]}});a(async()=>{const{BATCH3_EN:t}=await import("./batch3Overrides-CPT9bkC0.js");return{BATCH3_EN:t}},[]).then(({BATCH3_EN:t})=>{C.addResourceBundle("en","translation",t,!0,!0)});a(async()=>{const{registerToolsTranslations:t}=await import("./index-BsJNhvVh.js");return{registerToolsTranslations:t}},__vite__mapDeps([0,1,2,3,4,5,6])).then(({registerToolsTranslations:t})=>{t()});a(async()=>{const{registerSecondRideTranslations:t}=await import("./index-Cam1lWK5.js");return{registerSecondRideTranslations:t}},__vite__mapDeps([9,1,2])).then(({registerSecondRideTranslations:t})=>{t()});a(async()=>{const{registerMyBunchTranslations:t}=await import("./myBunch-C_KnRSp4.js");return{registerMyBunchTranslations:t}},__vite__mapDeps([10,1,2])).then(({registerMyBunchTranslations:t})=>{t()});a(async()=>{const{registerGrowthMachineTranslations:t}=await import("./growthMachine-DVq5BHEu.js");return{registerGrowthMachineTranslations:t}},__vite__mapDeps([11,1,2])).then(({registerGrowthMachineTranslations:t})=>{t()});Promise.all([a(()=>import("./betaRideOverrides-DaWoAdcH.js"),__vite__mapDeps([12,1,2])),a(()=>import("./socialGraphOverrides-Btkww4VK.js"),__vite__mapDeps([13,1,2]))]).then(([{registerRideOverrides:t},{registerSocialGraphOverrides:o}])=>(t(),o(),a(async()=>{const{registerLetsRideSlOverrides:r}=await import("./letsRideSlOverrides-CmLuD52z.js");return{registerLetsRideSlOverrides:r}},__vite__mapDeps([14,1,2])).then(({registerLetsRideSlOverrides:r})=>(r(),a(async()=>{const{registerLetsRideSlPolishOverrides:s}=await import("./letsRideSlPolishOverrides-DZS9xzNa.js");return{registerLetsRideSlPolishOverrides:s}},__vite__mapDeps([15,1,2])).then(({registerLetsRideSlPolishOverrides:s})=>(s(),a(async()=>{const{applyKeyAliases:l}=await import("./keyAliases-DLjCq5u_.js");return{applyKeyAliases:l}},__vite__mapDeps([8,1,2])).then(({applyKeyAliases:l})=>{Se.forEach(d=>l(d))})))))));const fo=ce==="en"?Promise.resolve():_t(ce).catch(t=>{console.warn("[i18n] initial locale failed to load",ce,t)}),vo=C.changeLanguage.bind(C);C.changeLanguage=async(t,...o)=>(t&&t!=="en"&&await _t(t),vo(t,...o));const Eo=640,_o=({...t})=>{const{theme:o="system"}=qt(),[r,s]=y.useState("top-right");return y.useEffect(()=>{if(typeof window>"u")return;const l=window.matchMedia(`(max-width: ${Eo-1}px)`),d=()=>s(l.matches?"bottom-center":"top-right");return d(),l.addEventListener("change",d),()=>l.removeEventListener("change",d)},[]),e.jsx(lo,{theme:o,className:"toaster group",position:r,offset:r==="bottom-center"?96:void 0,toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...t})};function wo(...t){return Kt(Jt(t))}const To=co,Ro=y.forwardRef(({className:t,sideOffset:o=4,...r},s)=>e.jsx(Et,{ref:s,sideOffset:o,className:wo("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:sli
2de-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",t),...r}));Ro.displayName=Et.displayName;const ue=new Set(M.map(t=>t.code)),Ke={SI:"sl",HR:"hr",IT:"it",DE:"de",AT:"de",CH:"de",PT:"pt",BR:"pt",ES:"es",MX:"es",AR:"es",CO:"es"},ye="approvedcycling_lang_manual",Je="approvedcycling_geo_country";async function Ao(){const t=localStorage.getItem(ye);if(t&&ue.has(t))return t;try{let r=sessionStorage.getItem(Je);if(!r){const s="https://sgouiruisrxbopkdmxun.supabase.co";if(s){const l=new AbortController,d=setTimeout(()=>l.abort(),3e3),c=await fetch(`${s}/functions/v1/geo-detect`,{signal:l.signal,headers:{"Content-Type":"application/json"}});clearTimeout(d),c.ok&&(r=(await c.json()).country||null,r&&sessionStorage.setItem(Je,r))}}if(r&&Ke[r]){const s=Ke[r];if(ue.has(s))return s}}catch{}const o=navigator.languages||[navigator.language];for(const r of o){const s=r.split("-")[0].toLowerCase();if(ue.has(s))return s}return L}const N=({restPath:t=""})=>{const[o,r]=y.useState(null);return ee(),y.useEffect(()=>{const s=localStorage.getItem(ye);if(s&&ue.has(s)){r(s);return}Ao().then(r)},[]),o?e.jsx(G,{to:`/${o}${t}`,replace:!0}):e.jsxs("noscript",{children:[e.jsx("meta",{httpEquiv:"refresh",content:`0;url=/${L}${t}`}),e.jsx("a",{href:`/${L}${t}`,children:"Continue to Approved Cycling"})]})};function Fl(t){localStorage.setItem(ye,t)}const Co=new Set(M.map(t=>t.code));function So(){if(typeof window>"u")return null;try{const t=window.localStorage.getItem(ye);return t&&Co.has(t)?t:null}catch{return null}}const Lo={"/pages/custom-bike-atelier":["en","sl"],"/pages/kolo-po-meri-atelier":["en","sl"],"/pages/tools":["en","sl"],"/pages/bike-fit-fixer":["en","sl"],"/pages/tire-pressure-calculator":["en","sl"],"/pages/wheel-recommendation":["en","sl"],"/pages/monthly-cycling-training-plan-generator":["en","sl"],"/pages/princeton-carbonworks-obroci":["en","sl"],"/pages/karbonski-obroci-priporocilo":["en","sl"],"/pages/kolesarska-trgovina-ljubljana":["en","sl"],"/pages/poletna-kolesarska-oprema":["en","sl"]};function ko(t){return(t.startsWith("/")?t:`/${t}`).replace(/\/+$/,"")}function wt(t){return Lo[ko(t)]??null}function Io(t,o){const r=wt(o);return!r||r.includes(t)}function Po(t,o){const r=t.split("/");if(o.includes(r[1])){const s="/"+r.slice(2).join("/");return s==="/"?"/":s.replace(/\/+$/,"")}return t==="/"?"/":t.replace(/\/+$/,"")}function Oo(t,o){return t==="en"?!1:!Io(t,o)}const $e={en:"This page is only available in English.",sl:"Ta stran je na voljo samo v angleščini.",hr:"Ova je stranica dostupna samo na engleskom jeziku.",it:"Questa pagina è disponibile solo in inglese.",de:"Diese Seite ist nur auf Englisch verfügbar.",pt:"Esta página está disponível apenas em inglês.",es:"Esta página solo está disponible en inglés."},Do=({locale:t})=>{var r;const o=((r=M.find(s=>s.code===t))==null?void 0:r.label)??t;return e.jsx("div",{role:"note","aria-label":o,className:"border-b border-border bg-card px-4 py-2 text-center text-xs tracking-wide text-muted-foreground",children:$e[t]??$e.en})},Tt=M.map(t=>t.code),re=new Set(Tt),xo=()=>{const{lang:t}=io(),{i18n:o}=Oe(),r=ro(),s=ee(),l=So(),d=Po(s.pathname,Tt),c=t==="en"&&!!l&&Oo(l,d),u=c&&l?l:t;return y.useEffect(()=>{u&&re.has(u)&&o.language!==u&&o.changeLanguage(u)},[u,o]),y.useEffect(()=>{var p;if(!t||!re.has(t)){const m=l??((p=o.language)==null?void 0:p.split("-")[0]),b=re.has(m??"")?m:L;r(`/${b}${s.pathname}${s.search}${s.hash}`,{replace:!0})}},[t,r,s,o.language,l]),!t||!re.has(t)?null:e.jsxs(e.Fragment,{children:[c&&l&&e.jsx(Do,{locale:l}),e.jsx(vt,{})]})},Rt=["sl:/collections/pinarello","sl:/collections/nich-bikes","sl:/collections/helmets","de:/collections/custom-bike-build","it:/collections/custom-bike-build","hr:/collections/wheels","sl:/collections/shorts","sl:/product/favero-assioma-pro-rl-2-power-meter-pedals-dual-sided-look-keo","sl:/product/favero-assioma-pro-rl-1-power-meter-pedal-single-sided-look-keo","sl:/product/road-bike-pedals-speedplay-zero","sl:/collections/bikes","sl:/collections/sale","sl:/collections/men","sl:/collections/pedals","sl:/collections/eyewear","sl:/collections/womens-jersey","sl:/collections/wheels","hr:/collections/pinarello","hr:/collections/custom-bike-build","hr:/collections/jersey","de:/collections/ospw","it:/collections/pinarello","it:/collections/frames","sl:/product/tpu-light-tubes-80mm","sl:/product/assos-chamois-creme-200ml-pack","
2sl:/product/wahoo-elemnt-bolt-v3-bike-computer","sl:/product/wahoo-elemnt-roam-v3-bike-computer","sl:/product/wahoo-tickr-hear-rate-monitor","sl:/product/pinarello-dogma-x","sl:/product/pinarello-f1-road-bike","sl:/product/pinarello-f3-road-bike","sl:/product/pinarello-grevil-f9","sl:/product/nich-faith-road-bike","sl:/product/berk-lupina-bike-saddle","sl:/product/berk-ploh-bike-saddle","sl:/product/pmt-gx-ultra-light-cycling-helmet","sl:/product/chain-wax-coating-ceramicspeed-ufo-drip","sl:/product/chaser-sports-6-ultra-g2-disc-brake-rotor","sl:/product/sixweel-12s-evo-cassette-steel-series-188-g","sl:/product/princeton-carbonworks-peak-4550-evo-db-road-bike-wheels","sl:/product/assos-mille-gts-spring-fall-bib-shorts-s11-men","sl:/product/assos-equipe-rs-jersey-s11-black-series","sl:/product/assos-equipe-rs-jersey-s11-dune-sand","sl:/product/assos-womens-summer-cycling-jersey-dyora-rs-aero-ss"],jo=new Set(Rt);function At(t){return!t||t==="/"?"":t.replace(/\/+$/,"")}function No(t,o){return jo.has(`${t}:${At(o)}`)}function Bo(t){const o=At(t),r=[];for(const s of Rt){const[l,d]=s.split(":");d===o&&l!=="en"&&r.push(l)}return r}function Ct(t){const o=Bo(t);return o.length?["en",...o]:[]}const Uo=["/builds","/guides","/brands","/comparisons","/compare/","/second-ride"];function Mo(t){return Uo.some(o=>t===o||t.startsWith(o.endsWith("/")?o:`${o}/`))}const Fo=["/account","/auth","/reset-password","/admin","/offer","/club/invite","/.lovable"];function Wo(t){const o=t.startsWith("/")?t:`/${t}`;return Fo.some(r=>o===r||o.startsWith(`${r}/`))}const Ho=["/product/","/products/","/collections/","/collection/","/blog/","/blogs/"],Vo=new Set(["/pages/bike-fit-fixer","/pages/tire-pressure-calculator","/pages/monthly-cycling-training-plan-generator","/pages/wheel-recommendation","/pages/start-your-custom-bike-build","/pages/princeton-carbonworks-obroci","/pages/karbonski-obroci-priporocilo","/pages/poletna-kolesarska-oprema","/pages/kolo-po-meri","/pages/custom-bike-atelier","/pages/kolo-po-meri-atelier","/pages/tools","/pages/letsride-cycling-club","/pages/kolesarska-trgovina-ljubljana","/pages/pinarello-bikes-slovenia","/pages/pinarello-kolesa-slovenija","/pages/nich-bikes-slovenia","/pages/nich-kolesa-slovenija","/pages/contact","/pages/privacy-policy","/pages/cookie-policy","/pages/terms-and-conditions","/pages/returns-and-refunds","/pages/shipping-information","/pages/legal-notice"]),Wl=new Set(["/pages/custom-build-thank-you","/pages/wheel-recommendation-thank-you"]),ae={en:"/pages/pinarello-bikes-slovenia",sl:"/pages/pinarello-kolesa-slovenija"},ne={en:"/pages/nich-bikes-slovenia",sl:"/pages/nich-kolesa-slovenija"},St={[ae.en]:ae,[ae.sl]:ae,[ne.en]:ne,[ne.sl]:ne};function Yo(t){return!!(Ho.some(o=>t.startsWith(o))||t.startsWith("/pages/")&&!Vo.has(t))}function Hl(t,o){const r=St[o];if(!r)return null;const s=r[t]?t:"en";return r[s]?`/${s}${r[s]}`:null}const z={en:{title:"Custom Road Bike Builds in Ljubljana | Approved Cycling",description:"Custom road bike builds, carbon wheels and premium kit from our Ljubljana cycling shop. Expert assembly and free EU shipping from €150."},sl:{title:"Cestna kolesa po meri v Ljubljani | Approved Cycling",description:"Cestna kolesa po meri, karbonski obroči in vrhunska kolesarska oprema iz Ljubljane. Strokovna sestava, brezplačna dostava po Sloveniji od 50 €."},hr:{title:"Cestovni bicikli po mjeri u Ljubljani | Approved Cycling",description:"Cestovni bicikli po mjeri, karbonski kotači i premium oprema iz Ljubljane. Stručna izrada i besplatna dostava u EU od 150 €."},it:{title:"Bici da strada su misura a Lubiana | Approved Cycling",description:"Bici da strada su misura, ruote in carbonio e abbigliamento premium dal nostro negozio di Lubiana. Montaggio esperto, spedizione UE gratuita da 150 €."},de:{title:"Rennräder nach Maß in Ljubljana | Approved Cycling",description:"Rennräder nach Maß, Carbon-Laufräder und Premium-Bekleidung aus unserem Fahrradladen in Ljubljana. Profi-Aufbau, kostenloser EU-Versand ab 150 €."},pt:{title:"Bicicletas de estrada por medida em Liubliana | Approved Cycling",description:"Bicicletas de estrada por medida, rodas de carbono e equipamento premium da nossa loja em Liubliana. Montagem especializada, envio grátis na UE desde 150 €."},es:{title:"Bicicletas de carretera a medida en Liubliana | Approved Cycling",description:"Bicicletas de carretera a medida, ruedas de carbono y equipación premium desde nuestra tienda de Liubliana. Montaje experto y envío gratis en la UE desde 150 €."}};function Vl(t){if(!t)return null;try{const o=new URL(t,"https://approvedcycling.com");if(o.hostname!=="approvedcycling.com"&&o.hostname!=="www.approvedcycling.com")return null;const r=o.pathname.replace(/\/+$/,"");if(r==="")return z.en;const s=r.match(/^\/(en|sl|hr|it|de|pt|es)$/i);return s?z[s[1].toLowerCase()]??z.en:null}catch{return null}}const B="https://approvedcycling.com",Go=(t,o)=>{const r=t.split("/"),l=M.find(f=>f.code===r[1])?"/"+r.slice(2).join("/"):t,d=l==="/"?"":l.replace(/\/+$/,""),c=No(o,d)||o===L&&Ct(d).length>0,u=wt(d),p=!!u&&!u.includes(o),m=Yo(d)&&!c||p;return{cleanPath:d,canonicalUrl:`${B}/${m?L:o}${d}`,isUntranslated:m,isAllowlisted:c,limitedLocales:u}},qo=()=>{const t=ee(),{i18n:o}=Oe();return y.useEffect(()=>{document.querySelectorAll('link[rel="alternate"][hreflang]').forEach(g=>g.remove());const r=o.language,{cleanPath:s,canonicalUrl:l,isUntranslated:d,isAllowlisted:c,limitedLocales:u}=Go(t.pathname,r);
2if(document.documentElement.getAttribute("data-seo-404")==="1"){document.querySelectorAll('link[rel="canonical"]').forEach(g=>g.remove()),document.documentElement.lang=r;return}if(Mo(s)){document.documentElement.lang=r;return}if(Wo(s)){const g=document.createElement("meta");return g.setAttribute("name","robots"),g.setAttribute("content","noindex,nofollow"),g.setAttribute("data-private-route","true"),document.head.appendChild(g),document.documentElement.lang=r,()=>g.remove()}const p=Array.from(document.querySelectorAll('link[rel="canonical"]'));p.slice(1).forEach(g=>g.remove());let m=p[0]??null;m||(m=document.createElement("link"),m.setAttribute("rel","canonical"),document.head.appendChild(m)),m.setAttribute("href",l);const b=(g,T)=>{const w=document.createElement("link");w.setAttribute("rel","alternate"),w.setAttribute("hreflang",g),w.setAttribute("href",T),w.setAttribute("data-hreflang","true"),document.head.appendChild(w)};if(c)Ct(s).forEach(g=>{b(g,`${B}/${g}${s}`)}),b("x-default",`${B}/${L}${s}`);else if(!d){const g=St[s];if(g){const T=Object.keys(g);T.forEach(R=>{b(R,`${B}/${R}${g[R]}`)});const w=T.includes(L)?L:T[0];b("x-default",`${B}/${w}${g[w]}`)}else(u??M.map(w=>
2w.code)).forEach(w=>{b(w,`${B}/${w}${s}`)}),b("x-default",`${B}/${L}${s}`)}const f={en:"en_US",sl:"sl_SI",hr:"hr_HR",it:"it_IT",de:"de_DE",pt:"pt_PT",es:"es_ES"},E=document.querySelector('meta[property="og:locale"]');E&&E.setAttribute("content",f[r]||"en_US");const v=z[r]||z.en;if(s===""||s==="/"){document.title=v.title;let g=document.querySelector('meta[name="description"]');g&&g.setAttribute("content",v.description);const T=document.querySelector('meta[property="og:title"]');T&&T.setAttribute("content",v.title);const w=document.querySelector('meta[property="og:description"]');w&&w.setAttribute("content",v.description);const R=document.querySelector('meta[name="twitter:title"]');R&&R.setAttribute("content",v.title);const x=document.querySelector('meta[name="twitter:description"]');x&&x.setAttribute("content",v.description);const J=document.querySelector('meta[property="og:url"]');J&&J.setAttribute("content",l)}return document.documentElement.lang=r,()=>{document.querySelectorAll("link[data-hreflang]").forEach(g=>g.remove())}},[t.pathname,o.language]),null},Lt=y.createContext(void 0),Ko=t=>{const o=window;typeof o.requestIdleCallback=="function"?o.requestIdleCallback(t,{timeout:1500}):setTimeout(t,200)},Jo=({children:t})=>{const[o,r]=y.useState(null),[s,l]=y.useState(null),[d,c]=y.useState(!0);y.useEffect(()=>{let p=null,m=!1;const b=async()=>{var T;const{supabase:f}=await a(async()=>{const{supabase:w}=await import("./client-DdmAFbQ5.js").then(R=>R.c);return{supabase:w}},__vite__mapDeps([16,17]));if(m)return;const{data:{subscription:E}}=f.auth.onAuthStateChange((w,R)=>{r(R),l((R==null?void 0:R.user)??null),c(!1)});p=()=>E.unsubscribe();const{data:{session:v},error:_}=await f.auth.getSession();if(m)return;const g=((T=_==null?void 0:_.message)==null?void 0:T.toLowerCase())??"";if(_&&(g.includes("sub claim")||g.includes("jwt")||g.includes("invalid"))){await f.auth.signOut(),r(null),l(null),c(!1);return}r(v),l((v==null?void 0:v.user)??null),c(!1)};return Ko(()=>{m||b()}),()=>{m=!0,p&&p()}},[]);const u=async()=>{const{supabase:p}=await a(async()=>{const{supabase:b}=await import("./client-DdmAFbQ5.js").then(f=>f.c);return{supabase:b}},__vite__mapDeps([16,17]));await p.auth.signOut();const{clearRideContentUrlCache:m}=await a(async()=>{const{clearRideContentUrlCache:b}=await import("./rideContentUrl-DeDmW3GL.js");return{clearRideContentUrlCache:b}},__vite__mapDeps([18,2,16,17]));m()};return e.jsx(Lt.Provider,{value:{user:s,session:o,loading:d,signOut:u},children:t})},kt=()=>{const t=y.useContext(Lt);if(!t)throw new Error("useAuth must be used inside AuthProvider");return t},$=()=>a(()=>import("./client-DdmAFbQ5.js").then(t=>t.c),__vite__mapDeps([16,17])).then(t=>t.supabase),It=y.createContext(null),Pt="ac_wishlist_guest_v1";function ze(){try{const t=localStorage.getItem(Pt);return t?JSON.parse(t):[]}catch{return[]}}function se(t){try{localStorage.setItem(Pt,JSON.stringify(t))}catch{}}const $o=({children:t})=>{const{user:o,loading:r}=kt(),[s,l]=y.useState([]),[d,c]=y.useState(!0),u=y.useCallback(async()=>{if(!o){l(ze()),c(!1);return}c(!0);const E=await $(),{data:v}=await E.from("wishlist_items").select("id, product_handle, product_title, image_url, price_amount, price_currency, created_at").eq("user_id",o.id).order("created_at",{ascending:!1});l(v??[]),c(!1)},[o]);y.useEffect(()=>{r||(async()=>{if(o){const E=ze();if(E.length>0){const v=await $(),{error:_}=await v.from("wishlist_items").upsert(E.map(g=>({user_id:o.id,product_handle:g.product_handle,product_title:g.product_title,image_url:g.image_url,price_amount:g.price_amount,price_currency:g.price_currency})),{onConflict:"user_id,product_handle",ignoreDuplicates:!0});_||se([])}}await u()})()},[o,r,u]);const p=y.useCallback(E=>s.some(v=>v.product_handle===E),[s]),m=y.useCallback(async E=>{const v=s.find(_=>_.product_handle===E.product_handle);if(v){o&&v.id&&await(await $()).from("wishlist_items").delete().eq("id",v.id);const _=s.filter(g=>g.product_handle!==E.product_handle);return l(_),o||se(_),{added:!1}}if(o){const _=await $(),{data:g}=await _.from("wishlist_items").insert({user_id:o.id,product_handle:E.product_handle,product_title:E.product_title,image_url:E.image_url,price_amount:E.price_amount,price_currency:E.price_currency}).select().maybeSingle();l(T=>[g??E,...T])}else{const _=[E,...s];l(_),se(_)}return{added:!0}},[s,o]),b=y.useCallback(async E=>{const v=s.find(g=>g.product_handle===E);if(!v)return;o&&v.id&&await(await $()).from("wishlist_items").delete().eq("id",v.id);const _=s.filter(g=>g.product_handle!==E);l(_),o||se(_)},[s,o]),f=y.useMemo(()=>({items:s,loading:d,has:p,toggle:m,remove:b,refresh:u}),[s,d,p,m,b,u]);return e.jsx(It.Provider,{value:f,children:t})},Yl=()=>{const t=y.useContext(It);if(!t)throw new Error("useWishlist must be used within WishlistProvider");return t};function zo(t,o){try{const r=window.gtag;if(typeof r!="function")return;r("event",t,o)}catch{}}let le=null;function be(){return le||(le=a(()=>import("./client-DdmAFbQ5.js").then(t=>
2t.c),__vite__mapDeps([16,17])).then(t=>t.supabase).catch(t=>{throw le=null,t})),le}const Q="approved.attr.landing",De="approved.attr.content",Qe="approved.attr.session",D=()=>typeof window<"u"&&!!window.sessionStorage;function O(t){if(!D())return null;try{const o=window.sessionStorage.getItem(t);return o?JSON.parse(o):null}catch{return null}}function X(t,o){if(D())try{window.sessionStorage.setItem(t,JSON.stringify(o))}catch{}}function Ot(){if(!D())return"no-storage";let t=window.sessionStorage.getItem(Qe);return t||(t=`s_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`,window.sessionStorage.setItem(Qe,t)),t}function Qo(t){const o=O(Q);if(o)return o;if(typeof window>"u")return{};const r=new URLSearchParams(window.location.search),s={landing_url:window.location.href.slice(0,500),referrer:document.referrer?document.referrer.slice(0,500):void 0,locale:t,utm_source:r.get("utm_source")??void 0,utm_medium:r.get("utm_medium")??void 0,utm_campaign:r.get("utm_campaign")??void 0,utm_content:r.get("utm_content")??void 0,utm_term:r.get("utm_term")??void 0};return X(Q,s),s}function Xo(t){X(De,t)}function Gl(){D()&&window.sessionStorage.removeItem(De)}function Zo(){return{...O(Q)??{},...O(De)??{}}}function ql(t){const o=new URLSearchParams(t),r={},s=o.get("source_slug"),l=o.get("source_kind"),d=o.get("cta"),c=o.get("cta_pos"),u=o.get("handle");return s&&(r.source_content_slug=s),l&&(r.source_content_kind=l),d&&(r.cta_type=d),c&&(r.cta_position=c),u&&(r.source_product_handle=u),r}function ei(){const t=Zo();return{source_content_id:t.source_content_id??null,source_content_kind:t.source_content_kind??null,source_content_slug:t.source_content_slug??null,source_content_title:t.source_content_title??null,source_content_url:t.source_content_url??null,cta_type:t.cta_type??null,cta_position:t.cta_position??null,landing_url:t.landing_url??null,locale:t.locale??(typeof document<"u"?document.documentElement.lang:null),utm_source:t.utm_source??null,utm_medium:t.utm_medium??null,utm_campaign:t.utm_campaign??null,utm_content:t.utm_content??null}}const Le="approved.attr.referrer",he="approved.attr.prev",ke="approved.attr.trail",ti="ac:pv-session",oi=5,ii=new Set(["/pages/tools","/pages/bike-fit-fixer","/pages/tire-pressure-calculator","/pages/monthly-cycling-training-plan-generator","/pages/wheel-recommendation"]);function ri(t){const o=/^\/[a-z]{2}(?=\/|$)/.exec(t);return(o?t.slice(o[0].length):t)||"/"}function Dt(t){const o=ri(t.split(/[?#]/)[0]).replace(/\/+$/,"")||"/";return/^\/blogs\/(blog|news)\/[^/]+/.test(o)?"article":o==="/builds"||o==="/guides"?"hub":ii.has(o)||o.startsWith("/tools/")?"tool":o.startsWith("/collections/")?"collection":o.startsWith("/product/")||o.startsWith("/products/")?"product":/^\/(guides|comparisons|compare)\//.test(o)||/^\/pages\/[^/]*-guide/.test(o)||o.startsWith("/pages/buying-guide/")?"guide":o.startsWith("/pages/")?"landing":"other"}function me(t,o=""){const r=new URLSearchParams(o).get("variant");return r?`${t}?variant=${encodeURIComponent(r)}`:t}function ai(){if(D())try{if(window.sessionStorage.getItem(Le)!==null)return;const t=typeof document<"u"&&document.referrer||"";window.sessionStorage.setItem(Le,t.slice(0,500))}catch{}}function ni(t){try{if(!D())return;ai(),window.sessionStorage.getItem(Q)===null&&Qo(t)}catch{}}function si(t){try{if(!D()||typeof document>"u")return;const o=document.referrer||"";if(!o)return;const r=new URL(o);if(r.origin!==window.location.origin)return;const s=me(r.pathname,r.search);if(s===t)return;const l=O(he);if(l&&l.path===s)return;const d=O(ke)??[];if(d[d.length-1]===t)return;X(he,{path:s,kind:Dt(s),at:new Date().toISOString()})}catch{}}function li(t,o){try{if(t&&t!==o){const s={path:t,kind:Dt(t),at:new Date().toISOString()};X(he,s)}const r=O(ke)??[];r[r.length-1]!==o&&(r.push(o),X(ke,r.slice(-oi)))}catch{}}function di(){return O(he)}function Xe(t){if(!D())return null;try{return window.sessionStorage.getItem(t)}catch{return null}}function Kl(){const t=ei(),o=O(Q)??{},r=di(),s=Xe(Le),l=typeof window<"u"?window.location.origin:"";return{...t,referrer:s||o.referrer||null,previous_page_url:r?`${l}${r.path}`.slice(0,500):null,previous_page_kind:(r==null?void 0:r.kind)??null,session_id:Xe(ti),utm_term:o.utm_term??null}}function ci(t){return/(^|\/)pages\/start-your-custom-bike-build\/?(\?|#|$)/.test(t)}const Ze=new Map;function ui(t){try{const o=`${Ot()}|${t.target_path}`,r=Date.now(),s=Ze.get(o);if(s!==void 0&&r-s<2e3)return;Ze.set(o,r);const l=typeof window<"u"?me(window.location.pathname,window.location.search):null;a(async()=>{const{trackOrganicEvent:d}=await import("./events-BIZUDMla.js");return{trackOrganicEvent:d}},__vite__mapDeps([19,2,1,3,4,5,6])).then(({trackOrganicEvent:d})=>d("organic_cta_click",{cta_type:t.cta_type??null,cta_position:t.cta_position??null,content_kind:t.source_kind??null,content_slug:t.source_slug??null,destination_path:t.target_path,path:l})).catch(()=>{})}catch{}}function Jl(t,o){try{if(!ci(t))return;const r=typeof window<"u"?window.location.href.split("?")[0].slice(0,500):void 0;Xo({source_content_url:r,...o}),ui({target_path:t,cta_type:o.cta_type,cta_position:o.cta_position,source_kind:o.source_content_kind,source_slug:o.source_content_slug})}catch{}}const et=new Set;function pi(){if(typeof window>"u")return"unknown";const t=window.innerWidth;return t<640?"mobile":t<1024?"tablet":"desktop"}function hi(t,o={},r={}){try{if(r.onceKey){const l=`${t}:${r.onceKey}`;if(et.has(l))return;et.add(l)}const s={event_name:t,content_kind:"commerce",content_slug:o.sourceProductHandle??o.productHandle??null,cta_type:o.blockSource??null,cta_position:o.position==null?null:String(o.position),product_handle:o.productHandle??null,tool_key:o.listId??null,locale:typeof document<"u"&&document.documentElement.lang||null,path:typeof window<"u"?window.location.pathname.slice(0,300):null,device:pi(),session_id:Ot()};be().then(l=>l.from("content_conversion_events").insert(s)).then(({error:l})=>{l&&console.warn("[commerce-event]",t,l.message)}
2).catch(l=>console.warn("[commerce-event] failed",t,l))}catch(s){console.warn("[commerce-event] failed",t,s)}}const mi="2025-07",gi="f443b7.myshopify.com",yi="a27613717f828fd56f4ed4aa11b39d76",bi=`https://${gi}/api/${mi}/graphql.json`,$l="shop.approvedcycling.com";function fi(t,o,r,s=75){if(!t||!t.includes("cdn.shopify.com"))return t;try{const l=new URL(t);return["width","height","crop","quality"].forEach(d=>l.searchParams.delete(d)),l.searchParams.set("width",String(o)),r&&l.searchParams.set("height",String(r)),l.searchParams.set("crop","center"),l.searchParams.set("quality",String(s)),l.toString()}catch{return t}}function zl(t,o,r,s=75){return o.map(l=>{const d=r?Math.round(l/r):void 0;return`${fi(t,l,d,s)} ${l}w`}).join(", ")}function vi(){if(typeof window>"u")return null;const t=window.location.pathname.split("/")[1];return t&&t in Ce?t:null}function Ei(){const t=vi()??C.resolvedLanguage??C.language??L;return Ce[t]??Ce[L]}function _i(t,o){return/@inContext\s*\(/.test(t)?t:t.replace(/^\s*query\s+([A-Za-z0-9_]+)(\s*\([^)]*\))?\s*\{/m,(r,s,l="")=>`query ${s}${l} @inContext(language: ${o}) {`)}const tt=15e3;async function xt(t){const o=new AbortController,r=setTimeout(()=>o.abort(),tt);try{return await fetch(bi,{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":yi},body:t,signal:o.signal})}catch(s){throw s instanceof DOMException&&s.name==="AbortError"?new Error(`Shopify request timed out after ${tt}ms`):s}finally{clearTimeout(r)}}async function F(t,o={}){const r=_i(t,Ei()),s=await xt(JSON.stringify({query:r,variables:o}));if(s.status===402){console.error("[shopify] Storefront API returned 402 (billing)"),k.error("The shop is temporarily unavailable",{description:"Please try again in a few minutes."});return}if(!s.ok)throw new Error(`HTTP error! status: ${s.status}`);const l=await s.json();if(l.errors)throw new Error(`Error calling Shopify: ${l.errors.map(d=>d.message).join(", ")}`);return l}async function Ql(t,o={}){let r;try{r=await xt(JSON.stringify({query:t,variables:o}))}catch{return null}if(!r.ok)return null;const s=await r.json();return s.errors?null:s}const Xl=`
3  query GetProductVariantInventory($handle: String!) {
4    product(handle: $handle) {
5      variants(first: 250) {
6        edges {
7          node {
8            id
9            quantityAvailable
10          }
11        }
12      }
13    }
14  }
15`,Zl=`
16  query GetProducts($first: Int!, $after: String, $query: String) {
17    products(first: $first, after: $after, query: $query) {
18      edges {
19        node {
20          id
21          title
22          description
23          handle
24          tags
25          vendor
26          productType
27          priceRange {
28            minVariantPrice {
29              amount
30              currencyCode
31            }
32          }
33          compareAtPriceRange {
34            maxVariantPrice {
35              amount
36              currencyCode
37            }
38          }
39          images(first: 5) {
40            edges {
41              node {
42                url
43                altText
44              }
45            }
46          }
47          variants(first: 10) {
48            edges {
49              node {
50                id
51                title
52                price {
53                  amount
54                  currencyCode
55                }
56                compareAtPrice {
57                  amount
58                  currencyCode
59                }
60                availableForSale
61                selectedOptions {
62                  name
63                  value
64                }
65              }
66            }
67          }
68          options {
69            name
70            values
71          }
72        }
73      }
74      pageInfo {
75        hasNextPage
76        endCursor
77      }
78    }
79  }
80`,ed=`
81  query GetProductByHandle($handle: String!) {
82    product(handle: $handle) {
83      id
84      title
85      description
86      handle
87      priceRange {
88        minVariantPrice {
89          amount
90          currencyCode
91        }
92      }
93      images(first: 10) {
94        edges {
95          node {
96            url
97            altText
98          }
99        }
100      }
101      variants(first: 30) {
102        edges {
103          node {
104            id
105            title
106            price {
107              amount
108              currencyCode
109            }
110            availableForSale
111            selectedOptions {
112              name
113              value
114            }
115          }
116        }
117      }
118      options {
119        name
120        values
121      }
122    }
123  }
124`,te=`
125  id
126  checkoutUrl
127  totalQuantity
128  lines(first: 100) {
129    edges {
130      node {
131        id
132        quantity
133        merchandise {
134          ... on ProductVariant {
135            id
136            title
137            availableForSale
138            price { amount currencyCode }
139            selectedOptions { name value }
140            image { url altText }
141            product {
142              id
143              handle
144              title
145              vendor
146              productType
147              tags
148              images(first: 1) { edges { node { url altText } } }
149              priceRange { minVariantPrice { amount currencyCode } }
150            }
151          }
152        }
153      }
154    }
155  }
156`,wi=`
157  query cart($id: ID!) {
158    cart(id: $id) { ${te} }
159  }
160`,Ti=`
161  mutation cartCreate($input: CartInput!) {
162    cartCreate(input: $input) {
163      cart { ${te} }
164      userErrors { field message }
165    }
166  }
167`,Ri=`
168  mutation cartLinesAdd($cartId: ID!, $lines: [CartLineInput!]!) {
169    cartLinesAdd(cartId: $cartId, lines: $lines) {
170      cart { ${te} }
171      userErrors { field message }
172    }
173  }
174`,Ai=`
175  mutation cartLinesUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!) {
176    cartLinesUpdate(cartId: $cartId, lines: $lines) {
177      cart { ${te} }
178      userErrors { field message }
179    }
180  }
181`,Ci=`
182  mutation cartLinesRemove($cartId: ID!, $lineIds: [ID!]!) {
183    cartLinesRemove(cartId: $cartId, lineIds: $lineIds) {
184      cart { ${te} }
185      userErrors { field message }
186    }
187  }
188`,Si=`
189  mutation cartDiscountCodesUpdate($cartId: ID!, $discountCodes: [String!]!) {
190    cartDiscountCodesUpdate(cartId: $cartId, discountCodes: $discountCodes) {
191      cart {
192        id
193        checkoutUrl
194        discountCodes { code applicable }
195      }
196      userErrors { field message }
197    }
198  }
199`,Li=`
200  mutation cartAttributesUpdate($cartId: ID!, $attributes: [AttributeInput!]!) {
201    cartAttributesUpdate(cartId: $cartId, attributes: $attributes) {
202      cart { id checkoutUrl }
203      userErrors { field message }
204      warnings { code message }
205    }
206  }
207`,pe="shop.approvedcycling.com";function fe(t){try{const o=new URL(t);return o.hostname=pe,o.searchParams.set("channel","online_store"),o.toString()}catch{return t}}function td(t){if(!t)return null;let o;try{o=new URL(t)}catch{return console.error("[checkout] Invalid checkout URL, refusing to open:",t),null}return o.hostname!==pe&&(console.warn(`[checkout] Checkout URL host "${o.hostname}" != "${pe}". Rewriting before redirect.`),o.hostname=pe,o.protocol="https:",o.port="",o.searchParams.set("channel","online_store")),o.protocol!=="https:"&&(console.warn("[checkout] Non-https checkout URL, upgrading to https:",t),o.protocol="https:"),o.toString()}function ve(t){return t.some(o=>o.message.toLowerCase().includes("cart not found")||o.message.toLowerCase().includes("does not exist"))}function oe(t){var s;const o=t;if(!(o!=null&&o.id)||!(o!=null&&o.checkoutUrl))return null;const r=(((s=o.lines)==null?void 0:s.edges)??[]).map(l=>{var m,b,f,E,v,_,g,T,w,R,x,J,Be,Ue,Me,Fe,We,He,Ve,Ye;const d=l==null?void 0:l.node,c=d==null?void 0:d.merchandise;if(!(d!=null&&d.id)||!(c!=null&&c.id)||typeof d.quantity!="number")return null;const u=((m=c.image)==null?void 0:m.url)??null,p=((_=(v=(E=(f=(b=c.product)==null?void 0:b.images)==null?void 0:f.edges)==null?void 0:E[0])==null?void 0:v.node)==null?void 0:_.url)??null;return{lineId:d.id,variantId:c.id,quantity:d.quantity,availableForSale:typeof c.availableForSale=="boolean"?c.availableForSale:void 0,variantTitle:c.title??"",selectedOptions:(c.selectedOptions??[]).filter(j=>!!(j!=null&&j.name)&&typeof j.value=="string").map(j=>({name:j.name,value:j.value})),price:{amount:((g=c.price)==null?void 0:g.amount)??"0",currencyCode:((T=c.price)==null?void 0:T.currencyCode)??"EUR"},product:{id:((w=c.product)==null?void 0:w.id)??"",handle:((R=c.product)==null?void 0:R.handle)??"",title:((x=c.product)==null?void 0:x.title)??c.title??"Item",vendor:(J=c.product)==null?void 0:J.vendor,productType:(Be=c.product)==null?void 0:Be.productType,tags:(Ue=c.product)==null?void 0:Ue.tags,imageUrl:u??p,imageAlt:((Me=c.image)==null?void 0:Me.altText)??((Ye=(Ve=(He=(We=(Fe=c.product)==null?void 0:Fe.images)==null?void 0:We.edges)==null?void 0:He[0])==null?void 0:Ve.node)==null?void 0:Ye.altText)??null,compareAtPriceAmount:null}}}).filter(l=>l!==null);return{cartId:o.id,checkoutUrl:fe(o.checkoutUrl),totalQuantity:o.totalQuantity??r.reduce((l,d)=>l+d.quantity,0),lines:r}}async function ki(t){let o;try{o=await F(wi,{id:t})}catch{return{kind:"error"}}if(!o||!o.data)return{kind:"error"};if(o.data.cart===null)return{kind:"gone"};const r=oe(o.data.cart);return r?{kind:"ok",snapshot:r}:{kind:"error"}}async function Ii(t){var r,s,l,d,c;const o=await F(Ti,{input:{lines:[{quantity:t.quantity,merchandiseId:t.variantId}]}});return((l=(s=(r=o==null?void 0:o.data)==null?void 0:r.cartCreate)==null?void 0:s.userErrors)==null?void 0:l.length)>0?(console.error("Cart creation failed:",o.data.cartCreate.userErrors),null):oe((c=(d=o==null?void 0:o.data)==null?void 0:d.cartCreate)==null?void 0:c.cart)}async function Pi(t,o){var d,c,u,p;const r=await F(Ri,{cartId:t,lines:[{quantity:o.quantity,merchandiseId:o.variantId}]}),s=((c=(d=r==null?void 0:r.data)==null?void 0:d.cartLinesAdd)==null?void 0:c.userErrors)||[];if(ve(s))return{success:!1,cartNotFound:!0};if(s.length>0)return console.error("Add line failed:",s),{success:!1};const l=oe((p=(u=r==null?void 0:r.data)==null?void 0:u.cartLinesAdd)==null?void 0:p.cart);return l?{success:!0,cart:l}:{success:!1}}async function ot(t,o,r){var c,u,p,m;const s=await F(Ai,{cartId:t,lines:[{id:o,quantity:r}]}),l=((u=(c=s==null?void 0:s.data)==null?void 0:c.cartLinesUpdate)==null?void 0:u.userErrors)||[];if(ve(l))return{success:!1,cartNotFound:!0};if(l.length>0)return console.error("Update line failed:",l),{success:!1};const d=oe((m=(p=s==null?void 0:s.data)==null?void 0:p.cartLinesUpdate)==null?void 0:m.cart);return d?{success:!0,cart:d}:{success:!1}}async function Oi(t,o){var d,c,u,p;const r=await F(Ci,{cartId:t,lineIds:[o]}),s=((c=(d=r==null?void 0:r.data)==null?void 0:d.cartLinesRemove)==null?void 0:c.userErrors)||[];if(ve(s))return{success:!1,cartNotFound:!0};if(s.length>0)return console.error("Remove line failed:",s),{success:!1};const l=oe((p=(u=r==null?void 0:r.data)==null?void 0:u.cartLinesRemove)==null?void 0:p.cart);return l?{success:!0,cart:l}:{success:!1}}async function Di(t,o){var u,p,m,b;const r=await F(Si,{cartId:t,discountCodes:o}),s=((p=(u=r==null?void 0:r.data)==null?void 0:u.cartDiscountCodesUpdate)==null?void 0:p.userErrors)||[];if(ve(s))return{success:!1,cartNotFound:!0};if(s.length>0)return console.error("Discount code update failed:",s),{success:!1};const l=(b=(m=r==null?void 0:r.data)==null?void 0:m.cartDiscountCodesUpdate)==null?void 0:b.cart,d=l==null?void 0:l.checkoutUrl,c=Array.isArray(l==null?void 0:l.discountCodes)?l.discountCodes.filter(f=>
207(f==null?void 0:f.applicable)===!0&&typeof f.code=="string").map(f=>f.code):void 0;return{success:!0,checkoutUrl:d?fe(d):void 0,applicableCodes:c}}async function od(t,o){var r,s;if(!t||o.length===0)return{success:!0};try{const l=await F(Li,{cartId:t,attributes:o}),d=(r=l==null?void 0:l.data)==null?void 0:r.cartAttributesUpdate,c=(d==null?void 0:d.userErrors)??[];if(c.length>0)return console.warn("[checkout-attribution] Shopify rejected cart attributes:",c),{success:!1};const u=(s=d==null?void 0:d.cart)==null?void 0:s.checkoutUrl;return{success:!0,checkoutUrl:u?fe(u):void 0}}catch(l){return console.warn("[checkout-attribution] Failed to persist cart attributes:",l),{success:!1}}}function xi(t){const o={id:t.product.id,title:t.product.title,description:"",handle:t.product.handle,tags:t.product.tags,vendor:t.product.vendor,productType:t.product.productType,priceRange:{minVariantPrice:t.price},compareAtPriceRange:null,images:t.product.imageUrl?{edges:[{node:{url:t.product.imageUrl,altText:t.product.imageAlt}}]}:{edges:[]},variants:{edges:[]},options:[]};return{lineId:t.lineId,variantId:t.variantId,variantTitle:t.variantTitle,price:t.price,quantity:t.quantity,selectedOptions:t.selectedOptions,product:{node:o},availableForSale:t.availableForSale}}function Te(t){zo("add_to_cart",{currency:t.price.currencyCode,value:parseFloat(t.price.amount)*t.quantity,items:[{item_id:t.variantId,item_name:t.product.node.title,item_brand:t.product.node.vendor,item_variant:t.variantTitle,price:parseFloat(t.price.amount),quantity:t.quantity}]}),hi("add_to_cart",{productHandle:t.product.node.handle,listId:"shopify_cart"})}function W(t,o,r){return o.lines.map(s=>{const l=t.find(d=>d.variantId===s.variantId)??(r&&r.variantId===s.variantId?r:void 0);return l?{...l,lineId:s.lineId,variantId:s.variantId,quantity:s.quantity,price:s.price,availableForSale:s.availableForSale}:(console.warn("[cart] Shopify line has no local metadata, synthesizing from snapshot:",s.variantId),xi(s))})}const ji=$t()(zt((t,o)=>({items:[],cartId:null,checkoutUrl:null,isLoading:!1,isSyncing:!1,lastApplicableDiscountCodes:null,addItem:async r=>{const{cartId:s,items:l,clearCart:d}=o(),c={...r,lineId:null};t({isLoading:!0});try{if(!s){const m=await Ii(c);return m?(t({cartId:m.cartId,checkoutUrl:m.checkoutUrl,items:W(l,m,c)}),Te(c),!0):(k.error(C.t("cart.errorAdd",{defaultValue:"Could not add item to cart"})),!1)}const u=l.find(m=>m.variantId===r.variantId);if(u!=null&&u.lineId){const m=await ot(s,u.lineId,u.quantity+r.quantity);return m.cartNotFound?(d(),t({isLoading:!1}),o().addItem(r)):!m.success||!m.cart?(k.error(C.t("cart.errorUpdate",{defaultValue:"Could not update cart"})),await o().syncCart(),!1):(t({checkoutUrl:m.cart.checkoutUrl,items:W(l,m.cart,c)}),Te(c),!0)}const p=await Pi(s,c);return p.cartNotFound?(d(),t({isLoading:!1}),o().addItem(r)):!p.success||!p.cart?(k.error(C.t("cart.errorAdd",{defaultValue:"Could not add item to cart"})),await o().syncCart(),!1):(t({checkoutUrl:p.cart.checkoutUrl,items:W(l,p.cart,c)}),Te(c),!0)}catch(u){return console.error("Failed to add item:",u),k.error(C.t("cart.errorAdd",{defaultValue:"Could not add item to cart"})),await o().syncCart(),!1}finally{t({isLoading:!1})}},updateQuantity:async(r,s)=>{if(s<=0){await o().removeItem(r);return}const{items:l,cartId:d,clearCart:c}=o(),u=l.find(p=>p.variantId===r);if(!(!(u!=null&&u.lineId)||!d)){t({isLoading:!0});try{const p=await ot(d,u.lineId,s);if(p.cartNotFound){c();return}if(!p.success||!p.cart){k.error(C.t("cart.errorQuantity",{defaultValue:"Could not update quantity"})),await o().syncCart();return}t({checkoutUrl:p.cart.checkoutUrl,items:W(l,p.cart)})}catch(p){console.error("Failed to update quantity:",p),k.error(C.t("cart.errorQuantity",{defaultValue:"Could not update quantity"})),await o().syncCart()}finally{t({isLoading:!1})}}},removeItem:async r=>{const{items:s,cartId:l,clearCart:d}=o(),c=s.find(u=>u.variantId===r);if(!(!(c!=null&&c.lineId)||!l)){t({isLoading:!0});try{const u=await Oi(l,c.lineId);if(u.cartNotFound){d();return}if(!u.success||!u.cart){k.error(C.t("cart.errorRemove",{defaultValue:"Could not remove item from cart"})),await o().syncCart();return}const p=W(s,u.cart);p.length===0?d():t({checkoutUrl:u.cart.checkoutUrl,items:p})}catch(u){console.error("Failed to remove item:",u),k.error(C.t("cart.errorRemove",{defaultValue:"Could not remove item from cart"})),await o().syncCart()}finally{t({isLoading:!1})}}},clearCart:()=>t({items:[],cartId:null,checkoutUrl:null}),getCheckoutUrl:()=>{const r=o().checkoutUrl;return r?fe(r):null},applyDiscountCodes:async r=>{const{cartId:s,clearCart:l}=o();if(!s)return o().getCheckoutUrl();t({isLoading:!0});try{const d=await Di(s,r);return d.cartNotFound?(l(),null):(t({lastApplicableDiscountCodes:d.applicableCodes??null}),d.success&&d.checkoutUrl?(t({checkoutUrl:d.checkoutUrl}),d.checkoutUrl):o().getCheckoutUrl())}catch(d){return console.error("Failed to apply Shopify discount codes:",d),o().getCheckoutUrl()}finally{t({isLoading:!1})}},syncCart:async()=>{const{cartId:r,isSyncing:s,items:l,clearCart:d}=o();if(!r)return!0;
207if(s)return!1;t({isSyncing:!0});try{const c=await ki(r);if(c.kind==="error")return!1;if(c.kind==="gone")return d(),!0;const u=c.snapshot;return u.totalQuantity===0||u.lines.length===0?(d(),!0):(t({checkoutUrl:u.checkoutUrl,items:W(l,u)}),!0)}catch(c){return console.error("Failed to sync cart with Shopify:",c),!1}finally{t({isSyncing:!1})}}}),{name:"shopify-cart",storage:Qt(()=>localStorage),partialize:t=>({items:t.items,cartId:t.cartId,checkoutUrl:t.checkoutUrl})})),Ni=t=>{const o=window;typeof o.requestIdleCallback=="function"?o.requestIdleCallback(t,{timeout:3e3}):setTimeout(t,1500)};function Bi(){const t=ji(o=>o.syncCart);y.useEffect(()=>{let o=!1;Ni(()=>{o||t()});const r=()=>{document.visibilityState==="visible"&&t()};return document.addEventListener("visibilitychange",r),()=>{o=!0,document.removeEventListener("visibilitychange",r)}},[t])}const Ie="ac-cookie-consent-v2",it="ac-cookie-consent-log-v1",q="ac-consent-updated",Ui="ac-open-consent-preferences",Mi=180,ge="G-VRKGDE1NC2",Fi="AW-10871745889",id={essential:!0,preferences:!1,analytics:!1,marketing:!1},I=()=>typeof window<"u",jt=t=>{if(!t)return null;try{return JSON.parse(t)}catch{return null}},Wi=()=>new Date(Date.now()+Mi*24*60*60*1e3).toISOString(),Nt=()=>{I()&&(window.dataLayer=window.dataLayer||[],typeof window.gtag!="function"&&(window.gtag=function(){var o;(o=window.dataLayer)==null||o.push(arguments)}))},Hi=t=>{if(!I())return;const o=jt(localStorage.getItem(it))||[],r=[t,...o].slice(0,12);localStorage.setItem(it,JSON.stringify(r))},Ee=()=>{if(!I())return null;const t=jt(localStorage.getItem(Ie));return t?!t.expiresAt||Date.parse(t.expiresAt)<=Date.now()?(localStorage.removeItem(Ie),null):t:null},rd=(t,o)=>{if(!I())return null;const r={version:2,updatedAt:new Date().toISOString(),expiresAt:Wi(),source:o,consent:t};return localStorage.setItem(Ie,JSON.stringify(r)),Hi(r),console.info("[consent] updated",r),window.dispatchEvent(new CustomEvent(q,{detail:r})),r},ad=()=>!Ee(),U=t=>{const o=Ee();return(o==null?void 0:o.consent[t])??!1},Vi=({id:t,src:o})=>{if(!I()||document.getElementById(t))return;const r=document.createElement("script");r.id=t,r.async=!0,r.src=o,document.head.appendChild(r)},Yi=()=>{var d,c,u;if(!I())return;(d=window.gtag)==null||d.call(window,"js",new Date),(c=window.gtag)==null||c.call(window,"config",ge,{anonymize_ip:!0,url_passthrough:!0,ads_data_redaction:!0}),(u=window.gtag)==null||u.call(window,"config",Fi,{allow_enhanced_conversions:!0});let t=!1;const o=()=>{t||(t=!0,Vi({id:"ac-ga4-script",src:`https://www.googletagmanager.com/gtag/js?id=${ge}`}))},r=window,s=()=>{o(),window.removeEventListener("pointerdown",s),window.removeEventListener("keydown",s)};window.addEventListener("pointerdown",s,{once:!0,passive:!0}),window.addEventListener("keydown",s,{once:!0}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&o()});const l=()=>{typeof r.requestIdleCallback=="function"?r.requestIdleCallback(o,{timeout:25e3}):window.setTimeout(o,2e4)};document.readyState==="complete"?l():window.addEventListener("load",l,{once:!0})},Gi=t=>{I()&&(Nt(),window[`ga-disable-${ge}`]=!1,typeof window.gtag=="function"&&window.gtag("consent","update",{functionality_storage:t.preferences?"granted":"denied",personalization_storage:t.preferences?"granted":"denied",analytics_storage:t.analytics?"granted":"denied",ad_storage:t.marketing?"granted":"denied",ad_user_data:t.marketing?"granted":"denied",ad_personalization:t.marketing?"granted":"denied"}))},qi=()=>{var o;if(!I())return;Nt(),window[`ga-disable-${ge}`]=!1,(o=window.gtag)==null||o.call(window,"consent","default",{functionality_storage:"denied",personalization_storage:"denied",analytics_storage:"denied",ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied"}),Yi();const t=Ee();t&&(Gi(t.consent),window.dispatchEvent(new CustomEvent(q,{detail:t})))},nd=()=>{I()&&window.dispatchEvent(new Event(Ui))},rt="ac:pv-session",Ki=()=>{try{let t=sessionStorage.getItem(rt);return t||(t=(typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():Math.random().toString(36).slice(2))+"-"+Date.now().toString(36),sessionStorage.setItem(rt,t)),t}catch{return"anon"}},at=t=>{try{const o={path:t,referrer:document.referrer||null,session_id:Ki(),locale:typeof navigator<"u"?navigator.language:null};be().then(r=>r.functions.invoke("track-pageview",{body:o})).catch(()=>{})}catch{}},Ji=()=>{const t=ee(),o=t.pathname+t.search,r=y.useRef(null),s=y.useRef(o);s.current=o;const l=y.useRef(!1);if(!l.current&&typeof window<"u"){l.current=!0;const u=t.pathname.split("/")[1];ni(/^[a-z]{2}$/.test(u)?u:void 0),si(me(t.pathname,t.search))}const d=me(t.pathname,t.search),c=y.useRef(null);y.useEffect(()=>{li(c.current,d),c.current=d},[d]),y.useEffect(()=>{const u=()=>{typeof window.gtag=="function"&&window.gtag("event","page_view",{page_path:o,page_title:document.title}),U("analytics")&&r.current!==o&&(r.current=o,at(o))},p=window;let m=!1;const b=()=>{m||u()};if(typeof p.requestIdleCallback=="function"){const E=p.requestIdleCallback(b,{timeout:3e3});return()=>{var v;m=!0,(v=window.cancelIdleCallback)==null||v.call(window,E)}}const f=window.setTimeout(b,1500);return()=>{m=!0,window.clearTimeout(f)}},[o]),y.useEffect(()=>{if(typeof window>"u")return;const u=p=>{var f;const m=p.detail;
207if(!((f=m==null?void 0:m.consent)!=null&&f.analytics))return;const b=s.current;r.current!==b&&(r.current=b,at(b))};return window.addEventListener(q,u),()=>window.removeEventListener(q,u)},[])},$i="ac:pv-session",zi=()=>{try{return sessionStorage.getItem($i)}catch{return null}},Qi=()=>{const t=window.innerWidth;return t<640?"mobile":t<1024?"tablet":"desktop"},Xi=t=>{if(t.id)return`#${t.id}`;const o=[];let r=t,s=0;for(;r&&s<4&&r.nodeType===1;){let l=r.tagName.toLowerCase();const d=(r.getAttribute("class")||"").trim().split(/\s+/).filter(Boolean).slice(0,2).join(".");d&&(l+=`.${d}`),o.unshift(l),r=r.parentElement,s+=1}return o.join(" > ").slice(0,256)},Zi=()=>{y.useEffect(()=>{if(typeof window>"u")return;const t=c=>{var w,R;const u=U("analytics"),p=c.target;if(!p||p.nodeType!==1)return;const m=Math.max(document.documentElement.scrollWidth,((w=document.body)==null?void 0:w.scrollWidth)??0,window.innerWidth),b=Math.max(document.documentElement.scrollHeight,((R=document.body)==null?void 0:R.scrollHeight)??0,window.innerHeight),f=c.pageX,E=c.pageY,v=m>0?Math.min(1,Math.max(0,f/m)):0,_=b>0?Math.min(1,Math.max(0,E/b)):0,g=(p.textContent||"").trim().slice(0,120)||null,T={path:window.location.pathname+window.location.search,x_pct:v,y_pct:_,viewport_w:window.innerWidth,viewport_h:window.innerHeight,doc_w:m,doc_h:b,element_tag:p.tagName.toLowerCase().slice(0,32),element_id:p.id?p.id.slice(0,128):null,element_class:p.className?String(p.className).slice(0,256):null,element_text:g,element_selector:Xi(p),session_id:u?zi():null,user_agent:u?navigator.userAgent.
207slice(0,256):null,device_class:Qi()};try{be().then(x=>x.from("page_clicks").insert(T)).catch(()=>{})}catch{}};let o=!1;const r=()=>{o||(o=!0,window.addEventListener("click",t,{capture:!0,passive:!0}))},s=window;let l,d;return typeof s.requestIdleCallback=="function"?l=s.requestIdleCallback(r,{timeout:3e3}):d=window.setTimeout(r,1500),()=>{var c;l!==void 0&&((c=s.cancelIdleCallback)==null||c.call(s,l)),d!==void 0&&window.clearTimeout(d),window.removeEventListener("click",t,{capture:!0})}},[])},Bt=()=>typeof window<"u"&&typeof window.gtag=="function"&&U("analytics"),Ut="referral-share-fired",Z=24*60*60*1e3,ie=()=>{if(typeof window>"u")return{};try{const t=window.localStorage.getItem(Ut);if(!t)return{};const o=JSON.parse(t);return o&&typeof o=="object"&&!Array.isArray(o)?o:{}}catch{return{}}},xe=t=>{if(!(typeof window>"u"))try{window.localStorage.setItem(Ut,JSON.stringify(t))}catch{}},je=(t,o)=>{const r={};for(const[s,l]of Object.entries(t))typeof l=="number"&&o-l<Z&&(r[s]=l);return r},sd=(t,o)=>{if(!Bt())return;const r=o??"unknown",s=`${t}:${r}`,l=Date.now(),d=je(ie(),l);d[s]&&l-d[s]<Z||(d[s]=l,xe(d),window.gtag("event","referral_share",{method:t,content_type:"referral_link",item_id:r,ref_code:r}))},ld=t=>{const o=["copy","whatsapp","sms","email","native"],r=t??"unknown",s=Date.now(),l=je(ie(),s);return o.map(d=>{const c=l[`${d}:${r}`],u=typeof c=="number"&&s-c<Z;return{channel:d,willDedupe:u,expiresAt:u?c+Z:null}})},dd=(t,o)=>{if(typeof window>"u")return!1;const r=o??"unknown",s=ie(),l=`${t}:${r}`;return l in s?(delete s[l],xe(s),!0):!1},cd=t=>{if(typeof window>"u")return[];const o=t??"unknown",r=Date.now(),s=je(ie(),r);return["copy","whatsapp","sms","email","native"].filter(d=>{const c=s[`${d}:${o}`];return typeof c=="number"&&r-c<Z})},ud=t=>{if(typeof window>"u")return 0;const o=t??"unknown",r=ie();let s=0;for(const l of Object.keys(r))l.endsWith(`:${o}`)&&(delete r[l],s+=1);return xe(r),s},er=(t,o)=>{Bt()&&window.gtag("event","referral_redeemed",{ref_code:t,discount_code:o??null})},de="ac_pending_ref",tr=()=>{const[t,o]=ao(),{user:r}=kt();y.useEffect(()=>{const s=t.get("ref");if(!s)return;try{localStorage.setItem(de,s.trim().toUpperCase())}catch{}const l=new URLSearchParams(t);l.delete("ref"),o(l,{replace:!0})},[t,o]),y.useEffect(()=>{if(!r)return;let s=!1;return(async()=>{let l=null;try{l=localStorage.getItem(de)}catch{}if(!l)return;const d=await be();if(s)return;const{data:c,error:u}=await d.functions.invoke("redeem-referral",{body:{refCode:l}});if(s)return;if(u||c&&c.error){try{localStorage.removeItem(de)}catch{}return}const p=c;try{localStorage.removeItem(de)}catch{}p.invitedDiscountCode&&!p.alreadyRedeemed&&(er(l,p.invitedDiscountCode),k.success(`Welcome — your code ${p.invitedDiscountCode} is ready`,{description:"10% off your first order. Apply at checkout.",duration:9e3}))})(),()=>{s=!0}},[r])},or=()=>{const{pathname:t,hash:o}=ee();return y.useEffect(()=>{if(o){const r=o.slice(1),s=()=>{const c=document.getElementById(r);return c?(c.scrollIntoView({behavior:"smooth",block:"start"}),!0):!1};if(s())return;const l=window.setTimeout(s,100),d=window.setTimeout(s,400);return()=>{window.clearTimeout(l),window.clearTimeout(d)}}window.scrollTo({top:0,left:0})},[t,o]),null};if(typeof window<"u")try{C.options.saveMissing=!0}catch{}const Mt={en:()=>a(()=>import("./en-BQKW4jv5.js"),[]),sl:()=>a(()=>import("./sl-BzuQtonQ.js"),[]),hr:()=>a(()=>import("./hr-B0trpqJB.js"),[]),it:()=>a(()=>import("./it-3JyHIwOI.js"),[]),de:()=>a(()=>import("./de-DpNWXdpq.js"),[]),pt:()=>a(()=>import("./pt-Dg54bZdK.js"),[]),es:()=>a(()=>import("./es-D9k4xpo0.js"),[])},K=new Map,Re=new Map,_e=t=>t&&Mt[t]?t:"en";function nt(t){if(K.has(t))return Promise.resolve();let o=Re.get(t);return o||(o=Mt[t]().then(r=>{K.set(t,r.default)}).finally(()=>Re.delete(t)),Re.set(t,o)),o}function Ft(t){const o=_e(t);return Promise.all([nt("en"),nt(o)]).then(()=>{})}function ir(t){const o=_e(t);return K.has("en")&&K.has(o)}function rr(t,o){var s,l;if(!t)return null;const r=_e(o);return((s=K.get(r))==null?void 0:s[t])??((l=K.get("en"))==null?void 0:l[t])??null}
207function ar(t){return _e(t.split("/").filter(Boolean)[0])}function pd(t,o){const[,r]=y.useState(0),s=ir(o);return y.useEffect(()=>{if(s)return;let l=!1;return Ft(o).then(()=>{l||r(d=>d+1)}).catch(d=>console.warn("[collection-seo] load failed",d)),()=>{l=!0}},[o,s]),rr(t,o)}const nr=(t=1500)=>{const[o,r]=y.useState(!1);return y.useEffect(()=>{const s=window;if(typeof s.requestIdleCallback=="function"){const d=s.requestIdleCallback(()=>r(!0),{timeout:t});return()=>{var c;return(c=s.cancelIdleCallback)==null?void 0:c.call(s,d)}}const l=window.setTimeout(()=>r(!0),t);return()=>window.clearTimeout(l)},[t]),o},sr=new to,Ne="approved:route-module-retry";function Pe(t){const o=t instanceof Error?t.message:String(t??"");return/Importing a module script failed|Failed to fetch dynamically imported module|Load failed|ChunkLoadError/i.test(o)}function Wt(){try{const t=[];for(let o=0;o<window.sessionStorage.length;o++){const r=window.sessionStorage.key(o);r&&(r.startsWith(Ne)||r.startsWith("approved:module-load-retry"))&&t.push(r)}t.forEach(o=>window.sessionStorage.removeItem(o))}catch{}}function st(){Wt();const t=()=>{const o=new URL(window.location.href);o.searchParams.set("_r",Date.now().toString(36)),window.location.replace(o.toString())};try{const o=[];typeof caches<"u"&&o.push(caches.keys().then(r=>Promise.all(r.map(s=>caches.delete(s)))).catch(()=>{})),Promise.race([Promise.all(o),new Promise(r=>setTimeout(r,600))]).finally(t)}catch{t()}}const Ht=3;function lr(){try{const t=`${Ne}:${window.location.pathname}`,o=window.sessionStorage.getItem(t),r=o?parseInt(o,10):0;return Number.isFinite(r)?r:0}catch{return 0}}function dr(){try{const t=`${Ne}:${window.location.pathname}`,o=lr()+1;return window.sessionStorage.setItem(t,String(o)),o}catch{return Ht+1}}class cr extends y.Component{constructor(){super(...arguments);Ge(this,"state",{error:null})}static getDerivedStateFromError(r){return{error:r}}componentDidCatch(r,s){if(!Pe(r))return;console.error("[route-module-boundary] failed to load route module",r,s.componentStack),dr()<=Ht&&st()}render(){if(!this.state.error)return this.props.children;if(!Pe(this.state.error))throw this.state.error;return e.jsx("main",{className:"min-h-screen bg-background px-6 py-20 text-foreground",children:e.jsxs("section",{className:"mx-auto max-w-xl space-y-6 border border-border bg-card p-6 text-center shadow-sm",children:[e.jsx("p",{className:"font-semibold text-3xl uppercase tracking-normal",children:"Page update required"}),e.jsx("p",{className:"text-sm leading-6 text-muted-foreground",children:"A new version of this page is available. Reload once to continue."}),e.jsx("button",{type:"button",onClick:st,className:"min-h-12 bg-primary px-6 text-xs font-semibold uppercase tracking-normal text-primary-foreground transition-colors hover:bg-primary/90",children:"Reload page"})]})})}}function ur(){y.useEffect(()=>{const t=window.setTimeout(Wt,4e3);return()=>window.clearTimeout(t)},[])}function n(t){return y.lazy(()=>new Promise((o,r)=>{const s=l=>{Promise.all([t(),fo]).then(([d])=>o(d)).catch(d=>{if(l<=0||!Pe(d)){r(d);return}setTimeout(()=>s(l-1),350)})};s(2)}))}const Ae=n(()=>a(()=>import("./RequireAuth-BE2VWdMn.js"),__vite__mapDeps([20,2,21,1,4,3,5,6]))),S=n(()=>a(()=>import("./RequireClubConsent-DGGGq3Dl.js"),__vite__mapDeps([22,2,23,3,19,1,4,5,6,24,16,17,25,26,27,28,29,30,31,32,33,34,35,36,21,37,38]))),A=n(()=>a(()=>import("./RequireClubMember-D9-G8wgu.js"),__vite__mapDeps([39,2,23,3,19,1,4,5,6,40,16,17,21]))),pr=n(()=>a(()=>import("./AccountShell-Cg_CQvv7.js").then(t=>t.A),__vite__mapDeps([41,2,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79]))),hr=n(()=>a(()=>import("./Index-CpTUZr_9.js"),__vite__mapDeps([80,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,3,5]))),lt=n(()=>a(()=>import("./NotFound-KrM9Wq6S.js"),__vite__mapDeps([89,2,86,4,21,1,81,82,83,84,31,85,74,29,87,43,61,88,60,28,6,90,91,3,5]))),h=n(()=>a(()=>import("./LegacyRedirect-BNYsI3pZ.js"),__vite__mapDeps([92,2,4,1,3,5,6]))),dt=n(()=>a(()=>import("./LegacyCollectionFacetRedirect-DE-UDdif.js"),__vite__mapDeps([93,2,4,1,3,5,6]))),mr=n(()=>a(()=>import("./ProductDetail-BxvOiX8T.js"),__vite__mapDeps([94,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,95,96,97,98,99,100,5,55,33,32,34,25,26,27,17,101,102,103,104,73,105,38,19,3,30,106,107,108,90,91,109,45,35,110,111,112,113,67,114,23,115,116,48,117,47,118,119,120,65,121,122,123,124,125,70,71,126,79,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144]))),gr=n(()=>Promise.all([a(()=>import("./CollectionPage-DOTyTRgm.js").then(t=>t.C),__vite__mapDeps([145,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,97,98,99,100,5,55,33,32,34,25,26,27,17,101,102,103,104,73,105,38,143,95,142,70,79,146,65,109,45,147,148,149,150,151,116,152,153,117,16,154,155,156,157,138,140,139,141,158,67])),Ft(typeof window>"u"?"en":ar(window.location.pathname)).catch(()=>{})]).then(([t])=>t)),yr=n(()=>a(()=>
207import("./BikeFitFixer-Dolyp26A.js"),__vite__mapDeps([159,2,160,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,161,100,5,55,27,17,33,162,34,30,163,164,165,166,16,167,168,38,79,70,65,66,67,169,124,102,47,129,19,3,170,171,35,147,172,143,95,142,173,174,175,176]))),br=n(()=>a(()=>import("./TirePressureCalculator-fzuMmlGq.js"),__vite__mapDeps([177,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,161,100,5,55,27,17,33,162,34,30,35,163,164,165,166,16,167,168,38,79,70,65,66,67,169,124,102,47,129,19,3,170,171,147,172,143,95,142,173,174,175,176,116]))),fr=n(()=>a(()=>import("./RideFuelCalculator-B8it_SbB.js"),__vite__mapDeps([178,2,4,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,161,100,5,55,27,17,33,162,34,30,35,163,164,165,23,3,19,166,16,179,38,116,69,180]))),vr=n(()=>a(()=>import("./TrainingPlanGenerator-Djp84Wte.js"),__vite__mapDeps([181,2,160,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,161,100,5,55,27,17,33,162,34,30,35,182,16,163,164,165,166,167,168,38,79,70,65,66,67,169,124,102,47,129,19,3,170,143,95,142,173,174,175,176,183,103]))),Er=n(()=>a(()=>import("./WheelRecommendation-Dxf8VLG1.js"),__vite__mapDeps([184,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,161,100,5,55,27,17,33,162,34,30,35,182,32,16,19,3,164,165,143,95,142,173,167,168,38,79,70,65,66,67,169,124,102,47,129,185,128,112,160,103]))),_r=n(()=>a(()=>import("./WheelRecommendationThankYou-DHbB7lHY.js"),__vite__mapDeps([186,2,4,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,168,38,79,70,65,66,67,169,124,102,47,129,170,183,3,5]))),wr=n(()=>a(()=>import("./CustomBikeBuild-DDTG1KWK.js"),__vite__mapDeps([187,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,161,100,5,55,27,17,33,162,34,30,35,182,32,157,138,140,139,141,185,128,38,112,79,16,19,3,164,165,160,143,95,142,173,103]))),Tr=n(()=>a(()=>import("./CustomBuildThankYou-CcVkAdzd.js"),__vite__mapDeps([188,2,4,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,168,38,79,70,65,66,67,169,124,102,47,129,170,183,3,5]))),Rr=n(()=>a(()=>import("./CustomBuildLibrary-CONweZr3.js"),__vite__mapDeps([189,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,135,38,137,138,139,140,141,191,192,3,5]))),Ar=n(()=>a(()=>import("./BuildStory-k1r4lVTG.js"),__vite__mapDeps([193,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,104,134,135,38,192,173,137,138,139,140,141,3,5]))),Cr=n(()=>a(()=>import("./RiderStories-Dhaygals.js"),__vite__mapDeps([194,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,38,192,137,138,139,140,141,3,5]))),Sr=n(()=>a(()=>import("./BuyingGuide-DFd8dq8N.js"),__vite__mapDeps([195,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,173,143,95,142,5,55,136,38,131,79,70,65,132,133,196,129,197,34,134,135,137,138,139,140,141,198,3]))),Lr=n(()=>a(()=>import("./Phase5ProductGuide-D8duPZeo.js"),__vite__mapDeps([199,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,143,95,142,5,55,190,96,38,34,200,89,3]))),kr=n(()=>a(()=>import("./BuyingGuidesIndex-BELQsUjr.js"),__vite__mapDeps([201,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,173,136,38,198,3,5]))),Ir=n(()=>a(()=>import("./Comparison-vIjWflF8.js"),__vite__mapDeps([202,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,173,143,95,142,5,55,136,38,131,79,70,65,132,133,196,129,197,34,203,3]))),Pr=n(()=>a(()=>import("./ComparisonsIndex-bgdTNwb-.js"),__vite__mapDeps([204,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,173,136,38,203,3,5]))),Or=n(()=>a(()=>import("./AskApproved-BovoRAqV.js"),__vite__mapDeps([205,2,4,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,190,35,182,30,5,161,100,55,27,17,33,162,34,206,16,160,173,19,3,103,38,207]))),Dr=n(()=>a(()=>import("./AskApprovedThankYou-55mUMsgn.js"),__vite__mapDeps([208,2,190,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,209,34,38,112,79,3,5]))),xr=n(()=>a(()=>import("./UpgradeFinder-B_P2YvuL.js"),__vite__mapDeps([210,2,190,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,35,182,30,5,161,100,55,27,17,33,162,34,206,16,185,128,38,112,79,173,143,95,142,160,103,207,3]))),jr=n(()=>a(()=>import("./UpgradeFinderThankYou-SAi3O2FX.js"),__vite__mapDeps([211,2,190,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,209,34,38,112,79,185,128,3,5]))),Nr=n(()=>a(()=>import("./BikeFitFixerThankYou-BxrNu3c6.js"),__vite__mapDeps([212,2,190,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,209,34,38,112,79,3,5]))),Br=n(()=>a(()=>import("./AdminOverview-2x4i-mvl.js"),__vite__mapDeps([213,2,4,21,1,38,29,46,47,48,50,49,51,3,5,6]))),Ur=n(()=>a(()=>import("./AdminSalesHome-CL1ZDsBO.js"),__vite__mapDeps([214,2,4,21,1,59,29,65,74,46,125,130,38,3,5,6]))),Mr=n(()=>a(()=>import("./AdminCustomersHome-D8NT_0v-.js"),__vite__mapDeps([215,2,4,21,1,38,29,88,67,79,216,48,3,5,6]))),Fr=n(()=>a(()=>import("./AdminClubHome-D32GFbUB.js"),__vite__mapDeps([217,2,4,21,1,38,29,47,63,65,49,77,48,218,76,78,50,51,37,3,5,6]))),Wr=n(()=>a(()=>import("./AdminContentHome-iY0DDehE.js"),__vite__mapDeps([219,2,4,21,1,38,29,49,220,67,169,64,3,5,6]))),Hr=n(()=>a(()=>import("./AdminGrowthHome-C3Foibai.js"),__vite__mapDeps([221,2,4,21,1,30,5,31,3,16,17,222,29,183,223,144,38,67,125,88,224,50,225,158,6]))),Vr=n(()=>a(()=>import("./AdminSystemHome-RpsTUJUH.js"),__vite__mapDeps([226,2,4,21,1,16,17,40,3,5,87,29,222,48,197,183,172,38,70,227,37,228,64,6]))),Yr=n(()=>a(()=>import("./AdminLeads-CX-5ZC3f.js"),__vite__mapDeps([229,2,190,16,17,40,3,21,1,35,161,100,5,55,27,33,61,29,162,34,230,30,31,84,231,232,26,28,182,233,103,234,4,6]))),Gr=n(()=>a(()=>import("./AdminPublishBlogArticle-DI1Ki8nm.js"),__vite__mapDeps([235,2,190,16,17,40,3,21,1,35,182,30,5,31,36,103,29,4,6]))),qr=n(()=>a(()=>import("./AdminCanonicalProductLinks-DSrlv_rB.js"),__vite__mapDeps([236,2,53,40,3,16,17,37,29,237,84,31,30,5,35,182,222,238,234,233,1,4,6]))),Kr=n(()=>a(()=>import("./SecondRideBrowse-Bt9dgN9Y.js"),__vite__mapDeps([239,2,4,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,30,5,101,240,241,16,17,242,243,112,3,244,245,35,36,32,33,34,161,100,55,27,162,232,26,246,167,168,38,79,70,65,66,67,169,124,102,47,129,19,23,247,197]))),H=n(()=>a(()=>import("./SecondRideCategoryPage-DPsnn50m.js"),__vite__mapDeps([248,2,4,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,30,5,101,240,241,16,17,242,243,112,3,244,245,167,168,38,79,70,65,66,67,169,124,102,47,129,19,173,23,52,247,197]))),Jr=n(()=>a(()=>import("./SecondRideListing-B3WEM3Cm.js"),__vite__mapDeps([249,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,30,5,101,240,241,16,17,167,168,38,79,70,65,66,67,169,124,102,47,129,19,3,243,109,45,35,36,182,232,26,27,37,250,23,183,103,172,25,161,100,55,33,162,34,251,252,245,197,228,52,112,110,128]))),$r=n(()=>a(()=>import("./DashboardSecondRide-eOXyuoZj.js"),__vite__mapDeps([253,2,86,4,21,1,30,5,31,101,254,26,27,17,147,245,3,241,16,250,23,19,6,72,29,47,103,247,104,197,243,183,255,256,257,222]))),zr=n(()=>a(()=>import("./DashboardSecondRideEditor-COag2bEq.js"),__vite__mapDeps([258,2,86,4,21,1,30,5,31,101,35,36,182,32,33,34,29,259,161,100,55,27,17,61,162,241,16,244,250,3,23,19,6,245,103,129,260,261,147,252,197,52,180,262]))
207),Qr=n(()=>a(()=>import("./DashboardSecondRideAdmin-CjfB5caI.js"),__vite__mapDeps([263,2,86,4,21,1,30,5,31,35,36,101,147,3,40,16,17,241,250,23,19,6,197,29,234,256,116]))),Xr=n(()=>a(()=>import("./ToolsHub-IRs44W2c.js"),__vite__mapDeps([264,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,164,165,38,129,70,66,63,127,79,132,71,62,3,5]))),Zr=n(()=>a(()=>import("./LetsRideCyclingClub-CAP-PdHj.js"),__vite__mapDeps([265,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,266,19,3,5,38,79,72,47,65,164,165,267,23,268,16,17,269,34,57,270,110,116,78,42,103,62,77,255,73,102,162,233,271,272,207,142,55,273,274,167,168,70,66,67,169,124,129,75,128,71,63]))),ea=n(()=>a(()=>import("./LetsRideMembers-DlZr7sWD.js"),__vite__mapDeps([275,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,16,17,276,277,278,246,38,47,75,3,5]))),ta=n(()=>a(()=>import("./KolesarskaTrgovinaLjubljana-YC9WxPM_.js"),__vite__mapDeps([279,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,280,5,164,165,281,173,3]))),oa=n(()=>a(()=>import("./KoloPoMeri-D-kLAqRY.js"),__vite__mapDeps([282,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,280,5,164,165,138,140,139,141,183,112,38,156,113,124,3]))),ct=n(()=>a(()=>import("./CustomBikeAtelier-D1KGstlY.js"),__vite__mapDeps([283,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,280,5,164,165,138,140,112,183,38,3]))),ut=n(()=>a(()=>import("./PinarelloBikesSlovenia-DbThh1Ol.js"),__vite__mapDeps([284,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,280,5,190,173,281,138,141,38,112,113,79,124,65,128,3]))),pt=n(()=>a(()=>import("./NichBikesSlovenia-CfmF4jpX.js"),__vite__mapDeps([285,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,173,281,280,5,38,112,113,65,124,79,128,3]))),ia=n(()=>a(()=>import("./PrincetonCarbonworksObroci-Bc5PPWsz.js"),__vite__mapDeps([286,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,142,5,55,164,165,3]))),ra=n(()=>a(()=>import("./KarbonskiObrociPriporocilo-cMv4mUhj.js"),__vite__mapDeps([287,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,142,5,55,164,165,3]))),aa=n(()=>a(()=>import("./PoletnaKolesarskaOprema-B8YlqrIf.js"),__vite__mapDeps([288,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,142,5,55,164,165,3]))),na=n(()=>a(()=>import("./ApprovedFutureRiders-BDRBPKfT.js"),__vite__mapDeps([289,2,4,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,16,17,160,38,47,251,75,48,3,5]))),sa=n(()=>a(()=>import("./AdminFutureRiders-McCyzebF.js"),__vite__mapDeps([290,2,5,291,56,55,30,31,35,36,182,84,230,237,53,40,3,16,17,37,29,1,4,6]))),la=n(()=>a(()=>import("./AdminMemberSocialTasks-C3SOqw-A.js"),__vite__mapDeps([292,2,5,53,40,3,16,17,37,29,237,291,56,55,35,36,31,182,30,84,161,100,27,33,61,162,34,1,4,6]))),da=n(()=>a(()=>import("./AdminSponsorValue-Df18Xfn-.js"),__vite__mapDeps([293,2,53,40,3,16,17,37,29,237,84,31,30,5,35,182,238,1,4,6]))),ca=n(()=>a(()=>import("./AdminSponsorPitchBuilder-QL9ogmC-.js"),__vite__mapDeps([294,2,53,40,3,16,17,37,29,237,30,5,31,35,182,32,33,34,84,147,233,1,4,6]))),ua=n(()=>a(()=>import("./AdminMarathon2027-BZdNUxT_.js"),__vite__mapDeps([295,2,53,40,3,16,17,37,29,237,84,31,35,36,5,161,100,55,27,33,61,162,34,1,4,6]))),pa=n(()=>a(()=>import("./AdminLifecycleFlows-Clrf9Nim.js"),__vite__mapDeps([296,2,16,17,4,1,3,5,6]))),ha=n(()=>a(()=>import("./AdminSocialMedia-3uK3aKSL.js"),__vite__mapDeps([297,2,16,17,147,5,4,234,29,52,1,3,6]))),ma=n(()=>a(()=>import("./AdminPodcast-kN_Wq7ct.js"),__vite__mapDeps([298,2,16,17,4,234,29,1,3,5,6]))),ga=n(()=>a(()=>import("./PhasePasswordPage-BPUQHpM6.js"),__vite__mapDeps([299,2,30,5,31,35,36,44,4,62,29,1,3,6]))),ya=n(()=>a(()=>import("./EventPrepHub-mdYHLfhq.js"),__vite__mapDeps([300,2,164,165,1,301,81,82,83,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,38,302,3,5]))),P=n(()=>a(()=>import("./EventPrepGuidePage-BY-A9u2k.js"),__vite__mapDeps([303,2,301,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,38,302,3,5]))),ba=n(()=>a(()=>import("./Marathon2027Page-DGExc5yW.js"),__vite__mapDeps([304,2,164,165,1,301,81,82,83,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,38,305,16,17,160,3,5]))),fa=n(()=>a(()=>import("./SponsorshipPage-kDsB3X8q.js"),__vite__mapDeps([306,2,164,165,1,301,81,82,83,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,38,305,16,17,160,3,5]))),va=n(()=>a(()=>import("./FutureRidersPlatformPage-BY7AzDSv.js"),__vite__mapDeps([307,2,164,165,1,301,81,82,83,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,38,305,16,17,160,3,5]))),V=n(()=>a(()=>import("./PhasePasswordGate-SOeTt1Lk.js"),__vite__mapDeps([44,2,4]))),Ea=n(()=>a(()=>import("./DashboardClubMember-C7i8VE20.js"),__vite__mapDeps([308,2,4,30,5,31,291,56,55,16,17,40,3,21,1,62,29,38,41,23,19,6,42,43,44,28,45,46,47,48,49,50,51,52,53,37,54,27,34,57,58,59,60,61,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,36,182,161,100,33,162,309,84,35,310,183,172,112,121]))),_a=n(()=>a(()=>import("./DashboardFutureRiders-fl7NexYL.js"),__vite__mapDeps([311,2,4,5,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,35,36,182,84,291,161,100,33,162,32,183,38]))),wa=n(()=>a(()=>import("./Contact-Ci9RiiCx.js"),__vite__mapDeps([312,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,16,17,30,5,32,33,34,35,182,36,161,
207100,55,27,162,147,160,207,164,165,143,95,142,173,169,313,112,255,3]))),ht=n(()=>a(()=>import("./BlogArticle-D-6xVjIG.js"),__vite__mapDeps([314,2,95,3,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,168,38,79,70,65,66,67,169,124,102,47,129,154,155,170,89,5,108,315]))),Ta=n(()=>a(()=>import("./BlogListing-DXJwwi7Z.js"),__vite__mapDeps([316,2,4,3,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,89,5,108]))),Ra=n(()=>a(()=>import("./BlogCresVacation-D9njtFxB.js"),__vite__mapDeps([317,2,3,315,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,5]))),Aa=n(()=>a(()=>import("./OAuthConsent-BtmDDHNx.js"),__vite__mapDeps([318,2,4,16,17,190]))),Ca=n(()=>a(()=>import("./OfferPage-D9XF1QN9.js"),__vite__mapDeps([319,2,4,5,30,31,182,320,56,55,33,57,29,36,16,17,83,103,34,28,255,1,3,6]))),Sa=n(()=>a(()=>import("./ClubInviteConfirm-B7opSp8I.js"),__vite__mapDeps([321,2,4,16,17,103,29,144,183]))),La=n(()=>a(()=>import("./Auth-BX_mEOyT.js"),__vite__mapDeps([322,2,5,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,16,17,190,323,3]))),ka=n(()=>a(()=>import("./ResetPassword-CH8n2lIB.js"),__vite__mapDeps([324,2,5,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,16,17,190,3]))),Ia=n(()=>a(()=>import("./PrivacyPolicy-CSdzd7Sj.js"),__vite__mapDeps([325,2,326,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,164,165,327,3,5]))),Pa=n(()=>a(()=>import("./CookiePolicy-BBAiNXF5.js"),__vite__mapDeps([328,2,326,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,164,165,327,3,5]))),Oa=n(()=>a(()=>import("./TermsPage-oFGh91Go.js"),__vite__mapDeps([329,2,326,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,164,165,330,3,5]))),Da=n(()=>a(()=>import("./ReturnsPage-BJ-er-Ut.js"),__vite__mapDeps([331,2,326,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,164,165,330,3,5]))),xa=n(()=>a(()=>import("./ShippingPage-DcWpuAPh.js"),__vite__mapDeps([332,2,326,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,164,165,330,3,5]))),ja=n(()=>a(()=>import("./LegalNoticePage-CDM6NfY0.js"),__vite__mapDeps([333,2,326,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,164,165,330,3,5]))),Na=n(()=>a(()=>import("./RequireLetsRideAccess-BzMH4VNs.js"),__vite__mapDeps([334,2,3,335,16,17,40,336,86,4,21,1,5,6]))),mt=n(()=>a(()=>import("./RequireLetsRideOnboarding-Cd0kBg2G.js"),__vite__mapDeps([337,2,21,1,338,3,16,17,207,339,340,4,5,6]))),Y=n(()=>a(()=>import("./RequireLetsRideSurface-DenazItp.js"),__vite__mapDeps([341,2,21,1,336,3,16,17,339,4,5,6]))),Ba=n(()=>a(()=>import("./RequireLetsRideBetaWelcome-Bwfp6awd.js"),__vite__mapDeps([342,2,21,1,338,3,16,17,207,336,4,5,6]))),gt=n(()=>a(()=>import("./LetsRideAppShell-gaIZimVT.js"),__vite__mapDeps([343,2,21,1,344,86,4,339,345,3,16,17,346,347,29,109,5,6]))),Ua=n(()=>a(()=>import("./LetsRideOnboarding-BxFiIF_R.js"),__vite__mapDeps([348,2,4,340,5,21,1,339,338,3,16,17,207,349,350,52,29,112,6]))),Ma=n(()=>a(()=>import("./LetsRideActivitiesList-Cde-767N.js"),__vite__mapDeps([351,2,86,4,21,1,339,352,3,16,17,353,354,350,5,6]))),Fa=n(()=>a(()=>import("./LetsRideCreateActivity-C9dShe46.js"),__vite__mapDeps([355,2,356,357,358,30,5,31,35,182,32,33,34,29,359,360,361,16,17,362,363,1,88,103,28,364,365,366,3,367,336,368,350,109,112,369,61,21,339,4,6]))),Wa=n(()=>a(()=>import("./LetsRideActivityDetail-C214KN7R.js"),__vite__mapDeps([370,2,5,86,4,21,1,339,366,3,16,17,364,371,359,360,361,35,30,31,362,363,88,29,103,28,182,32,33,34,320,56,55,57,207,368,336,6]))),Ha=n(()=>a(()=>import("./LetsRidePublicActivityDetail-vCKb34dI.js"),__vite__mapDeps([372,2,86,4,21,1,339,373,3,16,17,364,374,375,5,376,377,350,232,26,27,31,28,29,35,378,60,147,379,380,362,352,103,34,255,381,382,383,273,274,384,88,233,385,386,387,388,353,354,6,112,58,127,368,238,363,45,119,120,197,57,389,347,338,207,47,390,132,391,129,356,357,358,336,109,369,63,251,78]))),Va=n(()=>a(()=>import("./LetsRideOrganiserManage-Q4QFOwfU.js").then(t=>t.L),__vite__mapDeps([392,2,5,86,4,21,1,40,3,16,17,339,366,364,386,350,374,388,183,29,368]))),Ya=n(()=>a(()=>import("./LetsRideNotifications-8crl07yK.js"),__vite__mapDeps([393,2,86,4,21,1,339,345,3,16,17,346,111,29,183,255,78,5,6]))),Ga=n(()=>a(()=>import("./LetsRideNotificationSettings-Cu4QoSvr.js"),__vite__mapDeps([394,2,86,4,21,1,16,17,389,347,29,339,3,346,5,6]))),qa=n(()=>a(()=>import("./LetsRideActivityMessages-C-C7coPl.js"),__vite__mapDeps([395,2,5,86,4,21,1,40,3,16,17,339,366,364,386,350,353,375,376,377,6]))),Ka=n(()=>a(()=>import("./LetsRideAdminTrustSafety-CaIxMIm_.js"),__vite__mapDeps([396,2,4,5,16,17,40,3,30,31,182,36,84,25,26,27,28,29,1,350,376,103,222,48,6]))),Ja=n(()=>a(()=>import("./LetsRideAdminBetaOps-DJKTwZ0q.js"),__vite__mapDeps([397,2,4,5,40,3,16,17,30,31,84,237,35,182,291,56,55,230,350,1,103,29,144,52,222,238,6]))),$a=n(()=>a(()=>import("./LetsRideAttendanceHistory-BWqitGOv.js"),__vite__mapDeps([398,2,4,86,21,1,339,388,16,17,3,350,5,6]))),za=n(()=>a(()=>import("./LetsRideLookingForRiders-qwINl5Rz.js"),__vite__mapDeps([399,2,21,1,339,86,4,338,3,16,17,207,366,364,365,350,5,6]))),Qa=n(()=>a(()=>import("./LetsRideCreateSeries-CepIhT0S.js"),__vite__mapDeps([400,2,21,1,339,401,16,17,350,4,3,5,6]))),Xa=n(()=>a(()=>import("./LetsRideSeriesDetail-CPAD_chh.js"),__vite__mapDeps([402,2,86,4,21,1,339,401,16,17,350,403,404,3,5,6]))),Za=n(()=>a(()=>import("./LetsRideCalendar-DCObl3Su.js"),__vite__mapDeps([405,2,86,4,21,1,339,401,16,17,350,404,3,5,6]))),en=n(()=>a(()=>import("./LetsRideCommunityPage-3iSst9VB.js"),__vite__mapDeps([406,2,86,4,21,1,339,401,16,17,373,3,364,374,350,404,5,6]))),tn=n(()=>a(()=>import("./LetsRideEditSeries-D4GsGBjv.js"),__vite__mapDeps([407,2,401,16,17,350,339,21,1,4,3,5,6]))),on=n(()=>a(()=>import("./LetsRideInviteSeries-CjNcrp4d.js"),__vite__mapDeps([408,2,86,4,21,1,401,16,17,403,339,350,3,5,6]))),rn=n(()=>a(()=>import("./LetsRidePublicSeries-BW-xxVbS.js"),__vite__mapDeps([409,2,86,4,21,1,401,16,17,339,350,336,3,5,6]))),an=n(()=>a(()=>import("./LetsRideLanding-Bx7wbm45.js"),__vite__mapDeps([410,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,143,95,142,5,55,167,168,38,79,70,65,66,67,169,124,102,47,129,19,3,266,72,30,35,182,36,147,335,16,17,40,336,411]))),nn=n(()=>a(()=>import("./LjubljanaCyclingHub-DfFtWgDK.js"),__vite__mapDeps([412,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,266,19,3,5,38,79,72,47,65,413,16,17,112,58,127,63]))),sn=n(()=>a(()=>import("./LjubljanaCyclingRide-CwTLwXuo.js"),__vite__mapDeps([414,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,190,266,19,3,5,38,79,72,47,65,339,413,16,17,109,63,112,58,127]))),ln=n(()=>a(()=>import("./LetsRideRideDeepLink-x9Fbln3n.js"),__vite__mapDeps([415,2,339,4,1,3,5,6]))),dn=n(()=>a(()=>import("./LetsRideBetaWelcome-DteADbl_.js"),__vite__mapDeps([416,2,3,16,17,21,1,339,411,273,4,5,6])));n(()=>a(()=>import("./LetsRideRideSearch-CNugmh0z.js"),__vite__mapDeps([417,2,4,373,3,16,17,364,374,418,86,21,1,339,419,383,273,274,382,420,29,68,246,28,421,5,6])));const cn=n(()=>a(()=>import("./LetsRideMapShell-B3HQLIwZ.js"),__vite__mapDeps([422,2,86,4,21,1,339,357,358,345,3,16,17,346,224,29,47,152,60,360,361,362,367,336,380,124,423,349,373,364,374,424,5,6]))),un=n(()=>a(()=>import("./LetsRideDiscoverV2-BLoFVt9E.js"),__vite__mapDeps([425,2,426,367,362,357,358,6,379,3,147,5,380,16,17,352,232,26,27,31,28,29,1,103,34,255,381,378,374,60,86,4,21,339,234,128,419,383,273,274,373,364,386,350,109,45,424,349,404,336,423,246]))),pn=n(()=>a(()=>import("./LetsRideSavedV2-DhrTMf5k.js"),__vite__mapDeps([427,2,419,383,273,274,16,17,1,373,3,364,374,418,86,4,21,339,382,420,29,68,404,5,6]))),hn=n(()=>a(()=>import("./LetsRideProfileV2-B8ZZFo7d.js"),__vite__mapDeps([428,2,86,4,21,1,344,339,345,3,16,17,346,347,29,374,387,147,5,429,129,77,260,378,60,377,376,350,23,19,6,338,207,336,380,362,424,349,51,34]))),mn=n(()=>a(()=>import("./LetsRidePeople-BQLJ1Mah.js"),__vite__mapDeps([430,2,426,367,362,357,358,6,379,3,147,5,380,16,17,352,232,26,27,31,28,29,1,103,34,255,381,378,374,60,86,4,21,339,234,128,404,384,431,35,88,424,349]))),yt=n(()=>a(()=>import("./LetsRideRiderProfile-B_Yv003a.js"),__vite__mapDeps([432,2,356,357,358,378,16,17,374,60,29,1,65,390,387,3,147,5,132,429,379,380,362,352,232,26,27,31,28,103,34,255,381,431,384,339,375,376,377,350,54,55,56,45,57,4,52,251,257,152,6]))),gn=n(()=>a(()=>import("./LetsRideProfileEdit-DaMjI22N.js"),__vite__mapDeps([433,2,5,371,35,36,31,21,1,338,3,16,17,207,339,4,6]))),yn=n(()=>a(()=>import("./DashboardOverview-Ce1g3ZEV.js"),__vite__mapDeps([434,2,4,41,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,435,309,436,437,438,310,255,38,106,148,103,30,31,36,182,183,439,86,440,441,335,336,352,421]))),bn=n(()=>a(()=>import("./DashboardProfile-BZFNi4Id.js"),__vite__mapDeps([442,2,4,5,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,443,277,309,429,103,260,38]))),fn=n(()=>a(()=>import("./DashboardPerformanceProfile-CqOE5Ned.js"),__vite__mapDeps([444,2,4,5,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,309,180,38]))),vn=n(()=>a(()=>import("./DashboardKitSetup--xA4BJ5G.js"),__vite__mapDeps([445,2,5,4,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,148,446,82,117,447,149,150,151,116,102,109,38,123,448,152,260,104,103,180,88]))),En=n(()=>a(()=>import("./DashboardBikeGarage-BKrq8F9b.js"),__vite__mapDeps([449,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,436,86,129,38,369,128,450,448,103,441,152]))),_n=n(()=>a(()=>import("./DashboardBikeGarageDetail-Cek7vfTS.js"),__vite__mapDeps([451,2,4,5,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,436,450,448,103,86,441,128,38,126,111,116,130,197,452,152,440,420,369]))),wn=n(()=>a(()=>import("./DashboardSavedSetups-BLv2VvlY.js"),__vite__mapDeps([453,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,440,454,441,234,260,152]))),Tn=n(()=>a(()=>import("./DashboardSavedSetupDetail-CEj3jubh.js"),__vite__mapDeps([455,2,4,5,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,440,454,441,234,369,233]))),Rn=n(()=>a(()=>import("./DashboardRecommendations-DlRc1KHS.js"),__vite__mapDeps([456,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,439,86,436,440,441,38,82]))),An=n(()=>a(()=>import("./DashboardServiceReminders-B7dvyCX7.js"),__vite__mapDeps([457,2,86,4,21,1,41,40,3,16,17,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,452,448,436,441,38,369,260,255]))),Cn=n(()=>a(()=>import("./DashboardTrainingLog-B_vlQn1S.js"),__vite__mapDeps([458,2,86,4,21,1,41,40,3,16,17,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,459,30,31,35,36,182,161,100,33,162,436,441,147,84,369,260,25,26,197,183,460,152]))),Sn=n(()=>a(()=>import("./DashboardTrainingLogNew-Dg4hgr3q.js"),__vite__mapDeps([461,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,459,30,31,35,36,182,161,100,33,162,436,441,147]))),Ln=n(()=>a(()=>import("./DashboardOrders-CnGOfrrn.js"),__vite__mapDeps([462,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,437,438,310,463]))),kn=n(()=>a(()=>import("./DashboardStrava-BTYcrfhR.js"),__vite__mapDeps([464,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,144,169,103,260,234,222]))),In=n(()=>a(()=>import("./DashboardWishlist-CxrjLwSP.js"),__vite__mapDeps([465,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,86,30,31,102,260]))),Pn=n(()=>a(()=>
207import("./DashboardRewards-DePWZOew.js"),__vite__mapDeps([466,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,147,222,233,255,144]))),On=n(()=>a(()=>import("./DashboardTraining-Dpm0VhPr.js"),__vite__mapDeps([467,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,86,38,421]))),Dn=n(()=>a(()=>import("./DashboardClub-DDmjW-bQ.js"),__vite__mapDeps([468,2,4,41,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,38,24,30,31,435,309,133,469,421,255,112,127,251,220,238,470,18,128,443,277,471,460,234,118,86,182,36,103,115,183,463,222,472,429]))),xn=n(()=>a(()=>import("./DashboardClubSettings-C0d-vJBY.js"),__vite__mapDeps([473,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,474,475,103,347,222,128,129,381,169]))),jn=n(()=>a(()=>import("./DashboardClubRidePhotos-Cyqk6wFD.js"),__vite__mapDeps([476,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,470,18,103,238]))),Nn=n(()=>a(()=>import("./DashboardClubRideFuel-DSFkMq_C.js"),__vite__mapDeps([477,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,178,81,82,83,84,31,85,86,87,88,90,91,161,
207100,33,162,30,35,163,164,165,166,179,38,116,180]))),Bn=n(()=>a(()=>import("./DashboardClubTrainingPlan-C5Q5WRUp.js"),__vite__mapDeps([478,2,35,4,41,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,25,26,182,36,479,233,234,103,385,480,481,260,116,180,247,122,128,38,369,238,309,124,222,482,421,129]))),Un=n(()=>a(()=>import("./DashboardClubSharedPlan-BSBhNpzE.js"),__vite__mapDeps([483,2,4,5,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,291,479,484,475,277,182,103,128,369,260,35,129,474,152,485,486,487,480,25,26,481,116,180,162,130,183,463,222,36,122,421,146,238,381,488,347,233]))),Mn=n(()=>a(()=>import("./DashboardClubRiderProfile-DYCLmlS_.js"),__vite__mapDeps([489,2,4,41,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,484,475,486,103,488,381,129]))),Fn=n(()=>a(()=>import("./DashboardClubMyRiderProfile-aKzwgs8u.js"),__vite__mapDeps([490,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,441,103,197,104,491,127,278,443,277,276,238,429]))),Wn=n(()=>a(()=>import("./DashboardClubFollowing-_Ybhh33g.js"),__vite__mapDeps([492,2,4,41,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,441,276,277,103,488,104]))),Hn=n(()=>a(()=>import("./DashboardClubSavedPlans-B-L-r_97.js"),__vite__mapDeps([493,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,441,103,104]))),Vn=n(()=>a(()=>import("./DashboardClubBrowsePlans-u72CD1R9.js"),__vite__mapDeps([494,2,4,41,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,486,475,129,30,31,35,103,246]))),Yn=n(()=>a(()=>import("./ClubTrainingPlanTeaser-036x7CBL.js"),__vite__mapDeps([495,2,4,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,479,16,17,487,23,3,19,5,103,38,62]))),Gn=n(()=>a(()=>import("./ClubTrainingPlanAliasRedirect-BT0ji7hh.js"),__vite__mapDeps([496,2,4,1]))),qn=n(()=>a(()=>import("./DashboardClubFtp-CI_9HhuL.js"),__vite__mapDeps([497,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,35,30,31,166,103,180]))),Kn=n(()=>a(()=>import("./DashboardClubFeedback-BgQXEpTn.js"),__vite__mapDeps([498,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,35,182,30,31,309,144,38,103,172]))),Jn=n(()=>a(()=>import("./DashboardClubFeedbackAdmin-rvEkP9JN.js"),__vite__mapDeps([499,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,35,182,30,31,238,103,122,260,152]))),$n=n(()=>a(()=>import("./BuildsArchive-kYfV-T-C.js"),__vite__mapDeps([500,2,86,4,21,1,501,502,3,16,17,81,82,83,84,31,85,74,29,87,43,61,88,60,28,6,90,91,173,503,137,138,139,140,141,198,203,200,165,5]))),zn=n(()=>a(()=>import("./BuildDetail-BJeyTp_B.js"),__vite__mapDeps([504,2,501,86,4,21,1,502,3,16,17,81,82,83,84,31,85,74,29,87,43,61,88,60,28,6,90,91,173,505,506,19,5,175,176,38,358,507,508,143,95,142,55]))),Qn=n(()=>a(()=>import("./ComparisonsArchive-BtIQ_EHI.js"),__vite__mapDeps([509,2,501,86,4,21,1,502,3,16,17,81,82,83,84,31,85,74,29,87,43,61,88,60,28,6,90,91,173,5]))),Xn=n(()=>a(()=>import("./ComparisonDetail-BX6vkdCO.js"),__vite__mapDeps([510,2,501,86,4,21,1,502,3,16,17,81,82,83,84,31,85,74,29,87,43,61,88,60,28,6,90,91,173,505,506,19,5,175,176,38,358,508,143,95,142,55]))),Zn=n(()=>a(()=>import("./GuidesIndex-BumzOtfP.js"),__vite__mapDeps([511,2,501,86,4,21,1,502,3,16,17,81,82,83,84,31,85,74,29,87,43,61,88,60,28,6,90,91,173,503,137,138,139,140,141,198,203,200,165,155,5]))),es=n(()=>a(()=>import("./GuideTopicRoute-VEpZq-2_.js"),__vite__mapDeps([512,2,501,86,4,21,1,502,3,16,17,81,82,83,84,31,85,74,29,87,43,61,88,60,28,6,90,91,173,506,19,5,175,176,38,358,143,95,142,55,89,513,190,154,155]))),ts=n(()=>a(()=>import("./GuideDetailRoute-CO66-swu.js"),__vite__mapDeps([514,2,501,86,4,21,1,502,3,16,17,81,82,83,84,31,85,74,29,87,43,61,88,60,28,6,90,91,173,505,506,19,5,175,176,38,358,507,508,143,95,142,55,89,513,190,154,155]))),os=n(()=>a(()=>import("./BrandsIndex-BbTRsbAQ.js"),__vite__mapDeps([515,2,501,86,4,21,1,502,3,16,17,81,82,83,84,31,85,74,29,87,43,61,88,60,28,6,90,91,173,5]))),is=n(()=>a(()=>import("./BrandHubPage-BXr6G2zU.js"),__vite__mapDeps([516,2,501,86,4,21,1,502,3,16,17,81,82,83,84,31,85,74,29,87,43,61,88,60,28,6,90,91,173,505,506,19,5,175,176,38,358,143,95,142,55]))),rs=n(()=>a(()=>import("./DashboardContentStudio-DvZj2f_9.js"),__vite__mapDeps([517,2,4,40,3,16,17,518,502,30,5,31,1,6]))),as=n(()=>a(()=>import("./DashboardContentEditor-yt1QNBrj.js"),__vite__mapDeps([519,2,4,40,3,16,17,518,502,30,5,31,35,182,36,147,176,1,6]))),ns=n(()=>a(()=>import("./DashboardOrganicLeads-kBsRyNdr.js"),__vite__mapDeps([520,2,40,3,16,17,291,5,56,55,182,30,31,1,4,6])
207)),ss=n(()=>a(()=>import("./DashboardClubMembers-CENTBa7o.js"),__vite__mapDeps([521,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,443,277,38,278,276,91,491,127,30,31,103,238,429,122,256,222,88,158]))),ls=n(()=>a(()=>import("./DashboardClubEvents-BEPNmQaV.js"),__vite__mapDeps([522,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,309,469,523,103,238,18,421,112,109,127,234,224,524,218,169,233,25,26,320,33,182,255,525,471,133]))),ds=n(()=>a(()=>import("./DashboardClubEventsAdmin-Dt0uRdJv.js"),__vite__mapDeps([526,2,5,16,17,40,3,231,30,31,35,182,36,259,33,469,523,103,29,34,28,47,238,222,152,64,472,260,224,180,421,369,1,4,6]))),cs=n(()=>a(()=>import("./DashboardClubWeekendAdmin-CHIZL8TW.js"),__vite__mapDeps([527,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,255,525,381,238]))),us=n(()=>a(()=>import("./DashboardClubMarathonDiscountsAdmin-7HVBpXYP.js"),__vite__mapDeps([528,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,524,152,529,256,122,260,103,180]))),ps=n(()=>a(()=>import("./DashboardClubMarathonSignupClicks-B-UnHIYo.js"),__vite__mapDeps([530,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,238,103,169,260]))),hs=n(()=>a(()=>import("./DashboardClubMembersAdmin-CjSuH0Wd.js"),__vite__mapDeps([531,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,35,36,276,277,88,103,102,238,381,255,313,122,256,369,481,169,463,183,260]))),ms=n(()=>a(()=>import("./DashboardFreeJerseyGrants-CMMwmytP.js"),__vite__mapDeps([532,2,5,16,17,40,3,41,4,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,84,103,222,88,102,183,110,270,255]))),gs=n(()=>a(()=>import("./DashboardLeaderboardAdmin-XViNzrLL.js"),__vite__mapDeps([533,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79]))),ys=n(()=>a(()=>import("./DashboardStravaCompliance-DM3U7Pr8.js"),__vite__mapDeps([534,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,256,260]))),bt=n(()=>a(()=>import("./DashboardMonthlyLeaderboardAudit-CWV38vU_.js"),__vite__mapDeps([535,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79]))),bs=n(()=>a(()=>import("./DashboardWaitlist-ZdUGHZq-.js"),__vite__mapDeps([536,2,4,5,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,35,30,31,161,100,33,162,230,25,26,36,182,537,88,103,152,259,222,233,369,122,172,111,247,232,180,169,485,183,255,197,238,257,260]))),fs=n(()=>a(()=>import("./DashboardWeeklyRides-B77IOBd-.js"),__vite__mapDeps([538,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,18,152,103,472,260,122,256,144,180]))),vs=n(()=>a(()=>import("./DashboardClubBeginnerRidesAdmin-DwgItWEJ.js"),__vite__mapDeps([539,2,16,17,41,4,40,3,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,32,33,35,36,182,540,260]))),Es=n(()=>a(()=>import("./DashboardClubBeginnerRides-hOyMRXPg.js"),__vite__mapDeps([541,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,540,183,120,122,228,255,112,463,103]))),_s=n(()=>a(()=>import("./DashboardEmailLog-CmRkk9u0.js"),__vite__mapDeps([542,2,5,27,17,32,33,34,29,41,4,40,3,16,21,1,23,19,6,42,43,44,28,45,46,47,48,49,50,51,52,53,37,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,35,30,31,161,100,162,230,103,525,116,256,122,130,529,238,183,197,257,88,169,255]))),ws=n(()=>a(()=>import("./DashboardClubSubscribers-D8htRLzX.js"),__vite__mapDeps([543,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,103,216,238,183,463,271,272,35,161,100,33,162,230,88,109]))),Ts=n(()=>a(()=>import("./DashboardClubKit-CnlBmOhA.js"),__vite__mapDeps([544,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,537,88,103,152,529,122,256,260]))),Rs=n(()=>a(()=>import("./DashboardEmailPreview-BmfHtSQu.js"),__vite__mapDeps([545,2,4,30,5,31,35,161,100,55,27,17,33,61,29,162,34,84,40,3,16,21,1,546,25,26,28,182,169,103,116,88,45,197,183,172,180,47,52,271,238,233,6]))),As=n(()=>a(()=>import("./DashboardBikeOrders-Bqs5rxbE.js"),__vite__mapDeps([547,2,5,231,16,17,485,29,222,103,61,45,537,88,152,225,60,40,3,548,549,254,26,27,30,31,65,260,28,169,172,472,122,256,1,4,6])
207)),Cs=n(()=>a(()=>import("./DashboardOrdersAdmin-O_HzYe2U.js"),__vite__mapDeps([550,2,4,16,17,40,3,231,30,5,31,35,182,232,26,27,28,29,1,254,147,546,110,183,197,103,180,172,222,59,111,391,347,169,122,6]))),Ss=n(()=>a(()=>import("./DashboardSeoTools-C2HKZ24_.js"),__vite__mapDeps([551,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,182,36,32,33,197,222,169,35,103,172,183,259]))),Ls=n(()=>a(()=>import("./DashboardGscMonitor-z8HXWRK8.js"),__vite__mapDeps([552,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,35,36,103,222,553,88,234]))),ks=n(()=>a(()=>import("./DashboardWebhookTester-BKjernDL.js"),__vite__mapDeps([554,2,5,30,31,84,32,33,34,29,41,4,40,3,16,17,21,1,23,19,6,42,43,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,103,227,116,269,172,222,260,183,463,255]))),Is=n(()=>a(()=>import("./DashboardShopifyWebhooks-25lO8a3s.js"),__vite__mapDeps([555,2,5,30,31,84,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,103,222,463,197,183,234]))),Ps=n(()=>a(()=>import("./DashboardStravaWebhooks-DIl_WCnp.js"),__vite__mapDeps([556,2,5,30,31,84,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,103,222,183,463,152,260]))),Os=n(()=>a(()=>import("./DashboardStravaReviewPrep-DEv9QzCA.js"),__vite__mapDeps([557,2,4,5,84,31,30,32,33,34,29,41,40,3,16,17,21,1,23,19,6,42,43,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,103,183,463,234,233]))),Ds=n(()=>a(()=>import("./DashboardShopifySeoBulk-DygoQt_K.js"),__vite__mapDeps([558,2,5,30,31,84,310,259,33,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,269,222,103,183,197]))),xs=n(()=>a(()=>import("./DashboardFaviconPreview-DZIRvtja.js"),__vite__mapDeps([559,2,40,3,16,17,41,4,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,103,222,197,183]))),js=n(()=>a(()=>import("./DashboardAbandonedCheckouts-CGh-hiDV.js"),__vite__mapDeps([560,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,35,30,31,161,100,33,162,230,232,26,103,172,255,183,88,122,234,233]))),Ns=n(()=>a(()=>import("./DashboardWaitlistDemand-D4K1XiXN.js"),__vite__mapDeps([561,2,4,5,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,35,30,31,161,100,33,162,230,103,111,125,88,234]))),Bs=n(()=>a(()=>import("./DashboardContactMessages-C1pLixOb.js"),__vite__mapDeps([562,2,16,17,231,35,30,5,31,84,232,26,27,28,29,1,230,147,222,88,122,116,34,233,169,234,3,4,6]))),Us=n(()=>a(()=>import("./DashboardBuildRequests-DtOxQXul.js"),__vite__mapDeps([563,2,5,231,40,3,16,17,35,30,31,84,232,26,27,28,29,1,230,103,222,88,122,109,45,233,169,234,79,4,6]))),Ms=n(()=>a(()=>import("./DashboardReferrals-C2AH6rQx.js"),__vite__mapDeps([564,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,233,128,169,385,255,183]))),Fs=n(()=>a(()=>import("./DashboardShippingTest-DzS-IU0L.js"),__vite__mapDeps([565,2,30,5,31,84,182,446,82,1,222,29,103,59,234,34,57,3,4,6]))),Ws=n(()=>a(()=>import("./DashboardPerfBudget-DneiYnQh.js"),__vite__mapDeps([566,2,3,16,17,41,4,40,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,197,125,567,183]))),Hs=n(()=>a(()=>import("./DashboardBlankPageReports-ETYzOgsB.js"),__vite__mapDeps([568,2,16,17,40,3,30,5,31,222,29,260,1,4,6])
207)),Vs=n(()=>a(()=>import("./DashboardSettings-BoMM3iXr.js"),__vite__mapDeps([569,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,259,33,36,31,30,35,438,309,323,169,347,238,260]))),Ys=n(()=>a(()=>import("./DashboardKitMannequinOverlays-CxjnCNlp.js"),__vite__mapDeps([570,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,35,36,259,33,182,99,100,260]))),Gs=n(()=>a(()=>import("./DashboardNews-CZfj1TsF.js"),__vite__mapDeps([571,2,3,16,17,21,1,4,41,40,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,234,224,572,220]))),qs=n(()=>a(()=>import("./DashboardAnnouncements-cCxXTD1B.js"),__vite__mapDeps([573,2,16,17,40,3,41,4,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,220,152,260]))),Ks=n(()=>a(()=>import("./DashboardSocialMediaImages-BTn62kYM.js"),__vite__mapDeps([574,2,575,16,17,40,3,41,4,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,32,33,35,36,182,103,261,222,180,233,238,260]))),Js=n(()=>a(()=>import("./DashboardSeoGeo-D1pBF3Cr.js"),__vite__mapDeps([576,2,4,5,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,84,291,35,161,100,33,162,230,25,26,233,238,183,182,32,147,222,260,152,36,254,197,234,103,38,133,122,259,172,463,472,485,111,169,460,146,482,180,85,83,262,88,102,112,223,118]))),$s=n(()=>a(()=>import("./DashboardJerseyVote-nEwBQsoP.js"),__vite__mapDeps([577,2,16,17,40,3,41,4,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,268,230,103,238,102,472,152,260,183,225,234,369,256,122]))),zs=n(()=>a(()=>import("./DashboardJerseyVoteMember-BOZ_cMcI.js"),__vite__mapDeps([578,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,267,268,86,269,270,110,116,38,83,103,255,102,162,150]))),Qs=n(()=>a(()=>import("./DashboardJerseyPreorderSetup-CJf6Z3nf.js"),__vite__mapDeps([579,2,5,16,17,40,3,41,4,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,84,103,183,197,234,222]))),Xs=n(()=>a(()=>import("./DashboardJerseyPreorders-CqWk4rsL.js"),__vite__mapDeps([580,2,5,16,17,40,3,41,4,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,84,102,88,222,103,234,183,197,169]))),Zs=n(()=>a(()=>import("./DashboardMyPreorders-tDcAW0fH.js"),__vite__mapDeps([581,2,4,41,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,84,31,438,103,463,197,169,183,255]))),el=n(()=>a(()=>import("./DashboardStyleStudioKeywords-CcSWOxsj.js"),__vite__mapDeps([582,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,447,103,152,180]))),tl=n(()=>a(()=>import("./DashboardHeatmap-EfeoixI3.js"),__vite__mapDeps([583,2,16,17,40,3,237,30,5,31,103,29,183,463,144,1,4,6]))),ol=n(()=>a(()=>import("./DashboardClickHeatmap-B8Jf5HoP.js"),__vite__mapDeps([584,2,16,17,40,3,237,30,5,31,35,36,103,29,1,4,6]))),il=n(()=>a(()=>import("./DashboardToolAnalytics-CVLAW3WF.js"),__vite__mapDeps([585,2,16,17,40,3,166,4,553,1,5,6]))),rl=n(()=>a(()=>import("./DashboardRateMyBike-hpLO2_Fy.js"),__vite__mapDeps([586,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,151,150,309,103,472,260,183,129,238]))),al=n(()=>a(()=>import("./DashboardAiCommandCenter-gWijBr39.js"),__vite__mapDeps([587,2,53,40,3,16,17,37,29,41,4,21,1,23,19,5,6,42,43,44,28,45,46,47,48,49,50,51,52,54,5
2075,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,153,104,588,197,255,102,222,460,234,88]))),nl=n(()=>a(()=>import("./DashboardConversionFunnel-CyUuzSP3.js"),__vite__mapDeps([589,2,16,17,40,3,41,4,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,84,230,103,238,125,567,38,197,88,385,588,169]))),sl=n(()=>a(()=>import("./DashboardClubConsent-BezTYAp7.js"),__vite__mapDeps([590,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,35,36,32,33,24,183]))),ll=n(()=>a(()=>import("./DashboardClubLicense-WNJ-se5b.js"),__vite__mapDeps([591,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,448,238,472,103,183,255]))),dl=n(()=>a(()=>import("./DashboardClubLicenseAdmin-Zc5e3s09.js"),__vite__mapDeps([592,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,103,183,238,172]))),cl=n(()=>a(()=>import("./DashboardClubConsentAdmin-Dqws7S_-.js"),__vite__mapDeps([593,2,41,4,40,3,16,17,21,1,23,19,5,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,35,238,88]))),ul=n(()=>a(()=>import("./DashboardClubSettingsAdmin-EZarno2o.js"),__vite__mapDeps([594,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,35,30,31,128,103,180]))),pl=n(()=>a(()=>import("./DashboardClubValueAdmin-Bq8-QjSr.js"),__vite__mapDeps([595,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,35,182,36,291,152,103,180,596,260]))),hl=n(()=>a(()=>import("./DashboardClubInteractiveAdmin-D8aui-Y0.js"),__vite__mapDeps([597,2,5,41,4,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,30,31,35,182,36,291,152,103,596,260,180]))),ml=n(()=>a(()=>import("./DashboardWarrantyClaims-0zeW2CFA.js"),__vite__mapDeps([598,2,4,231,40,3,16,17,599,600,35,30,5,31,161,100,55,27,33,61,29,162,34,230,21,1,103,152,222,88,197,122,6]))),gl=n(()=>a(()=>import("./DashboardWarrantyClaimDetail-RVbwgubg.js"),__vite__mapDeps([601,2,4,5,41,40,3,16,17,21,1,23,19,6,42,43,29,44,28,45,46,47,48,49,50,51,52,53,37,54,55,27,56,34,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,599,600,30,31,35,182,161,100,33,162,548,549,103,238,152,172]))),yl=n(()=>a(()=>import("./DashboardWarrantyNewAdmin-DbmmM45P.js"),__vite__mapDeps([602,2,4,603,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,16,17,30,5,35,36,182,161,100,55,27,33,162,34,32,600,604,179,160,3,40,41,23,19,42,44,45,46,47,48,49,50,51,52,53,37,54,56,57,58,59,62,63,64,65,66,67,68,69,70,71,72,73,75,76,77,78,79,103]))),bl=n(()=>a(()=>import("./DashboardWarranty-Btx8IH7y.js"),__vite__mapDeps([605,2,603,4,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,16,17,30,5,35,36,182,161,100,55,27,33,162,34,32,600,604,179,160,3]))),fl=n(()=>a(()=>import("./WarrantyClaim-CqeJp7DF.js"),__vite__mapDeps([603,2,4,81,82,83,1,84,31,85,74,29,86,21,87,43,61,88,60,28,6,90,91,16,17,30,5,35,36,182,161,100,55,27,33,162,34,32,600,604,179,160,3]))),vl=n(()=>a(()=>import("./WarrantyTrack-BMG7sL-v.js"),__vite__mapDeps([606,2,81,82,83,1,84,31,85,74,29,86,4,21,87,43,61,88,60,28,6,90,91,16,17,30,5,35,36,600,604,179,190,3]))),El=n(()=>a(()=>import("./CookieConsent-Bf_TtZ2Q.js"),__vite__mapDeps([607,2,86,4,21,1,358,608,3,5,6]))),_l=n(()=>a(()=>import("./DiscountPopup-Czg8Z-8t.js"),__vite__mapDeps([609,2,16,17,147,5,86,4,21,1,83,610,6,28,29,207,3]))),wl=n(()=>a(()=>import("./CompareDrawer-Br25fWN9.js"),__vite__mapDeps([611,2,98,21,1,4,105,29,28,38,3,5,6]))),Tl=n(()=>a(()=>import("./ComparePage-DdLXsUTw.js"),__vite__mapDeps([612,2,98,4,107,21,1,81,82,83,84,31,85,74,29,86,87,43,61,88,60,28,6,90,91,5,52,103,3]))),Rl=()=>{const{t}=Oe();Bi(),Ji(),Zi(),tr(),ur();const o=nr(1500);return e.jsxs(e.Fragment,{children:[e.jsx(or,{}
207),e.jsx("a",{href:"#main-content",className:"sr-only focus:not-sr-only focus:absolute focus:top-0 focus:left-0 focus:z-[999] focus:bg-primary focus:text-primary-foreground focus:px-4 focus:py-2 focus:text-sm",children:t("nav.skipToContent","Skip to content")}),e.jsx(qo,{}),e.jsx(cr,{children:e.jsx(y.Suspense,{fallback:null,children:e.jsxs(so,{children:[e.jsx(i,{path:"/",element:e.jsx(N,{})}),e.jsx(i,{path:"/product/:handle",element:e.jsx(N,{restPath:`/product/${window.location.pathname.split("/product/")[1]||""}`})}),e.jsx(i,{path:"/collections/:handle",element:e.jsx(N,{restPath:`/collections/${window.location.pathname.split("/collections/")[1]||""}`})}),e.jsx(i,{path:"/pages/*",element:e.jsx(N,{restPath:window.location.pathname})}),e.jsx(i,{path:"/cycling/*",element:e.jsx(N,{restPath:window.location.pathname})}),e.jsx(i,{path:"/blogs/:blogHandle/:articleHandle",element:e.jsx(N,{restPath:`/blogs/${window.location.pathname.split("/blogs/")[1]||""}`})}),e.jsx(i,{path:"/blogs/:blogHandle",element:e.jsx(N,{restPath:`/blogs/${window.location.pathname.split("/blogs/")[1]||""}`})}),e.jsx(i,{path:"/.lovable/oauth/consent",element:e.jsx(Aa,{})}),e.jsx(i,{path:"/offer/:token",element:e.jsx(Ca,{})}),e.jsx(i,{path:"/club/invite",element:e.jsx(Sa,{})}),e.jsx(i,{path:"/club/training-plans/:slug",element:e.jsx(Gn,{})}),e.jsx(i,{path:"/admin/monthly-leaderboard-audit",element:e.jsx(Ae,{children:e.jsx("div",{className:"min-h-screen bg-background p-6 md:p-10",children:e.jsx(bt,{})})})}),e.jsxs(i,{path:"/:lang",element:e.jsx(xo,{}),children:[e.jsx(i,{index:!0,element:e.jsx(hr,{})}),e.jsx(i,{path:"product/:handle",element:e.jsx(mr,{})}),e.jsx(i,{path:"collections/:handle",element:e.jsx(gr,{})}),e.jsx(i,{path:"pages/tools",element:e.jsx(Xr,{})}),e.jsx(i,{path:"pages/bike-fit-fixer",element:e.jsx(yr,{})}),e.jsx(i,{path:"pages/tire-pressure-calculator",element:e.jsx(br,{})}),e.jsx(i,{path:"pages/ride-fuel-calculator",element:e.jsx(fr,{})}),e.jsx(i,{path:"pages/monthly-cycling-training-plan-generator",element:e.jsx(vr,{})}),e.jsx(i,{path:"pages/wheel-recommendation",element:e.jsx(Er,{})}),e.jsx(i,{path:"pages/wheel-recommendation-thank-you",element:e.jsx(_r,{})}),e.jsx(i,{path:"pages/start-your-custom-bike-build",element:e.jsx(wr,{})}),e.jsx(i,{path:"pages/custom-build-thank-you",element:e.jsx(Tr,{})}),e.jsx(i,{path:"pages/upgrade-finder",element:e.jsx(xr,{})}),e.jsx(i,{path:"pages/upgrade-finder-thank-you",element:e.jsx(jr,{})}),e.jsx(i,{path:"pages/ask-approved",element:e.jsx(Or,{})}),e.jsx(i,{path:"pages/ask-approved-thank-you",element:e.jsx(Dr,{})}),e.jsx(i,{path:"pages/bike-fit-fixer-thank-you",element:e.jsx(Nr,{})}),e.jsx(i,{path:"pages/custom-bike-build",element:e.jsx(h,{to:"/:lang/pages/start-your-custom-bike-build",keepSearch:!0})}),e.jsx(i,{path:"pages/custom-bike-build-library",element:e.jsx(Rr,{})}),e.jsx(i,{path:"pages/builds/:slug",element:e.jsx(Ar,{})}),e.jsx(i,{path:"pages/rider-stories",element:e.jsx(Cr,{})}),e.jsx(i,{path:"pages/buying-guides",element:e.jsx(kr,{})}),e.jsx(i,{path:"pages/buying-guide/:slug",element:e.jsx(Sr,{})}),e.jsx(i,{path:"pages/:phase5Slug",element:e.jsx(Lr,{})}),e.jsx(i,{path:"pages/compare",element:e.jsx(Pr,{})}),e.jsx(i,{path:"pages/compare/:slug",element:e.jsx(Ir,{})}),e.jsx(i,{path:"pages/club-training-plan/:slug",element:e.jsx(Yn,{})}),e.jsx(i,{path:"pages/letsride-cycling-club",element:e.jsx(Zr,{})}),e.jsx(i,{path:"pages/letsride-members",element:e.jsx(ea,{})}),e.jsx(i,{path:"letsride",element:e.jsx(an,{})}),e.jsx(i,{path:"letsride/series/:shareSlug",element:e.jsx(rn,{})}),e.jsx(i,{path:"letsride/r/:publicId",element:e.jsx(ln,{})}),e.jsx(i,{path:"cycling/ljubljana",element:e.jsx(nn,{})}),e.jsx(i,{path:"cycling/ljubljana/rides/:publicId",element:e.jsx(sn,{})}),e.jsx(i,{path:"compare",element:e.jsx(Tl,{})}),e.jsx(i,{path:"second-ride",element:e.jsx(Kr,{})}),e.jsx(i,{path:"second-ride/bikes",element:e.jsx(H,{category:"bikes"})}),e.jsx(i,{path:"second-ride/frames",element:e.jsx(H,{category:"frames"})}),e.jsx(i,{path:"second-ride/wheels",element:e.jsx(H,{category:"wheels"})}),e.jsx(i,{path:"second-ride/components",element:e.jsx(H,{category:"components"})}),e.jsx(i,{path:"second-ride/clothing",element:e.jsx(H,{category:"clothing"})}),e.jsx(i,{path:"second-ride/accessories",element:e.jsx(H,{category:"accessories"})}),e.jsx(i,{path:"second-ride/:id",element:e.jsx(Jr,{})}),e.jsx(i,{path:"builds",element:e.jsx($n,{})}),e.jsx(i,{path:"builds/:slug",element:e.jsx(zn,{})}),e.jsx(i,{path:"comparisons",element:e.jsx(Qn,{})}),e.jsx(i,{path:"compare/:slug",element:e.jsx(Xn,{})}),e.jsx(i,{path:"guides",element:e.jsx(Zn,{})}),e.jsx(i,{path:"guides/:topic",element:e.jsx(es,{})}),e.jsx(i,{path:"guides/:topic/:slug",element:e.jsx(ts,{})}),e.jsx(i,{path:"brands",element:e.jsx(os,{})}),e.jsx(i,{path:"brands/:slug",element:e.jsx(is,{})}),e.jsx(i,{path:"pages/kolesarska-trgovina-ljubljana",element:e.jsx(ta,{})}),e.jsx(i,{path:"pages/ljubljana-cycling-store",element:e.jsx(h,{to:"/:lang/pages/kolesarska-trgovina-ljubljana"})}),e.jsx(i,{path:"pages/kolo-po-meri",element:e.jsx(oa,{})}),e.jsx(i,{path:"pages/custom-bike-atelier",element:e.jsx(ct,{})}),e.jsx(i,{path:"pages/kolo-po-meri-atelier",element:e.jsx(ct,{})}),e.jsx(i,{path:"pages/princeton-carbonworks-obroci",element:e.jsx(ia,{})}),e.jsx(i,{path:"pages/karbonski-obroci-priporocilo",element:e.jsx(ra,{})}),e.jsx(i,{path:"pages/poletna-kolesarska-oprema",element:e.jsx(aa,{})}),e.jsx(i,{path:"pages/approved-future-riders",element:e.jsx(na,{})}),e.jsx(i,{path:"pages/pinarello-bikes-slovenia",element:e.jsx(ut,{locale:"en"})}),e.jsx(i,{path:"pages/pinarello-kolesa-slovenija",element:e.jsx(ut,{locale:"sl"})}),e.jsx(i,{path:"pages/nich-bikes-slovenia",element:e.jsx(pt,{locale:"en"})}),e.jsx(i,{path:"pages/nich-kolesa-slovenija",element:e.jsx(pt,{locale:"sl"})}),e.jsx(i,{path:"pages/media",element:e.jsx(h,{to:"/:lang/blogs/blog"})}),e.jsx(i,{path:"pages/youtube",element:e.jsx(h,{to:"/:lang/blogs/blog"})}),e.jsx(i,{path:"pages/podcast",element:e.jsx(h,{to:"/:lang/blogs/blog"})}),e.jsx(i,{path:"pages/build-videos",element:e.jsx(h,{to:"/:lang/builds",keepSearch:!0})}),e.jsx(i,{path:"pages/product-review-videos",element:e.jsx(h,{to:"/:lang/blogs/blog"})}),e.jsx(i,{path:"pages/club-ride-videos",element:e.jsx(h,{to:"/:lang/blogs/blog"})}),e.jsx(i,{path:"pages/event-prep",element:e.jsx(ya,{})}),e.jsx(i,{path:"pages/maraton-franja-setup",element:e.jsx(P,{slugOverride:"maraton-franja-setup"})}),e.jsx(i,{path:"pages/spring-training-setup",element:e.jsx(P,{slugOverride:"spring-training-setup"})}),e.jsx(i,{path:"pages/summer-heat-riding-setup",element:e.jsx(P,{slugOverride:"summer-heat-riding-setup"})}),e.jsx(i,{path:"pages/winter-base-training-setup",element:e.jsx(P,{slugOverride:"winter-base-training-setup"})}),e.jsx(i,{path:"pages/gran-fondo-preparation",element:e.jsx(P,{slugOverride:"gran-fondo-preparation"})}),e.jsx(i,{path:"pages/fast-group-ride-setup",element:e.jsx(P,{slugOverride:"fast-group-ride-setup"})}),e.jsx(i,{path:"pages/climbing-marathon-setup",element:e.jsx(P,{slugOverride:"climb
207ing-marathon-setup"})}),e.jsx(i,{path:"pages/il-lombardia-travel-rider-guide",element:e.jsx(P,{slugOverride:"il-lombardia-travel-rider-guide"})}),e.jsx(i,{path:"pages/approved-cycling-marathon-2027",element:e.jsx(ba,{})}),e.jsx(i,{path:"pages/sponsorship",element:e.jsx(fa,{})}),e.jsx(i,{path:"pages/future-riders",element:e.jsx(va,{})}),e.jsx(i,{path:"pages/contact",element:e.jsx(wa,{})}),e.jsx(i,{path:"pages/privacy-policy",element:e.jsx(Ia,{})}),e.jsx(i,{path:"pages/cookie-policy",element:e.jsx(Pa,{})}),e.jsx(i,{path:"pages/terms-and-conditions",element:e.jsx(Oa,{})}),e.jsx(i,{path:"pages/returns-and-refunds",element:e.jsx(Da,{})}),e.jsx(i,{path:"pages/shipping-information",element:e.jsx(xa,{})}),e.jsx(i,{path:"pages/legal-notice",element:e.jsx(ja,{})}),e.jsx(i,{path:"blogs/:blogHandle",element:e.jsx(Ta,{})}),e.jsx(i,{path:"blogs/blog/my-cres-vacation-and-what-rest-really-gives-you",element:e.jsx(Ra,{})}),e.jsx(i,{path:"blogs/:blogHandle/:articleHandle",element:e.jsx(ht,{})}),e.jsx(i,{path:"pages/:handle",element:e.jsx(ht,{})}),e.jsx(i,{path:"auth",element:e.jsx(La,{})}),e.jsx(i,{path:"reset-password",element:e.jsx(ka,{})}),e.jsxs(i,{path:"account/letsride",element:e.jsx(Ae,{children:e.jsx(Na,{children:e.jsx(vt,{})})}),children:[e.jsxs(i,{element:e.jsx(mt,{children:e.jsx(cn,{})}),children:[e.jsx(i,{index:!0,element:e.jsx(G,{to:"discover",replace:!0})}),e.jsx(i,{path:"home",element:e.jsx(G,{to:"../discover",replace:!0})}),e.jsx(i,{path:"discover",element:e.jsx(Ba,{children:e.jsx(un,{})})}),e.jsx(i,{path:"saved",element:e.jsx(Y,{surface:"saved",children:e.jsx(pn,{})})}),e.jsx(i,{path:"profile",element:e.jsx(hn,{})}),e.jsx(i,{path:"people",element:e.jsx(mn,{})}),e.jsx(i,{path:"people/:userId",element:e.jsx(yt,{})}),e.jsx(i,{path:"users/:userId",element:e.jsx(yt,{})}),e.jsx(i,{path:"rides/:publicId",element:e.jsx(Ha,{})}),e.jsx(i,{path:"activities/new",element:e.jsx(Fa,{})})]}),e.jsxs(i,{element:e.jsx(gt,{}),children:[e.jsx(i,{path:"onboarding",element:e.jsx(Ua,{})}),e.jsx(i,{path:"welcome",element:e.jsx(Y,{surface:"beta_welcome",children:e.jsx(dn,{})})}),e.jsx(i,{path:"find",element:e.jsx(G,{to:"/account/letsride/discover",replace:!0})}),e.jsx(i,{path:"admin/trust-safety",element:e.jsx(Ka,{})}),e.jsx(i,{path:"admin/beta-ops",element:e.jsx(Ja,{})})]}),e.jsxs(i,{element:e.jsx(mt,{children:e.jsx(gt,{})}),children:[e.jsx(i,{path:"activities",element:e.jsx(Ma,{})}),e.jsx(i,{path:"looking-for-riders",element:e.jsx(Y,{surface:"looking_for_riders",children:e.jsx(za,{})})}),e.jsx(i,{path:"activities/:publicId",element:e.jsx(Wa,{})}),e.jsx(i,{path:"activities/:publicId/manage",element:e.jsx(Va,{})}),e.jsx(i,{path:"activities/:publicId/messages",element:e.jsx(qa,{})}),e.jsx(i,{path:"notifications",element:e.jsx(Ya,{})}),e.jsx(i,{path:"notifications/settings",element:e.jsx(Ga,{})}),e.jsx(i,{path:"attendance",element:e.jsx($a,{})}),e.jsxs(i,{element:e.jsx(Y,{surface:"series"}),children:[e.jsx(i,{path:"series/new",element:e.jsx(Qa,{})}),e.jsx(i,{path:"series/:seriesId",element:e.jsx(Xa,{})}),e.jsx(i,{path:"series/:seriesId/edit",element:e.jsx(tn,{})}),e.jsx(i,{path:"series/:seriesId/invite",element:e.jsx(on,{})})]}),e.jsx(i,{element:e.jsx(Y,{surface:"calendar"}),children:e.jsx(i,{path:"calendar",element:e.jsx(Za,{})})}),e.jsx(i,{element:e.jsx(Y,{surface:"community"}),children:e.jsx(i,{path:"community/:localityId",element:e.jsx(en,{})})}),e.jsx(i,{path:"profile/edit",element:e.jsx(gn,{})})]})]}),e.jsxs(i,{path:"account",element:e.jsx(Ae,{children:e.jsx(pr,{})}),children:[e.jsx(i,{index:!0,element:e.jsx(yn,{})}),e.jsx(i,{path:"profile",element:e.jsx(bn,{})}),e.jsx(i,{path:"performance-profile",element:e.jsx(fn,{})}),e.jsx(i,{path:"kit-setup",element:e.jsx(vn,{})}),e.jsx(i,{path:"bike-garage",element:e.jsx(En,{})}),e.jsx(i,{path:"bike-garage/:bikeId",element:e.jsx(_n,{})}),e.jsx(i,{path:"saved-setups",element:e.jsx(wn,{})}),e.jsx(i,{path:"saved-setups/:id",element:e.jsx(Tn,{})}),e.jsx(i,{path:"recommendations",element:e.jsx(Rn,{})}),e.jsx(i,{path:"service-reminders",element:e.jsx(An,{})}),e.jsx(i,{path:"orders",element:e.jsx(Ln,{})}),e.jsx(i,{path:"second-ride",element:e.jsx($r,{})}),e.jsx(i,{path:"second-ride/:id",element:e.jsx(zr,{})}),e.jsx(i,{path:"second-ride-admin",element:e.jsx(Qr,{})}),e.jsx(i,{path:"strava",element:e.jsx(kn,{})}),e.jsx(i,{path:"wishlist",element:e.jsx(In,{})}),e.jsx(i,{path:"rewards",element:e.jsx(Pn,{})}),e.jsx(i,{path:"training",element:e.jsx(On,{})}),e.jsx(i,{path:"club",element:e.jsx(S,{children:e.jsx(Dn,{})})}),e.jsx(i,{path:"club/settings",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(xn,{})})})}),e.jsx(i,{path:"club/ride-photos",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(jn,{})})})}),e.jsx(i,{path:"club/members",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(ss,{})})})}),e.jsx(i,{path:"club/events",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(ls,{})})})}),e.jsx(i,{path:"club/beginner-rides",element:e.jsx(Es,{})}),e.jsx(i,{path:"club/jersey-vote",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(zs,{})})})}),e.jsx(i,{path:"club/consent",element:e.jsx(sl,{})}),e.jsx(i,{path:"club/license",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(ll,{})})})}),e.jsx(i,{path:"club-license-admin",element:e.jsx(dl,{})}),e.jsx(i,{path:"club/ride-fuel",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(Nn,{})})})}),e.jsx(i,{path:"club/training-plan",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(Bn,{})})})}),e.jsx(i,{path:"club/training-plans",element:e.jsx(A,{children:e.jsx(Vn,{})})}),e.jsx(i,{path:"club/training-plans/:slug",element:e.jsx(Un,{})}),e.jsx(i,{path:"club/training-log",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(Cn,{})})})}),e.jsx(i,{path:"club/training-log/new",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(Sn,{})})})}),e.jsx(i,{path:"phase-password",element:e.jsx(ga,{})}),e.jsx(i,{path:"admin-overview",element:e.jsx(Br,{})}),e.jsx(i,{path:"admin/sales",element:e.jsx(Ur,{})}),e.jsx(i,{path:"admin/customers",element:e.jsx(Mr,{})}),e.jsx(i,{path:"admin/club",element:e.jsx(Fr,{})}),e.jsx(i,{path:"admin/content",element:e.jsx(Wr,{})}),e.jsx(i,{path:"admin/growth",element:e.jsx(Hr,{})}),e.jsx(i,{path:"admin/system",element:e.jsx(Vr,{})}),e.jsx(i,{path:"admin/leads",element:e.jsx(Yr,{})}),e.jsx(i,{path:"admin/canonical-links",element:e.jsx(qr,{})}),e.jsx(i,{path:"admin/publish-blog-article",element:e.jsx(Gr,{})}),e.jsx(i,{path:"club/admin/future-riders",element:e.jsx(V,{children:e.jsx(sa,{})})}
207),e.jsx(i,{path:"club/dashboard",element:e.jsx(A,{allowAdmin:!0,children:e.jsx(S,{children:e.jsx(Ea,{})})})}),e.jsx(i,{path:"club/future-riders",element:e.jsx(V,{children:e.jsx(_a,{})})}),e.jsx(i,{path:"club/riders/:memberId",element:e.jsx(A,{children:e.jsx(Mn,{})})}),e.jsx(i,{path:"club/rider-profile",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(Fn,{})})})}),e.jsx(i,{path:"club/following",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(Wn,{})})})}),e.jsx(i,{path:"club/saved-plans",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(Hn,{})})})}),e.jsx(i,{path:"member-social-tasks-admin",element:e.jsx(V,{children:e.jsx(la,{})})}),e.jsx(i,{path:"sponsor-value",element:e.jsx(V,{children:e.jsx(da,{})})}),e.jsx(i,{path:"sponsor-pitch-builder",element:e.jsx(V,{children:e.jsx(ca,{})})}),e.jsx(i,{path:"marathon-2027-admin",element:e.jsx(V,{children:e.jsx(ua,{})})}),e.jsx(i,{path:"admin/lifecycle-flows",element:e.jsx(pa,{})}),e.jsx(i,{path:"admin/social-media",element:e.jsx(ha,{})}),e.jsx(i,{path:"admin/podcast",element:e.jsx(ma,{})}),e.jsx(i,{path:"club/ftp",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(qn,{})})})}),e.jsx(i,{path:"club/feedback",element:e.jsx(A,{children:e.jsx(S,{children:e.jsx(Kn,{})})})}),e.jsx(i,{path:"club-feedback-admin",element:e.jsx(Jn,{})}),e.jsx(i,{path:"content",element:e.jsx(rs,{})}),e.jsx(i,{path:"content/:id",element:e.jsx(as,{})}),e.jsx(i,{path:"organic-leads",element:e.jsx(ns,{})}),e.jsx(i,{path:"club-events-admin",element:e.jsx(ds,{})}),e.jsx(i,{path:"club-weekend-admin",element:e.jsx(cs,{})}),e.jsx(i,{path:"club-marathon-discounts-admin",element:e.jsx(us,{})}),e.jsx(i,{path:"club-marathon-signup-clicks",element:e.jsx(ps,{})}),e.jsx(i,{path:"club-members-admin",element:e.jsx(hs,{})}),e.jsx(i,{path:"club-consent-admin",element:e.jsx(cl,{})}),e.jsx(i,{path:"club-settings-admin",element:e.jsx(ul,{})}),e.jsx(i,{path:"club-value-admin",element:e.jsx(pl,{})}),e.jsx(i,{path:"club-interactive-admin",element:e.jsx(hl,{})}),e.jsx(i,{path:"free-jersey-grants",element:e.jsx(ms,{})}),e.jsx(i,{path:"leaderboard-admin",element:e.jsx(gs,{})}),e.jsx(i,{path:"strava-compliance",element:e.jsx(ys,{})}),e.jsx(i,{path:"monthly-leaderboard-audit",element:e.jsx(bt,{})}),e.jsx(i,{path:"weekly-rides",element:e.jsx(fs,{})}),e.jsx(i,{path:"beginner-rides-admin",element:e.jsx(vs,{})}),e.jsx(i,{path:"waitlist",element:e.jsx(bs,{})}),e.jsx(i,{path:"email-log",element:e.jsx(_s,{})}),e.jsx(i,{path:"club-subscribers",element:e.jsx(ws,{})}),e.jsx(i,{path:"club-kit",element:e.jsx(Ts,{})}),e.jsx(i,{path:"style-studio-keywords",element:e.jsx(el,{})}),e.jsx(i,{path:"email-preview",element:e.jsx(Rs,{})}),e.jsx(i,{path:"bike-orders",element:e.jsx(As,{})}),e.jsx(i,{path:"orders-admin",element:e.jsx(Cs,{})}),e.jsx(i,{path:"seo-tools",element:e.jsx(Ss,{})}),e.jsx(i,{path:"gsc-monitor",element:e.jsx(Ls,{})}),e.jsx(i,{path:"organic-seo",element:e.jsx(G,{to:"/account/seo-geo?tab=organic",replace:!0})}),e.jsx(i,{path:"seo-geo",element:e.jsx(Js,{})}),e.jsx(i,{path:"webhook-tester",element:e.jsx(ks,{})}),e.jsx(i,{path:"shopify-webhooks",element:e.jsx(Is,{})}),e.jsx(i,{path:"strava-webhooks",element:e.jsx(Ps,{})}),e.jsx(i,{path:"strava-review-prep",element:e.jsx(Os,{})}),e.jsx(i,{path:"shopify-seo-bulk",element:e.jsx(Ds,{})}),e.jsx(i,{path:"favicon-preview",element:e.jsx(xs,{})}),e.jsx(i,{path:"abandoned-checkouts",element:e.jsx(js,{})}),e.jsx(i,{path:"waitlist-demand",element:e.jsx(Ns,{})}),e.jsx(i,{path:"contact-messages",element:e.jsx(Bs,{})}),e.jsx(i,{path:"build-requests",element:e.jsx(Us,{})}),e.jsx(i,{path:"referrals",element:e.jsx(Ms,{})}),e.jsx(i,{path:"shipping-test",element:e.jsx(Fs,{})}),e.jsx(i,{path:"perf-budget",element:e.jsx(Ws,{})}),e.jsx(i,{path:"blank-page-reports",element:e.jsx(Hs,{})}),e.jsx(i,{path:"settings",element:e.jsx(Vs,{})}),e.jsx(i,{path:"news",element:e.jsx(Gs,{})}),e.jsx(i,{path:"announcements",element:e.jsx(qs,{})}),e.jsx(i,{path:"social-media-images",element:e.jsx(Ks,{})}),e.jsx(i,{path:"jersey-vote",element:e.jsx($s,{})}),e.jsx(i,{path:"jersey-preorder-setup",element:e.jsx(Qs,{})}),e.jsx(i,{path:"jersey-preorders",element:e.jsx(Xs,{})}),e.jsx(i,{path:"my-preorders",element:e.jsx(Zs,{})}),e.jsx(i,{path:"heatmap",element:e.jsx(tl,{})}),e.jsx(i,{path:"click-heatmap",element:e.jsx(ol,{})}),e.jsx(i,{path:"conversion-funnel",element:e.jsx(nl,{})}),e.jsx(i,{path:"geo-studio",element:e.jsx(G,{to:"/account/seo-geo?tab=studio",replace:!0})}),e.jsx(i,{path:"warranty",element:e.jsx(bl,{})}),e.jsx(i,{path:"warranty-claims",element:e.jsx(ml,{})}),e.jsx(i,{path:"warranty-claims/new",element:e.jsx(yl,{})}),e.jsx(i,{path:"warranty-claims/:id",element:e.jsx(gl,{})}),e.jsx(i,{path:"kit-mannequin-overlays",element:e.jsx(Ys,{})}),e.jsx(i,{path:"tool-analytics",element:e.jsx(il,{})}),e.jsx(i,{path:"rate-my-bike",element:e.jsx(rl,{})}),e.jsx(i,{path:"ai-command-center",element:e.jsx(al,{})})]}),e.jsx(i,{path:"warranty",element:e.jsx(fl,{})}),e.jsx(i,{path:"warranty/track",element:e.jsx(vl,{})}),e.jsx(i,{path:"products/:handle",element:e.jsx(h,{to:"/:lang/product/:handle",forwardHandle:!0})}),e.jsx(i,{path:"products",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"cycling-gear/*",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"clothing/*",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"product-category/*",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"shop",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"shop/*",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"collections",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"rule/*",element:e.jsx(h,{to:"/:lang"})}),e.jsx(i,{path:"en-US",element:e.jsx(h,{to:"/:lang"})}),e.jsx(i,{path:"en-US/*",element:e.jsx(h,{to:"/:lang"})}),e.jsx(i,{path:"cdn/*",element:e.jsx(h,{to:"/:lang"})}
207),e.jsx(i,{path:"wahoo-kickr-climb",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"exclusive-cycling-club",element:e.jsx(h,{to:"/:lang/pages/letsride-cycling-club"})}),e.jsx(i,{path:"exclusive-cycling-club/*",element:e.jsx(h,{to:"/:lang/pages/letsride-cycling-club"})}),e.jsx(i,{path:"b",element:e.jsx(h,{to:"/:lang"})}),e.jsx(i,{path:"b/*",element:e.jsx(h,{to:"/:lang"})}),e.jsx(i,{path:"policies/*",element:e.jsx(h,{to:"/:lang/pages/privacy-policy"})}),e.jsx(i,{path:"search",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"account/login",element:e.jsx(h,{to:"/:lang/auth"})}),e.jsx(i,{path:"account/register",element:e.jsx(h,{to:"/:lang/auth"})}),e.jsx(i,{path:"account/recover",element:e.jsx(h,{to:"/:lang/auth"})}),e.jsx(i,{path:"account/logout",element:e.jsx(h,{to:"/:lang/auth"})}),e.jsx(i,{path:"collections/:handle/:facet",element:e.jsx(dt,{})}),e.jsx(i,{path:"collections/collections/:handle",element:e.jsx(dt,{})}),e.jsx(i,{path:"featured",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"collection",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"product",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"a/page/wishlist",element:e.jsx(h,{to:"/:lang"})}),e.jsx(i,{path:"a/*",element:e.jsx(h,{to:"/:lang"})}),e.jsx(i,{path:"pages/best-cycling-sunglasses-for-uv-protection-clarity",element:e.jsx(h,{to:"/:lang/blogs/blog/best-cycling-sunglasses-for-uv-protection-clarity"})}),e.jsx(i,{path:"pages/best-road-cycling-routes-in-slovenia",element:e.jsx(h,{to:"/:lang/blogs/blog/best-road-cycling-routes-in-slovenia"})}),e.jsx(i,{path:"pages/best-summer-cycling-jersey",element:e.jsx(h,{to:"/:lang/blogs/blog/best-summer-cycling-jersey"})}),e.jsx(i,{path:"pages/how-to-choose-the-right-wheels-for-your-riding-without-guesswork",element:e.jsx(h,{to:"/:lang/blogs/blog/how-to-choose-the-right-wheels-for-your-riding-without-guesswork"})}),e.jsx(i,{path:"pages/which-road-bike-to-buy",element:e.jsx(h,{to:"/:lang/blogs/blog/which-road-bike-to-buy"})}),e.jsx(i,{path:"pages/nich-faith-road-bike",element:e.jsx(h,{to:"/:lang/blogs/blog/nich-faith-road-bike"})}),e.jsx(i,{path:"pages/nich-bikes-now-available-at-approved-high-end-performance-bicycles-in-ljubljana",element:e.jsx(h,{to:"/:lang/blogs/blog/nich-bikes-now-available-at-approved-high-end-performance-bicycles-in-ljubljana"})}),e.jsx(i,{path:"pages/the-custom-road-bike-advantage-fit-performance-and-savings-in-one-package",element:e.jsx(h,{to:"/:lang/blogs/blog/the-custom-road-bike-advantage-fit-performance-and-savings-in-one-package"})}),e.jsx(i,{path:"pages/the-art-of-custom-bike-builds-road-gravel-perfection",element:e.jsx(h,{to:"/:lang/blogs/blog/the-art-of-custom-bike-builds-road-gravel-perfection"})}),e.jsx(i,{path:"pages/home-to-be",element:e.jsx(h,{to:"/:lang"})}),e.jsx(i,{path:"pages/about-us-1",element:e.jsx(h,{to:"/:lang/pages/contact"})}),e.jsx(i,{path:"pages/refund_returns",element:e.jsx(h,{to:"/:lang/pages/returns-and-refunds"})}),e.jsx(i,{path:"pages/size-chart",element:e.jsx(h,{to:"/:lang/collections/all"})}),e.jsx(i,{path:"pages/thanks-custom-bike",element:e.jsx(h,{to:"/:lang/pages/start-your-custom-bike-build"})}),e.jsx(i,{path:"pages/let-s-ride",element:e.jsx(h,{to:"/:lang/pages/letsride-cycling-club"})}),e.jsx(i,{path:"pages/blog",element:e.jsx(h,{to:"/:lang/blogs/blog"})}),e.jsx(i,{path:"pages/pages",element:e.jsx(h,{to:"/:lang"})}),e.jsx(i,{path:"*",element:e.jsx(lt,{})})]}),e.jsx(i,{path:"/products/:handle",element:e.jsx(h,{to:"/en/product/:handle",forwardHandle:!0})}),e.jsx(i,{path:"/products",element:e.jsx(h,{to:"/en/collections/all"})}),e.jsx(i,{path:"/cycling-gear/*",element:e.jsx(h,{to:"/en/collections/all"})}),e.jsx(i,{path:"/clothing/*",element:e.jsx(h,{to:"/en/collections/all"})}),e.jsx(i,{path:"/product-category/*",element:e.jsx(h,{to:"/en/collections/all"})}),e.jsx(i,{path:"/shop/*",element:e.jsx(h,{to:"/en/collections/all"})}),e.jsx(i,{path:"/collections",element:e.jsx(h,{to:"/en/collections/all"})}),e.jsx(i,{path:"/rule/*",element:e.jsx(h,{to:"/en"})}),e.jsx(i,{path:"/en-US",element:e.jsx(h,{to:"/en"})}),e.jsx(i,{path:"/en-US/*",element:e.jsx(h,{to:"/en"})}),e.jsx(i,{path:"/cdn/*",element:e.jsx(h,{to:"/en"})}),e.jsx(i,{path:"/wahoo-kickr-climb",element:e.jsx(h,{to:"/en/collections/all"})}),e.jsx(i,{path:"/exclusive-cycling-club",element:e.jsx(h,{to:"/en/pages/letsride-cycling-club"})}),e.jsx(i,{path:"/exclusive-cycling-club/*",element:e.jsx(h,{to:"/en/pages/letsride-cycling-club"})}),e.jsx(i,{path:"/policies/*",element:e.jsx(h,{to:"/en/pages/privacy-policy"})}),e.jsx(i,{path:"/search",element:e.jsx(h,{to:"/en/collections/all"})}),e.jsx(i,{path:"*",element:e.jsx(lt,{})})]})})}),e.jsx(y.Suspense,{fallback:null,children:e.jsx(wl,{})}),o&&e.jsxs(y.Suspense,{fallback:null,children:[e.jsx(El,{}),e.jsx(_l,{})]})]})},Al=()=>e.jsx(oo,{client:sr,children:e.jsx(uo,{reducedMotion:"user",children:e.jsxs(To,{children:[e.jsx(_o,{}),!1,e.jsx(no,{children:e.jsx(Jo,{children:e.jsx($o,{children:e.jsx(Rl,{})})})})]})})}),Cl="yj40vlf8ry",Sl="ac-clarity-script",we=()=>typeof window<"u"&&typeof document<"u",Ll=({id:t,src:o})=>{if(!we()||document.getElementById(t))return;const r=document.createElement("script");r.id=t,r.async=!0,r.src=o,document.head.appendChild(r)},kl=()=>{if(we()&&!window.clarity){const t=function(...o){(t.q=t.q||[]).push(o)};window.clarity=t}},Vt=(t,o)=>{var r;we()&&((r=window.clarity)==null||r.call(window,"consentv2",{ad_Storage:o?"granted":"denied",analytics_Storage:t?"granted":"denied"}))},ft=()=>{Vt(U("analytics"),U("marketing"))},Il=()=>{if(!we())return;kl(),Vt(!1,!1),Ee()&&ft(),window.addEventListener(q,ft);let t=!1;const o=()=>{t||U("analytics")&&(t=!0,Ll({id:Sl,src:`https://www.clarity.ms/tag/${Cl}`}))},r=window,s=()=>{o(),window.removeEventListener("pointerdown",s),window.removeEventListener("keydown",s)};(()=>{window.addEventListener("pointerdown",s,{once:!0,passive:!0}),window.addEventListener("keydown",s,{once:!0})})(),window.addEventListener(q,()=>{!t&&U("analytics")&&o()});const d=()=>{typeof r.requestIdleCallback=="function"?r.requestIdleCallback(o,{timeout:25e3}):window.setTimeout(o,2e4)};document.readyState==="complete"?d():window.addEventListener("load",d,{once:!0})},Pl="approved:module-load-retry";function Ol(t){const o=t instanceof Error?t.message:String(t??"");return/Importing a module script failed|Failed to fetch dynamically imported module|Load failed|ChunkLoadError/i.test(o)}typeof window<"u"&&window.addEventListener("unhandledrejection",t=>{if(!Ol(t.reason))return;const o=`${Pl}:${window.location.pathname}`;if(window.sessionStorage.getItem(o)!=="1"){window.sessionStorage.setItem(o,"1");
207try{const r=new URL(window.location.href);r.searchParams.set("_r",Date.now().toString(36)),window.location.replace(r.toString())}catch{window.location.reload()}}});qi();Il();if(typeof window<"u"){const t=()=>{a(()=>import("./perfReporter-TV-1zt5u.js"),[]).then(r=>r.initPerfReporter()).catch(()=>{}),a(()=>import("./blankPageDetector-dDjtOFMO.js"),__vite__mapDeps([613,5,2,16,17])).then(r=>r.initBlankPageDetector()).catch(()=>{})},o=()=>{const r=window;typeof r.requestIdleCallback=="function"?r.requestIdleCallback(t,{timeout:6e3}):setTimeout(t,4e3)};document.readyState==="complete"?o():window.addEventListener("load",o,{once:!0})}Xt(document.getElementById("root")).render(e.jsx(Al,{}));export{q as $,Gl as A,go as B,Kl as C,L as D,ql as E,ed as F,bi as G,yi as H,ld as I,sd as J,cd as K,Wl as L,ud as M,dd as N,td as O,gi as P,mi as Q,Vl as R,Zl as S,id as T,Ee as U,ad as V,Ui as W,rd as X,Gi as Y,$l as Z,a as _,Yl as a,od as a0,U as a1,F as b,ji as c,Ql as d,Xl as e,fi as f,be as g,wo as h,pd as i,No as j,hi as k,zl as l,Jl as m,M as n,Hl as o,Yo as p,Io as q,Ot as r,Xo as s,zo as t,kt as u,Fl as v,nd as w,Qo as x,Zo as y,ei as z};

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.