{"id":159449,"date":"2021-12-29T09:12:51","date_gmt":"2021-12-29T08:12:51","guid":{"rendered":"https:\/\/bikefinder.com\/ny-shop\/"},"modified":"2026-10-11T04:07:03","modified_gmt":"2026-10-11T02:07:03","slug":"buy","status":"publish","type":"page","link":"https:\/\/bikefinder.com\/es\/buy\/","title":{"rendered":"SHOP"},"content":{"rendered":"\n<style>.bf-buy { --ink:#182b38; --muted:#60707c; --line:#dce3e8; --blue:#0075b9; --wash:#eff7fc; --paper:#f8f9fb; --radius:14px; background:var(--paper); color:var(--ink); font:14px\/1.6 'Open Sans',Arial,sans-serif; padding:52px max(24px,calc((100% - 1240px)\/2)) 64px; isolation:isolate; }\n .bf-buy [hidden] {display:none!important;}\n .bf-buy .bf-buy-app {display:none;max-width:1240px;margin:auto;}\n .bf-buy.is-ready .bf-buy-app {display:block;}\n .bf-buy.is-ready .bf-buy-fallback {display:none;}\n .bf-buy .bf-buy-fallback {max-width:1240px;margin:auto;}\n .bf-buy .bf-buy-native-plan {border:1px solid #dce3e8;border-radius:10px;background:#fff;padding:18px;margin:10px 0;}\n .bf-buy .bf-buy-alert,.bf-buy .bf-buy-initial-error {max-width:1240px;margin:0 auto 20px;font-size:13px;color:#a73232;}\n .bf-buy .bf-buy-cart-note {margin-top:16px;padding:12px 14px;border-radius:9px;background:#eaf1f5;font-size:11px;}\n .bf-buy .bf-buy-cart-note a {color:#0075b9;}\n .bf-buy .bf-buy-cart-note button {background:none;padding:0;color:#0075b9;text-decoration:underline;margin-top:5px;font-size:11px;}\n .bf-buy .billing-choices .billed * {font:inherit;color:inherit;}\n .bf-buy .billing-choices .billed p {display:inline;}\n .bf-buy .primary:disabled {opacity:.6;cursor:wait;}\n .bf-buy .primary[aria-disabled=\"true\"] {opacity:.6;cursor:not-allowed;}\n .bf-buy .bf-buy-busy {font-size:11px;color:#60707c;text-align:center;margin-top:10px;}\n @media(max-width:760px){.bf-buy{padding:30px 20px 120px;}.bf-buy .bf-buy-app{margin:0;}.bf-buy .mobile-checkout{font:14px\/1.6 'Open Sans',Arial,sans-serif;}}\n\n            .bf-buy {\n                --ink: #182b38;\n                --muted: #60707c;\n                --line: #dce3e8;\n                --blue: #0075b9;\n                --wash: #eff7fc;\n                --paper: #f8f9fb;\n                --radius: 14px;\n            }\n            .bf-buy * {\n                box-sizing: border-box;\n            }\n            .bf-buy h1,\n            .bf-buy h2,\n            .bf-buy h3,\n            .bf-buy strong,\n            .bf-buy button,\n            .bf-buy .price {\n                font-family: Montserrat, Arial, sans-serif;\n                font-weight: 600;\n            }\n            .bf-buy h1,\n            .bf-buy h2,\n            .bf-buy h3,\n            .bf-buy p {\n                margin: 0;\n            }\n            .bf-buy button,\n            .bf-buy input,\n            .bf-buy select {\n                font: inherit;\n                color: inherit;\n            }\n            .bf-buy button,\n            .bf-buy a,\n            .bf-buy label,\n            .bf-buy select {\n                -webkit-tap-highlight-color: transparent;\n            }\n            .bf-buy button,\n            .bf-buy select,\n            .bf-buy summary {\n                cursor: pointer;\n            }\n            .bf-buy a {\n                color: inherit;\n                text-underline-offset: 4px;\n            }\n            .bf-buy button {\n                border: 0;\n            }\n            .bf-buy :focus-visible {\n                outline: 3px solid #0075b9;\n                outline-offset: 4px;\n            }\n            .bf-buy [hidden] {\n                display: none !important;\n            }\n            .bf-buy svg {\n                display: block;\n                width: 22px;\n                height: 22px;\n                fill: none;\n                stroke: currentColor;\n                stroke-width: 1.6;\n                stroke-linecap: round;\n                stroke-linejoin: round;\n                flex-shrink: 0;\n            }\n            .bf-buy .svg-library,\n            .bf-buy .sr-only {\n                position: absolute;\n                width: 1px;\n                height: 1px;\n                padding: 0;\n                overflow: hidden;\n                clip-path: inset(50%);\n                white-space: nowrap;\n            }\n            .bf-buy .buy-layout {\n                display: grid;\n                grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr);\n                gap: clamp(40px, 6vw, 88px);\n                align-items: start;\n            }\n            .bf-buy .eyebrow {\n                text-transform: uppercase;\n                letter-spacing: 0.16em;\n                font-size: 10px;\n                color: var(--blue);\n                margin-bottom: 17px;\n                font-weight: 600;\n            }\n            .bf-buy h1 {\n                font-size: clamp(40px, 4.4vw, 61px);\n                letter-spacing: -2.6px;\n                line-height: 1.08;\n                margin-bottom: 20px;\n            }\n            .bf-buy .intro {\n                color: var(--muted);\n                max-width: 415px;\n                font-size: 15px;\n                line-height: 1.8;\n            }\n            .bf-buy .product-stage {\n                position: relative;\n                margin-top: 28px;\n                height: 460px;\n                overflow: hidden;\n                border-radius: 18px;\n                background: #f0f1f2;\n                isolation: isolate;\n            }\n            .bf-buy .stage-top {\n                position: absolute;\n                z-index: 2;\n                top: 22px;\n                left: 24px;\n                display: grid;\n                gap: 3px;\n            }\n            .bf-buy .stage-top strong {\n                font-size: 14px;\n            }\n            .bf-buy .stage-top small {\n                color: var(--muted);\n                font-size: 10px;\n            }\n            .bf-buy .product-stage::before {\n                content: '';\n                position: absolute;\n                width: 330px;\n                height: 330px;\n                border: 1px solid #d6dde2;\n                border-radius: 50%;\n                top: 52px;\n                left: calc(50% - 165px);\n            }\n            .bf-buy .product-stage::after {\n                content: '';\n                position: absolute;\n                width: 235px;\n                height: 235px;\n                border: 1px solid #dce2e6;\n                border-radius: 50%;\n                top: 100px;\n                left: calc(50% - 118px);\n                z-index: -1;\n            }\n            .bf-buy .product-photo {\n                width: 100%;\n                height: 100%;\n                object-fit: cover;\n                mix-blend-mode: multiply;\n                transition: opacity 0.2s;\n            }\n            .bf-buy .product-stage[data-model='g1'] .product-photo,\n            .bf-buy .product-stage[data-model='fahrradfinden'] .product-photo {\n                object-fit: contain;\n                padding: 55px 15px 45px;\n            }\n            .bf-buy .stage-caption {\n                position: absolute;\n                z-index: 2;\n                bottom: 20px;\n                left: 24px;\n                right: 24px;\n                display: flex;\n                align-items: center;\n                justify-content: space-between;\n                gap: 12px;\n                font-size: 10px;\n                color: var(--muted);\n            }\n            .bf-buy .stage-tag {\n                border: 1px solid #ccd8df;\n                border-radius: 20px;\n                padding: 5px 10px;\n                display: inline-flex;\n                align-items: center;\n                gap: 6px;\n                color: var(--ink);\n                background: #f5f6f7;\n            }\n            .bf-buy .stage-tag svg {\n                width: 13px;\n                height: 13px;\n                color: var(--blue);\n            }\n            .bf-buy .feature-strip {\n                display: grid;\n                grid-template-columns: repeat(3, 1fr);\n                gap: 12px;\n                padding: 22px 0 0;\n            }\n            .bf-buy .feature {\n                display: flex;\n                align-items: center;\n                gap: 9px;\n                font-size: 11px;\n            }\n            .bf-buy .feature svg {\n                color: var(--blue);\n                width: 20px;\n                height: 20px;\n            }\n            .bf-buy .product-details {\n                margin-top: 25px;\n                border-top: 1px solid var(--line);\n                font-size: 12px;\n            }\n            .bf-buy details {\n                border-bottom: 1px solid var(--line);\n            }\n            .bf-buy summary {\n                padding: 15px 0;\n                list-style: none;\n                display: flex;\n                align-items: center;\n                justify-content: space-between;\n                font-weight: 600;\n            }\n            .bf-buy summary::-webkit-details-marker {\n                display: none;\n            }\n            .bf-buy summary::after {\n                content: '+';\n                font-size: 19px;\n                font-weight: 400;\n            }\n            .bf-buy details[open] summary::after {\n                content: '\u2212';\n            }\n            .bf-buy details p {\n                padding: 0 0 18px;\n                color: var(--muted);\n            }\n            .bf-buy .configurator {\n                padding-top: 2px;\n            }\n            .bf-buy .config-title {\n                font-size: 27px;\n                letter-spacing: -0.7px;\n                margin-bottom: 5px;\n            }\n            .bf-buy .config-subtitle {\n                font-size: 12px;\n                color: var(--muted);\n            }\n            .bf-buy .hardware-row {\n                display: flex;\n                align-items: center;\n                justify-content: space-between;\n                margin: 22px 0 10px;\n                padding-bottom: 16px;\n                border-bottom: 1px solid var(--line);\n                gap: 12px;\n            }\n            .bf-buy .hardware-info {\n                display: flex;\n                align-items: center;\n                gap: 11px;\n            }\n            .bf-buy .hardware-icon {\n                display: grid;\n                place-items: center;\n                width: 36px;\n                height: 36px;\n                background: #eaf1f5;\n                border-radius: 9px;\n                color: var(--blue);\n            }\n            .bf-buy .hardware-info strong {\n                font-size: 13px;\n            }\n            .bf-buy .hardware-info small {\n                display: block;\n                font-size: 10px;\n                color: var(--muted);\n            }\n            .bf-buy .hardware-price {\n                font-size: 15px;\n                white-space: nowrap;\n            }\n            .bf-buy .owner-toggle {\n                width: fit-content;\n                display: flex;\n                align-items: center;\n                gap: 7px;\n                color: var(--muted);\n                font-size: 11px;\n                cursor: pointer;\n            }\n            .bf-buy input[type='checkbox'] {\n                accent-color: var(--blue);\n                width: 15px;\n                height: 15px;\n                margin: 0;\n                flex-shrink: 0;\n            }\n            .bf-buy fieldset {\n                border: 0;\n                padding: 0;\n                margin: 24px 0 0;\n                min-width: 0;\n            }\n            .bf-buy legend {\n                width: 100%;\n                padding: 0;\n                font-family: Montserrat, sans-serif;\n                font-weight: 600;\n                font-size: 13px;\n                margin-bottom: 12px;\n                display: flex;\n                align-items: center;\n                gap: 9px;\n            }\n            .bf-buy .step {\n                color: var(--muted);\n                width: 19px;\n                height: 19px;\n                display: inline-grid;\n                place-items: center;\n                font-size: 10px;\n                border: 1px solid #c9d3da;\n                border-radius: 50%;\n            }\n            .bf-buy .choices {\n                display: grid;\n                grid-template-columns: 1fr 1fr;\n                gap: 10px;\n            }\n            .bf-buy .choice {\n                position: relative;\n                cursor: pointer;\n            }\n            .bf-buy .choice input {\n                position: absolute;\n                inset: 0;\n                width: 100%;\n                height: 100%;\n                margin: 0;\n                opacity: 0;\n                z-index: 1;\n                cursor: pointer;\n            }\n            .bf-buy .choice-face {\n                height: 100%;\n                border: 1px solid #cdd8e0;\n                border-radius: 10px;\n                padding: 15px 13px;\n                display: grid;\n                grid-template-columns: 1fr 15px;\n                align-items: start;\n                column-gap: 5px;\n                background: #fff;\n                transition:\n                    border-color 0.15s,\n                    background 0.15s;\n            }\n            .bf-buy .choice:hover .choice-face {\n                border-color: var(--blue);\n            }\n            .bf-buy .choice input:checked + .choice-face {\n                border: 2px solid var(--blue);\n                padding: 14px 12px;\n                background: var(--wash);\n            }\n            .bf-buy .choice input:focus-visible + .choice-face {\n                outline: 3px solid var(--blue);\n                outline-offset: 3px;\n            }\n            .bf-buy .choice input:disabled {\n                cursor: not-allowed;\n            }\n            .bf-buy .choice input:disabled + .choice-face {\n                opacity: 0.55;\n                background: #edf0f2;\n            }\n            .bf-buy .choice-face strong {\n                display: block;\n                font-size: 12px;\n            }\n            .bf-buy .choice-face small {\n                font-size: 10px;\n                color: var(--muted);\n                display: block;\n                margin-top: 5px;\n                line-height: 1.5;\n            }\n            .bf-buy .radio-mark {\n                border: 1px solid #b9c7d0;\n                border-radius: 50%;\n                width: 15px;\n                height: 15px;\n                margin-top: 2px;\n            }\n            .bf-buy input:checked + .choice-face .radio-mark {\n                border: 4px solid var(--blue);\n                background: #fff;\n            }\n            .bf-buy .insurance-box {\n                margin-top: 12px;\n                padding: 16px;\n                border: 1px solid #d5e4ed;\n                background: #f0f6fa;\n                border-radius: 10px;\n            }\n            .bf-buy .insurance-box > label {\n                display: block;\n                font-size: 11px;\n                margin-bottom: 7px;\n            }\n            .bf-buy .value-select {\n                width: 100%;\n                padding: 10px 12px;\n                border: 1px solid #bdced9;\n                border-radius: 7px;\n                background: #fff;\n                font-size: 12px;\n            }\n            .bf-buy .eligibility {\n                color: var(--muted);\n                font-size: 10px;\n                line-height: 1.7;\n                margin-top: 10px;\n            }\n            .bf-buy .policy-links {\n                display: flex;\n                flex-wrap: wrap;\n                gap: 14px;\n                margin-top: 7px;\n                font-size: 10px;\n                color: var(--blue);\n            }\n            .bf-buy .residence-check {\n                display: flex;\n                align-items: flex-start;\n                gap: 8px;\n                margin-top: 13px;\n                font-size: 11px;\n                cursor: pointer;\n            }\n            .bf-buy .residence-check input {\n                margin-top: 3px;\n            }\n            .bf-buy .market-note {\n                font-size: 10px;\n                line-height: 1.6;\n                color: var(--muted);\n                margin-top: 9px;\n            }\n            .bf-buy .billing-choices {\n                grid-template-columns: repeat(3, minmax(0, 1fr));\n            }\n            .bf-buy .billing-choices .choice-face {\n                display: block;\n                padding: 14px 10px;\n                position: relative;\n            }\n            .bf-buy .billing-choices input:checked + .choice-face {\n                padding: 13px 9px;\n            }\n            .bf-buy .billing-choices .choice-face strong {\n                font-size: 11px;\n                margin-bottom: 9px;\n            }\n            .bf-buy .monthly-price {\n                font-family: Montserrat, sans-serif;\n                font-weight: 600;\n                font-size: 20px;\n                white-space: nowrap;\n                letter-spacing: -0.6px;\n            }\n            .bf-buy .per-month {\n                color: var(--muted);\n                font-size: 10px;\n                margin-left: 2px;\n            }\n            .bf-buy .choice-face .billed {\n                font-size: 9px;\n                margin-top: 7px;\n            }\n            .bf-buy .saving {\n                display: inline-block;\n                margin-top: 9px;\n                padding: 2px 6px;\n                border-radius: 4px;\n                background: #e7eee9;\n                color: #315841;\n                font-size: 9px;\n            }\n            .bf-buy .billing-note {\n                color: var(--muted);\n                font-size: 10px;\n                margin-top: 10px;\n            }\n            .bf-buy .accessory {\n                display: flex;\n                align-items: center;\n                justify-content: space-between;\n                gap: 12px;\n                border-top: 1px solid var(--line);\n                margin-top: 22px;\n                padding-top: 18px;\n                font-size: 11px;\n                cursor: pointer;\n            }\n            .bf-buy .accessory-copy {\n                display: flex;\n                align-items: center;\n                gap: 10px;\n            }\n            .bf-buy .accessory small {\n                display: block;\n                font-size: 10px;\n                color: var(--muted);\n            }\n            .bf-buy .accessory .price {\n                white-space: nowrap;\n                font-size: 11px;\n            }\n            .bf-buy .order-summary {\n                background: #fff;\n                border: 1px solid var(--line);\n                border-radius: var(--radius);\n                margin-top: 22px;\n                padding: 19px 20px;\n            }\n            .bf-buy .summary-line {\n                display: flex;\n                justify-content: space-between;\n                gap: 12px;\n                color: var(--muted);\n                font-size: 11px;\n            }\n            .bf-buy .summary-line + .summary-line {\n                margin-top: 6px;\n            }\n            .bf-buy .summary-line span:last-child {\n                white-space: nowrap;\n            }\n            .bf-buy .today-line {\n                display: flex;\n                align-items: center;\n                justify-content: space-between;\n                gap: 12px;\n                padding-top: 13px;\n                margin-top: 13px;\n                border-top: 1px solid var(--line);\n            }\n            .bf-buy .today-line strong {\n                font-size: 12px;\n            }\n            .bf-buy .today-line .price {\n                font-size: 24px;\n                letter-spacing: -0.5px;\n            }\n            .bf-buy .renewal {\n                margin-top: 5px;\n                color: var(--muted);\n                font-size: 10px;\n                text-align: right;\n            }\n            .bf-buy .shipping-note {\n                color: var(--muted);\n                font-size: 9px;\n                margin-top: 9px;\n                text-align: right;\n            }\n            .bf-buy .primary {\n                width: 100%;\n                display: flex;\n                align-items: center;\n                justify-content: space-between;\n                gap: 12px;\n                background: var(--blue);\n                color: #fff;\n                border-radius: 9px;\n                padding: 16px 20px;\n                font-family: Montserrat, sans-serif;\n                font-weight: 600;\n                font-size: 13px;\n                transition: background 0.15s;\n            }\n            .bf-buy .primary:hover {\n                background: #005e95;\n            }\n            .bf-buy .primary svg {\n                width: 18px;\n                height: 18px;\n            }\n            .bf-buy .desktop-cta {\n                margin-top: 15px;\n            }\n            .bf-buy .cta-footnote {\n                text-align: center;\n                color: var(--muted);\n                font-size: 9px;\n                margin-top: 9px;\n            }\n            .bf-buy .inline-error {\n                color: #a73232;\n                font-size: 11px;\n                margin-top: 12px;\n            }\n            .bf-buy .mobile-checkout {\n                display: none;\n            }\n            .bf-buy .how-section {\n                border-top: 1px solid var(--line);\n                padding-top: 50px;\n                margin-top: 58px;\n            }\n            .bf-buy .section-intro {\n                display: flex;\n                align-items: baseline;\n                justify-content: space-between;\n                gap: 20px;\n                margin-bottom: 25px;\n            }\n            .bf-buy .section-intro h2 {\n                font-size: 25px;\n                letter-spacing: -0.6px;\n            }\n            .bf-buy .section-intro p {\n                color: var(--muted);\n                font-size: 12px;\n            }\n            .bf-buy .how-grid {\n                display: grid;\n                grid-template-columns: repeat(3, 1fr);\n                gap: 28px;\n            }\n            .bf-buy .how-card {\n                padding: 24px;\n                background: #fff;\n                border: 1px solid var(--line);\n                border-radius: var(--radius);\n            }\n            .bf-buy .how-number {\n                color: var(--blue);\n                font-size: 10px;\n                letter-spacing: 0.1em;\n            }\n            .bf-buy .how-card h3 {\n                font-size: 15px;\n                margin: 11px 0 9px;\n            }\n            .bf-buy .how-card p {\n                color: var(--muted);\n                font-size: 12px;\n            }\n            .bf-buy .faq-section {\n                margin: 50px auto 0;\n                max-width: 720px;\n            }\n            .bf-buy .faq-section h2 {\n                font-size: 25px;\n                letter-spacing: -0.6px;\n                margin-bottom: 18px;\n            }\n            .bf-buy .faq-section details {\n                font-size: 12px;\n            }\n            @media (min-width: 1021px) {\n                .bf-buy .product-column {\n                    position: sticky;\n                    top: 28px;\n                }\n            }\n            @media (max-width: 1150px) {\n                .bf-buy .buy-layout {\n                    gap: 38px;\n                }\n                .bf-buy .monthly-price {\n                    font-size: 18px;\n                }\n            }\n            @media (max-width: 1020px) {\n                .bf-buy .buy-layout {\n                    gap: 28px;\n                }\n                .bf-buy h1 {\n                    font-size: 44px;\n                }\n                .bf-buy .product-stage {\n                    height: 375px;\n                }\n                .bf-buy .feature-strip {\n                    grid-template-columns: 1fr;\n                    gap: 10px;\n                }\n                .bf-buy .config-title {\n                    font-size: 23px;\n                }\n                .bf-buy .choice-face strong {\n                    font-size: 11px;\n                }\n                .bf-buy .billing-choices .choice-face strong {\n                    font-size: 10px;\n                }\n                .bf-buy .monthly-price {\n                    font-size: 16px;\n                }\n                .bf-buy .billing-choices .choice-face {\n                    padding: 12px 7px;\n                }\n                .bf-buy .billing-choices input:checked + .choice-face {\n                    padding: 11px 6px;\n                }\n            }\n            @media (max-width: 760px) {\n                .bf-buy .buy-layout {\n                    grid-template-columns: 1fr;\n                    gap: 34px;\n                }\n                .bf-buy h1 {\n                    font-size: clamp(39px, 10vw, 56px);\n                    letter-spacing: -1.9px;\n                }\n                .bf-buy .eyebrow {\n                    margin-bottom: 13px;\n                    font-size: 9px;\n                }\n                .bf-buy .intro {\n                    font-size: 13px;\n                    max-width: 430px;\n                }\n                .bf-buy .product-stage {\n                    height: 290px;\n                    margin-top: 22px;\n                }\n                .bf-buy .product-stage::before {\n                    width: 235px;\n                    height: 235px;\n                    top: 28px;\n                    left: calc(50% - 118px);\n                }\n                .bf-buy .product-stage::after {\n                    width: 180px;\n                    height: 180px;\n                    top: 55px;\n                    left: calc(50% - 90px);\n                }\n                .bf-buy .stage-top {\n                    top: 16px;\n                    left: 18px;\n                }\n                .bf-buy .stage-top strong {\n                    font-size: 12px;\n                }\n                .bf-buy .stage-caption {\n                    left: 18px;\n                    right: 18px;\n                    bottom: 16px;\n                    font-size: 9px;\n                }\n                .bf-buy .feature-strip {\n                    grid-template-columns: repeat(3, 1fr);\n                    gap: 8px;\n                    padding-top: 18px;\n                }\n                .bf-buy .feature {\n                    gap: 7px;\n                    font-size: 9px;\n                }\n                .bf-buy .feature svg {\n                    width: 17px;\n                    height: 17px;\n                }\n                .bf-buy .product-details {\n                    display: none;\n                }\n                .bf-buy .config-title {\n                    font-size: 25px;\n                }\n                .bf-buy .choice-face strong {\n                    font-size: 12px;\n                }\n                .bf-buy .billing-choices .choice-face {\n                    padding: 14px 10px;\n                }\n                .bf-buy .billing-choices input:checked + .choice-face {\n                    padding: 13px 9px;\n                }\n                .bf-buy .billing-choices .choice-face strong {\n                    font-size: 11px;\n                }\n                .bf-buy .monthly-price {\n                    font-size: 19px;\n                }\n                .bf-buy .desktop-cta,\n                .bf-buy .cta-footnote {\n                    display: none;\n                }\n                .bf-buy .mobile-checkout {\n                    display: flex;\n                    align-items: center;\n                    justify-content: space-between;\n                    gap: 16px;\n                    padding: 12px 20px calc(12px + env(safe-area-inset-bottom)) 56px;\n                    position: fixed;\n                    bottom: 0;\n                    left: 0;\n                    right: 0;\n                    z-index: 4;\n                    background: #ffffffef;\n                    backdrop-filter: blur(12px);\n                    border-top: 1px solid var(--line);\n                }\n                .bf-buy .mobile-total {\n                    flex-shrink: 0;\n                }\n                .bf-buy .mobile-total small {\n                    color: var(--muted);\n                    font-size: 9px;\n                    display: block;\n                }\n                .bf-buy .mobile-total strong {\n                    font-size: 18px;\n                }\n                .bf-buy .mobile-checkout .primary {\n                    width: auto;\n                    flex: 1;\n                    max-width: 245px;\n                    padding: 14px 16px;\n                    font-size: 11px;\n                }\n                .bf-buy .how-section {\n                    margin-top: 38px;\n                    padding-top: 32px;\n                }\n                .bf-buy .section-intro {\n                    display: block;\n                }\n                .bf-buy .section-intro p {\n                    margin-top: 7px;\n                }\n                .bf-buy .how-grid {\n                    grid-template-columns: 1fr;\n                    gap: 12px;\n                }\n                .bf-buy .how-card {\n                    padding: 20px;\n                }\n                .bf-buy .how-card h3 {\n                    margin-top: 7px;\n                }\n                .bf-buy .faq-section {\n                    margin-top: 35px;\n                }\n            }\n            @media (max-width: 360px) {\n                .bf-buy .monthly-price {\n                    font-size: 17px;\n                }\n                .bf-buy .billing-choices .choice-face {\n                    padding: 12px 7px;\n                }\n                .bf-buy .billing-choices input:checked + .choice-face {\n                    padding: 11px 6px;\n                }\n                .bf-buy .feature {\n                    font-size: 8px;\n                }\n                .bf-buy .stage-caption {\n                    font-size: 8px;\n                    gap: 8px;\n                }\n            }\n            @media (prefers-reduced-motion: reduce) {\n                .bf-buy * {\n                    transition: none !important;\n                }\n            }\n<\/style>\n<main class=\"bf-buy\" data-language=\"es\"><div class=\"bf-buy-app\">\n    <svg class=\"svg-library\" aria-hidden=\"true\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n        <symbol id=\"bf-i-pin\" viewBox=\"0 0 24 24\">\n            <path d=\"M20 10c0 6-8 12-8 12S4 16 4 10a8 8 0 1 1 16 0Z\"><\/path>\n            <circle cx=\"12\" cy=\"10\" r=\"2.5\"><\/circle>\n        <\/symbol>\n        <symbol id=\"bf-i-shield\" viewBox=\"0 0 24 24\">\n            <path d=\"M12 3 3.5 6v6c0 5 8.5 9 8.5 9s8.5-4 8.5-9V6Z\"><\/path>\n            <path d=\"m8 12 2.5 2.5L16 9\"><\/path>\n        <\/symbol>\n        <symbol id=\"bf-i-tool\" viewBox=\"0 0 24 24\">\n            <path d=\"M14 5a6 6 0 0 0-7.5 7.5L3 16a3 3 0 0 0 4 4l3.5-3.5A6 6 0 0 0 18 9l-4 4-3-3Z\"><\/path>\n        <\/symbol>\n        <symbol id=\"bf-i-phone\" viewBox=\"0 0 24 24\">\n            <rect x=\"6\" y=\"2\" width=\"12\" height=\"20\" rx=\"2\"><\/rect>\n            <path d=\"M10 5h4m-3 14h2\"><\/path>\n        <\/symbol>\n        <symbol id=\"bf-i-arrow\" viewBox=\"0 0 24 24\"><path d=\"M4 12h16m-6-6 6 6-6 6\"><\/path><\/symbol>\n        <symbol id=\"bf-i-chevron\" viewBox=\"0 0 24 24\"><path d=\"m6 9 6 6 6-6\"><\/path><\/symbol>\n        <symbol id=\"bf-i-close\" viewBox=\"0 0 24 24\"><path d=\"m6 6 12 12M6 18 18 6\"><\/path><\/symbol>\n        <symbol id=\"bf-i-check\" viewBox=\"0 0 24 24\">\n            <circle cx=\"12\" cy=\"12\" r=\"9\"><\/circle>\n            <path d=\"m8 12 3 3 5-6\"><\/path>\n        <\/symbol>\n        <symbol id=\"bf-i-device\" viewBox=\"0 0 24 24\">\n            <rect x=\"8\" y=\"3\" width=\"8\" height=\"18\" rx=\"2\"><\/rect>\n            <path d=\"M6 7h12M9 16h6\"><\/path>\n        <\/symbol>\n    <\/svg>\n    <div class=\"buy-layout\">\n        <section class=\"product-column\" aria-labelledby=\"bf-hero-heading\">\n            <p class=\"eyebrow\" data-copy=\"eyebrow\">Un peque\u00f1o localizador. M\u00e1s tranquilidad.<\/p>\n            <h1 id=\"bf-hero-heading\">\n                <span data-copy=\"heroOne\">Pedalea m\u00e1s.<\/span><br><span data-copy=\"heroTwo\">Preoc\u00fapate menos.<\/span>\n            <\/h1>\n            <p class=\"intro\" data-copy=\"intro\">Oculto en el manillar. Conectado a tu m\u00f3vil. Haz que BikeFinder te acompa\u00f1e en tu pr\u00f3xima ruta.<\/p>\n            <div class=\"product-stage\" id=\"bf-product-stage\" data-model=\"g2\">\n                <div class=\"stage-top\">\n                    <strong class=\"model-name\">BikeFinder G2<\/strong><small data-copy=\"designed\">Dise\u00f1ado en Noruega<\/small>\n                <\/div>\n                <img class=\"product-photo\" id=\"bf-product-photo\" alt=\"BikeFinder G2 handlebar tracker\">\n                <div class=\"stage-caption\">\n                    <span class=\"stage-tag\"><svg aria-hidden=\"true\"><use href=\"#bf-i-pin\"><\/use><\/svg><span data-copy=\"hidden\">Oculto en el manillar<\/span><\/span><span id=\"bf-technology\">Wi-Fi \u00b7 GPS \u00b7 LTE \u00b7 Bluetooth<\/span>\n                <\/div>\n            <\/div>\n            <div class=\"feature-strip\">\n                <div class=\"feature\">\n                    <svg aria-hidden=\"true\"><use href=\"#bf-i-pin\"><\/use><\/svg><span data-copy=\"trackFeature\">Localiza tu bicicleta<\/span>\n                <\/div>\n                <div class=\"feature\">\n                    <svg aria-hidden=\"true\"><use href=\"#bf-i-tool\"><\/use><\/svg><span data-copy=\"installFeature\">Inst\u00e1lalo t\u00fa mismo<\/span>\n                <\/div>\n                <div class=\"feature\">\n                    <svg aria-hidden=\"true\"><use href=\"#bf-i-phone\"><\/use><\/svg><span data-copy=\"appFeature\">Conectado a la app<\/span>\n                <\/div>\n            <\/div>\n            <div class=\"product-details\">\n                <details>\n                    <summary data-copy=\"boxHeading\">\u00bfQu\u00e9 incluye la caja?<\/summary>\n                    <p id=\"bf-box-copy\"><\/p>\n                <\/details>\n                <details>\n                    <summary data-copy=\"fitHeading\">\u00bfEs compatible con mi bicicleta?<\/summary>\n                    <p data-copy=\"fitCopy\">El localizador se adapta a manillares con un di\u00e1metro interior de 15\u201327 mm. Comprueba el interior del manillar antes de pedirlo.<\/p>\n                <\/details>\n            <\/div>\n        <\/section>\n        <section class=\"configurator\" id=\"start\" aria-labelledby=\"bf-config-heading\">\n            <h2 class=\"config-title\" id=\"bf-config-heading\" data-copy=\"configTitle\">Configura tu BikeFinder.<\/h2>\n            <p class=\"config-subtitle\" id=\"bf-destination-copy\"><\/p>\n            <div class=\"hardware-row\">\n                <div class=\"hardware-info\">\n                    <span class=\"hardware-icon\"><svg aria-hidden=\"true\"><use href=\"#bf-i-device\"><\/use><\/svg><\/span>\n                    <div>\n                        <strong id=\"bf-hardware-name\">BikeFinder G2<\/strong><small id=\"bf-hardware-help\"><\/small>\n                    <\/div>\n                <\/div>\n                <span class=\"hardware-price price\" id=\"bf-hardware-price\"><\/span>\n            <\/div>\n            <label class=\"owner-toggle\"><input id=\"bf-existing-owner\" type=\"checkbox\"><span data-copy=\"alreadyOwn\">\u00bfYa tienes un localizador? Elige solo la suscripci\u00f3n.<\/span><\/label>\n            <fieldset>\n                <legend>\n                    <span class=\"step\">1<\/span><span data-copy=\"protectionTitle\">Elige tu protecci\u00f3n<\/span>\n                <\/legend>\n                <div class=\"choices\">\n                    <label class=\"choice\"><input type=\"radio\" name=\"protection\" value=\"tracking\" checked=\"\"><span class=\"choice-face\"><span><strong data-copy=\"tracking\">Localizaci\u00f3n<\/strong><small data-copy=\"trackingDesc\">Localiza tu bicicleta en la app. Sin seguro incluido.<\/small><\/span><span class=\"radio-mark\" aria-hidden=\"true\"><\/span><\/span><\/label>\n                    <label class=\"choice\"><input type=\"radio\" name=\"protection\" value=\"insurance\" id=\"bf-insurance-option\" aria-describedby=\"bf-insurance-unavailable\"><span class=\"choice-face\"><span><strong data-copy=\"insured\">Localizaci\u00f3n + seguro<\/strong><small data-copy=\"insuredDesc\">Localizaci\u00f3n con seguro de bicicleta opcional.<\/small><\/span><span class=\"radio-mark\" aria-hidden=\"true\"><\/span><\/span><\/label>\n                <\/div>\n                <p id=\"bf-insurance-unavailable\" class=\"market-note\" hidden=\"\"><\/p>\n                <div class=\"insurance-box\" id=\"bf-insurance-box\" hidden=\"\">\n                    <label for=\"bf-bike-value\" data-copy=\"valueLabel\">Elige un l\u00edmite de valor de bicicleta<\/label>\n                    <select class=\"value-select\" id=\"bf-bike-value\"><\/select>\n                    <p class=\"eligibility\" id=\"bf-eligibility-copy\"><\/p>\n                    <div class=\"policy-links\">\n                        <a id=\"bf-policy-link\" href=\"https:\/\/bikefinder.com\/terms\/norway\/\" target=\"_blank\" rel=\"noopener\" data-copy=\"policy\">Condiciones del seguro \u2197<\/a><a id=\"bf-ipid-link\" href=\"https:\/\/bikefinder.com\/ipid\/norway\/\" target=\"_blank\" rel=\"noopener\" data-copy=\"ipid\">Informaci\u00f3n del producto \u2197<\/a>\n                    <\/div>\n                    <label class=\"residence-check\" id=\"bf-residence-label\"><input id=\"bf-residence\" type=\"checkbox\"><span id=\"bf-residence-copy\"><\/span><\/label>\n                <\/div>\n            <\/fieldset>\n            <fieldset>\n                <legend>\n                    <span class=\"step\">2<\/span><span data-copy=\"billingTitle\">Elige cada cu\u00e1nto pagar<\/span>\n                <\/legend>\n                <div class=\"choices billing-choices\" id=\"bf-billing-choices\"><\/div>\n                <p class=\"billing-note\" id=\"bf-billing-note\"><\/p>\n            <\/fieldset>\n            <label class=\"accessory\" id=\"bf-accessory-row\"><span class=\"accessory-copy\"><input type=\"checkbox\" id=\"bf-accessory\"><span><strong data-copy=\"accessory\">A\u00f1adir un DummyBarEnd a juego<\/strong><small data-copy=\"accessoryHelp\">Un tap\u00f3n a juego para el otro extremo.<\/small><\/span><\/span><span class=\"price\" id=\"bf-accessory-price\"><\/span><\/label>\n            <div class=\"order-summary\" aria-live=\"polite\" aria-atomic=\"true\">\n                <div class=\"summary-line\" id=\"bf-tracker-summary-row\">\n                    <span class=\"model-name\">BikeFinder G2<\/span><span id=\"bf-tracker-summary-price\"><\/span>\n                <\/div>\n                <div class=\"summary-line\">\n                    <span id=\"bf-plan-summary-label\"><\/span><span id=\"bf-plan-summary-price\"><\/span>\n                <\/div>\n                <div class=\"summary-line\" id=\"bf-accessory-summary-row\" hidden=\"\">\n                    <span>DummyBarEnd<\/span><span id=\"bf-accessory-summary-price\"><\/span>\n                <\/div>\n                <div class=\"today-line\">\n                    <strong data-copy=\"dueToday\">A pagar hoy<\/strong><span class=\"price today-price\"><\/span>\n                <\/div>\n                <p class=\"renewal\" id=\"bf-renewal-copy\"><\/p>\n                <p class=\"shipping-note\" data-copy=\"shippingNote\">El env\u00edo y los impuestos finales se calculan al pagar.<\/p>\n            <\/div><div class=\"bf-buy-cart-note\" hidden=\"\"><p>Tu carrito ya contiene productos. Rev\u00edsalos para continuar o elim\u00ednalos para configurar una nueva compra.<\/p><button type=\"button\" data-review-cart=\"\">Revisar el carrito<\/button><\/div>\n            <p class=\"inline-error\" id=\"bf-eligibility-error\" role=\"alert\" hidden=\"\"><\/p>\n            <p class=\"bf-buy-alert\" hidden=\"\" role=\"alert\"><\/p><p class=\"bf-buy-busy\" hidden=\"\" role=\"status\"><\/p><button class=\"primary desktop-cta\" type=\"button\" data-checkout=\"\">\n                <span data-copy=\"checkout\">Continuar al pago<\/span><svg aria-hidden=\"true\"><use href=\"#bf-i-arrow\"><\/use><\/svg>\n            <\/button>\n            <p class=\"cta-footnote\" data-copy=\"reviewNote\">Revisa tus opciones antes de pagar.<\/p>\n        <\/section>\n    <\/div>\n    <section class=\"how-section\" id=\"bf-how-it-works\" aria-labelledby=\"bf-how-heading\">\n        <div class=\"section-intro\">\n            <h2 id=\"bf-how-heading\" data-copy=\"howHeading\">Peque\u00f1o localizador. Inicio sencillo.<\/h2>\n            <p data-copy=\"howIntro\">De la caja a tu pr\u00f3xima ruta.<\/p>\n        <\/div>\n        <div class=\"how-grid\">\n            <article class=\"how-card\">\n                <span class=\"how-number\">01 \/<\/span>\n                <h3 data-copy=\"installTitle\">Oc\u00faltalo en el manillar.<\/h3>\n                <p data-copy=\"installCopy\">Fija el localizador con la herramienta incluida. Queda discreto para que tu bicicleta conserve su aspecto.<\/p>\n            <\/article>\n            <article class=\"how-card\">\n                <span class=\"how-number\">02 \/<\/span>\n                <h3 data-copy=\"activateTitle\">Con\u00e9ctalo en la app.<\/h3>\n                <p data-copy=\"activateCopy\">Descarga la app BikeFinder, conecta tu localizador y activa la suscripci\u00f3n.<\/p>\n            <\/article>\n            <article class=\"how-card\">\n                <span class=\"how-number\">03 \/<\/span>\n                <h3 data-copy=\"rideTitle\">Disfruta de tu ruta.<\/h3>\n                <p data-copy=\"rideCopy\">Sigue la ubicaci\u00f3n de tu bicicleta en la app y denuncia un robo si necesitas ayuda.<\/p>\n            <\/article>\n        <\/div>\n    <\/section>\n    <section class=\"faq-section\" id=\"bf-questions\" aria-labelledby=\"bf-faq-heading\">\n        <h2 id=\"bf-faq-heading\" data-copy=\"faqHeading\">Conviene saber.<\/h2>\n        <details>\n            <summary data-copy=\"subscriptionQuestion\">\u00bfPor qu\u00e9 necesito una suscripci\u00f3n?<\/summary>\n            <p data-copy=\"subscriptionAnswer\">Una suscripci\u00f3n activa conecta el localizador al servicio BikeFinder y permite localizarlo en la app. El localizador y la suscripci\u00f3n son partes separadas de la compra.<\/p>\n        <\/details>\n        <details>\n            <summary data-copy=\"paymentQuestion\">\u00bfCu\u00e1ndo pago la suscripci\u00f3n?<\/summary>\n            <p data-copy=\"paymentAnswer\">El primer pago de la suscripci\u00f3n est\u00e1 incluido en el importe de hoy. El plan mensual se renueva cada mes. Los planes de 12 o 24 meses se pagan completos y se renuevan con el mismo intervalo. El resumen muestra la renovaci\u00f3n por separado del localizador.<\/p>\n        <\/details>\n        <details>\n            <summary data-copy=\"insuranceQuestion\">\u00bfEst\u00e1 incluido el seguro?<\/summary>\n            <p data-copy=\"insuranceAnswer\">Solo si eliges localizaci\u00f3n con seguro. La disponibilidad, los l\u00edmites de valor y los requisitos dependen del pa\u00eds de entrega y de las condiciones del seguro. El pa\u00eds de entrega por s\u00ed solo no determina el derecho al seguro.<\/p>\n        <\/details>\n        <details>\n            <summary data-copy=\"destinationQuestion\">\u00bfPor qu\u00e9 importa el pa\u00eds de entrega?<\/summary>\n            <p data-copy=\"destinationAnswer\">El pa\u00eds de entrega determina los localizadores, precios y seguros disponibles. Puedes leer la p\u00e1gina en otro idioma sin cambiar estas opciones.<\/p>\n        <\/details>\n        <details>\n            <summary data-copy=\"fitHeading\">\u00bfEs compatible con mi bicicleta?<\/summary>\n            <p data-copy=\"fitCopy\">El localizador se adapta a manillares con un di\u00e1metro interior de 15\u201327 mm. Comprueba el interior del manillar antes de pedirlo.<\/p>\n        <\/details>\n    <\/section>\n    <div class=\"mobile-checkout\">\n        <div class=\"mobile-total\">\n            <small data-copy=\"dueToday\">A pagar hoy<\/small><strong class=\"today-price\"><\/strong>\n        <\/div>\n        <button class=\"primary\" type=\"button\" data-checkout=\"\">\n            <span data-copy=\"checkout\">Continuar al pago<\/span><svg aria-hidden=\"true\"><use href=\"#bf-i-arrow\"><\/use><\/svg>\n        <\/button>\n    <\/div>\n<span data-page-end=\"\" aria-hidden=\"true\" style=\"display: block; height: 1px;\"><\/span><\/div><p class=\"bf-buy-initial-error\" role=\"alert\" hidden><\/p><div class=\"bf-buy-fallback\"><h1>Comprar BikeFinder<\/h1><p data-country-name>Unknown<\/p><div class=\"bf-source-trackers\"><div class=\"woocommerce columns-3 \"><\/div><div class=\"woocommerce columns-3 \"><ul class=\"products columns-3\">\n<li class=\"desktop-align-left tablet-align-left mobile-align-left product type-product post-345378 status-publish first instock product_cat-bikefinder-tracker-es product_cat-tracker-es has-post-thumbnail taxable shipping-taxable purchasable product-type-simple\">\n\t<a href=\"https:\/\/bikefinder.com\/es\/producto\/bikefinder-tracker-bfg2\/\" class=\"woocommerce-LoopProduct-link woocommerce-loop-product__link\"><img loading=\"lazy\" decoding=\"async\" width=\"75\" height=\"75\" src=\"https:\/\/bikefinder.com\/wp-content\/uploads\/2025\/01\/BikeFinder_Tracker_Buy_DE_1-75x75.jpg\" class=\"attachment-woocommerce_thumbnail size-woocommerce_thumbnail\" alt=\"Localizador BikeFinder G2 y embalaje junto a un tel\u00e9fono con la aplicaci\u00f3n de seguimiento\" srcset=\"https:\/\/bikefinder.com\/wp-content\/uploads\/2025\/01\/BikeFinder_Tracker_Buy_DE_1-75x75.jpg 75w, https:\/\/bikefinder.com\/wp-content\/uploads\/2025\/01\/BikeFinder_Tracker_Buy_DE_1-150x150.jpg 150w, https:\/\/bikefinder.com\/wp-content\/uploads\/2025\/01\/BikeFinder_Tracker_Buy_DE_1-100x100.jpg 100w\" sizes=\"auto, (max-width: 75px) 100vw, 75px\" \/><h2 class=\"woocommerce-loop-product__title\">BikeFinder G2 Tracker<\/h2>\n\t<span class=\"price\"><span class=\"woocommerce-Price-amount amount\"><bdi>1.979,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\" translate=\"no\"><span class=\"woocommerce-Price-currencyCode\">NOK<\/span><\/span><\/bdi><\/span><\/span>\n<\/a><a href=\"\/es\/wp-json\/wp\/v2\/pages\/159449?add-to-cart=345378\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_345378\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"345378\" data-product_sku=\"BFG2\" aria-label=\"A\u00f1adir al carrito: &ldquo;BikeFinder G2 Tracker&rdquo;\" rel=\"nofollow\" data-success_message=\"\u00abBikeFinder G2 Tracker\u00bb se ha a\u00f1adido a tu carrito\" role=\"button\">A\u00f1adir al carrito<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_345378\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n<\/li>\n<\/ul>\n<\/div><\/div><div class=\"bf-source-accessory\"><p class=\"product woocommerce add_to_cart_inline bikefinder-native-accessory\" style=\"\"><span class=\"woocommerce-Price-amount amount\"><bdi>135,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\" translate=\"no\"><span class=\"woocommerce-Price-currencyCode\">NOK<\/span><\/span><\/bdi><\/span><a href=\"\/es\/wp-json\/wp\/v2\/pages\/159449?add-to-cart=317931\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_317931\" data-quantity=\"1\" class=\"button product_type_simple add_to_cart_button ajax_add_to_cart\" data-product_id=\"317931\" data-product_sku=\"dummy-bar-end-2\" aria-label=\"A\u00f1adir al carrito: &ldquo;Dummy Bar End&rdquo;\" rel=\"nofollow\" data-success_message=\"\u00abDummy Bar End\u00bb se ha a\u00f1adido a tu carrito\" role=\"button\">A\u00f1adir al carrito<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_317931\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n<\/p><\/div><h2>Suscripciones de localizaci\u00f3n<\/h2><div class=\"bf-buy-native-plan\" data-tier=\"0\" data-months=\"24\" data-product-id=\"162334\"><h3>24 meses<\/h3><p class=\"product woocommerce add_to_cart_inline bikefinder-native-plan\" style=\"\"><span class=\"woocommerce-Price-amount amount\"><bdi>1.320,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\" translate=\"no\"><span class=\"woocommerce-Price-currencyCode\">NOK<\/span><\/span><\/bdi><\/span> <span class=\"subscription-details\"> cada 2 a\u00f1os<\/span><a href=\"https:\/\/bikefinder.com\/es\/producto\/subscription-2\/?attribute_payment-period=24+months&#038;attribute_tier=Tier+0&#038;variation_id=162334&#038;add-to-cart=162318\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_162334\" data-quantity=\"1\" class=\"button product_type_subscription_variation add_to_cart_button ajax_add_to_cart\" data-product_id=\"162334\" data-product_sku=\"subscription-24months-tier0-v2\" aria-label=\"A\u00f1adir al carrito: &ldquo;Subscription&rdquo;\" rel=\"nofollow\" data-success_message=\"\u00abSubscription\u00bb se ha a\u00f1adido a tu carrito\" role=\"button\">A\u00f1adir al carrito<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_162334\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n<\/p><\/div>\n<div class=\"bf-buy-native-plan\" data-tier=\"0\" data-months=\"12\" data-product-id=\"162333\"><h3>12 meses<\/h3><p class=\"product woocommerce add_to_cart_inline bikefinder-native-plan\" style=\"\"><span class=\"woocommerce-Price-amount amount\"><bdi>708,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\" translate=\"no\"><span class=\"woocommerce-Price-currencyCode\">NOK<\/span><\/span><\/bdi><\/span> <span class=\"subscription-details\"> \/ a\u00f1o<\/span><a href=\"https:\/\/bikefinder.com\/es\/producto\/subscription-2\/?attribute_payment-period=12+months&#038;attribute_tier=Tier+0&#038;variation_id=162333&#038;add-to-cart=162318\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_162333\" data-quantity=\"1\" class=\"button product_type_subscription_variation add_to_cart_button ajax_add_to_cart\" data-product_id=\"162333\" data-product_sku=\"subscription-12months-tier0-v2\" aria-label=\"A\u00f1adir al carrito: &ldquo;Subscription&rdquo;\" rel=\"nofollow\" data-success_message=\"\u00abSubscription\u00bb se ha a\u00f1adido a tu carrito\" role=\"button\">A\u00f1adir al carrito<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_162333\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n<\/p><\/div>\n<div class=\"bf-buy-native-plan\" data-tier=\"0\" data-months=\"1\" data-product-id=\"162332\"><h3>1 mes<\/h3><p class=\"product woocommerce add_to_cart_inline bikefinder-native-plan\" style=\"\"><span class=\"woocommerce-Price-amount amount\"><bdi>69,00&nbsp;<span class=\"woocommerce-Price-currencySymbol\" translate=\"no\"><span class=\"woocommerce-Price-currencyCode\">NOK<\/span><\/span><\/bdi><\/span> <span class=\"subscription-details\"> \/ mes<\/span><a href=\"https:\/\/bikefinder.com\/es\/producto\/subscription-2\/?attribute_payment-period=1+month&#038;attribute_tier=Tier+0&#038;variation_id=162332&#038;add-to-cart=162318\" aria-describedby=\"woocommerce_loop_add_to_cart_link_describedby_162332\" data-quantity=\"1\" class=\"button product_type_subscription_variation add_to_cart_button ajax_add_to_cart\" data-product_id=\"162332\" data-product_sku=\"subscription-1months-tier0-v2\" aria-label=\"A\u00f1adir al carrito: &ldquo;Subscription&rdquo;\" rel=\"nofollow\" data-success_message=\"\u00abSubscription\u00bb se ha a\u00f1adido a tu carrito\" role=\"button\">A\u00f1adir al carrito<\/a>\t<span id=\"woocommerce_loop_add_to_cart_link_describedby_162332\" class=\"screen-reader-text\">\n\t\t\t<\/span>\n<\/p><\/div>\n\n\n\n\n\n\n\n\n<\/div><script type=\"application\/json\" class=\"bf-buy-config\">{\"locale\":\"es-ES\",\"copy\":{\"eyebrow\":\"Un peque\u00f1o localizador. M\u00e1s tranquilidad.\",\"heroOne\":\"Pedalea m\u00e1s.\",\"heroTwo\":\"Preoc\u00fapate menos.\",\"intro\":\"Oculto en el manillar. Conectado a tu m\u00f3vil. Haz que BikeFinder te acompa\u00f1e en tu pr\u00f3xima ruta.\",\"designed\":\"Dise\u00f1ado en Noruega\",\"hidden\":\"Oculto en el manillar\",\"trackFeature\":\"Localiza tu bicicleta\",\"installFeature\":\"Inst\u00e1lalo t\u00fa mismo\",\"appFeature\":\"Conectado a la app\",\"boxHeading\":\"\u00bfQu\u00e9 incluye la caja?\",\"fitHeading\":\"\u00bfEs compatible con mi bicicleta?\",\"fitCopy\":\"El localizador se adapta a manillares con un di\u00e1metro interior de 15\u201327 mm. Comprueba el interior del manillar antes de pedirlo.\",\"configTitle\":\"Configura tu BikeFinder.\",\"alreadyOwn\":\"\u00bfYa tienes un localizador? Elige solo la suscripci\u00f3n.\",\"protectionTitle\":\"Elige tu protecci\u00f3n\",\"tracking\":\"Localizaci\u00f3n\",\"trackingDesc\":\"Localiza tu bicicleta en la app. Sin seguro incluido.\",\"insured\":\"Localizaci\u00f3n + seguro\",\"insuredDesc\":\"Localizaci\u00f3n con seguro de bicicleta opcional.\",\"valueLabel\":\"Elige un l\u00edmite de valor de bicicleta\",\"policy\":\"Condiciones del seguro \u2197\",\"ipid\":\"Informaci\u00f3n del producto \u2197\",\"billingTitle\":\"Elige cada cu\u00e1nto pagar\",\"accessory\":\"A\u00f1adir un DummyBarEnd a juego\",\"accessoryHelp\":\"Un tap\u00f3n a juego para el otro extremo.\",\"dueToday\":\"A pagar hoy\",\"shippingNote\":\"El env\u00edo y los impuestos finales se calculan al pagar.\",\"checkout\":\"Continuar al pago\",\"reviewNote\":\"Revisa tus opciones antes de pagar.\",\"howHeading\":\"Peque\u00f1o localizador. Inicio sencillo.\",\"howIntro\":\"De la caja a tu pr\u00f3xima ruta.\",\"installTitle\":\"Oc\u00faltalo en el manillar.\",\"installCopy\":\"Fija el localizador con la herramienta incluida. Queda discreto para que tu bicicleta conserve su aspecto.\",\"activateTitle\":\"Con\u00e9ctalo en la app.\",\"activateCopy\":\"Descarga la app BikeFinder, conecta tu localizador y activa la suscripci\u00f3n.\",\"rideTitle\":\"Disfruta de tu ruta.\",\"rideCopy\":\"Sigue la ubicaci\u00f3n de tu bicicleta en la app y denuncia un robo si necesitas ayuda.\",\"faqHeading\":\"Conviene saber.\",\"subscriptionQuestion\":\"\u00bfPor qu\u00e9 necesito una suscripci\u00f3n?\",\"subscriptionAnswer\":\"Una suscripci\u00f3n activa conecta el localizador al servicio BikeFinder y permite localizarlo en la app. El localizador y la suscripci\u00f3n son partes separadas de la compra.\",\"paymentQuestion\":\"\u00bfCu\u00e1ndo pago la suscripci\u00f3n?\",\"paymentAnswer\":\"El primer pago de la suscripci\u00f3n est\u00e1 incluido en el importe de hoy. El plan mensual se renueva cada mes. Los planes de 12 o 24 meses se pagan completos y se renuevan con el mismo intervalo. El resumen muestra la renovaci\u00f3n por separado del localizador.\",\"insuranceQuestion\":\"\u00bfEst\u00e1 incluido el seguro?\",\"insuranceAnswer\":\"Solo si eliges localizaci\u00f3n con seguro. La disponibilidad, los l\u00edmites de valor y los requisitos dependen del pa\u00eds de entrega y de las condiciones del seguro. El pa\u00eds de entrega por s\u00ed solo no determina el derecho al seguro.\",\"destinationQuestion\":\"\u00bfPor qu\u00e9 importa el pa\u00eds de entrega?\",\"destinationAnswer\":\"El pa\u00eds de entrega determina los localizadores, precios y seguros disponibles. Puedes leer la p\u00e1gina en otro idioma sin cambiar estas opciones.\",\"month\":\"mes\",\"months\":\"meses\",\"monthly\":\"Mensual\",\"billed\":\"a pagar\",\"save\":\"Ahorra\",\"perMonth\":\"\/mes\",\"destination\":\"Tu configuraci\u00f3n para entrega en\",\"hardwareHelp\":\"Localizador + kit de instalaci\u00f3n \u00b7 compra \u00fanica\",\"ownerHelp\":\"Solo suscripci\u00f3n \u00b7 localizador no incluido\",\"ownerLabel\":\"Tu localizador actual\",\"billingMonthly\":\"Pago mensual. El primer mes est\u00e1 incluido abajo.\",\"billingLong\":\"Pago completo, sin cuotas mensuales. Se renueva con el mismo intervalo.\",\"renewal\":\"Despu\u00e9s\",\"renewalMonth\":\"cada mes\",\"renewalLong\":\"cada\",\"planFirst\":\"primeros\",\"valueUp\":\"Valor de bicicleta hasta\",\"eligibility\":\"El seguro es opcional. La cobertura y los requisitos se rigen por las condiciones. Se requiere residencia permanente en\",\"eligibilityEnd\":\"El pa\u00eds de entrega por s\u00ed solo no determina el derecho al seguro.\",\"germanEligibility\":\"Esta es la opci\u00f3n de seguro alemana. Consulta las condiciones para conocer la cobertura y los requisitos.\",\"residence\":\"Tengo mi residencia permanente en\",\"error\":\"Confirma tu residencia permanente en el pa\u00eds de entrega para este seguro. En caso contrario, elige localizaci\u00f3n sin seguro.\",\"unavailable\":\"El seguro de bicicleta no est\u00e1 disponible para entregas en\",\"stillTracking\":\"La localizaci\u00f3n est\u00e1 disponible.\",\"boxG2\":\"Localizador, adaptador de manillar, cable de carga, herramienta de instalaci\u00f3n, herramienta para extraer el m\u00f3dulo de bater\u00eda y gu\u00eda de usuario.\",\"boxG1\":\"Localizador, adaptador de manillar, cable USB-C, herramienta de instalaci\u00f3n y gu\u00eda de usuario.\",\"priceUnavailable\":\"No hemos podido cargar tu configuraci\u00f3n. Puedes usar las opciones de producto de abajo.\",\"checkoutError\":\"No hemos podido a\u00f1adir el producto. Revisa el carrito o int\u00e9ntalo de nuevo.\",\"partialError\":\"Puede que algunos productos ya est\u00e9n en tu carrito. Rev\u00edsalos antes de cambiar tu selecci\u00f3n o repite la misma selecci\u00f3n.\",\"existingCart\":\"Tu carrito ya contiene productos. Rev\u00edsalos para continuar o elim\u00ednalos para configurar una nueva compra.\",\"reviewCart\":\"Revisar el carrito\",\"retry\":\"Intentar de nuevo\",\"adding\":\"A\u00f1adiendo tu selecci\u00f3n\u2026\",\"deliveryChanged\":\"Tu pa\u00eds de entrega ha cambiado. Recarga la p\u00e1gina para ver la configuraci\u00f3n correcta.\",\"unavailableHardware\":\"El localizador no est\u00e1 disponible ahora. Puedes elegir una suscripci\u00f3n para un localizador que ya tengas.\",\"fallbackTitle\":\"Comprar BikeFinder\",\"fallbackTracking\":\"Suscripciones de localizaci\u00f3n\",\"fallbackInsurance\":\"Localizaci\u00f3n con seguro\"},\"models\":{\"160455\":{\"role\":\"g1\",\"name\":\"BikeFinder G1\",\"image\":{\"id\":160457,\"src\":\"https:\/\/bikefinder.com\/wp-content\/uploads\/2020\/03\/IMG_0553-scaled.jpg\",\"alt\":\"Localizador BikeFinder, cable de carga y herramientas junto al embalaje\"}},\"185645\":{\"role\":\"fahrradfinden\",\"name\":\"FahrradFinden G1\",\"image\":{\"id\":185826,\"src\":\"https:\/\/bikefinder.com\/wp-content\/uploads\/2022\/08\/50-FahradFinden-net-shop-photo-3893-e1664871102963.jpg\",\"alt\":\"Localizador FahrradFinden, cable de carga y accesorios junto al embalaje\"}},\"345378\":{\"role\":\"g2\",\"name\":\"BikeFinder G2\",\"image\":{\"id\":312863,\"src\":\"https:\/\/bikefinder.com\/wp-content\/uploads\/2025\/01\/BikeFinder_Tracker_Buy_2.jpg\",\"alt\":\"Localizador BikeFinder G2 en posici\u00f3n vertical\"}}}}<\/script><\/main>\n<script>\/** Buying-page presentation over native WooCommerce shortcodes and cart endpoints. *\/\n(function () {\n    'use strict';\n\n    async function initialise() {\n        const root = document.querySelector('.bf-buy');\n        if (!root || root.dataset.initialised) return;\n        root.dataset.initialised = 'true';\n        const config = JSON.parse(root.querySelector('.bf-buy-config').textContent);\n        const copy = config.copy;\n        const find = (id) => root.querySelector('#bf-' + id);\n        const note = root.querySelector('.bf-buy-cart-note');\n        const source = root.querySelector('.bf-buy-fallback');\n        const ajaxParams = window.wc_add_to_cart_params;\n        const currencyMeta = {};\n        const state = {\n            insurance: false,\n            tier: 1,\n            months: 12,\n            owner: false,\n            accessory: false,\n            busy: false,\n            job: null,\n            cart: null,\n        };\n        const market = source.querySelector('[data-offer-zone]');\n        const countryName = source.querySelector('[data-country-name]').textContent.trim();\n        const country = () =>\n            document.querySelector('select.wcpbc-country-switcher')?.value ||\n            state.cart?.shipping_address?.country;\n        const expectedCountry = country();\n        const plans = new Map();\n        let tracker;\n        let accessory;\n\n        function rememberSelection() {\n            try {\n                window.sessionStorage.setItem(\n                    'bikefinder-buying-selection',\n                    JSON.stringify({\n                        country: state.cart.shipping_address.country,\n                        insurance: state.insurance,\n                        tier: state.tier,\n                        months: state.months,\n                        owner: state.owner,\n                        accessory: state.accessory,\n                        residence: find('residence').checked,\n                    }),\n                );\n            } catch {\n                \/* Browser storage is optional; native products remain usable. *\/\n            }\n        }\n\n        function restoreSelection() {\n            try {\n                const saved = JSON.parse(\n                    window.sessionStorage.getItem('bikefinder-buying-selection'),\n                );\n                if (!saved) return;\n                if ([1, 12, 24].includes(saved.months)) state.months = saved.months;\n                state.owner = saved.owner === true;\n                state.accessory = saved.accessory === true;\n                if (saved.country === state.cart.shipping_address.country) {\n                    if (Number.isInteger(saved.tier) && plans.has(`${saved.tier}-${state.months}`))\n                        state.tier = saved.tier;\n                    state.insurance =\n                        saved.insurance === true &&\n                        Boolean(market.dataset.insuranceCountry) &&\n                        plans.has(`${state.tier}-${state.months}`);\n                    find('residence').checked = saved.residence === true;\n                }\n            } catch {\n                \/* Ignore a missing or outdated draft. *\/\n            }\n        }\n\n        function message(text) {\n            const alert = root.querySelector(\n                root.classList.contains('is-ready') ? '.bf-buy-alert' : '.bf-buy-initial-error',\n            );\n            alert.textContent = text;\n            alert.hidden = !text;\n        }\n\n        async function json(url, options = {}) {\n            const response = await fetch(url, {\n                credentials: 'same-origin',\n                cache: 'no-store',\n                signal: AbortSignal.timeout(20000),\n                ...options,\n            });\n            if (!response.ok) throw new Error(copy.checkoutError);\n            const result = await response.json();\n            return result;\n        }\n\n        const cart = () => json('\/wp-json\/wc\/store\/v1\/cart?bf_buy=' + Date.now());\n        const quantity = (data, id) =>\n            data.items\n                .filter((item) => Number(item.id) === Number(id))\n                .reduce((sum, item) => sum + item.quantity, 0);\n        const selectedPlan = () => plans.get(`${state.insurance ? state.tier : 0}-${state.months}`);\n\n        function parsePrice(element) {\n            const amount =\n                element?.querySelector('ins .woocommerce-Price-amount') ||\n                element?.querySelector('.woocommerce-Price-amount');\n            if (!amount) return null;\n            const text = amount.textContent;\n            const stripped = text\n                .replaceAll(currencyMeta.currency_thousand_separator, '')\n                .replace(\/[^\\d.,-]\/g, '')\n                .replace(currencyMeta.currency_decimal_separator, '.');\n            const number = Number(stripped);\n            return Number.isFinite(number) && number >= 0\n                ? Math.round(number * 10 ** currencyMeta.currency_minor_unit)\n                : null;\n        }\n\n        function money(minor) {\n            return new Intl.NumberFormat(config.locale, {\n                style: 'currency',\n                currency: currencyMeta.currency_code,\n                minimumFractionDigits:\n                    minor % 10 ** currencyMeta.currency_minor_unit\n                        ? currencyMeta.currency_minor_unit\n                        : 0,\n                maximumFractionDigits: currencyMeta.currency_minor_unit,\n            }).format(minor \/ 10 ** currencyMeta.currency_minor_unit);\n        }\n\n        function nativeProduct(element) {\n            const button = element?.querySelector('.add_to_cart_button[data-product_id]');\n            const price = parsePrice(element?.querySelector('.price') || element);\n            return button && price !== null\n                ? { id: Number(button.dataset.product_id), price, button }\n                : null;\n        }\n\n        function setPrice(selector, price) {\n            root.querySelectorAll(selector).forEach((el) => {\n                el.textContent = money(price);\n            });\n        }\n\n        function openCart() {\n            if (window.jQuery && window.fkcart_app_data) {\n                window.jQuery(document.body).trigger('fkcart_open');\n            } else if (ajaxParams?.cart_url) {\n                window.location.assign(ajaxParams.cart_url);\n            }\n        }\n\n        function setBusy(busy) {\n            state.busy = busy;\n            root.querySelector('.configurator').setAttribute('aria-busy', String(busy));\n            root.querySelectorAll(\n                '.bf-buy-app input, .bf-buy-app select, .bf-buy-app button',\n            ).forEach((el) => {\n                if (busy) {\n                    el.dataset.wasDisabled = el.disabled ? 'true' : 'false';\n                    el.disabled = true;\n                } else {\n                    el.disabled = el.dataset.wasDisabled === 'true';\n                    delete el.dataset.wasDisabled;\n                }\n            });\n            root.querySelector('.bf-buy-busy').hidden = !busy;\n        }\n\n        function renderBilling() {\n            const active = root.ownerDocument.activeElement;\n            const focused = active?.name === 'bf-billing' ? active.value : null;\n            const tier = state.insurance ? state.tier : 0;\n            const monthly = plans.get(`${tier}-1`);\n            const holder = find('billing-choices');\n            holder.replaceChildren();\n            [1, 12, 24].forEach((months) => {\n                const plan = plans.get(`${tier}-${months}`);\n                const label = document.createElement('label');\n                label.className = 'choice';\n                const input = document.createElement('input');\n                input.type = 'radio';\n                input.name = 'bf-billing';\n                input.value = months;\n                input.checked = state.months === months;\n                input.disabled = !plan;\n                const face = document.createElement('span');\n                face.className = 'choice-face';\n                const title = document.createElement('strong');\n                title.textContent = months === 1 ? copy.monthly : `${months} ${copy.months}`;\n                const equivalent = document.createElement('span');\n                equivalent.className = 'monthly-price';\n                equivalent.textContent = plan ? money(Math.round(plan.price \/ months)) : '\u2014';\n                const suffix = document.createElement('span');\n                suffix.className = 'per-month';\n                suffix.textContent = copy.perMonth;\n                const billed = document.createElement('small');\n                billed.className = 'billed';\n                \/\/ Retain Subscriptions' native billing\/trial\/signup text instead of reconstructing it.\n                if (plan) billed.append(plan.nativePrice.cloneNode(true));\n                const saving =\n                    plan && monthly\n                        ? Math.round((1 - plan.price \/ (monthly.price * months)) * 100)\n                        : 0;\n                const badge = document.createElement('span');\n                badge.className = 'saving';\n                badge.textContent = saving > 0 ? `${copy.save} ${saving}%` : '\u2014';\n                if (!(saving > 0)) {\n                    badge.style.visibility = 'hidden';\n                    badge.setAttribute('aria-hidden', 'true');\n                }\n                face.append(title, equivalent, suffix, billed, badge);\n                label.append(input, face);\n                holder.append(label);\n            });\n            if (focused) holder.querySelector(`input[value=\"${focused}\"]`).focus();\n        }\n\n        function render() {\n            const plan = selectedPlan();\n            const stock = Boolean(tracker);\n            const hasCart = state.cart?.items.length > 0 && !state.job;\n            const hardwarePrice = tracker ? money(tracker.price) : '\u2014';\n            find('hardware-price').textContent = state.owner ? '\u2014' : hardwarePrice;\n            find('hardware-name').textContent = state.owner\n                ? copy.ownerLabel\n                : config.models[config.trackerId]?.name || copy.fallbackTitle;\n            find('hardware-help').textContent = state.owner ? copy.ownerHelp : copy.hardwareHelp;\n            find('existing-owner').checked = state.owner;\n            find('accessory').checked = state.accessory;\n            find('bike-value').value = String(state.tier);\n            root.querySelectorAll('input[name=\"bf-protection\"]').forEach((input) => {\n                input.checked = (input.value === 'insurance') === state.insurance;\n            });\n            find('accessory-row').hidden = state.owner || !accessory;\n            find('insurance-box').hidden = !state.insurance;\n            find('insurance-option').disabled = !market?.dataset.insuranceCountry;\n            find('insurance-unavailable').hidden = Boolean(market?.dataset.insuranceCountry);\n            find('insurance-unavailable').textContent =\n                `${copy.unavailable} ${countryName}. ${copy.stillTracking}`;\n            find('billing-note').textContent =\n                state.months === 1 ? copy.billingMonthly : copy.billingLong;\n            renderBilling();\n            find('tracker-summary-row').hidden = state.owner;\n            if (tracker) find('tracker-summary-price').textContent = money(tracker.price);\n            find('plan-summary-label').textContent =\n                `${state.insurance ? copy.insured : copy.tracking} \u00b7 ${state.months} ${state.months === 1 ? copy.month : copy.months}`;\n            find('plan-summary-price').textContent = plan ? money(plan.price) : '\u2014';\n            find('accessory-summary-row').hidden = !accessory || !state.accessory || state.owner;\n            if (accessory) {\n                find('accessory-price').textContent = '+ ' + money(accessory.price);\n                find('accessory-summary-price').textContent = money(accessory.price);\n            }\n            const total =\n                (plan?.price || 0) +\n                (state.owner ? 0 : tracker?.price || 0) +\n                (state.accessory && !state.owner ? accessory?.price || 0 : 0);\n            setPrice('.today-price', total);\n            find('renewal-copy').textContent = plan\n                ? `${copy.renewal} ${money(plan.price)} ${state.months === 1 ? copy.renewalMonth : `${copy.renewalLong} ${state.months} ${copy.months}`}.`\n                : '';\n            note.hidden = !hasCart;\n            const purchaseLabel = state.job ? copy.retry : copy.checkout;\n            root.querySelectorAll('[data-checkout]').forEach((button) => {\n                button.querySelector('span').textContent = hasCart\n                    ? copy.reviewCart\n                    : purchaseLabel;\n                button.setAttribute(\n                    'aria-disabled',\n                    String(!hasCart && (!plan || (!stock && !state.owner))),\n                );\n            });\n            find('eligibility-error').hidden = true;\n            if (!stock && !state.owner) message(copy.unavailableHardware);\n            rememberSelection();\n        }\n\n        function checkoutUrl(fragments) {\n            const fragment = Object.values(fragments || {})\n                .filter((value) => typeof value === 'string')\n                .join('');\n            const document = new window.DOMParser().parseFromString(fragment, 'text\/html');\n            const anchor =\n                document.querySelector('#fkcart-checkout-button, a.checkout.wc-forward') ||\n                window.document.querySelector('#fkcart-checkout-button, a.checkout.wc-forward');\n            if (anchor) {\n                const url = new URL(anchor.href, window.location.href);\n                if (url.origin === window.location.origin) return url.href;\n            }\n            return ajaxParams.cart_url;\n        }\n\n        async function purchase() {\n            if (state.busy) return;\n            if (state.cart.items.length && !state.job) {\n                openCart();\n                return;\n            }\n            if (!selectedPlan() || (!state.owner && !tracker)) return;\n            if (\n                state.insurance &&\n                market.dataset.residence === 'required' &&\n                !find('residence').checked\n            ) {\n                find('eligibility-error').textContent = copy.error;\n                find('eligibility-error').hidden = false;\n                find('residence').focus();\n                return;\n            }\n            const products = [\n                ...(!state.owner ? [tracker.id] : []),\n                selectedPlan().id,\n                ...(state.accessory && !state.owner && accessory ? [accessory.id] : []),\n            ];\n            const fingerprint = products.join(',');\n            if (state.job && state.job.fingerprint !== fingerprint) {\n                message(copy.partialError);\n                openCart();\n                return;\n            }\n            setBusy(true);\n            message('');\n            try {\n                let current = await cart();\n                if (expectedCountry && current.shipping_address.country !== expectedCountry)\n                    throw new Error(copy.deliveryChanged);\n                if (!state.job && current.items.length) {\n                    state.cart = current;\n                    setBusy(false);\n                    render();\n                    openCart();\n                    return;\n                }\n                state.job ||= {\n                    fingerprint,\n                    index: 0,\n                    products,\n                    baseline: Object.fromEntries(products.map((id) => [id, quantity(current, id)])),\n                    fragments: null,\n                };\n                const job = state.job;\n                for (; job.index !== job.products.length; job.index++) {\n                    const id = job.products[job.index];\n                    current = await cart();\n                    const wanted = job.baseline[id] + 1;\n                    \/\/ A previous timed-out request may already have succeeded. Never add it twice.\n                    if (quantity(current, id) === wanted) continue;\n                    if (quantity(current, id) !== job.baseline[id])\n                        throw new Error(copy.partialError);\n                    let result;\n                    try {\n                        result = await json(\n                            ajaxParams.wc_ajax_url.replace('%%endpoint%%', 'add_to_cart'),\n                            {\n                                method: 'POST',\n                                headers: {\n                                    'Content-Type':\n                                        'application\/x-www-form-urlencoded; charset=UTF-8',\n                                },\n                                body: new URLSearchParams({ product_id: id, quantity: '1' }),\n                            },\n                        );\n                    } catch (error) {\n                        current = await cart();\n                        if (quantity(current, id) !== wanted) throw error;\n                    }\n                    if (result?.error) throw new Error(copy.checkoutError);\n                    if (result?.fragments) job.fragments = result.fragments;\n                    current = await cart();\n                    if (quantity(current, id) !== wanted) throw new Error(copy.partialError);\n                }\n                state.cart = await cart();\n                if (expectedCountry && state.cart.shipping_address.country !== expectedCountry)\n                    throw new Error(copy.deliveryChanged);\n                \/\/ FunnelKit supplies the translated checkout link and native live fragments.\n                if (window.jQuery && window.fkcart_app_data?.wc_endpoints?.fkcart_get_slide_cart) {\n                    const response = await json(\n                        window.fkcart_app_data.wc_endpoints.fkcart_get_slide_cart,\n                        { method: 'POST' },\n                    );\n                    if (response.fragments) job.fragments = response.fragments;\n                }\n                if (window.jQuery && job.fragments)\n                    window\n                        .jQuery(document.body)\n                        .trigger('added_to_cart', [\n                            job.fragments,\n                            '',\n                            window.jQuery(selectedPlan().button),\n                        ]);\n                window.location.assign(checkoutUrl(job.fragments));\n            } catch (error) {\n                message(error.message || copy.checkoutError);\n                try {\n                    state.cart = await cart();\n                } catch {\n                    \/* Preserve the attempt so a retry cannot duplicate it. *\/\n                }\n                if (state.job?.index === 0 && !state.cart.items.length) state.job = null;\n                setBusy(false);\n                render();\n            }\n        }\n\n        try {\n            if (!ajaxParams?.wc_ajax_url || !ajaxParams.cart_url)\n                throw new Error(copy.priceUnavailable);\n            if (!market || source.querySelectorAll('[data-offer-zone]').length !== 1)\n                throw new Error(copy.priceUnavailable);\n            const trackerCards = source.querySelectorAll('.bf-source-trackers li.product');\n            if (trackerCards.length > 1) throw new Error(copy.priceUnavailable);\n            state.cart = await cart();\n            Object.assign(currencyMeta, state.cart.totals);\n            if (expectedCountry && state.cart.shipping_address.country !== expectedCountry)\n                throw new Error(copy.deliveryChanged);\n            tracker = nativeProduct(trackerCards[0]);\n            const title = trackerCards[0]\n                ?.querySelector('.woocommerce-loop-product__title')\n                ?.textContent.trim();\n            config.trackerId =\n                tracker?.id || Number(trackerCards[0]?.className.match(\/\\bpost-(\\d+)\\b\/)?.[1]);\n            const model = config.models[config.trackerId];\n            source.querySelectorAll('.bf-buy-native-plan').forEach((el) => {\n                const product = nativeProduct(el);\n                if (product) {\n                    product.nativePrice = el.querySelector('p');\n                    product.nativePrice = product.nativePrice.cloneNode(true);\n                    product.nativePrice.querySelectorAll('a').forEach((a) => a.remove());\n                    plans.set(`${el.dataset.tier}-${el.dataset.months}`, product);\n                }\n            });\n            accessory = nativeProduct(source.querySelector('.bf-source-accessory'));\n            if (![1, 12, 24].every((months) => plans.has('0-' + months)))\n                throw new Error(copy.priceUnavailable);\n            root.querySelectorAll('.model-name').forEach((el) => {\n                el.textContent = title || model?.name || '';\n            });\n            find('destination-copy').textContent = `${copy.destination} ${countryName}.`;\n            find('product-stage').dataset.model = model?.role || 'g2';\n            find('technology').textContent =\n                model?.role === 'g2' ? 'Wi-Fi \u00b7 GPS \u00b7 LTE \u00b7 Bluetooth' : 'GPS \u00b7 GSM \u00b7 Bluetooth';\n            find('box-copy').textContent = model?.role === 'g2' ? copy.boxG2 : copy.boxG1;\n            const image = trackerCards[0]?.querySelector('img');\n            if (image) {\n                find('product-photo').src = model?.image?.src || image.src;\n                find('product-photo').alt = model?.image?.alt || image.alt || title;\n            }\n            const tiers = market ? JSON.parse(market.dataset.bands) : [];\n            find('bike-value').replaceChildren(\n                ...tiers.map(\n                    (value, index) =>\n                        new window.Option(\n                            `${copy.valueUp} ${money(value * 10 ** currencyMeta.currency_minor_unit)}`,\n                            index + 1,\n                        ),\n                ),\n            );\n            find('residence-label').hidden = market?.dataset.residence !== 'required';\n            find('residence-copy').textContent = `${copy.residence} ${countryName}.`;\n            find('eligibility-copy').textContent =\n                market?.dataset.residence === 'required'\n                    ? `${copy.eligibility} ${countryName}. ${copy.eligibilityEnd}`\n                    : copy.germanEligibility;\n            if (market?.dataset.insuranceCountry) {\n                find('policy-link').href = `\/terms\/${market.dataset.offerZone}\/`;\n                find('ipid-link').href = `\/ipid\/${market.dataset.offerZone}\/`;\n            }\n            root.querySelectorAll('input[name=\"protection\"]').forEach((input) => {\n                input.name = 'bf-protection';\n                input.addEventListener('change', (event) => {\n                    state.insurance = event.target.value === 'insurance';\n                    render();\n                });\n            });\n            find('billing-choices').addEventListener('change', (event) => {\n                state.months = Number(event.target.value);\n                render();\n            });\n            find('bike-value').addEventListener('change', (event) => {\n                state.tier = Number(event.target.value);\n                render();\n            });\n            find('existing-owner').addEventListener('change', (event) => {\n                state.owner = event.target.checked;\n                render();\n            });\n            find('accessory').addEventListener('change', (event) => {\n                state.accessory = event.target.checked;\n                render();\n            });\n            find('residence').addEventListener('change', () => {\n                find('eligibility-error').hidden = true;\n                rememberSelection();\n            });\n            root.querySelectorAll('[data-checkout]').forEach((button) => {\n                button.addEventListener('click', purchase);\n            });\n            root.querySelector('[data-review-cart]').addEventListener('click', openCart);\n            root.querySelector('.bf-buy-busy').textContent = copy.adding;\n            if (window.jQuery)\n                window\n                    .jQuery(document.body)\n                    .on('removed_from_cart.bfbuy wc_fragments_refreshed.bfbuy', async () => {\n                        if (state.busy) return;\n                        try {\n                            state.cart = await cart();\n                            if (!state.cart.items.length) state.job = null;\n                            render();\n                        } catch {\n                            \/* Keep the existing review-cart path. *\/\n                        }\n                    });\n            const end = root.querySelector('[data-page-end]');\n            if (window.IntersectionObserver)\n                new window.IntersectionObserver((entries) => {\n                    root.querySelector('.mobile-checkout').hidden = entries[0].isIntersecting;\n                }).observe(end);\n            restoreSelection();\n            render();\n            root.classList.add('is-ready');\n        } catch (error) {\n            message(error.message || copy.priceUnavailable);\n            \/\/ Native product\/plan buttons remain usable if the enhancement cannot initialise.\n        }\n    }\n    if (document.readyState === 'loading')\n        document.addEventListener('DOMContentLoaded', initialise);\n    else initialise();\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Un peque\u00f1o localizador. M\u00e1s tranquilidad. Pedalea m\u00e1s.Preoc\u00fapate menos. Oculto en el manillar. Conectado a tu m\u00f3vil. Haz que BikeFinder te acompa\u00f1e en tu pr\u00f3xima ruta. BikeFinder G2Dise\u00f1ado en Noruega Oculto en el manillarWi-Fi \u00b7 GPS \u00b7 LTE \u00b7 Bluetooth Localiza tu bicicleta Inst\u00e1lalo t\u00fa mismo Conectado a la app \u00bfQu\u00e9 incluye la caja? \u00bfEs compatible [&hellip;]<\/p>\n","protected":false},"author":7498,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"block-theme-template.php","meta":{"inline_featured_image":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"unboxed","site-sidebar-style":"unboxed","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-159449","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SHOP - BikeFinder<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bikefinder.com\/buy\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SHOP - BikeFinder\" \/>\n<meta property=\"og:description\" content=\"Un peque\u00f1o localizador. M\u00e1s tranquilidad. Pedalea m\u00e1s.Preoc\u00fapate menos. Oculto en el manillar. Conectado a tu m\u00f3vil. Haz que BikeFinder te acompa\u00f1e en tu pr\u00f3xima ruta. BikeFinder G2Dise\u00f1ado en Noruega Oculto en el manillarWi-Fi \u00b7 GPS \u00b7 LTE \u00b7 Bluetooth Localiza tu bicicleta Inst\u00e1lalo t\u00fa mismo Conectado a la app \u00bfQu\u00e9 incluye la caja? \u00bfEs compatible [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bikefinder.com\/buy\/\" \/>\n<meta property=\"og:site_name\" content=\"BikeFinder\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/teambikefinder\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-11T02:07:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bikefinder.com\/wp-content\/uploads\/2025\/09\/Box-design-clean-no-logo-PNG_without-side-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1962\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@TeamBikeFinder\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":[\"WebPage\",\"ItemPage\"],\"@id\":\"https:\\\/\\\/bikefinder.com\\\/buy\\\/\",\"url\":\"https:\\\/\\\/bikefinder.com\\\/buy\\\/\",\"name\":\"SHOP - BikeFinder\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bikefinder.com\\\/#website\"},\"datePublished\":\"2021-12-29T08:12:51+00:00\",\"dateModified\":\"2026-10-11T02:07:03+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bikefinder.com\\\/buy\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bikefinder.com\\\/buy\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bikefinder.com\\\/buy\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bikefinder.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SHOP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bikefinder.com\\\/#website\",\"url\":\"https:\\\/\\\/bikefinder.com\\\/\",\"name\":\"BikeFinder\",\"description\":\"GPS-sporing og forsikring til sykkel\",\"publisher\":{\"@id\":\"https:\\\/\\\/bikefinder.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bikefinder.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/bikefinder.com\\\/#organization\",\"name\":\"BikeFinder\",\"url\":\"https:\\\/\\\/bikefinder.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/bikefinder.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/bikefinder.com\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/logo_drop_big.png\",\"contentUrl\":\"https:\\\/\\\/bikefinder.com\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/logo_drop_big.png\",\"width\":200,\"height\":200,\"caption\":\"BikeFinder\"},\"image\":{\"@id\":\"https:\\\/\\\/bikefinder.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/teambikefinder\",\"https:\\\/\\\/x.com\\\/TeamBikeFinder\",\"https:\\\/\\\/www.instagram.com\\\/teambikefinder\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@teambikefinder\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/bikefinder\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SHOP - BikeFinder","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bikefinder.com\/buy\/","og_locale":"es_ES","og_type":"article","og_title":"SHOP - BikeFinder","og_description":"Un peque\u00f1o localizador. M\u00e1s tranquilidad. Pedalea m\u00e1s.Preoc\u00fapate menos. Oculto en el manillar. Conectado a tu m\u00f3vil. Haz que BikeFinder te acompa\u00f1e en tu pr\u00f3xima ruta. BikeFinder G2Dise\u00f1ado en Noruega Oculto en el manillarWi-Fi \u00b7 GPS \u00b7 LTE \u00b7 Bluetooth Localiza tu bicicleta Inst\u00e1lalo t\u00fa mismo Conectado a la app \u00bfQu\u00e9 incluye la caja? \u00bfEs compatible [&hellip;]","og_url":"https:\/\/bikefinder.com\/buy\/","og_site_name":"BikeFinder","article_publisher":"https:\/\/www.facebook.com\/teambikefinder","article_modified_time":"2026-10-11T02:07:03+00:00","og_image":[{"width":2560,"height":1962,"url":"https:\/\/bikefinder.com\/wp-content\/uploads\/2025\/09\/Box-design-clean-no-logo-PNG_without-side-scaled.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@TeamBikeFinder","twitter_misc":{"Tiempo de lectura":"7 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["WebPage","ItemPage"],"@id":"https:\/\/bikefinder.com\/buy\/","url":"https:\/\/bikefinder.com\/buy\/","name":"SHOP - BikeFinder","isPartOf":{"@id":"https:\/\/bikefinder.com\/#website"},"datePublished":"2021-12-29T08:12:51+00:00","dateModified":"2026-10-11T02:07:03+00:00","breadcrumb":{"@id":"https:\/\/bikefinder.com\/buy\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bikefinder.com\/buy\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/bikefinder.com\/buy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bikefinder.com\/es\/"},{"@type":"ListItem","position":2,"name":"SHOP"}]},{"@type":"WebSite","@id":"https:\/\/bikefinder.com\/#website","url":"https:\/\/bikefinder.com\/","name":"BikeFinder","description":"GPS-sporing og forsikring til sykkel","publisher":{"@id":"https:\/\/bikefinder.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bikefinder.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/bikefinder.com\/#organization","name":"BikeFinder","url":"https:\/\/bikefinder.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/bikefinder.com\/#\/schema\/logo\/image\/","url":"https:\/\/bikefinder.com\/wp-content\/uploads\/2020\/05\/logo_drop_big.png","contentUrl":"https:\/\/bikefinder.com\/wp-content\/uploads\/2020\/05\/logo_drop_big.png","width":200,"height":200,"caption":"BikeFinder"},"image":{"@id":"https:\/\/bikefinder.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/teambikefinder","https:\/\/x.com\/TeamBikeFinder","https:\/\/www.instagram.com\/teambikefinder\/","https:\/\/www.youtube.com\/@teambikefinder\/","https:\/\/www.linkedin.com\/company\/bikefinder"]}]}},"_links":{"self":[{"href":"https:\/\/bikefinder.com\/es\/wp-json\/wp\/v2\/pages\/159449","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bikefinder.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bikefinder.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bikefinder.com\/es\/wp-json\/wp\/v2\/users\/7498"}],"replies":[{"embeddable":true,"href":"https:\/\/bikefinder.com\/es\/wp-json\/wp\/v2\/comments?post=159449"}],"version-history":[{"count":8,"href":"https:\/\/bikefinder.com\/es\/wp-json\/wp\/v2\/pages\/159449\/revisions"}],"predecessor-version":[{"id":394966,"href":"https:\/\/bikefinder.com\/es\/wp-json\/wp\/v2\/pages\/159449\/revisions\/394966"}],"wp:attachment":[{"href":"https:\/\/bikefinder.com\/es\/wp-json\/wp\/v2\/media?parent=159449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}