1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<!DOCTYPE html> 18<html lang="en"> 19<head> 20 <!-- OneTrust Cookies Consent Notice start for bushnellgolf.com -->
21<script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="6dc80972-8ca6-414a-a7c5-a260885539e8" ></script>
21
22<script type="text/javascript"> 23function OptanonWrapper() { } 24</script>
24 25<!-- OneTrust Cookies Consent Notice end for bushnellgolf.com --> 26<meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> 27<meta name="viewport" content="width=device-width,initial-scale=1"> 28<meta name="view-transition" content="same-origin"> 29<meta name="theme-color" content=""> 30<meta property="og:site_name" content="Bushnell Golf"> 31<meta property="og:url" content="https://www.bushnellgolf.com/pages/about-bushnell-golf"> 32<meta property="og:title" content="About Bushnell Golf"> 33<meta property="og:type" content="website"> 34<meta property="og:description" content="Bushnell Golf is the industry leader in high-performance sports optics for over 65 years. We offer the highest quality, most reliable and affordable products."><meta property="og:image" content="https://www.bushnellgolf.com/cdn/shop/files/bushnell_logo.webp?v=1786469888&width=1200"> 35 <meta property="og:image:secure_url" content="https://www.bushnellgolf.com/cdn/shop/files/bushnell_logo.webp?v=1786469888&width=1200"><meta property="og:image:width" content="1200"> 36 <meta property="og:image:height" content="628"><meta name="twitter:card" content="summary_large_image"> 37<meta name="twitter:title" content="About Bushnell Golf"> 38<meta name="twitter:description" content="Bushnell Golf is the industry leader in high-performance sports optics for over
3865 years. We offer the highest quality, most reliable and affordable products."><meta name="twitter:image" content="https://www.bushnellgolf.com/cdn/shop/files/bushnell_logo.webp?v=1786469888&width=1200"><title> 39 About Bushnell Golf�</title> 40<link rel="canonical" href="https://www.bushnellgolf.com/pages/about-bushnell-golf"> 41<meta name="description" content="Bushnell Golf is the industry leader in high-performance sports optics for over 65 years. We offer the highest quality, most reliable and affordable products."> 42<meta name="google-site-verification" content="QB7OV1rk3Q8aMLza38ldv-0AnjJm4Ld5fvuDhJTsmyA" /> 43<meta name="google-site-verification" content="maaQ54rgAe6kxaZNZo1U2leDgbetgtxqL1NlLS6E5_o" /> 44<link rel="preconnect" href="https://cdn.cookielaw.org"> 45 <link rel="preconnect" href="https://cdn-4.convertexperiments.com"> 46 <link rel="preconnect" href="https://edge.cofra.me"> 47 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 48 <link rel="dns-prefetch" href="https://cdn.jsdelivr.net"> 49 <link rel="dns-prefetch" href="https://sdk.helloextend.com"> 50 <link rel="preconnect" href="https://api.helloextend.com" crossorigin>
50<script type="application/ld+json"> 51{ 52 "@context": "https://schema.org", 53 "@type": "Corporation", 54 "name": "Bushnell Golf", 55 "url": "https://www.bushnellgolf.com", 56 "description": "Bushnell Golf â The #1 Rangefinder in Golf. Laser rangefinders, GPS devices, and launch monitors.", 57 "brand": { "@type": "Brand", "name": "Bushnell Golf" }, 58 "sameAs": [ 59 "https://www.facebook.com/bushnellgolf", 60 "https://www.instagram.com/bushnellgolf", 61 "https://www.twitter.com/bushnellgolf", 62 "https://www.youtube.com/bushnellgolf" 63 ], 64 "contactPoint": { 65 "@type": "ContactPoint", 66 "contactType": "Customer Support", 67 "url": "https://www.bushnellgolf.com/pages/contact" 68 } 69} 70</script>
70 71
72<script type="application/ld+json"> 73{ 74 "@context": "https://schema.org", 75 "@type": "WebSite", 76 "name": "Bushnell Golf", 77 "url": "https://www.bushnellgolf.com", 78 "potentialAction": { 79 "@type": "SearchAction", 80 "target": { 81 "@type": "EntryPoint", 82 "urlTemplate": "https://www.bushnellgolf.com/search?q={search_term_string}" 83 }, 84 "query-input": "required name=search_term_string" 85 } 86} 87</script>
87
88<script defer src="https://cdn-4.convertexperiments.com/v1/js/10034870-10034482.js?environment=production"></script>
88 89 90 91<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/venobox.min.css" media="print" onload="this.media='all'"> 92<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/venobox.min.css"></noscript> 93��
93<script src="/cdn/shopifycloud/consent-tracking-api/v0.1/consent-tracking-api.js"></script>
93 94
95<script type="text/javascript"> 96 97;(function() { 98 var ht=Object.defineProperty;var ut=(v,f,w)=>f in v?ht(v,f,{enumerable:!0,configurable:!0,writable:!0,value:w}):v[f]=w;var a=(v,f,w)=>ut(v,typeof f!="symbol"?f+"":f,w);(function(){"use strict";class v{constructor(t,e){a(this,"CACHE_KEY","_shg_audience_cache");a(this,"CACHE_EXPIRATION_DAYS",7);a(this,"DEVICE_MOBILE_BREAKPOINT",768);a(this,"cache",{timestamp:Date.now(),data:{}});this.visitor=t,this.locationApiUrl=e,this.restoreCache()}evaluate(t){switch(t.value=this.snakeCaseKeys(t.value),t.audience_type){case"location":return this.locationMatches(t);case"b2b":return this.b2bMatches(t);case"device":return this.deviceMatches(t);case"logged_in":return this.loggedInMatches(t);case"referrer_contains":return this.referrerContainsMatches(t);case"url_contains":return this.urlContainsMatches(t);case"new_visitor":return this.newVisitorMatches(t);case"returning_visitor":return this.returningVisitorMatches(t);default:return{status:"skipped",expected:t.value,actual:null,reason:`No evaluator implemented for audience type: ${t.audience_type}`}}}evaluateAll(t,e="every"){if(!t||t.length===0)return{status:"eligible",condition:e,expected:{},actual:{}};if(!["every","any"].includes(e))return{status:"error",condition:e,expected:{},actual:{}};const i=t.map(s=>({type:s.audience_type,evaluation:this.evaluate(s)}));return{status:(e==="every"?i.every(s=>s.evaluation.status==="match"):i.some(s=>s.evaluation.status==="match"))?"eligible":"not_eligible",condition:e,expected:t.reduce((s,r)=>(s[r.audience_type]={condition:r.condition,value:r.value},s),{}),actual:i.reduce((s,r)=>(s[r.type]=r.evaluation.actual,s),{})}}b2bMatches(t){const e=t.value===this.visitor.isB2B;return{status:(t.condition==="is_not"?!e:e)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:this.visitor.isB2B}}}deviceMatches(t){const e=window.innerWidth<this.DEVICE_MOBILE_BREAKPOINT||window.outerWidth<this.DEVICE_MOBILE_BREAKPOINT?"mobile":"desktop",i=t.value===e;return{status:(t.condition==="is_not"?!i:i)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:e}}}locationMatches(t){if(!this.cache.data.location){const h=new XMLHttpRequest;h.open("GET",this.locationApiUrl,!1),h.send(null);const l=h.status===200?JSON.parse(h.responseText):null;l&&(this.cache.data.location={country:l==null?void 0:l.country,region:l==null?void 0:l.region,city:l==null?void 0:l.city,timestamp:Date.now()}
98,this.saveCache())}const e={condition:t.condition,value:t.value},i=this.cache.data.location;if(!e||!e.value||!e.value.type||!e.value.country_code||!i)return{status:"no_match",expected:e,actual:i?{value:i}:null};const{type:n,country_code:s,toponym_name:r,parent_name:o}=e.value;let d=!1;switch(n){case"country":d=i.country===s;break;case"region":d=i.region===r&&i.country===s;break;case"city":d=i.city===r&&i.region===o&&i.country===s;break;default:d=!1}return{status:(t.condition==="is_not"?!d:d)?"match":"no_match",expected:e,actual:{value:i}}}loggedInMatches(t){const e=String(t.value)==="true",i=this.visitor.isLoggedIn===e;return{status:(t.condition==="is_not"?!i:i)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:this.visitor.isLoggedIn}}}referrerContainsMatches(t){if(typeof t.value!="string")return{status:"error",expected:{condition:t.condition,value:t.value},actual:null,reason:"Invalid expected value"};const e=document.referrer.toLowerCase().includes(t.value.toLowerCase());return{status:(t.condition==="is_not"?!e:e)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:document.referrer}}}urlContainsMatches(t){if(typeof t.value!="string")return{status:"error",expected:{condition:t.condition,value:t.value},actual:null,reason:"Invalid expected value"};const e=window.location.href.toLowerCase().includes(t.value.toLowerCase());return{status:(t.condition==="is_not"?!e:e)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:window.location.href}}}returningVisitorMatches(t){if(!this.visitor.details)return{status:"no_match",expected:{condition:t.condition,value:t.value},actual:null,reason:"No visitor details available"};const{expected_time_in_milliseconds:e,within_or_after:i}=t.value||{};if(typeof e!="number"||!i)return{status:"error",expected:{condition:t.condition,value:t.value},actual:null,reason:"Invalid expected data"};const n=this.visitor.details.first_visit_timestamp,s=Date.now();if(i==="within"){const r=n+e>s;return{status:(t.condition==="is_not"?!r:r)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:n}}}else{const r=n+e<s;return{status:(t.condition==="is_not"?!r:r)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:n}}}}newVisitorMatches(t){const e=t.value==this.visitor.isFirstVisit;return{status:(t.condition==="is_not"?!e:e)?"match":"no_match",expected:{condition:t.condition,value:t.value},actual:{value:this.visitor.isFirstVisit}}}restoreCache(){const t=localStorage.getItem(this.CACHE_KEY);if(t)try{const e=JSON.parse(t);e.timestamp<=Date.now()-this.CACHE_EXPIRATION_DAYS*24*60*60*1e3?(localStorage.removeItem(this.CACHE_KEY),this.cache.data={}):this.cache=e}catch{try{localStorage.removeItem(this.CACHE_KEY)}catch{}this.cache.data={}}}saveCache(){this.cache.timestamp=Date.now(),localStorage.setItem(this.CACHE_KEY,JSON.stringify(this.cache))}snakeCaseKeys(t){if(t==null||typeof t!="object")return t;const e={};for(const[i,n]of Object.entries(t)){const s=i.replace(/[A-Z]/g,r=>`_${r.toLowerCase()}`);e[s]=n}return e}}/*! js-cookie v3.0.8 | MIT */function f(c){for(var t=1;t<arguments.length;t++){var e=arguments[t];for(var i in e)i!=="__proto__"&&(c[i]=e[i])}return c}var w={read:function(c){return c[0]==='"'&&(c=c.slice(1,-1)),c.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(c){return encodeURIComponent(c).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function N(c,t){function e(n,s,r){if(!(typeof document>"u")){r=f({},t,r),typeof r.expires=="number"&&(r.expires=new Date(Date.now()+r.expires*864e5)),r.expires&&(r.expires=r.expires.toUTCString()),n=encodeURIComponent(n).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var o="";for(var d in r)r[d]&&(o+="; "+d,r[d]!==!0&&(o+="="+r[d].split(";")[0]));return document.cookie=n+"="+c.write(s,n)+o}}function i(n){if(!(typeof document>"u"||arguments.length&&!n)){for(var s=document.cookie?document.cookie.split("; "):[],r={},o=0;o<s.length;o++){var d=s[o].split("="),u=d.slice(1).join("=");try{var h=decodeURIComponent(d[0]);if(h in r||(r[h]=c.read(u,h)),n===h)break}catch{}}return n?r[n]:r}}return Object.create({set:e,get:i,remove:function(n,s){e(n,"",f({},s,{expires:-1}))},withAttributes:function(n){return N(this.converter,f({},this.attributes,n))},withConverter:function(n){return N(f({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(c)}})}var C=N(w,{path:"/"});const p=class p{constructor(t){a(this,"customerId");a(this,"isB2B");a(this,"details",null);a(this,"sessionId",null);a(this,"id",null);this.context=t,this.sessionId=t.sessionId,this.customerId=t.customerId,this.isB2B=t.isB2B,this.loadCachedDetails(),this.loadAndStoreVisitorId(),this.loadAndStoreSessionId()}get bin(){return this.sessionId?this.hashWithDjb2(this.sessionId)%p.DEFAULT_NUMBER_OF_BINS:0}
98get firstVisitTimestamp(){var t;return((t=this.details)==null?void 0:t.first_visit_timestamp)??Date.now()}get isFirstVisit(){return this.firstVisitTimestamp>=Date.now()-p.NEW_VISITOR_THRESHOLD_MINUTES*60*1e3}get isLoggedIn(){return!!this.customerId}loadCachedDetails(){var t;try{const e=localStorage.getItem(p.DETAILS_KEY);e?(this.details=JSON.parse(e),typeof((t=this.details)==null?void 0:t.first_visit_timestamp)!="number"&&(console.warn("Invalid visitor details found in storage, resetting."),this.details=null)):(this.details={first_visit_timestamp:Date.now()},localStorage.setItem(p.DETAILS_KEY,JSON.stringify(this.details)))}catch(e){console.error("Error loading visitor details from storage:",e),this.details=null}finally{!this.details&&typeof localStorage<"u"&&(this.details={first_visit_timestamp:Date.now()},localStorage.setItem(p.DETAILS_KEY,JSON.stringify(this.details)))}}loadAndStoreSessionId(){const t=this.sessionId||C.get(p.SESSION_ID_KEY)||null;t?this.sessionId=t:this.sessionId=crypto.randomUUID(),C.set(p.SESSION_ID_KEY,this.sessionId,{expires:1/48,path:"/"})}loadAndStoreVisitorId(){const t=C.get(p.VISITOR_ID_KEY)||null;t?this.id=t:(this.id=crypto.randomUUID(),C.set(p.VISITOR_ID_KEY,this.id,{expires:365,path:"/"}))}hashWithDjb2(t){let e=5381;for(let i=0;i<t.length;i++)e=(e<<5)-e+t.charCodeAt(i),e|=0;return Math.abs(e)}};a(p,"DETAILS_KEY","_shg_ab_visitor_details"),a(p,"SESSION_ID_KEY","_shg_ab_session_id"),a(p,"VISITOR_ID_KEY","_shg_ab_visitor_id"),a(p,"DEFAULT_NUMBER_OF_BINS",1e4),a(p,"NEW_VISITOR_THRESHOLD_MINUTES",30);let x=p;const _=class _{constructor(t){a(this,"buyItNowHandlerAttached",!1);this.config=t}run(){typeof document<"u"&&document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{this.attachBuyItNowHandler()}):setTimeout(()=>{this.attachBuyItNowHandler()},100)}attachBuyItNowHandler(){var n;const t=(n=this.config)==null?void 0:n.currentCartVariantId;if(!t){console.debug("shogun: no current cart variant ID assigned, buy-it-now interception skipped");return}if(this.buyItNowHandlerAttached)return;this.buyItNowHandlerAttached=!0,console.debug("shogun: setting up buy-it-now interception with cart variant ID:",t);const e=async(s,r)=>{var h,l,V,O;const o=(r==null?void 0:r.formData)??new FormData(s);let d=(r==null?void 0:r.variantId)??this.extractVariantIdFromFormData(o);if(!d){console.debug("shogun: no product variant ID found for buy-it-now, interception skipped");return}const u=(r==null?void 0:r.quantity)??(parseInt(o.get("quantity")||"1",10)||1);if(console.debug("shogun: buy-it-now details:",{productVariantId:d,quantity:u,cartVariantId:t,storefrontAccessToken:(h=this.config)!=null&&h.storefrontAccessToken?"***":null,shopDomain:(l=this.config)==null?void 0:l.shopDomain}),(V=this.config)!=null&&V.storefrontAccessToken&&((O=this.config)!=null&&O.shopDomain)){console.debug("shogun: attempting cartCreate with merchandiseId:",`gid://shopify/ProductVariant/${d}`);const R=await this.createCartAndGetCheckoutUrl(d,u,t);if(R){console.debug("shogun: redirecting to cartCreate checkoutUrl (original cart preserved)"),window.location.href=R;return}}console.debug("shogun: falling back to cart add with cart variant"),await this.addToCartAndCheckout(d,u,t)};typeof document<"u"&&(()=>{document.addEventListener("click",s=>{const r=s.target;if(!r)return;const o=this.findPaymentElementFromClick(s,r);if(!o)return;const d=this.findFormForPaymentElement(o,r,s);if(!d)return;
98const u=this.getBuyItNowDetailsFromForm(d);u&&(s.preventDefault(),s.stopPropagation(),s.stopImmediatePropagation(),e(d,u))},{capture:!0})})()}async createCartAndGetCheckoutUrl(t,e,i){var d,u,h,l,V,O,R;if(!((d=this.config)!=null&&d.storefrontAccessToken)||!((u=this.config)!=null&&u.shopDomain))return null;const n=` 99 mutation cartCreate($input: CartInput!) { 100 cartCreate(input: $input) { 101 cart { 102 id 103 checkoutUrl 104 } 105 userErrors { 106 field 107 message 108 } 109 } 110 } 111 `,s=i?[{key:"shogun_variant_id",value:i}]:[];let r=[];i&&this.config.lineItemLevelVariant&&(r=[{key:"_shogun_variant_id",value:i}]);const o={input:{lines:[{merchandiseId:`gid://shopify/ProductVariant/${t}`,quantity:e,attributes:r}],attributes:s}};try{const F=JSON.stringify({query:n,variables:o}),W=`https://${this.config.shopDomain}/api/2025-10/graphql.json`;console.debug("shogun: cartCreate request URL:",W),console.debug("shogun: cartCreate request body:",F);const I=await(await fetch(W,{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":this.config.storefrontAccessToken},body:F})).json();return console.debug("shogun: cartCreate full response:",JSON.stringify(I,null,2)),(V=(l=(h=I.data)==null?void 0:h.cartCreate)==null?void 0:l.cart)!=null&&V.checkoutUrl?(console.debug("shogun: cartCreate successful, checkoutUrl:",I.data.cartCreate.cart.checkoutUrl),I.data.cartCreate.cart.checkoutUrl):(console.error("shogun: cartCreate failed:",((R=(O=I.data)==null?void 0:O.cartCreate)==null?void 0:R.userErrors)||I.errors),null)}catch(F){return console.error("shogun: cartCreate error:",F),null}}async addToCartAndCheckout(t,e,i){var s;const n={items:[{id:t,quantity:e,properties:{}}]};i&&(n.attributes={shogun_variant_id:i},(s=this.config)!=null&&s.lineItemLevelVariant&&(n.items[0].properties={_shogun_variant_id:i}));try{const r=await fetch("/cart/add.js",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});r.ok?(console.debug("shogun: added to cart, redirecting to checkout"),window.location.href="/checkout"):console.error("shogun: cart add failed:",await r.text())}catch(r){console.error("shogun: cart add error:",r)}}findPaymentElementFromClick(t,e){const i=e.closest(_.SHOPIFY_PAYMENT_BUTTON_SELECTOR);if(i)return i;const n=typeof t.composedPath=="function"?t.composedPath():[];for(const s of n)if(s instanceof HTMLElement&&s.matches(_.SHOPIFY_PAYMENT_BUTTON_SELECTOR))return s;return null}findFormForPaymentElement(t,e,i){const n=t.closest("form");if(n)return n;const s=e==null?void 0:e.closest("form");if(s)return s;const r=(e==null?void 0:e.closest("[form]"))||t.closest("[form]")||t.querySelector("[form]"),o=r==null?void 0:r.getAttribute("form");if(o){const l=document.getElementById(o);if(l instanceof HTMLFormElement)return l}const d=typeof(i==null?void 0:i.composedPath)=="function"?i.composedPath():[];for(const l of d)if(l instanceof HTMLFormElement)return l;const u=document.querySelectorAll("form");let h=null;for(const l of u)if(l.querySelector(_.SHOPIFY_PAYMENT_BUTTON_SELECTOR)){if(h)return console.debug("shogun: multiple payment-button forms found; skipping ambiguous buy-it-now form mapping"),null;h=l}return h}normalizeProductVariantId(t){if(!t)return null;const e=String(t);if(!e.includes("gid://"))return e;const i=e.match(/\/(\d+)$/);return i?i[1]:e}extractVariantIdFromFormData(t){const e=t.get("id")||t.get("variant_id");if(!e)return null;const i=this.normalizeProductVariantId(e);return i&&i!==e&&console.debug("shogun: extracted numeric ID from GID:",i),i}
111getBuyItNowDetailsFromForm(t){const e=new FormData(t),i=this.extractVariantIdFromFormData(e);if(!i)return null;const n=parseInt(e.get("quantity")||"1",10)||1;return{formData:e,variantId:i,quantity:n}}};a(_,"SHOPIFY_PAYMENT_BUTTON_SELECTOR",'shopify-buy-it-now-button, shopify-accelerated-checkout, [data-shopify="payment-button"], .shopify-payment-button');let k=_;class b{constructor(t,e,i){a(this,"id");a(this,"name");a(this,"type");a(this,"scope");a(this,"config");a(this,"variants");a(this,"assignedVariantId");a(this,"state");a(this,"eligibility");a(this,"context");a(this,"audienceEvaluator");this.id=t.id,this.name=t.name,this.type=t.type,this.scope=t.scope,this.config=t.config||{},this.variants=t.variants||[],this.assignedVariantId=t.assignedVariantId,this.state=t.assignedVariantId?t.state:void 0,this.context=e,this.audienceEvaluator=i}get isFirstAssignment(){return!!this.assignedVariantId&&this.state===void 0}get isFirstView(){return!!this.assignedVariantId&&(this.isEligible||this.isOnAssignedVariant)&&this.state!=="started"}get assignedVariant(){return this.assignedVariantId&&this.variants.find(t=>t.id===this.assignedVariantId)||null}get originalVariant(){return this.variants.find(t=>t.config.original)||null}get isOnAssignedVariant(){var t;return this.assignedVariantId?this.assignedVariantId===((t=this.currentVariant)==null?void 0:t.id):!1}get isEligible(){var t;return((t=this.eligibility)==null?void 0:t.status)==="eligible"}get firstNonDefaultEligibleVariant(){if(!this.eligibility||!this.eligibility.variants)return null;const t=Object.entries(this.eligibility.variants).filter(([i,n])=>n.status==="eligible").map(([i,n])=>i);return this.variantsByPosition().find(i=>t.includes(i.id)&&!i.config.original)||null}get inReview(){return this.type==="review"}get needsDispatch(){return this.assignedVariantId?!this.isOnAssignedVariant&&(this.inReview||this.isEligible):!1}evaluateEligibility(){const t=this.type=="ab_test"?this.evaluateAudienceEligibility():{status:"eligible",condition:void 0,expected:{},actual:{}},e=this.evaluateScopeEligibility(),i=this.evaluateVariantAudienceEligibility(),n=[t,e].every(r=>r.status==="eligible"||r.status==="match")&&(Object.keys(i).length===0||Object.values(i).some(r=>r.status==="eligible")),s=[t,e,...Object.values(i)].some(r=>r.status==="error");this.eligibility={status:n?"eligible":s?"error":"not_eligible",audience:t,scope:e,variants:i}}evaluateAudienceEligibility(){return this.audienceEvaluator.evaluateAll(this.config.audiences||[],this.config.audiences_condition||"every")}evaluateVariantAudienceEligibility(){const t={};for(const e of this.variants)e.config.audiences&&e.config.audiences.length>0?t[e.id]=this.audienceEvaluator.evaluateAll(e.config.audiences,e.config.audiences_condition||"every"):e.config.original||(t[e.id]={status:"eligible",condition:void 0,expected:{},actual:{}});return t}finalize(){this.isEligible&&this.removeViewParam()}extractPartialTemplateKey(t){if(!t)return;const e=t.split(".");return e.length<2?t:e.slice(0,-1).join(".")}variantForCurrentTemplate(){const t=this.pagePartialTemplateKey();return this.variants.find(e=>this.extractPartialTemplateKey(e.config.full_template_key)===t)||null}matchesCurrentTemplate(){return this.variantForCurrentTemplate()!==null}pagePartialTemplateKey(){const t=this.context.page.templateDirectory||(this.context.page.pageType==="metaobject"?"metaobject":null),e=t?`templates/${t}/`:"templates/",i=[this.context.page.templateName,this.context.page.templateSuffix].filter(Boolean).join(".");return e+i}extractViewParamFromFullTemplateKey(t){if(!t)return;const e=t.split("/").pop().split(".")||[];return e.slice(1,e.length-1).join(".")}variantsByPosition(){return this.variants.slice().sort((t,e)=>{const i=t.position||0,n=e.position||0;return i-n})}removeViewParam(){const t=new URL(window.location.href);t.searchParams.delete("view"),window.history.replaceState({},"",t.toString())}redirect(t){t.searchParams.delete("cache"),window.location.replace(t.toString())}}class z extends b{constructor(e,i,n){super(e,i,n);a(this,"buyItNowFinalizer",null);this.buyItNowFinalizer=new k({currentCartVariantId:this.context.page.currentCartVariantId,shopDomain:this.context.shop.shopDomain,storefrontAccessToken:this.context.shop.storefrontAccessToken})}get currentVariant(){return this.variants.find(e=>e.id===this.context.page.currentCartVariantId)||null}evaluateScopeEligibility(){return{status:"match",expected:this.scope,actual:this.scope}}
111dispatch(){this.dispatchCartAssignment(new URL(window.location.href))}dispatchCartAssignment(e){var s;const i=this.assignedVariant;if(!i){console.error(`shogun: Cannot dispatch ${this.scope} optimization because assigned variant is not set`,this.assignedVariant);return}const n=new XMLHttpRequest;if(n.open("POST","/cart/update.js",!1),n.setRequestHeader("Content-Type","application/json"),n.send(JSON.stringify({attributes:{shogun_variant_id:i==null?void 0:i.id}})),n.status===200){const r=(s=i==null?void 0:i.config)==null?void 0:s.theme_id;console.debug(`shogun: dispatching ${this.scope} optimization by setting cart attribute and reloading the page to reflect cart changes`+(r?` with theme_id '${r}'`:"")),this.redirect(e)}else console.error(`shogun: failed to update cart for ${this.scope} optimization dispatch`,{status:n.status,response:n.responseText})}finalize(){var e;(this.isEligible||this.inReview)&&((e=this.buyItNowFinalizer)==null||e.run())}}class G extends z{}class X extends b{get currentVariant(){return this.variantForCurrentTemplate()}evaluateScopeEligibility(){const{page_type:t,page_id:e}=this.config,i=!t||t===this.context.page.pageType,n=!e||e===this.context.page.pageId,s=new URLSearchParams(window.location.search).get("view");return s&&!this.variants.some(r=>this.extractViewParamFromFullTemplateKey(r.config.full_template_key)===s)?{status:"skipped",expected:void 0,actual:void 0,reason:"Visitor has view param that does not match any variant template keys, likely previewing a template change from theme editor"}:{status:this.scope==="page"&&this.matchesCurrentTemplate()&&i&&n?"match":"no_match",expected:{page_type:t,page_id:e},actual:{page_type:this.context.page.pageType,page_id:this.context.page.pageId}}}dispatch(){var i,n,s;const t=new URL(window.location.href),e=this.extractViewParamFromFullTemplateKey((i=this.assignedVariant)==null?void 0:i.config.full_template_key);if(!e)throw new Error(`Assigned variant does not have a valid viewParam for dispatching full_template_key: ${(n=this.assignedVariant)==null?void 0:n.config.full_template_key}, variant: ${(s=this.assignedVariant)==null?void 0:s.id}`);t.searchParams.set("view",e),console.debug("shogun: Dispatching page optimization by redirecting to ",t.toString()),this.redirect(t)}}class J extends z{}class Z extends z{}const L="_shogun_variant_id",E=`properties[${L}]`,Q=/\/cart\/add(\.js)?$/;class tt{constructor(t){a(this,"addToCartHandlerAttached",!1);a(this,"cartAddRequestInterceptionAttached",!1);this.config=t}run(){var e;const t=(e=this.config)==null?void 0:e.currentCartVariantId;if(!t){console.debug("shogun: no current cart variant ID assigned, add-to-cart interception skipped");return}this.interceptCartAddRequests(t),typeof document<"u"&&document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{this.attachAddToCartHandler(t)}):setTimeout(()=>{this.attachAddToCartHandler(t)},100)}attachAddToCartHandler(t){this.addToCartHandlerAttached||(this.addToCartHandlerAttached=!0,console.debug("shogun: setting up add-to-cart interception with cart variant ID:",t),document.querySelectorAll('form[action="/cart/add"]').forEach(e=>{const i=document.createElement("input");i.name=E,i.value=t,i.type="hidden",e.appendChild(i)}))}interceptCartAddRequests(t){this.cartAddRequestInterceptionAttached||(this.cartAddRequestInterceptionAttached=!0,this.interceptFetchCartAdd(t),this.interceptXhrCartAdd(t))}interceptFetchCartAdd(t){if(typeof window>"u"||typeof window.fetch!="function")return;const e=window.fetch,i=this;window.fetch=function(n,s){try{const r=((s==null?void 0:s.method)??(n instanceof Request?n.method:"GET")).toUpperCase(),o=n instanceof Request?n.url:String(n);if(r==="POST"&&i.isCartAddUrl(o)&&(s==null?void 0:s.body)!=null){const d=i.withShogunVariantProperty(s.body,t);if(d!==null)return e.call(this,n,{...s,body:d})}}catch(r){console.debug("shogun: failed to inject cart variant into fetch cart add request:",r)}return e.call(this,n,s)}}interceptXhrCartAdd(t){if(typeof XMLHttpRequest>"u")return;const e=XMLHttpRequest.prototype.open,i=XMLHttpRequest.prototype.send,n=this;XMLHttpRequest.prototype.open=function(s,r,o=!0,d,u){return this.__shogunIsCartAdd=(s==null?void 0:s.toUpperCase())==="POST"&&n.isCartAddUrl(String(r)),e.call(this,s,r,o,d,u)},XMLHttpRequest.prototype.send=function(s){if(this.__shogunIsCartAdd&&s!=null&&!(s instanceof Document))try{const r=n.withShogunVariantProperty(s,t);if(r!==null)return i.call(this,r)}catch(r){console.debug("shogun: failed to inject cart variant into XHR cart add request:",r)}return i.call(this,s)}}isCartAddUrl(t){try{const e=new URL(t,window.location.origin);return e.origin===window.location.origin&&Q.test(e.pathname)}catch{return!1}}withShogunVariantProperty(t,e){return t instanceof FormData||t instanceof URLSearchParams?(t.has(E)||t.append(E,e),t):typeof t=="string"?this.withShogunVariantPropertyInString(t,e):null}withShogunVariantPropertyInString(t,e){try{const n=JSON.parse(t);return n&&typeof n=="object"&&!Array.isArray(n)?JSON.stringify(this.withShogunVariantPropertyInPayload(n,e)):null}catch{}if(!t.includes("="))return null;const i=new URLSearchParams(t);return i.has(E)||i.append(E,e),i.toString()}withShogunVariantPropertyInPayload(t,e){return Array.isArray(t.items)?{...t,items:t.items.map(i=>i&&typeof i=="object"?{...i,properties:this.withVariantProperty(i.properties,e)}:i)}:"id"in t?{...t,properties:this.withVariantProperty(t.properties,e)}:t}withVariantProperty(t,e){const i=t&&typeof t=="object"?t:{};return i[L]!=null?i:{...i,[L]:e}}}const S=class S{constructor(){a(this,"observer",null)}removePreviewBar(t){t instanceof Element&&t.matches(S.PREVIEW_BAR_IFRAME_SELECTOR)&&(console.debug(`shogun: Removing preview bar iframe with id: ${t.id}`),t.remove(),this.stop()),t.querySelectorAll(S.PREVIEW_BAR_IFRAME_SELECTOR).forEac
111h(e=>{console.debug(`shogun: Removing preview bar iframe with id: ${e.id}`),e.remove(),this.stop()})}run(){if(this.observer)return;const t=document.documentElement;t&&(this.observer=new MutationObserver(e=>{for(const i of e)for(const n of i.addedNodes)n instanceof Element&&this.removePreviewBar(n)}),this.observer.observe(t,{childList:!0,subtree:!0}),this.removePreviewBar(document))}stop(){var t;(t=this.observer)==null||t.disconnect(),this.observer=null}};a(S,"PREVIEW_BAR_IFRAME_SELECTOR","#preview-bar-iframe, #PBarNextFrameWrapper");let D=S;class et extends z{constructor(e,i,n){super(e,i,n);a(this,"addToCartFinalizer",null);a(this,"themePreviewFinalizer",null);this.buyItNowFinalizer=new k({currentCartVariantId:this.context.page.currentCartVariantId,shopDomain:this.context.shop.shopDomain,storefrontAccessToken:this.context.shop.storefrontAccessToken,lineItemLevelVariant:!0}),this.addToCartFinalizer=new tt({currentCartVariantId:this.context.page.currentCartVariantId})}get currentVariant(){const e=super.currentVariant;if(!e)return null;const i=e.config.theme_id;return i?i===this.context.page.themeId?e:null:e}dispatch(){var n;const e=new URL(window.location.href),i=(n=this.assignedVariant)==null?void 0:n.config.theme_id;i&&i!==this.context.page.themeId&&e.searchParams.set("preview_theme_id",i),this.dispatchCartAssignment(e)}finalize(){var e,i,n,s;(this.isEligible||this.inReview)&&((e=this.addToCartFinalizer)==null||e.run(),(i=this.buyItNowFinalizer)==null||i.run()),this.isOnAssignedVariant&&((n=this.assignedVariant)!=null&&n.config.theme_id)&&(this.themePreviewFinalizer||(this.themePreviewFinalizer=new D),(s=this.themePreviewFinalizer)==null||s.run())}}class it extends b{get currentVariant(){return this.variantForCurrentTemplate()}evaluateScopeEligibility(){const t=this.pagePartialTemplateKey();return{status:this.matchesCurrentTemplate()?"match":"no_match",expected:t,actual:t}}dispatch(){var i,n,s;const t=new URL(window.location.href),e=this.extractViewParamFromFullTemplateKey((i=this.assignedVariant)==null?void 0:i.config.full_template_key);if(!e)throw new Error(`Assigned variant does not have a valid viewParam for dispatching full_template_key: ${(n=this.assignedVariant)==null?void 0:n.config.full_template_key}, variant: ${(s=this.assignedVariant)==null?void 0:s.id}`);t.searchParams.set("view",e),console.debug("shogun: Dispatching template optimization by redirecting to ",t.toString()),this.redirect(t)}}class Y extends b{constructor(e,i,n){super(e,i,n);a(this,"themePreviewFinalizer",null);this.themePreviewFinalizer=new D}get currentVariant(){return this.variants.find(e=>e.config.theme_id===this.context.page.themeId)||null}evaluateScopeEligibility(){if(!this.originalVariant)return{status:"error",expected:void 0,actual:void 0,reason:"Original variant is missing"};const e=this.originalVariant.config.theme_id;return e?{status:e===this.context.page.themeId?"match":"no_match",expected:e,actual:this.context.page.themeId}:{status:"error",expected:void 0,actual:void 0,reason:"Original variant is missing theme_id in config"}}
111get needsDispatch(){return this.isEligible&&!this.isOnAssignedVariant&&this.isFirstView}async dispatch(){var i,n,s;const e=new URL(window.location.href);if((i=this.assignedVariant)!=null&&i.config.theme_id)e.searchParams.set("preview_theme_id",this.assignedVariant.config.theme_id),console.debug("shogun: Dispatching theme optimization by redirecting to ",e.toString()),this.redirect(e);else throw new Error(`Assigned variant does not have a valid theme_id for dispatching theme: ${(n=this.assignedVariant)==null?void 0:n.config.theme_id}, variant: ${(s=this.assignedVariant)==null?void 0:s.id}`)}finalize(){var e;this.isOnAssignedVariant&&((e=this.themePreviewFinalizer)==null||e.run())}}a(Y,"PREVIEW_BAR_IFRAME_IDS",["preview-bar-iframe","PBarNextFrameWrapper"]);class st extends b{get currentVariant(){const t=decodeURIComponent(this.getCurrentPathWithoutLanguagePrefix());return this.variants.find(e=>e.config.path===t)||null}evaluateScopeEligibility(){const t=this.variants.find(r=>r.config.original);if(!t)return{status:"error",expected:void 0,actual:void 0,reason:"Original variant is missing"};const e=t.config.path;if(!e)return{status:"error",expected:void 0,actual:void 0,reason:"Original variant is missing path in config"};if(new URL(window.location.href).searchParams.get("view"))return{status:"skipped",expected:void 0,actual:void 0,reason:"Visitor is likely previewing a template change from theme editor"};const n=this.getCurrentPathWithoutLanguagePrefix(),s=decodeURIComponent(n);return{status:decodeURIComponent(e)===s?"match":"no_match",expected:e,actual:s}}get needsDispatch(){return!this.assignedVariantId||!this.isEligible?!1:(console.debug("shogun: Checking if URL redirect optimization needs dispatch. isOnAssignedVariant:",this.isOnAssignedVariant,"isFirstView:",this.isFirstView,"permanentRedirect:",this.config.permanent_redirect),this.config.permanent_redirect===!0&&!this.isOnAssignedVariant||!this.isOnAssignedVariant&&this.isFirstView===!0)}dispatch(){var e,i,n,s,r;const t=new URL(window.location.href);if(!((e=this.assignedVariant)!=null&&e.config.path))throw new Error(`Assigned variant does not have a valid path for dispatching path: ${(i=this.assignedVariant)==null?void 0:i.config.path}, variant: ${(n=this.assignedVariant)==null?void 0:n.id}`);t.pathname=this.context.page.languageRootUrl!=="/"?this.context.page.languageRootUrl+((s=this.assignedVariant)==null?void 0:s.config.path):(r=this.assignedVariant)==null?void 0:r.config.path,console.debug("shogun: Dispatching url optimization by redirecting to ",t.toString()),this.redirect(t)}getCurrentPathWithoutLanguagePrefix(){return this.context.page.languageRootUrl==="/"||!this.context.page.path.startsWith(this.context.page.languageRootUrl)?this.context.page.path:this.context.page.path.replace(this.context.page.languageRootUrl,"")}}function j(c,t,e){switch(c.scope){case"page":return new X(c,t,e);case"template":return new it(c,t,e);case"theme":return new Y(c,t,e);case"url_redirect":return new st(c,t,e);case"price":return new J(c,t,e);case"product_details":return new Z(c,t,e);case"checkout":return new G(c,t,e);case"shipping":return new et(c,t,e);default:throw new Error(`Unsupported optimization scope: ${c.scope}`)}}class U{constructor(t){a(this,"visitorBin");this.visitorBin=t}getRandomVariantForVisitorBin(t){let e=null,i=0;for(const n of t)if(i+=x.DEFAULT_NUMBER_OF_BINS*this.trafficForVariant(n)/100,this.visitorBin<i){e=n;break}return e||null}trafficForVariant(t){return t.config.percentage||0}}const P=class P extends U{assign(t){var n,s;if(t.length===0)return null;const e=this.sortOptimizationsByPriority(t),i=e.find(r=>r.firstNonDefaultEligibleVariant!==null);return i?(i.assignedVariantId=(n=i.firstNonDefaultEligibleVariant)==null?void 0:n.id,i):(e[0].assignedVariantId=(s=e[0].originalVariant)==null?void 0:s.id,e[0])}sortOptimizationsByPriority(t){return t.sort((e,i)=>{const n=this.scopePriority(e.scope),s=this.scopePriority(i.scope);return n-s})}scopePriority(t){return P.SCOPE_PRIORITIES[t||"page"]??P.SCOPE_PRIORITIES.page}};a(P,"SCOPE_PRIORITIES",{theme:1,template:2,page:3,url_redirect:4,price:5,product_details:6,checkout:7,shipping:8});let M=P;class q extends U{assign(t){const e=t.filter(s=>s.isEligible);if(e.length===0)return null;const i=e[Math.floor(Math.random()*e.length)],n=this.getRandomVariantForVisitorBin(i.variants);return n?(i.assignedVariantId=n.id,i):null}}class nt extends U{assign(t){const e=t.flatMap(s=>s.variants),i=this.getRandomVariantForVisitorBin(e),n=t.find(s=>
111s.variants.some(r=>r.id===(i==null?void 0:i.id)))||null;return n&&i?(n.assignedVariantId=i.id,n):null}trafficForVariant(t){return t.traffic_percentage||0}}const y=class y{save(){if(!(typeof document>"u"||typeof sessionStorage>"u"))try{sessionStorage.setItem(y.STORAGE_KEY,document.referrer)}catch(t){console.debug("shogun: failed to persist retained referrer to sessionStorage"),console.error(t)}}restore(){if(typeof sessionStorage>"u")return typeof document<"u"&&document.referrer||null;const t=sessionStorage.getItem(y.STORAGE_KEY);return t===null?typeof document<"u"&&document.referrer||null:(this.overrideDocumentReferrer(t),t||null)}clear(){typeof sessionStorage>"u"||sessionStorage.removeItem(y.STORAGE_KEY)}overrideDocumentReferrer(t){if(!(typeof document>"u"))try{Object.defineProperty(document,"referrer",{configurable:!0,get:()=>t})}catch(e){console.debug("shogun: failed to set original referrer via `Object.defineProperty`"),console.error(e);try{window.document.__defineGetter__("referrer",()=>t)}catch(i){console.debug("shogun: failed to set original referrer via `__defineGetter__`"),console.error(i)}}}};a(y,"STORAGE_KEY","_shg_referrer");let $=y;const g=class g{constructor(t,e){a(this,"previewLinkHandlerAttached",!1);a(this,"_optimizationInReview");a(this,"optimizationResolved",!1);this.context=t,this.audienceEvaluator=e}get inReview(){return!!this.optimizationInReview}get optimizationInReview(){if(!this.optimizationResolved){const t=this.previewVariantId;this._optimizationInReview=t?j({id:"review-optimization",name:"Review Optimization",type:"review",scope:this.previewScope,state:"started",variants:[{id:t,name:"Preview Variant",optimization_id:"review-optimization",traffic_percentage:100,config:{original:!1,percentage:100}}],assignedVariantId:t},{page:this.context.page,shop:this.context.shop},this.audienceEvaluator):null,this.optimizationResolved=!0}return this._optimizationInReview||null}run(){const t=document.getElementById(g.PANEL_TEMPLATE_ID);if(!t){console.debug("shogun: sidebar not found!!!");return}const e=t.content.cloneNode(!0);this.attachPreviewLinkClickHandler();const i=()=>{document.body.style.paddingLeft="360px",document.body.style.paddingTop="50px",document.body.prepend(e),typeof window.restoreCollapsedState=="function"&&window.restoreCollapsedState(),typeof window.restoreDescriptionHeightState=="function"&&window.restoreDescriptionHeightState()};if(document.readyState==="loading"){document.addEventListener("DOMContentLoaded",i);return}i()}get previewVariantId(){const e=new URLSearchParams(window.location.search).get(g.REVIEW_OPTIMIZATION_VARIANT_ID_PARAM),i=window.sessionStorage.getItem(g.PREVIEW_VARIANT_ID_STORAGE_KEY);return e&&e!==i?(console.debug(`shogun: theme review in progress, setting variant: ${e}`),window.sessionStorage.setItem(g.PREVIEW_VARIANT_ID_STORAGE_KEY,e),e):(i&&console.debug(`shogun: theme review in progress, viewing variant: ${i}`),i)}get previewScope(){const e=new URLSearchParams(window.location.search).get(g.REVIEW_OPTIMIZATION_SCOPE_PARAM),i=window.sessionStorage.getItem(g.PREVIEW_OPTIMIZATION_SCOPE_STORAGE_KEY);return e&&e!==i?(console.debug(`shogun: theme review in progress, setting scope: ${e}`),window.sessionStorage.setItem(g.PREVIEW_OPTIMIZATION_SCOPE_STORAGE_KEY,e),e):i?(console.debug(`shogun: theme review in progress, using scope: ${i}`),i):g.DEFAULT_REVIEW_SCOPE}attachPreviewLinkClickHandler(){this.previewLinkHandlerAttached||(this.previewLinkHandlerAttached=!0,document.addEventListener("click",t=>{var s,r;const e=(r=(s=t.target).closest)==null?void 0:r.call(s,'a[id^="shg-preview-btn-"]'),i=e==null?void 0:e.dataset.variantId;if(!i)return;t.preventDefault();const n=new URLSearchParams(window.location.search);n.set(g.REVIEW_OPTIMIZATION_VARIANT_ID_PARAM,i),window.location.href=`${window.location.pathname}?${n.toString()}`}))}};a(g,"PANEL_TEMPLATE_ID","shogun-price-test-preview"),a(g,"PREVIEW_VARIANT_ID_STORAGE_KEY","_shg_preview_variant_id"),a(g,"PREVIEW_OPTIMIZATION_SCOPE_STORAGE_KEY","_shg_preview_optimization_scope"),a(g,"REVIEW_OPTIMIZATION_VARIANT_ID_PARAM","shgpvid"),a(g,"REVIEW_OPTIMIZATION_SCOPE_PARAM","shgsc"),a(g,"DEFAULT_REVIEW_SCOPE","product_details");let B=g;var rt=" daum[ /]| deusu/|(?:^|[^g])news(?!sapphire)|(?<! (?:channel/|google/))google(?!(app|/google| pixel))|(?<! cu)bots?(?:\\b|_)|(?<!(?:lib))http|(?<!cam)scan|24x7|@[a-z][\\w-]+\\.|\\(\\)|\\.com\\b|\\b\\w+\\.ai|\\bcursor/|\\bmanus-user/|\\bort/|\\bperl\\b|\\bplaywright\\b|\\bsecurityheaders\\b|\\bselenium\\b|\\btime/|\\||^[\\w \\.\\-\\(?:\\):%]+(?:/v?\\d+(?:\\.\\d+)?(?:\\.\\d{1,10})*?)?(?:,|$)|^[\\w\\-]+/[\\w]+$|^[^ ]{50,}$|^\\d+\\b|^\\W|^\\w*search\\b|^\\w+/[\\w\\(\\)]*$|^\\w+/\\d\\.\\d\\s\\([\\w@]+\\)$|^active|^ad muncher|^amaya|^apache/|^avsdevicesdk/|^azure|^biglotron|^bot|^bw/|^clamav[ /]|^claude-code/|^client/|^cobweb/|^custom|^ddg[_-]android|^discourse|^dispatch/\\d|^downcast/|^duckduckgo|^email|^facebook|^getright/|^gozilla/|^hobbit|^hotzonu|^hwcdn/|^igetter/|^jeode/|^jetty/|^jigsaw|^microsoft bits|^movabletype|^mozilla/\\d\\.\\d\\s[\\w\\.-]+$|^mozilla/\\d\\.\\d\\s\\((?:compatible;)?(?:\\s?[\\w\\d-.]+\\/\\d+\\.\\d+)?\\)$|^navermailapp|^netsurf|^offline|^openai/|^owler|^php|^postman|^python|^rank|^read|^reed|^rest|^rss|^snapchat|^space bison|^svn|^swcd |^taringa|^thumbor/|^track|^w3c|^webbandit/|^webcopier|^wget|^whatsapp|^wordpress|^xenu link sleuth|^yahoo|^yandex|^zdm/\\d|^zoom marketplace/|advisor|agent\\b|analyzer|archive|ask jeeves/teoma|audit|bit\\.ly/|bluecoat drtr|browsex|burpcollaborator|capture|catch|check\\b|checker|chrome-lighthouse|chromeframe|classifier|cloudflare|convertify|crawl|cypress/|dareboost|datanyze|dejaclick|detect|dmbrowser|download|exaleadcloudview|feed|fetcher|firephp|functionize|grab|headless|httrack|hubspot marketing grader|ibisbrowser|infrawatch|insight|inspect|iplabel|java(?!;)|library|linkcheck|mail\\.ru/|manager|measure|monitor\\b|neustar wpm|node\\b|nutch|offbyone|onetrust|optimize|pageburst|pagespeed|parser|phantomjs|pingdom|powermarks|preview|proxy|ptst[ /]\\d|retriever|rexx;|rigor|rss\\b|scrape|server|sogou|sparkler/|speedcurve|spider|splash|statuscake|supercleaner|synapse|synthetic|tools|torrent|transcoder|url|validator|virtuoso|wappalyzer|webglance|webkit2png|whatcms/|xtate/",at=/bot|crawl|http|lighthouse|scan|search|spider/i,A;function ot(){if(A instanceof RegExp)return A;try{A=new RegExp(rt,"i")}catch{A=at}return A}var ct=c=>typeof c=="string"&&c!=="";function dt(c){return ct(c)&&ot().test(c)}const m=class m{constructor(t){this.publishedOptimizationIds=t}get(t){const e=this.getState()[t];return!e||typeof e=="string"?void 0:{...e,state:e.state??"started"}}update(t){var n,s,r,o;
111if(t.type!=="ab_test"||t.inReview)return;console.debug(`shogun: Caching assignment for optimization: '${t.name}' (${t.id}) to variant: '${(n=t.assignedVariant)==null?void 0:n.name}' (${(s=t.assignedVariant)==null?void 0:s.id})'`);const e=this.getState(),i=t.state??"assigned";window.localStorage.setItem(m.STORAGE_KEY,JSON.stringify({...e,[t.id]:{variantId:t.assignedVariantId,themeId:(o=(r=t.assignedVariant)==null?void 0:r.config)==null?void 0:o.theme_id,state:i}}))}clearExpired(){if(!this.hasExpiredEntries())return!1;console.debug("shogun: clearing expired optimization state, redirecting to default theme");const t=new URL(window.location.href);return t.searchParams.set(m.PREVIEW_THEME_PARAM,""),window.localStorage.removeItem(m.STORAGE_KEY),window.location.replace(t.toString()),!0}hasExpiredEntries(){const t=Object.entries(this.getState()).filter(([e,i])=>typeof i=="string"?!0:!!i.themeId).map(([e])=>e);return t.length>0&&t.some(e=>!this.publishedOptimizationIds.includes(e))}getState(){try{const t=JSON.parse(window.localStorage.getItem(m.STORAGE_KEY)||"{}");return!t||typeof t!="object"||Array.isArray(t)?{}:t}catch{return{}}}};a(m,"STORAGE_KEY","_shg_ab_optimizations_cache"),a(m,"PREVIEW_THEME_PARAM","preview_theme_id");let H=m;class lt{constructor(t){a(this,"pixelTrackingStarted",!1);a(this,"assignedOptimization",null);a(this,"pageViewId",crypto.randomUUID());this.context=t}get storewideCollectionAllowed(){return this.assignedOptimization||this.context.publishedOptimizations.some(t=>t.type==="ab_test")?!0:!!this.context.shop.storewideEventCollection}async track(t,e,i){var s,r;if(e!=null&&e.inReview)return;console.debug(`shogun: tracking event '${t}' for optimization '${(e==null?void 0:e.name)||"none"}' (${(e==null?void 0:e.id)||"none"}) ${i!=null&&i.reason?`with reason '${i.reason}'`:""}`),this.assignedOptimization=e??this.assignedOptimization,(t=="started"||t=="viewed"||t=="skipped")&&this.startPixelTracking();const n=(s=window.Shopify)==null?void 0:s.customerPrivacy;try{await fetch(`${this.context.shop.analyticsUrl}/dispatcher/${t}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,shop_id:this.context.shop.shopId,pageview_id:this.pageViewId,session_id:this.context.visitor.sessionId,visitor_id:this.context.visitor.id,optimization_id:e==null?void 0:e.id,variant_id:(r=e==null?void 0:e.assignedVariant)==null?void 0:r.id,details:{optimization_ids:this.context.publishedOptimizations.map(o=>o.id),distribution_method:this.context.assignmentStrategy,context:this.context.page,optimizations:this.context.publishedOptimizations.map(o=>({id:o.id,assigned_variant_id:o.assignedVariantId,first_assignment:o.isFirstAssignment,eligibility:o.eligibility})),consented:(n==null?void 0:n.analyticsProcessingAllowed())??!1,consent_api:n?"available":"unavailable",...i}}),keepalive:!0})}catch(o){console.error("shogun: failed to send tracking event",o)}}async startPixelTracking(){var i,n,s,r,o;
111if(console.debug("shogun: attempting to start pixel tracking for optimizations"),this.pixelTrackingStarted)return;if(!this.storewideCollectionAllowed){console.debug("shogun: no optimization assigned and store-wide event collection is disabled, skipping pixel tracking");return}const t=await this.getCustomerPrivacy(),e=await this.getAnalytics();if(t.analyticsProcessingAllowed()||(console.debug("shogun: Visitor has not consented to tracking, unable to start pixel tracking for optimizations, waiting for consent..."),await this.waitForConsent(t),this.track("consented")),!(e!=null&&e.publish)){console.debug("shogun: Shopify analytics object is not available, unable to start pixel tracking for optimizations");return}this.pixelTrackingStarted=!0,console.debug("shogun: Visitor has consented to tracking, starting pixel tracking for optimizations"),e.publish("shogun:load",{app_type:((i=this.assignedOptimization)==null?void 0:i.type)=="personalization"?"personalization":"ab_testing",page_type:this.context.page.pageType,page_id:this.context.page.pageId,optimization_id:((n=this.assignedOptimization)==null?void 0:n.id)??null,variant_id:((r=(s=this.assignedOptimization)==null?void 0:s.assignedVariant)==null?void 0:r.id)??null,on_assigned_variant:((o=this.assignedOptimization)==null?void 0:o.isOnAssignedVariant)??!1,session_id:this.context.visitor.sessionId,visitor_id:this.context.visitor.id,pageview_id:this.pageViewId,original_referrer:this.context.originalReferrer})}async getShopify(){return this.until(()=>window.Shopify,"Timed out waiting for Shopify API")}
111async getAnalytics(){const t=await this.getShopify();return this.until(()=>{const e=t.analytics;return e!=null&&e.publish?e:void 0},"Timed out waiting for Shopify analytics API")}async getCustomerPrivacy(){const t=await this.getShopify();return t!=null&&t.customerPrivacy?t.customerPrivacy:(await this.loadConsentTrackingApi(),this.until(()=>{var e;return(e=window.Shopify)==null?void 0:e.customerPrivacy},"Timed out waiting for Shopify customerPrivacy API"))}loadConsentTrackingApi(){return new Promise((t,e)=>{const i=window.Shopify;if(!(i!=null&&i.loadFeatures)){e(new Error("Shopify.loadFeatures is not available"));return}i.loadFeatures([{name:"consent-tracking-api",version:"0.1"}],n=>{n&&n.length>0?e(n[0]):t()})})}waitForConsent(t){return t.analyticsProcessingAllowed()?Promise.resolve():new Promise((e,i)=>{let n=!1;const s=()=>{document.removeEventListener("visitorConsentCollected",r)},r=()=>{n=t.analyticsProcessingAllowed()};document.addEventListener("visitorConsentCollected",r),this.until(()=>n?!0:void 0,"Timed out waiting for user consent").then(()=>{s(),e()}).catch(o=>{s(),i(o)})})}until(t,e,{intervalMs:i=250,timeoutMs:n=15e3}={}){return new Promise((s,r)=>{const o=t();if(o){s(o);return}const d=Date.now(),u=window.setInterval(()=>{const h=t();if(h){window.clearInterval(u),s(h);return}Date.now()-d>n&&(window.clearInterval(u),r(new Error(e)))},i)})}}const T=class T{constructor(t){a(this,"visitor");a(this,"audienceEvaluator");a(this,"retainedReferrer");a(this,"originalReferrer");a(this,"optimizationReview");a(this,"optimizationCache");a(this,"tracker");a(this,"_publishedOptimizations");a(this,"_assignedOptimization");this.context=t,this.retainedReferrer=new $,this.originalReferrer=this.retainedReferrer.restore(),this.visitor=new x(t.session),this.optimizationCache=new H(t.publishedOptimizations.map(e=>e.id)),this.audienceEvaluator=new v(this.visitor,t.shop.geoLocationApi),this.optimizationReview=new B(t,this.audienceEvaluator)}get publishedOptimizations(){return this._publishedOptimizations||(this._publishedOptimizations=this.context.publishedOptimizations.map(t=>{var s,r;const e=this.optimizationCache.get(t.id),i=(e==null?void 0:e.variantId)||t.assignedVariantId,n=(e==null?void 0:e.state)||t.state;if(i){const o=((r=(s=t.variants)==null?void 0:s.find(d=>d.id===i))==null?void 0:r.name)||i;console.debug(`shogun: Found cached optimization for optimization: '${t.name}' (${t.id}), with variant: '${o}' (${i})`)}return j({...t,assignedVariantId:i,state:n},{page:this.context.page,shop:this.context.shop},this.audienceEvaluator)})),this._publishedOptimizations}get abTestStrategy(){switch(this.context.assignmentStrategy){case"greedy":return new q(this.visitor.bin);case"even":return new nt(this.visitor.bin);default:return new q(this.visitor.bin)}}get personalizationStrategy(){return new M(this.visitor.bin)}get assignedOptimization(){return this._assignedOptimization===void 0&&(this._assignedOptimization=this.optimizationReview.optimizationInReview||this.previouslyAssignedOptimization||this.abTestStrategy.assign(this.publishedOptimizations.filter(t=>t.type==="ab_test"))||this.personalizationStrategy.assign(this.publishedOptimizations.filter(t=>t.type==="personalization"))||null),this._assignedOptimization}get previouslyAssignedOptimization(){return this.publishedOptimizations.find(t=>t.assignedVariantId!==void 0)||null}get isBot(){return dt(navigator.userAgent)}get dispatchAttempts(){return Number(sessionStorage.getItem("_shg_dispatch_attempts")||"0")}get trackingService(){return this.tracker||(this.tracker=new lt({shop:this.context.shop,page:this.context.page,visitor:this.visitor,assignmentStrategy:this.context.assignmentStrategy,publishedOptimizations:this.publishedOptimizations,originalReferrer:this.originalReferrer})),this.tracker}get isThemePreview(){var i,n,s;if(this.optimizationReview.inReview)return!1;const t=this.context.page.themeId!=this.context.shop.defaultThemeId,e=(s=(n=(i=this.previouslyAssignedOptimization)==null?void 0:i.assignedVariant)==null?void 0:n.config)==null?void 0:s.theme_id;return t&&(e===void 0||e!==this.context.page.themeId)}set dispatchAttempts(t){sessionStorage.setItem("_shg_dispatch_attempts",t.toString())}run(){var t,e,i,n;try{if(this.isBot){console.debug("shogun: Visitor identified as bot, skipping optimization assignment and execution.");return}if(this.dispatchAttempts>=T.MAX_DISPATCH_ATTEMPTS)throw new Error(`Maximum dispatch attempts of ${T.MAX_DISPATCH_ATTEMPTS} exceeded. Possible redirect loop detected.`);if(this.optimizationCache.clearExpired())return;if(this.isThemePreview){console.debug("shogun: Visitor identified as theme preview, skipping optimization assignment and execution.");return}this.publishedOptimizations.forEach(r=>
111r.evaluateEligibility()),console.debug(`shogun: Running dispatcher with ${this.publishedOptimizations.length} published optimizations (${this.publishedOptimizations.map(r=>r.name).join(", ")})`);const s=this.assignedOptimization;if(s){if(this.optimizationCache.update(s),s.isFirstAssignment&&this.trackingService.track("assigned",s),s.needsDispatch){console.debug(`shogun: Dispatching optimization: ${s.name} (${s.id}) with variant: ${(t=s.assignedVariant)==null?void 0:t.name} (${(e=s.assignedVariant)==null?void 0:e.id}) [attempt ${this.dispatchAttempts+1}]`),this.dispatchAttempts==0&&this.retainedReferrer.save(),this.trackingService.track("dispatched",s),this.dispatchAttempts=this.dispatchAttempts+1,s.dispatch();return}console.debug(`shogun: Running optimization: '${s.name}' (${s.id}) with variant: '${(i=s.assignedVariant)==null?void 0:i.name}' (${(n=s.assignedVariant)==null?void 0:n.id})`),s.inReview?(console.debug("shogun: Optimization is in review, running optimization review flow for optimization"),this.optimizationReview.run()):s.isFirstView?(console.debug("shogun: This is the first view for this optimization, tracking started event."),s.state="started",this.optimizationCache.update(s),this.trackingService.track("started",s)):s.isOnAssignedVariant?(console.debug("shogun: This is not the first view for this optimization, tracking viewed event."),this.trackingService.track("viewed",s)):(console.debug("shogun: Visitor is not eligible for the assigned optimization, skipping view tracking and finalization."),this.trackingService.track("skipped",s,{reason:"not_eligible"})),s.finalize(),this.dispatchAttempts=0}else console.debug("shogun: No optimization assigned to this visitor."),this.trackingService.track("skipped",void 0,{reason:"no_assigned_variant"});this.retainedReferrer.clear()}catch(s){console.error("shogun: Error running optimizations",s),this.trackingService.track("errored",void 0,{error:s
111instanceof Error?{message:s.message,stack:s.stack}:String(s)}),this.retainedReferrer.clear()}}};a(T,"MAX_DISPATCH_ATTEMPTS",5);let K=T;window.ShogunDispatcher=K})(); 112 113})(); 114 115</script>
115<script type="text/javascript"> 116 ;(function() { 117 const designMode = false; 118 if (designMode) { 119 console.debug("shogun: Design mode is enabled, skipping optimizer initialization"); 120 return; 121 } 122 123 // If the referrer url is the Shopify admin url or other known merchant domains, then set a local storage shg_is_merchant flag to true 124 // This is used to remove the preview bar from the page for shoppers 125 const referrer = document.referrer 126 const merchantDomains = ['admin.shopify.com', 'ab.shgapi.com', 'abc.shogun.dev'] 127 if (!localStorage.getItem('_shg_is_merchant') && merchantDomains.some(domain => referrer.includes(domain))) { 128 console.debug('shogun: Setting shg_is_merchant to true') 129 localStorage.setItem('_shg_is_merchant', 'true') 130 } 131 132 // Check for optimization disable flags 133 const urlParams = new URLSearchParams(window.location.search); 134 const optimizationDisabled = urlParams.get('shg') === "false" || window.location.hostname.includes('shopifypreview'); 135 136 if (optimizationDisabled) { 137 console.debug("shogun: Optimization is disabled, skipping optimizer initialization"); 138 return; 139 } 140 141 // Load shop metafield configuration 142 143 const shopMetafieldConfig = {"default_theme_id":191087509688,"method":"greedy","optimizations":[],"expires_at":1788892296000,"env":"production"}; 144 145 if (!shopMetafieldConfig) { 146 console.debug("shogun: Shop metafield configuration for optimizations is missing. Skipping optimizer initialization."); 147 return; 148 } 149 150 const optimizationsData = shopMetafieldConfig.expires_at > Date.now() ? (shopMetafieldConfig.optimizations || []) : []; 151 152 // These ID should match. It is possible for them to be different if a theme is copied from a different shop. 153 const intendedShopifyId = "94598496440"; // The hard coded shopify ID when this snippet was pushed to the theme. 154 const currentShopifyId = "94598496440"; // The current shopify ID that this theme is rendered in. 155 if (intendedShopifyId !== currentShopifyId) { 156 console.debug(`shogun: Shopify ID mismatch: intendedShopifyId=${intendedShopifyId} currentShopifyId=${currentShopifyId}. This may indicate the theme was copied from another shop and not properly set up. Skipping optimizer initialization to avoid potential issues.`); 157 return; 158 } else { 159 console.debug(`shogun: Shopify ID verified: ${intendedShopifyId}`); 160 } 161 162 163 if (typeof ShogunDispatcher === 'undefined') { 164 console.error("shogun: Dispatcher is not defined. Please ensure the shogun optimizer script is properly loaded."); 165 return; 166 } 167 168 const dispatcherConfig = { 169 shop: { 170 shopId: "57f1285e-8e9b-4a81-a60f-fa678b392b91", 171 shopDomain: "1zkvfh-xt.myshopify.com", 172 analyticsUrl: "https://shogun-abc-production.global.ssl.fastly.net", 173 geoLocationApi: "https://ipinfo.io/json?token=f2ae3a557d807b", 174 storefrontAccessToken: null, 175 defaultThemeId: shopMetafieldConfig.default_theme_id ? shopMetafieldConfig.default_theme_id.toString() : null, 176 storewideEventCollection: false, 177 }, 178 page: { 179 pageId: "165898748088", 180 pageType: "page", 181 templateName: "page", 182 templateSuffix: "about", 183 templateDirectory: "", 184 themeId: "190609653944", 185 languageRootUrl: "/", 186 path: window.location.pathname, 187 currentCartVariantId: null, 188 }, 189 session: { 190 sessionId: urlParams.get('shgSessionId'), 191 customerId: "", 192 isB2B: false, 193 }, 194 assignmentStrategy: shopMetafieldConfig.method, 195 publishedOptimizations: optimizationsData 196 } 197 198 console.debug("shogun: Initializing ShogunOptimizer v2"); 199 const dispatcher = new ShogunDispatcher(dispatcherConfig); 200 dispatcher.run(); 201 202 })(); 203 204</script>
204 205�<link 206 rel="icon" 207 type="image/png" 208 href="//www.bushnellgolf.com/cdn/shop/files/favicon.png?crop=center&height=32&v=1784050590&width=32" 209 ><style data-shopify>�@font-face { 210 font-family: Inter; 211 font-weight: 400; 212 font-style: normal; 213 font-display: swap; 214 src: url("//www.bushnellgolf.com/cdn/fonts/inter/inter_n4.b2a3f24c19b4de56e8871f609e73ca7f6d2e2bb9.woff2") format("woff2"), 215 url("//www.bushnellgolf.com/cdn/fonts/inter/inter_n4.af8052d517e0c9ffac7b814872cecc27ae1fa132.woff") format("woff"); 216} 217@font-face { 218 font-family: Inter; 219 font-weight: 700; 220 font-style: normal; 221 font-display: swap; 222 src: url("//www.bushnellgolf.com/cdn/fonts/inter/inter_n7.02711e6b374660cfc7915d1afc1c204e633421e4.woff2") format("woff2"), 223 url("//www.bushnellgolf.com/cdn/fonts/inter/inter_n7.6dab87426f6b8813070abd79972ceaf2f8d3b012.woff") format("woff"); 224} 225@font-face { 226 font-family: Inter; 227 font-weight: 400; 228 font-style: italic; 229 font-display: swap; 230 src: url("//www.bushnellgolf.com/cdn/fonts/inter/inter_i4.feae1981dda792ab80d117249d9c7e0f1017e5b3.woff2") format("woff2"), 231 url("//www.bushnellgolf.com/cdn/fonts/inter/inter_i4.62773b7113d5e5f02c71486623cf828884c85c6e.woff") format("woff"); 232} 233@font-face { 234 font-family: Inter; 235 font-weight: 700; 236 font-style: italic; 237 font-display: swap; 238 src: url("//www.bushnellgolf.com/cdn/fonts/inter/inter_i7.b377bcd4cc0f160622a22d638ae7e2cd9b86ea4c.woff2") format("woff2"), 239 url("//www.bushnellgolf.com/cdn/fonts/inter/inter_i7.7c69a6a34e3bb44fcf6f975857e13b9a9b25beb4.woff") format("woff"); 240} 241@font-face { 242 font-family: Inter; 243 font-weight: 500; 244 font-style: normal; 245 font-display: swap; 246 src: url("//www.bushnellgolf.com/cdn/fonts/inter/inter_n5.d7101d5e168594dd06f56f290dd759fba5431d97.woff2") format("woff2"), 247 url("//www.bushnellgolf.com/cdn/fonts/inter/inter_n5.5332a76bbd27da00474c136abb1ca3cbbf259068.woff") format("woff"); 248} 249@font-face { 250 font-family: Inter; 251 font-weight: 500; 252 font-style: italic; 253 font-display: swap; 254 src: url("//www.bushnellgolf.com/cdn/fonts/inter/inter_i5.4474f48e6ab2b1e01aa2b6d942dd27fa24f2d99f.woff2") format("woff2"), 255 url("//www.bushnellgolf.com/cdn/fonts/inter/inter_i5.493dbd6ee8e49f4ad722ebb68d92f201af2c2f56.woff") format("woff"); 256} 257 258 259 :root { 260 /* Page Layout */ 261 --sidebar-width: 25rem; 262 --narrow-content-width: 36rem; 263 --normal-content-width: 42rem; 264 --wide-content-width: 46rem; 265 --narrow-page-width: 90rem; 266 --normal-page-width: 120rem; 267 --wide-page-width: 150rem; 268 269 /* Section Heights */ 270 --section-height-small: 15rem; 271 --section-height-medium: 25rem; 272 --section-height-large: 35rem; 273 274 @media screen and (min-width: 40em) { 275 --section-height-small: 40svh; 276 --section-height-medium: 55svh; 277 --section-height-large: 70svh; 278 } 279 280 @media screen and (min-width: 60em) { 281 --section-height-small: 50svh; 282 --section-height-medium: 65svh; 283 --section-height-large: 80svh; 284 } 285 286 /* Letter spacing */ 287 --letter-spacing-sm: 0.06em; 288 --letter-spacing-md: 0.13em; 289 290 /* Font families */ 291 --font-body--family: Inter, sans-serif; 292 --font-body--style: normal; 293 --font-body--weight: 400; 294 --font-subheading--family: Inter, sans-serif; 295 --font-subheading--style: normal; 296 --font-subheading--weight: 500; 297 --font-heading--family: Inter, sans-serif; 298 --font-heading--style: normal; 299 --font-heading--weight: 700; 300 --font-accent--family: Inter, sans-serif; 301 --font-accent--style: normal; 302 --font-accent--weight: 700; 303 304 /* Margin sizes */ 305 --font-heading--spacing: 0.25em; 306 --font-h1--spacing: var(--font-heading--spacing); 307 --font-h2--spacing: var(--font-heading--spacing); 308 --font-h3--spacing: var(--font-heading--spacing); 309 --font-h4--spacing: var(--font-heading--spacing); 310 --font-h5--spacing: var(--font-heading--spacing); 311 --font-h6--spacing: var(--font-heading--spacing); 312 --font-paragraph--spacing: 0.5em; 313 314 /* Heading colors */ 315 --font-h1--color: var(--color-foreground-heading); 316 --font-h2--color: var(--color-foreground-heading); 317 --font-h3--color: var(--color-foreground-heading); 318 --font-h4--color: var(--color-foreground-heading); 319 --font-h5--color: var(--color-foreground-heading); 320 --font-h6--color: var(--color-foreground-heading); 321 322 /** Z-Index / Layering */ 323 --layer-section-background: -2; 324 --layer-lowest: -1; 325 --layer-base: 0; 326 --layer-flat: 1; 327 --layer-raised: 2; 328 --layer-heightened: 4; 329 --layer-sticky: 8; 330 --layer-window-overlay: 10; 331 --layer-header-menu: 12; 332 --layer-overlay: 16; 333 --layer-menu-drawer: 18; 334 --layer-temporary: 20;
335 336 /* Max-width / Measure */ 337 --max-width--body-normal: 32.5em; 338 --max-width--body-narrow: 22.75em; 339 340 --max-width--heading-normal: 32.5em; 341 --max-width--heading-narrow: 19.5em; 342 343 --max-width--display-normal: 13em; 344 --max-width--display-narrow: 9.75em; 345 --max-width--display-tight: 3.25em; 346 347 /* Letter-spacing / Tracking */ 348 --letter-spacing--display-tight: -0.03em; 349 --letter-spacing--display-normal: 0em; 350 --letter-spacing--display-loose: 0.03em; 351 352 --letter-spacing--heading-tight: -0.03em; 353 --letter-spacing--heading-normal: 0em; 354 --letter-spacing--heading-loose: 0.03em; 355 356 --letter-spacing--body-tight: -0.03em; 357 --letter-spacing--body-normal: 0em; 358 --letter-spacing--body-loose: 0.03em; 359 360 /* Line height / Leading */ 361 --line-height: 1; 362 363 --line-height--display-tight: 1; 364 --line-height--display-normal: 1.1; 365 --line-height--display-loose: 1.2; 366 367 --line-height--heading-tight: 1.15; 368 --line-height--heading-normal: 1.25; 369 --line-height--heading-loose: 1.35; 370 371 --line-height--body-tight: 1.2; 372 --line-height--body-normal: 1.4; 373 --line-height--body-loose: 1.6; 374 375 /* Typography presets */ 376 --font-size--paragraph: 0.875rem;--font-size--h1: clamp(3.0rem, 5.6vw, 3.5rem);--font-size--h2: clamp(2.25rem, 4.8vw, 3.0rem);--font-size--h3: 2.0rem;--font-size--h4: 1.5rem;--font-size--h5: 0.875rem;--font-size--h6: 0.75rem;--font-paragraph--weight: 400;--font-paragraph--letter-spacing: var(--letter-spacing--body-normal);--font-paragraph--size: var(--font-size--paragraph);--font-paragraph--family: var(--font-body--family);--font-paragraph--style: var(--font-body--style);--font-paragraph--case: ;--font-paragraph--line-height: var(--line-height--body-loose);--font-h1--weight: var(--font-heading--weight);--font-h1--letter-spacing: var(--letter-spacing--heading-normal);--font-h1--size: var(--font-size--h1);--font-h1--family: var(--font-heading--family);--font-h1--style: var(--font-heading--style);--font-h1--case: none;--font-h1--line-height: var(--line-height--display-tight);--font-h2--weight: var(--font-heading--weight);--font-h2--letter-spacing: var(--letter-spacing--heading-normal);--font-h2--size: var(--font-size--h2);--font-h2--family: var(--font-heading--family);--font-h2--style: var(--font-heading--style);--font-h2--case: none;--font-h2--line-height: var(--line-height--display-tight);--font-h3--weight: var(--font-heading--weight);--font-h3--letter-spacing: var(--letter-spacing--heading-normal);--font-h3--size: var(--font-size--h3);--font-h3--family: var(--font-heading--family);--font-h3--style: var(--font-heading--style);--font-h3--case: none;--font-h3--line-height: var(--line-height--display-normal);--font-h4--weight: var(--font-heading--weight);--font-h4--letter-spacing: var(--letter-spacing--heading-normal);--font-h4--size: var(--font-size--h4);--font-h4--family: var(--font-heading--family);--font-h4--style: var(--font-heading--style);--font-h4--case: none;--font-h4--line-height: var(--line-height--display-tight);--font-h5--weight: var(--font-subheading--weight);--font-h5--letter-spacing: var(--letter-spacing--heading-normal);--font-h5--size: var(--font-size--h5);--font-h5--family: var(--font-subheading--family);--font-h5--style: var(--font-subheading--style);--font-h5--case: none;--font-h5--line-height: var(--line-height--display-loose);--font-h6--weight: var(--font-subheading--weight);--font-h6--letter-spacing: var(--letter-spacing--heading-normal);--font-h6--size: var(--font-size--h6);--font-h6--family: var(--font-subheading--family);--font-h6--style: var(--font-subheading--style);--font-h6--case: none;--font-h6--line-height: var(--line-height--display-loose); 377 378 /* Hardcoded font sizes */ 379 --font-size--3xs: 0.625rem; 380 --font-size--2xs: 0.75rem; 381 --font-size--xs: 0.8125rem; 382 --font-size--sm: 0.875rem; 383 --font-size--md: 1rem; 384 --font-size--lg: 1.125rem; 385 --font-size--xl: 1.25rem; 386 --font-size--2xl: 1.5rem; 387 --font-size--3xl: 2rem; 388 --font-size--4xl: 2.5rem; 389 --font-size--5xl: 3rem; 390 --font-size--6xl: 3.5rem; 391 392 /* Menu font sizes */ 393 --menu-font-sm--size: 0.875rem; 394 --menu-font-sm--line-height: calc(1.1 + 0.5 * min(16 / 14)); 395 --menu-font-md--size: 1rem; 396 --menu-font-md--line-height: calc(1.1 + 0.5 * min(16 / 16)); 397 --menu-font-lg--size: 1.125rem; 398 --menu-font-lg--line-height: calc(1.1 + 0.5 * min(16 / 18));
399 --menu-font-xl--size: 1.25rem; 400 --menu-font-xl--line-height: calc(1.1 + 0.5 * min(16 / 20)); 401 --menu-font-2xl--size: 1.75rem; 402 --menu-font-2xl--line-height: calc(1.1 + 0.5 * min(16 / 28)); 403 404 /* Colors */ 405 --color-error: #8B0000; 406 --color-success: #006400; 407 --color-white: #FFFFFF; 408 --color-white-rgb: 255 255 255; 409 --color-black: #000000; 410 --color-instock: #3ED660; 411 --color-lowstock: #EE9441; 412 --color-outofstock: #C8C8C8; 413 414 /* Opacity */ 415 --opacity-5: 0.05; 416 --opacity-8: 0.08; 417 --opacity-10: 0.1; 418 --opacity-15: 0.15; 419 --opacity-20: 0.2; 420 --opacity-25: 0.25; 421 --opacity-30: 0.3; 422 --opacity-40: 0.4; 423 --opacity-50: 0.5; 424 --opacity-60: 0.6; 425 --opacity-70: 0.7; 426 --opacity-80: 0.8; 427 --opacity-85: 0.85; 428 --opacity-90: 0.9; 429 --opacity-subdued-text: var(--opacity-70); 430 431 --shadow-button: 0 2px 3px rgb(0 0 0 / 20%); 432 --gradient-image-overlay: linear-gradient(to top, rgb(0 0 0 / 0.5), transparent); 433 434 /* Spacing */ 435 --margin-3xs: 0.125rem; 436 --margin-2xs: 0.3rem; 437 --margin-xs: 0.5rem; 438 --margin-sm: 0.7rem; 439 --margin-md: 0.8rem; 440 --margin-lg: 1rem; 441 --margin-xl: 1.25rem; 442 --margin-2xl: 1.5rem; 443 --margin-3xl: 1.75rem; 444 --margin-4xl: 2rem; 445 --margin-5xl: 3rem; 446 --margin-6xl: 5rem; 447 448 --scroll-margin: 50px; 449 450 --padding-3xs: 0.125rem; 451 --padding-2xs: 0.25rem; 452 --padding-xs: 0.5rem; 453 --padding-sm: 0.7rem; 454 --padding-md: 0.8rem; 455 --padding-lg: 1rem; 456 --padding-xl: 1.25rem; 457 --padding-2xl: 1.5rem; 458 --padding-3xl: 1.75rem; 459 --padding-4xl: 2rem; 460 --padding-5xl: 3rem; 461 --padding-6xl: 4rem; 462 463 --gap-3xs: 0.125rem; 464 --gap-2xs: 0.3rem; 465 --gap-xs: 0.5rem; 466 --gap-sm: 0.7rem; 467 --gap-md: 0.9rem; 468 --gap-lg: 1rem; 469 --gap-xl: 1.25rem; 470 --gap-2xl: 2rem; 471 --gap-3xl: 3rem; 472 473 --spacing-scale-sm: 0.6; 474 --spacing-scale-md: 0.7; 475 --spacing-scale-default: 1.0; 476 477 /* Checkout buttons gap */ 478 --checkout-button-gap: 10px; 479 480 /* Borders */ 481 --style-border-width: 1px; 482 --style-border-radius-xs: 0.2rem; 483 --style-border-radius-sm: 0.6rem; 484 --style-border-radius-md: 0.8rem; 485 --style-border-radius-50: 50%; 486 --style-border-radius-lg: 1rem; 487 --style-border-radius-pills: 40px; 488 --style-border-radius-inputs: 4px; 489 --style-border-radius-buttons-primary: 14px; 490 --style-border-radius-buttons-secondary: 14px; 491 --style-border-width-primary: 0px; 492 --style-border-width-secondary: 1px; 493 --style-border-width-inputs: 1px; 494 --style-border-radius-popover: 14px; 495 --style-border-popover: 1px none rgb(var(--color-border-rgb) / 50%); 496 --style-border-drawer: 1px none rgb(var(--color-border-rgb) / 50%); 497 --style-border-swatch-opacity: 10%; 498 --style-border-swatch-width: 1px; 499 --style-border-swatch-style: solid; 500 501 /* Animation */ 502 --ease-out-cubic: cubic-bezier(0.33, 1, 0.68, 1); 503 --ease-out-quad: cubic-bezier(0.32, 0.72, 0, 1); 504 --ease-in-out-quad: cubic-bezier(0.455, 0.03, 0.515, 0.955); 505 --animation-speed-fast: 0.0625s; 506 --animation-speed: 0.125s; 507 --animation-speed-slow: 0.2s; 508 --animation-speed-medium: 0.15s; 509 --animation-easing: ease-in-out; 510 --animation-slideshow-easing: cubic-bezier(0.4, 0, 0.2, 1); 511 --drawer-animation-speed: 0.2s; 512 --animation-values-slow: var(--animation-speed-slow) var(--animation-easing); 513 --animation-values: var(--animation-speed) var(--animation-easing); 514 --animation-values-fast: var(--animation-speed-fast) var(--animation-easing); 515 --animation-values-allow-discrete: var(--animation-speed) var(--animation-easing) allow-discrete; 516 --animation-timing-hover: cubic-bezier(0.25, 0.46, 0.45, 0.94); 517 --animation-timing-active: cubic-bezier(0.5, 0, 0.75, 0); 518 --animation-timing-bounce: cubic-bezier(0.34, 1.56, 0.64, 1); 519 --animation-timing-default: cubic-bezier(0, 0, 0.2, 1); 520 --animation-timing-fade-in: cubic-bezier(0.16, 1, 0.3, 1); 521 --animation-timing-fade-out: cubic-bezier(0.4, 0, 0.2, 1); 522 /* Spring definitions suffixed with perceptual duration (d<ms>) and bounce (b<%>)*/ 523 --spring-d300-b0-easing: linear(0, 0.0033 0.81%, 0.027 2.42%, 0.0916 4.84%, 0.4745 15.32%, 0.6422 20.97%, 0.7175, 0.7789, 0.8283 30.64%, 0.876, 0.9111 38.71%, 0.941, 0.9611 48.39%, 0.9707, 0.978 54.84%, 0.9885 62.1%, 0.9949 70.97%, 0.9982 82.26%, 0.9997 100%); 524 --spring-d300-b0-duration: 0.4980s; 525 --spring-d280-b0-easing: linear(0, 0.0044, 0.0164 1.85%, 0.085 4.63%, 0.4571 14.81%, 0.575 18.52%, 0.6505, 0.7148 24.07%, 0.7849, 0.8393, 0.8809 35.18%, 0.9189, 0.9453 44.44%, 0.9662, 0.9793 55.55%, 0.9894 62.95%, 0.995 71.28%, 0.9982 82.39%, 0.9997 99.98%); 526 --spring-d280-b0-duration: 0.4648s; 527 --spring-d260-b0-easing: linear(0, 0.0058, 0.0216 2.15%, 0.0748 4.29%, 0.4646 15.03%, 0.5673, 0.655, 0.7279, 0.7872, 0.8349, 0.8727 34.36%, 0.9107, 0.9379 42.95%, 0.9609 48.31%, 0.9778 54.76%, 0.9887 62.27%, 0.9948 70.86%, 0.9983 82.67%, 0.9997 99.85%); 528 --spring-d260-b0-duration: 0.4316s; 529 --spring-d220-b0-easing: linear( 530 0, 531 0.0093 1.37%, 532 0.0696 4.12%, 533 0.4667 15.09%, 534 0.6322 20.58%, 535 0.6986 23.32%, 536 0.7793 27.44%, 537 0.8219 30.18%, 538 0.8721, 539 0.9089 38.42%, 540 0.9427, 541 0.9644, 542 0.978 54.88%, 543 0.9881 61.74%, 544 0.9944 69.97%, 545 0.998 80.95%, 546 0.9996 98.78% 547 ); 548 --spring-d220-b0-duration: 0.3818s; 549 --spring-d180-b0-easing: linear(0, 0.0234, 0.0805 4.48%, 0.4865 15.68%, 0.6211 20.16%, 0.7696 26.88%, 0.8064 29.12%, 0.8646, 0.9063, 0.9358, 0.9563 47.04%, 0.9757, 0.9867 60.48%, 0.9941 69.44%, 0.9979 80.64%, 0.9996 98.56%); 550 --spring-d180-b0-duration: 0.2988s; 551 552 /* View transitions */ 553 /* View transition old */ 554 --view-transition-old-main-content: var(--animation-speed) var(--animation-easing) both fadeOut; 555 556 /* View transition new */ 557 --view-transition-new-main-content: var(--animation-speed) var(--animation-easing) both fadeIn, var(--animation-speed) var(--animation-easing) both slideInTopViewTransition; 558 559 /* Focus */ 560 --focus-outline-width: 0.09375rem; 561 --focus-outline-offset: 0.2em; 562 563 /* Badges */ 564 --badge-blob-padding-block: 1px; 565 --badge-blob-padding-inline: 12px 8px; 566 --badge-rectangle-padding-block: 1px; 567 --badge-rectangle-padding-inline: 6px; 568 @media screen and (min-width: 750px) { 569 --badge-blob-padding-block: 4px; 570 --badge-blob-padding-inline: 16px 12px; 571 --badge-rectangle-padding-block: 4px; 572 --badge-rectangle-padding-inline: 10px; 573 } 574 575 /* Icons */ 576 --icon-size-2xs: 0.6rem; 577 --icon-size-xs: 0.85rem; 578 --icon-size-sm: 1.25rem; 579 --icon-size-md: 1.375rem; 580 --icon-size-lg: 1.5rem; 581 --icon-stroke-width: 1.5px; 582 583 /* Input */ 584 --input-email-min-width: 200px; 585 --input-search-max-width: 650px; 586 --input-padding-y: 0.8rem; 587 --input-padding-x: 0.8rem; 588 --input-padding: var(--input-padding-y) var(--input-padding-x); 589 --input-box-shadow-width: var(--style-border-width-inputs); 590 --input-box-shadow: 0 0 0 var(--input-box-shadow-width) var(--color-input-border); 591 --input-box-shadow-focus: 0 0 0 calc(var(--input-box-shadow-width) + 0.5px) var(--color-input-border); 592 --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 593 --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5)); 594 --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
595 --input-textarea-min-height: 55px; 596 597 /* Checkbox */ 598 --checkbox-size: 22px; 599 --checkbox-border-radius: 7px; 600 --checkbox-border: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-35-55)); 601 --checkbox-label-padding: 8px; 602 603 @media screen and (min-width: 750px) { 604 --checkbox-size: 16px; 605 --checkbox-border-radius: 5px; 606 --checkbox-label-padding: 6px; 607 } 608 609 /* Button size */ 610 --button-size-sm: 30px; 611 --button-size-md: 36px; 612 --button-size: var(--minimum-touch-target); 613 --button-padding-inline: 24px; 614 --button-padding-block: 16px; 615 616 /* Button font-family */ 617 --button-font-family-primary: var(--font-body--family); 618 --button-font-family-secondary: var(--font-body--family); 619 620 /* Button text case */ 621 --button-text-case: ; 622 --button-text-case-primary: default; 623 --button-text-case-secondary: default; 624 625 /* Borders */ 626 --border-color: rgb(var(--color-border-rgb) / var(--opacity-50)); 627 --border-width-sm: 1px; 628 --border-width-md: 2px; 629 --border-width-lg: 5px; 630 --border-radius-sm: 0.25rem; 631 632 /* Drawers */ 633 --drawer-inline-padding: 25px; 634 --drawer-menu-inline-padding: 2.5rem; 635 --drawer-header-block-padding: 20px; 636 --drawer-content-block-padding: 10px; 637 --drawer-header-desktop-top: 0rem; 638 --drawer-padding: calc(var(--padding-sm) + 7px); 639 --drawer-height: 100dvh; 640 --drawer-width: 95vw; 641 --drawer-max-width: 500px; 642 643 /* Variant Picker Swatches */ 644 --variant-picker-swatch-width-unitless: 34; 645 --variant-picker-swatch-height-unitless: 34; 646 --variant-picker-swatch-width: 34px; 647 --variant-picker-swatch-height: 34px; 648 --variant-picker-swatch-radius: 32px; 649 --variant-picker-border-width: 1px; 650 --variant-picker-border-style: solid; 651 --variant-picker-border-opacity: 10%; 652 653 /* Variant Picker Buttons */ 654 --variant-picker-button-radius: 14px; 655 --variant-picker-button-border-width: 1px; 656 657 /* Slideshow */ 658 --slideshow-controls-size: 3.5rem; 659 --slideshow-controls-icon: 2rem; 660 --peek-next-slide-size: 3rem; 661 662 /* Utilities */ 663 --backdrop-opacity: 0.15; 664 --backdrop-color-rgb: var(--color-shadow-rgb); 665 --minimum-touch-target: 44px; 666 --disabled-opacity: 0.5; 667 --skeleton-opacity: 0.025; 668 669 /* Shapes */ 670 --shape--circle: circle(50% at center); 671 --shape--sunburst: polygon(100% 50%,94.62% 55.87%,98.3% 62.94%,91.57% 67.22%,93.3% 75%,85.7% 77.39%,85.36% 85.36%,77.39% 85.7%,75% 93.3%,67.22% 91.57%,62.94% 98.3%,55.87% 94.62%,50% 100%,44.13% 94.62%,37.06% 98.3%,32.78% 91.57%,25% 93.3%,22.61% 85.7%,14.64% 85.36%,14.3% 77.39%,6.7% 75%,8.43% 67.22%,1.7% 62.94%,5.38% 55.87%,0% 50%,5.38% 44.13%,1.7% 37.06%,8.43% 32.78%,6.7% 25%,14.3% 22.61%,14.64% 14.64%,22.61% 14.3%,25% 6.7%,32.78% 8.43%,37.06% 1.7%,44.13% 5.38%,50% 0%,55.87% 5.38%,62.94% 1.7%,67.22% 8.43%,75% 6.7%,77.39% 14.3%,85.36% 14.64%,85.7% 22.61%,93.3% 25%,91.57% 32.78%,98.3% 37.06%,94.62% 44.13%); 672 --shape--diamond: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); 673 --shape--blob: polygon(85.349% 11.712%, 87.382% 13.587%, 89.228% 15.647%, 90.886% 17.862%, 92.359% 20.204%, 93.657% 22.647%, 94.795% 25.169%, 95.786% 27.752%, 96.645% 30.382%, 97.387% 33.048%, 98.025% 35.740%, 98.564% 38.454%, 99.007% 41.186%, 99.358% 43.931%, 99.622% 46.685%, 99.808% 49.446%, 99.926% 52.210%, 99.986% 54.977%, 99.998.4% 57.744%, 99.975% 60.511%, 99.923% 63.278%, 99.821% 66.043%, 99.671% 68.806%, 99.453% 71.565%, 99.145% 74.314%, 98.724% 77.049%, 98.164% 79.759%, 97.433% 82.427%, 96.495% 85.030%, 95.311% 87.529%, 93.841% 89.872%, 92.062% 91.988%, 89.972% 93.796%, 87.635% 95.273%, 85.135% 96.456%, 82.532% 97.393%, 79.864% 98.127%, 77.156% 98.695%, 74.424% 99.129%, 71.676% 99.452%, 68.918% 99.685%, 66.156% 99.844%, 63.390% 99.942%, 60.624% 99.990%, 57.856% 99.998.4%, 55.089% 99.978%, 52.323% 99.929%, 49.557% 99.847%, 46.792% 99.723%, 44.031% 99.549%, 41.273% 99.317%, 38.522% 99.017%, 35.781% 98.639%, 33.054% 98.170%, 30.347% 97.598.4%, 27.667% 96.911%, 25.024% 96.091%, 22.432% 95.123%, 19.907% 93.994%, 17.466% 92.690%, 15.126% 91.216%, 12.902% 89.569%, 10.808% 87.761%, 8.854% 85.803%, 7.053% 83.703%, 5.418% 81.471%, 3.962% 79.119%, 2.702% 76.656%, 1.656% 74.095%, 0.846% 71.450%, 0.294% 68.740%, 0.024% 65.987%, 0.050% 63.221%, 0.343% 60.471%, 0.858% 57.752%, 1.548% 55.073%, 2.370% 52.431%, 3.283% 49.819%, 4.253% 47.227%, 5.249% 44.646%, 6.244% 42.063%, 7.211% 39.471%, 8.124% 36.858%, 8.958% 34.220%, 9.711% 31.558%, 10.409% 28.880%, 11.083% 26.196%, 11.760% 23.513%, 12.474% 20.839%, 13.259% 18.186%, 14.156% 15.569%, 15.214% 13.012%, 16.485% 10.556%, 18.028% 8.261%, 19.883
673% 6.211%, 22.041% 4.484%, 24.440% 3.110%, 26.998% 2.057%, 29.651% 1.275%, 32.360% 0.714%, 35.101% 0.337%, 37.859% 0.110%, 40.624% 0.009%, 43.391% 0.016%, 46.156% 0.113%, 48.918% 0.289%, 51.674% 0.533%, 54.425% 0.837%, 57.166% 1.215%, 59.898% 1.654%, 62.618% 2.163%, 65.322% 2.750%, 68.006% 3.424%, 70.662% 4.197%, 73.284% 5.081%, 75.860% 6.091%, 78.376% 7.242%, 80.813% 8.551%, 83.148% 10.036%, 85.349% 11.712%); 674 675 /* Buy buttons */ 676 --height-buy-buttons: calc(var(--padding-lg) * 2 + var(--icon-size-sm)); 677 678 /* Card image width and height variables */ 679 --card-width-small: 10rem; 680 681 --height-small: 10rem; 682 --height-medium: 11.5rem; 683 --height-large: 13rem; 684 --height-full: 100vh; 685 686 @media screen and (min-width: 750px) { 687 --height-small: 17.5rem; 688 --height-medium: 21.25rem; 689 --height-large: 25rem; 690 } 691 692 /* Modal */ 693 --modal-max-height: 65dvh; 694 --quick-add-modal-height: min(38.5rem, 96vh); 695 --quick-add-modal-width: min(54rem, 96vw); 696 --quick-add-modal-gallery-width: 24rem; 697 698 /* Card styles for search */ 699 --card-bg-hover: rgb(var(--color-foreground-rgb) / var(--opacity-5)); 700 --card-border-hover: rgb(var(--color-foreground-rgb) / var(--opacity-30)); 701 --card-border-focus: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 702 703 /* Cart */ 704 --cart-primary-font-family: var(--font-body--family); 705 --cart-primary-font-style: var(--font-body--style); 706 --cart-primary-font-weight: var(--font-body--weight); 707 --cart-secondary-font-family: var(--font-secondary--family); 708 --cart-secondary-font-style: var(--font-secondary--style); 709 --cart-secondary-font-weight: var(--font-secondary--weight); 710 } 711</style> 712<style data-shopify> 713 714 715 :root, 716 717 718 719 .color-scheme-1 { 720 --color-background: rgb(255 255 255 / 1.0); 721 /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */ 722 --color-background-rgb: 255 255 255; 723 --opacity-5-15: 0.05; 724 --opacity-10-25: 0.1; 725 --opacity-35-55: 0.35; 726 --opacity-40-60: 0.4; 727 --opacity-30-60: 0.3; 728 --color-foreground: rgb(0 0 0 / 0.81); 729 --color-foreground-rgb: 0 0 0; 730 --color-foreground-heading: rgb(0 0 0 / 1.0); 731 --color-foreground-heading-rgb: 0 0 0; 732 --color-primary: rgb(0 0 0 / 0.81); 733 --color-primary-rgb: 0 0 0; 734 --color-primary-hover: rgb(0 0 0 / 1.0); 735 --color-primary-hover-rgb: 0 0 0; 736 --color-border: rgb(0 0 0 / 0.06); 737 --color-border-rgb: 0 0 0; 738 --color-shadow: rgb(0 0 0 / 1.0); 739 --color-shadow-rgb: 0 0 0; 740 --color-primary-button-text: rgb(255 255 255 / 1.0); 741 --color-primary-button-background: rgb(0 0 0 / 1.0); 742 --color-primary-button-border: rgb(0 0 0 / 1.0); 743 --color-primary-button-hover-text: rgb(255 255 255 / 1.0); 744 --color-primary-button-hover-background: rgb(51 51 51 / 1.0); 745 --color-primary-button-hover-border: rgb(0 0 0 / 1.0); 746 --color-secondary-button-text: rgb(0 0 0 / 1.0); 747 --color-secondary-button-background: rgb(0 0 0 / 0.0); 748 --color-secondary-button-border: rgb(0 0 0 / 1.0); 749 --color-secondary-button-hover-text: rgb(51 51 51 / 1.0); 750 --color-secondary-button-hover-background: rgb(250 250 250 / 1.0); 751 --color-secondary-button-hover-border: rgb(51 51 51 / 1.0); 752 --color-input-background: rgb(255 255 255 / 0.78); 753 --color-input-text: rgb(51 51 51 / 1.0); 754 --color-input-text-rgb: 51 51 51; 755 --color-input-border: rgb(223 223 223 / 1.0); 756 --color-input-hover-background: rgb(0 0 0 / 0.01); 757 --color-variant-background: rgb(255 255 255 / 1.0); 758 --color-variant-border: rgb(0 0 0 / 0.13); 759 --color-variant-text: rgb(0 0 0 / 1.0); 760 --color-variant-text-rgb: 0 0 0; 761 --color-variant-hover-background: rgb(245 245 245 / 1.0); 762 --color-variant-hover-text: rgb(0 0 0 / 1.0); 763 --color-variant-hover-border: rgb(230 230 230 / 1.0); 764 --color-selected-variant-background: rgb(0 0 0 / 1.0); 765 --color-selected-variant-border: rgb(0 0 0 / 1.0); 766 --color-selected-variant-text: rgb(255 255 255 / 1.0); 767 --color-selected-variant-hover-background: rgb(26 26 26 / 1.0); 768 --color-selected-variant-hover-text: rgb(255 255 255 / 1.0); 769 --color-selected-variant-hover-border: rgb(26 26 26 / 1.0); 770 771 --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 772 --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15)); 773 --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); 774 --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60)); 775 --font-h1--color: var(--color-foreground-heading); 776 --font-h2--color: var(--color-foreground-heading); 777 --font-h3--color: var(--color-foreground-heading); 778 --font-h4--color: var(--color-foreground-heading); 779 --font-h5--color: var(--color-foreground-heading); 780 --font-h6--color: var(--color-foreground-heading); 781 782 /* Shadows */ 783 784 --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 785 786 787 --shadow-blur: 20px; 788 --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 789 790 } 791 792 793 794 795 .color-scheme-2 { 796 --color-background: rgb(254 80 0 / 1.0); 797 /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */ 798 --color-background-rgb: 254 80 0; 799 --opacity-5-15: 0.05; 800 --opacity-10-25: 0.1; 801 --opacity-35-55: 0.35; 802 --opacity-40-60: 0.4; 803 --opacity-30-60: 0.3; 804 --color-foreground: rgb(0 0 0 / 0.81); 805 --color-foreground-rgb: 0 0 0; 806 --color-foreground-heading: rgb(0 0 0 / 1.0); 807 --color-foreground-heading-rgb: 0 0 0; 808 --color-primary: rgb(0 0 0 / 0.81); 809 --color-primary-rgb: 0 0 0; 810 --color-primary-hover: rgb(255 255 255 / 1.0); 811 --color-primary-hover-rgb: 255 255 255; 812 --color-border: rgb(223 223 223 / 1.0); 813 --color-border-rgb: 223 223 223; 814 --color-shadow: rgb(0 0 0 / 1.0); 815 --color-shadow-rgb: 0 0 0; 816 --color-primary-button-text: rgb(255 255 255 / 1.0); 817 --color-primary-button-background: rgb(0 0 0 / 1.0); 818 --color-primary-button-border: rgb(0 0 0 / 1.0); 819 --color-primary-button-hover-text: rgb(255 255 255 / 1.0); 820 --color-primary-button-hover-background: rgb(51 51 51 / 1.0); 821 --color-primary-button-hover-border: rgb(51 51 51 / 1.0); 822 --color-secondary-button-text: rgb(0 0 0 / 1.0); 823 --color-secondary-button-background: rgb(0 0 0 / 0.0); 824 --color-secondary-button-border: rgb(0 0 0 / 1.0); 825 --color-secondary-button-hover-text: rgb(0 0 0 / 1.0); 826 --color-secondary-button-hover-background: rgb(255 255 255 / 0.36); 827 --color-secondary-button-hover-border: rgb(51 51 51 / 0.73); 828 --color-input-background: rgb(0 0 0 / 0.0); 829 --color-input-text: rgb(0 0 0 / 0.53); 830 --color-input-text-rgb: 0 0 0; 831 --color-input-border: rgb(0 0 0 / 0.13); 832 --color-input-hover-background: rgb(255 255 255 / 0.36); 833 --color-variant-background: rgb(255 255 255 / 1.0); 834 --color-variant-border: rgb(230 230 230 / 1.0); 835 --color-variant-text: rgb(0 0 0 / 1.0); 836 --color-variant-text-rgb: 0 0 0; 837 --color-variant-hover-background: rgb(245 245 245 / 1.0); 838 --color-variant-hover-text: rgb(0 0 0 / 1.0); 839 --color-variant-hover-border: rgb(230 230 230 / 1.0); 840 --color-selected-variant-background: rgb(0 0 0 / 1.0); 841 --color-selected-variant-border: rgb(0 0 0 / 1.0); 842 --color-selected-variant-text: rgb(255 255 255 / 1.0); 843 --color-selected-variant-hover-background: rgb(26 26 26 / 1.0); 844 --color-selected-variant-hover-text: rgb(255 255 255 / 1.0); 845 --color-selected-variant-hover-border: rgb(26 26 26 / 1.0); 846 847 --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 848 --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15)); 849 --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); 850 --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60)); 851 --font-h1--color: var(--color-foreground-heading); 852 --font-h2--color: var(--color-foreground-heading); 853 --font-h3--color: var(--color-foreground-heading); 854 --font-h4--color: var(--color-foreground-heading); 855 --font-h5--color: var(--color-foreground-heading); 856 --font-h6--color: var(--color-foreground-heading); 857 858 /* Shadows */ 859 860 --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 861 862 863 --shadow-blur: 20px; 864 --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 865 866 } 867 868 869 870 871 .color-scheme-3 { 872 --color-background: rgb(238 241 234 / 1.0); 873 /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */ 874 --color-background-rgb: 238 241 234; 875 --opacity-5-15: 0.05; 876 --opacity-10-25: 0.1; 877 --opacity-35-55: 0.35; 878 --opacity-40-60: 0.4; 879 --opacity-30-60: 0.3; 880 --color-foreground: rgb(0 0 0 / 0.81); 881 --color-foreground-rgb: 0 0 0; 882 --color-foreground-heading: rgb(0 0 0 / 1.0); 883 --color-foreground-heading-rgb: 0 0 0; 884 --color-primary: rgb(0 0 0 / 0.81); 885 --color-primary-rgb: 0 0 0; 886 --color-primary-hover: rgb(0 0 0 / 1.0); 887 --color-primary-hover-rgb: 0 0 0; 888 --color-border: rgb(0 0 0 / 0.81); 889 --color-border-rgb: 0 0 0; 890 --color-shadow: rgb(0 0 0 / 1.0); 891 --color-shadow-rgb: 0 0 0; 892 --color-primary-button-text: rgb(255 255 255 / 1.0); 893 --color-primary-button-background: rgb(0 0 0 / 1.0); 894 --color-primary-button-border: rgb(0 0 0 / 1.0); 895 --color-primary-button-hover-text: rgb(255 255 255 / 1.0); 896 --color-primary-button-hover-background: rgb(51 51 51 / 1.0); 897 --color-primary-button-hover-border: rgb(51 51 51 / 1.0); 898 --color-secondary-button-text: rgb(0 0 0 / 1.0); 899 --color-secondary-button-background: rgb(0 0 0 / 0.0); 900 --color-secondary-button-border: rgb(0 0 0 / 1.0); 901 --color-secondary-button-hover-text: rgb(0 0 0 / 0.81); 902 --color-secondary-button-hover-background: rgb(255 255 255 / 0.36); 903 --color-secondary-button-hover-border: rgb(0 0 0 / 0.81); 904 --color-input-background: rgb(0 0 0 / 0.0); 905 --color-input-text: rgb(0 0 0 / 0.81); 906 --color-input-text-rgb: 0 0 0; 907 --color-input-border: rgb(0 0 0 / 0.81); 908 --color-input-hover-background: rgb(255 255 255 / 0.36); 909 --color-variant-background: rgb(255 255 255 / 1.0); 910 --color-variant-border: rgb(230 230 230 / 1.0); 911 --color-variant-text: rgb(0 0 0 / 1.0); 912 --color-variant-text-rgb: 0 0 0; 913 --color-variant-hover-background: rgb(245 245 245 / 1.0); 914 --color-variant-hover-text: rgb(0 0 0 / 1.0); 915 --color-variant-hover-border: rgb(230 230 230 / 1.0); 916 --color-selected-variant-background: rgb(0 0 0 / 1.0); 917 --color-selected-variant-border: rgb(0 0 0 / 1.0); 918 --color-selected-variant-text: rgb(255 255 255 / 1.0); 919 --color-selected-variant-hover-background: rgb(26 26 26 / 1.0); 920 --color-selected-variant-hover-text: rgb(255 255 255 / 1.0); 921 --color-selected-variant-hover-border: rgb(26 26 26 / 1.0); 922 923 --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 924 --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15)); 925 --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); 926 --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60)); 927 --font-h1--color: var(--color-foreground-heading); 928 --font-h2--color: var(--color-foreground-heading); 929 --font-h3--color: var(--color-foreground-heading); 930 --font-h4--color: var(--color-foreground-heading); 931 --font-h5--color: var(--color-foreground-heading); 932 --font-h6--color: var(--color-foreground-heading); 933 934 /* Shadows */ 935 936 --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 937 938 939 --shadow-blur: 20px; 940 --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 941 942 } 943 944 945 946 947 .color-scheme-4 { 948 --color-background: rgb(225 237 245 / 1.0); 949 /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */ 950 --color-background-rgb: 225 237 245; 951 --opacity-5-15: 0.05; 952 --opacity-10-25: 0.1; 953 --opacity-35-55: 0.35; 954 --opacity-40-60: 0.4; 955 --opacity-30-60: 0.3; 956 --color-foreground: rgb(0 0 0 / 0.81); 957 --color-foreground-rgb: 0 0 0; 958 --color-foreground-heading: rgb(0 0 0 / 1.0); 959 --color-foreground-heading-rgb: 0 0 0; 960 --color-primary: rgb(0 0 0 / 0.81); 961 --color-primary-rgb: 0 0 0; 962 --color-primary-hover: rgb(0 0 0 / 1.0); 963 --color-primary-hover-rgb: 0 0 0; 964 --color-border: rgb(29 54 134 / 0.5); 965 --color-border-rgb: 29 54 134; 966 --color-shadow: rgb(0 0 0 / 1.0); 967 --color-shadow-rgb: 0 0 0; 968 --color-primary-button-text: rgb(255 255 255 / 1.0); 969 --color-primary-button-background: rgb(0 0 0 / 1.0); 970 --color-primary-button-border: rgb(29 54 134 / 1.0); 971 --color-primary-button-hover-text: rgb(255 255 255 / 1.0); 972 --color-primary-button-hover-background: rgb(51 51 51 / 1.0); 973 --color-primary-button-hover-border: rgb(0 0 0 / 1.0); 974 --color-secondary-button-text: rgb(0 0 0 / 1.0); 975 --color-secondary-button-background: rgb(0 0 0 / 0.0); 976 --color-secondary-button-border: rgb(0 0 0 / 1.0); 977 --color-secondary-button-hover-text: rgb(0 0 0 / 0.81); 978 --color-secondary-button-hover-background: rgb(255 255 255 / 0.36); 979 --color-secondary-button-hover-border: rgb(0 0 0 / 0.81); 980 --color-input-background: rgb(0 0 0 / 0.0); 981 --color-input-text: rgb(0 0 0 / 0.81); 982 --color-input-text-rgb: 0 0 0; 983 --color-input-border: rgb(0 0 0 / 0.81); 984 --color-input-hover-background: rgb(255 255 255 / 0.36); 985 --color-variant-background: rgb(255 255 255 / 1.0); 986 --color-variant-border: rgb(230 230 230 / 1.0); 987 --color-variant-text: rgb(0 0 0 / 1.0); 988 --color-variant-text-rgb: 0 0 0; 989 --color-variant-hover-background: rgb(245 245 245 / 1.0); 990 --color-variant-hover-text: rgb(0 0 0 / 1.0); 991 --color-variant-hover-border: rgb(230 230 230 / 1.0); 992 --color-selected-variant-background: rgb(0 0 0 / 1.0); 993 --color-selected-variant-border: rgb(0 0 0 / 1.0); 994 --color-selected-variant-text: rgb(255 255 255 / 1.0); 995 --color-selected-variant-hover-background: rgb(26 26 26 / 1.0); 996 --color-selected-variant-hover-text: rgb(255 255 255 / 1.0); 997 --color-selected-variant-hover-border: rgb(26 26 26 / 1.0); 998 999 --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 1000 --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15)); 1001 --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); 1002 --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60)); 1003 --font-h1--color: var(--col
1003or-foreground-heading); 1004 --font-h2--color: var(--color-foreground-heading); 1005 --font-h3--color: var(--color-foreground-heading); 1006 --font-h4--color: var(--color-foreground-heading); 1007 --font-h5--color: var(--color-foreground-heading); 1008 --font-h6--color: var(--color-foreground-heading); 1009 1010 /* Shadows */ 1011 1012 --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 1013 1014 1015 --shadow-blur: 20px; 1016 --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 1017 1018 } 1019 1020 1021 1022 1023 .color-scheme-5 { 1024 --color-background: rgb(51 51 51 / 1.0); 1025 /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */ 1026 --color-background-rgb: 51 51 51; 1027 --opacity-5-15: 0.15; 1028 --opacity-10-25: 0.25; 1029 --opacity-35-55: 0.55; 1030 --opacity-40-60: 0.6; 1031 --opacity-30-60: 0.6; 1032 --color-foreground: rgb(255 255 255 / 1.0); 1033 --color-foreground-rgb: 255 255 255; 1034 --color-foreground-heading: rgb(255 255 255 / 1.0); 1035 --color-foreground-heading-rgb: 255 255 255; 1036 --color-primary: rgb(255 255 255 / 1.0); 1037 --color-primary-rgb: 255 255 255; 1038 --color-primary-hover: rgb(255 255 255 / 0.69); 1039 --color-primary-hover-rgb: 255 255 255; 1040 --color-border: rgb(255 255 255 / 0.69); 1041 --color-border-rgb: 255 255 255; 1042 --color-shadow: rgb(0 0 0 / 1.0); 1043 --color-shadow-rgb: 0 0 0; 1044 --color-primary-button-text: rgb(0 0 0 / 1.0); 1045 --color-primary-button-background: rgb(255 255 255 / 1.0); 1046 --color-primary-button-border: rgb(255 255 255 / 1.0); 1047 --color-primary-button-hover-text: rgb(255 255 255 / 1.0); 1048 --color-primary-button-hover-background: rgb(0 0 0 / 1.0); 1049 --color-primary-button-hover-border: rgb(0 0 0 / 1.0); 1050 --color-secondary-button-text: rgb(255 255 255 / 1.0); 1051 --color-secondary-button-background: rgb(0 0 0 / 0.0); 1052 --color-secondary-button-border: rgb(255 255 255 / 0.69); 1053 --color-secondary-button-hover-text: rgb(255 255 255 / 0.93); 1054 --color-secondary-button-hover-background: rgb(255 255 255 / 0.04); 1055 --color-secondary-button-hover-border: rgb(255 255 255 / 0.69); 1056 --color-input-background: rgb(51 51 51 / 1.0); 1057 --color-input-text: rgb(255 255 255 / 0.93); 1058 --color-input-text-rgb: 255 255 255; 1059 --color-input-border: rgb(255 255 255 / 0.69); 1060 --color-input-hover-background: rgb(255 255 255 / 0.04); 1061 --color-variant-background: rgb(255 255 255 / 1.0); 1062 --color-variant-border: rgb(230 230 230 / 1.0); 1063 --color-variant-text: rgb(0 0 0 / 1.0); 1064 --color-variant-text-rgb: 0 0 0; 1065 --color-variant-hover-background: rgb(245 245 245 / 1.0); 1066 --color-variant-hover-text: rgb(0 0 0 / 1.0); 1067 --color-variant-hover-border: rgb(230 230 230 / 1.0); 1068 --color-selected-variant-background: rgb(0 0 0 / 1.0); 1069 --color-selected-variant-border: rgb(0 0 0 / 1.0); 1070 --color-selected-variant-text: rgb(255 255 255 / 1.0); 1071 --color-selected-variant-hover-background: rgb(26 26 26 / 1.0); 1072 --color-selected-variant-hover-text: rgb(255 255 255 / 1.0); 1073 --color-selected-variant-hover-border: rgb(26 26 26 / 1.0); 1074 1075 --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 1076 --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15)); 1077 --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); 1078 --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60)); 1079 --font-h1--color: var(--color-foreground-heading); 1080 --font-h2--color: var(--color-foreground-heading); 1081 --font-h3--color: var(--color-foreground-heading); 1082 --font-h4--color: var(--color-foreground-heading); 1083 --font-h5--color: var(--color-foreground-heading); 1084 --font-h6--color: var(--color-foreground-heading); 1085 1086 /* Shadows */ 1087 1088 --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 1089 1090 1091 --shadow-blur: 20px; 1092 --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 1093 1094 } 1095 1096 1097 1098 1099 .color-scheme-6 { 1100 --color-background: rgb(0 0 0 / 0.0); 1101 /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */ 1102 --color-background-rgb: 0 0 0; 1103 --opacity-5-15: 0.15; 1104 --opacity-10-25: 0.25; 1105 --opacity-35-55: 0.55; 1106 --opacity-40-60: 0.6; 1107 --opacity-30-60: 0.6; 1108 --color-foreground: rgb(255 255 255 / 1.0); 1109 --color-foreground-rgb: 255 255 255; 1110 --color-foreground-heading: rgb(255 255 255 / 1.0); 1111 --color-foreground-heading-rgb: 255 255 255; 1112 --color-primary: rgb(255 255 255 / 1.0); 1113 --color-primary-rgb: 255 255 255; 1114 --color-primary-hover: rgb(255 255 255 / 0.69); 1115 --color-primary-hover-rgb: 255 255 255; 1116 --color-border: rgb(230 230 230 / 1.0); 1117 --color-border-rgb: 230 230 230; 1118 --color-shadow: rgb(0 0 0 / 1.0); 1119 --color-shadow-rgb: 0 0 0; 1120 --color-primary-button-text: rgb(0 0 0 / 1.0); 1121 --color-primary-button-background: rgb(255 255 255 / 1.0); 1122 --color-primary-button-border: rgb(255 255 255 / 1.0); 1123 --color-primary-button-hover-text: rgb(255 255 255 / 1.0); 1124 --color-primary-button-hover-background: rgb(0 0 0 / 1.0); 1125 --color-primary-button-hover-border: rgb(0 0 0 / 1.0); 1126 --color-secondary-button-text: rgb(255 255 255 / 1.0); 1127 --color-secondary-button-background: rgb(0 0 0 / 0.0); 1128 --color-secondary-button-border: rgb(255 255 255 / 1.0); 1129 --color-secondary-button-hover-text: rgb(255 255 255 / 1.0); 1130 --color-secondary-button-hover-background: rgb(255 255 255 / 0.08); 1131 --color-secondary-button-hover-border: rgb(255 255 255 / 1.0); 1132 --color-input-background: rgb(255 255 255 / 1.0); 1133 --color-input-text: rgb(0 0 0 / 0.53); 1134 --color-input-text-rgb: 0 0 0; 1135 --color-input-border: rgb(0 0 0 / 0.13); 1136 --color-input-hover-background: rgb(250 250 250 / 1.0); 1137 --color-variant-background: rgb(255 255 255 / 1.0); 1138 --color-variant-border: rgb(230 230 230 / 1.0); 1139 --color-variant-text: rgb(0 0 0 / 1.0); 1140 --color-variant-text-rgb: 0 0 0; 1141 --color-variant-hover-background: rgb(245 245 245 / 1.0); 1142 --color-variant-hover-text: rgb(0 0 0 / 1.0); 1143 --color-variant-hover-border: rgb(230 230 230 / 1.0); 1144 --color-selected-variant-background: rgb(0 0 0 / 1.0); 1145 --color-selected-variant-border: rgb(0 0 0 / 1.0); 1146 --color-selected-variant-text: rgb(255 255 255 / 1.0); 1147 --color-selected-variant-hover-background: rgb(26 26 26 / 1.0); 1148 --color-selected-variant-hover-text: rgb(255 255 255 / 1.0); 1149 --color-selected-variant-hover-border: rgb(26 26 26 / 1.0); 1150 1151 --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 1152 --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15)); 1153 --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); 1154 --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60)); 1155 --font-h1--color: var(--color-foreground-heading); 1156 --font-h2--color: var(--color-foreground-heading); 1157 --font-h3--color: var(--color-foreground-heading); 1158 --font-h4--color: var(--color-foreground-heading); 1159 --font-h5--color: var(--color-foreground-heading); 1160 --font-h6--color: var(--color-foreground-heading); 1161 1162 /* Shadows */ 1163 1164 --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 1165 1166 1167 --shadow-blur: 20px; 1168 --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 1169 1170 } 1171 1172 1173 1174 1175 .color-scheme-58084d4c-a86e-4d0a-855e-a0966e5043f7 { 1176 --color-background: rgb(0 0 0 / 0.0); 1177 /* RGB values only to apply different opacities - Relative color values are not supported in iOS < 16.4 */ 1178 --color-background-rgb: 0 0 0; 1179 --opacity-5-15: 0.15; 1180 --opacity-10-25: 0.25; 1181 --opacity-35-55: 0.55; 1182 --opacity-40-60: 0.6; 1183 --opacity-30-60: 0.6; 1184 --color-foreground: rgb(0 0 0 / 1.0); 1185 --color-foreground-rgb: 0 0 0; 1186 --color-foreground-heading: rgb(0 0 0 / 1.0); 1187 --color-foreground-heading-rgb: 0 0 0; 1188 --color-primary: rgb(0 0 0 / 1.0); 1189 --color-primary-rgb: 0 0 0; 1190 --color-primary-hover: rgb(0 0 0 / 0.53); 1191 --color-primary-hover-rgb: 0 0 0; 1192 --color-border: rgb(230 230 230 / 1.0); 1193 --color-border-rgb: 230 230 230; 1194 --color-shadow: rgb(0 0 0 / 1.0); 1195 --color-shadow-rgb: 0 0 0; 1196 --color-primary-button-text: rgb(255 255 255 / 1.0); 1197 --color-primary-button-background: rgb(0 0 0 / 1.0); 1198 --color-primary-button-border: rgb(0 0 0 / 1.0); 1199 --color-primary-button-hover-text: rgb(255 255 255 / 1.0); 1200 --color-primary-button-hover-background: rgb(51 51 51 / 1.0); 1201 --color-primary-button-hover-border: rgb(51 51 51 / 1.0); 1202 --color-secondary-button-text: rgb(0 0 0 / 1.0); 1203 --color-secondary-button-background: rgb(0 0 0 / 0.0); 1204 --color-secondary-button-border: rgb(0 0 0 / 1.0); 1205 --color-secondary-button-hover-text: rgb(51 51 51 / 1.0); 1206 --color-secondary-button-hover-background: rgb(250 250 250 / 1.0); 1207 --color-secondary-button-hover-border: rgb(51 51 51 / 1.0); 1208 --color-input-background: rgb(255 255 255 / 1.0); 1209 --color-input-text: rgb(0 0 0 / 0.53); 1210 --color-input-text-rgb: 0 0 0; 1211 --color-input-border: rgb(0 0 0 / 0.13); 1212 --color-input-hover-background: rgb(250 250 250 / 1.0); 1213 --color-variant-background: rgb(255 255 255 / 1.0); 1214 --color-variant-border: rgb(230 230 230 / 1.0); 1215 --color-variant-text: rgb(0 0 0 / 1.0); 1216 --color-variant-text-rgb: 0 0 0; 1217 --color-variant-hover-background: rgb(245 245 245 / 1.0); 1218 --color-variant-hover-text: rgb(0 0 0 / 1.0); 1219 --color-variant-hover-border: rgb(230 230 230 / 1.0); 1220 --color-selected-variant-background: rgb(0 0 0 / 1.0); 1221 --color-selected-variant-border: rgb(0 0 0 / 1.0); 1222 --color-selected-variant-text: rgb(255 255 255 / 1.0); 1223 --color-selected-variant-hover-background: rgb(26 26 26 / 1.0); 1224 --color-selected-variant-hover-text: rgb(255 255 255 / 1.0); 1225 --color-selected-variant-hover-border: rgb(26 26 26 / 1.0); 1226 1227 --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 1228 --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15)); 1229 --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); 1230 --color-foreground-muted: rgb(var(--color-foreground-rgb) / var(--opacity-60)); 1231 --font-h1--color: var(--color-foreground-heading); 1232 --font-h2--color: var(--color-foreground-heading); 1233 --font-h3--color: var(--color-foreground-heading); 1234 --font-h4--color: var(--color-foreground-heading); 1235 --font-h5--color: var(--color-foreground-heading); 1236 --font-h6--color: var(--color-foreground-heading); 1237 1238 /* Shadows */ 1239 1240 --shadow-drawer: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 1241 1242 1243 --shadow-blur: 20px; 1244 --shadow-popover: 0px 4px 20px rgb(var(--color-shadow-rgb) / var(--opacity-15)); 1245 1246 } 1247 1248 1249 body, .color-scheme-1, .color-scheme-2, .color-scheme-3, .color-scheme-4, .color-scheme-5, .color-scheme-6, .color-scheme-58084d4c-a86e-4d0a-855e-a0966e5043f7 { 1250 color: var(--color-foreground); 1251 background-color: var(--color-background); 1252 } 1253</style>
1254<script async crossorigin fetchpriority="high" src="/cdn/shopifycloud/importmap-polyfill/es-modules-shim.2.4.0.js"></script>
vendor: 1 bytes, line 1254
1254
1255<script type="importmap"> 1256 { 1257 "imports": { 1258 "@theme/overflow-list": "//www.bushnellgolf.com/cdn/shop/t/127/assets/overflow-list.js?v=103972619002749600251790092426", 1259 "@theme/product-title": "//www.bushnellgolf.com/cdn/shop/t/127/assets/product-title-truncation.js?v=171142440647363214041790092426", 1260 "@theme/component": "//www.bushnellgolf.com/cdn/shop/t/127/assets/component.js?v=2871837290084333401790092425", 1261 "@theme/dialog": "//www.bushnellgolf.com/cdn/shop/t/127/assets/dialog.js?v=98420710104516085021790092425", 1262 "@theme/events": "//www.bushnellgolf.com/cdn/shop/t/127/assets/events.js?v=81602296892335704251790092426", 1263 "@theme/focus": "//www.bushnellgolf.com/cdn/shop/t/127/assets/focus.js?v=78592351534870363931790092425", 1264 "@theme/morph": "//www.bushnellgolf.com/cdn/shop/t/127/assets/morph.js?v=28947075772200326741790092426", 1265 "@theme/paginated-list": "//www.bushnellgolf.com/cdn/shop/t/127/assets/paginated-list.js?v=128606916275786253511790092426", 1266 "@theme/performance": "//www.bushnellgolf.com/cdn/shop/t/127/assets/performance.js?v=76000260998028458051790092426", 1267 "@theme/product-form": "//www.bushnellgolf.com/cdn/shop/t/127/assets/product-form.js?v=65688817668972432781790092426", 1268 "@theme/recently-viewed-products": "//www.bushnellgolf.com/cdn/shop/t/127/assets/recently-viewed-products.js?v=39343464552543927101790092426", 1269 "@theme/scrolling": "//www.bushnellgolf.com/cdn/shop/t/127/assets/scrolling.js?v=56944800252707256061790092426", 1270 "@theme/section-renderer": "//www.bushnellgolf.com/cdn/shop/t/127/assets/section-renderer.js?v=157579674837333786411790092426", 1271 "@theme/section-hydration": "//www.bushnellgolf.com/cdn/shop/t/127/assets/section-hydration.js?v=725126219061066681790092426", 1272 "@theme/money-formatting": "//www.bushnellgolf.com/cdn/shop/t/127/assets/money-formatting.js?v=27089427827183356751790092426", 1273 "@theme/utilities": "//www.bushnellgolf.com/cdn/shop/t/127/assets/utilities.js?v=1621211302821184481790092426", 1274 "@theme/variant-picker": "//www.bushnellgolf.com/cdn/shop/t/127/assets/variant-picker.js?v=6469487693213381221790092426", 1275 "@theme/media-gallery": "//www.bushnellgolf.com/cdn/shop/t/127/assets/media-gallery.js?v=88799770645515588651790092426", 1276 "@theme/quick-add": "//www.bushnellgolf.com/cdn/shop/t/127/assets/quick-add.js?v=139210347678326180991790092426", 1277 "@theme/paginated-list-aspect-ratio": "//www.bushnellgolf.com/cdn/shop/t/127/assets/paginated-list-aspect-ratio.js?v=105612802989813080971790092426", 1278 "@theme/popover-polyfill": "//www.bushnellgolf.com/cdn/shop/t/127/assets/popover-polyfill.js?v=87956549048087295091790092426", 1279 "@theme/component-quantity-selector": "//www.bushnellgolf.com/cdn/shop/t/127/assets/component-quantity-selector.js?v=9159700773030885271790092425", 1280 "@theme/comparison-slider": "//www.bushnellgolf.com/cdn/shop/t/127/assets/comparison-slider.js?v=54290423415165392741790092425", 1281 "@theme/sticky-add-to-cart": "//www.bushnellgolf.com/cdn/shop/t/127/assets/sticky-add-to-cart.js?v=178695681353592012341790092426", 1282 "@theme/fly-to-cart": "//www.bushnellgolf.com/cdn/shop/t/127/assets/fly-to-cart.js?v=65654735866222019691790092425" 1283 } 1284 } 1285</script>
1285 1286
1287<script 1288 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/view-transitions.js?v=29934355952596568961790092426" 1289 async 1290 1291></script>
1291 1292 1293<link 1294 rel="modulepreload" 1295 href="//www.bushnellgolf.com/cdn/shop/t/127/assets/utilities.js?v=1621211302821184481790092426" 1296 fetchpriority="low" 1297> 1298<link 1299 rel="modulepreload" 1300 href="//www.bushnellgolf.com/cdn/shop/t/127/assets/component.js?v=2871837290084333401790092425" 1301 fetchpriority="low" 1302> 1303<link 1304 rel="modulepreload" 1305 href="//www.bushnellgolf.com/cdn/shop/t/127/assets/section-renderer.js?v=157579674837333786411790092426" 1306 fetchpriority="low" 1307> 1308<link 1309 rel="modulepreload" 1310 href="//www.bushnellgolf.com/cdn/shop/t/127/assets/section-hydration.js?v=725126219061066681790092426" 1311 fetchpriority="low" 1312> 1313<link 1314 rel="modulepreload" 1315 href="//www.bushnellgolf.com/cdn/shop/t/127/assets/morph.js?v=28947075772200326741790092426" 1316 fetchpriority="low" 1317> 1318 1319 1320 1321<link 1322 rel="modulepreload" 1323 href="//www.bushnellgolf.com/cdn/shop/t/127/assets/focus.js?v=78592351534870363931790092425" 1324 fetchpriority="low" 1325> 1326<link 1327 rel="modulepreload" 1328 href="//www.bushnellgolf.com/cdn/shop/t/127/assets/recently-viewed-products.js?v=39343464552543927101790092426" 1329 fetchpriority="low" 1330> 1331<link 1332 rel="modulepreload" 1333 href="//www.bushnellgolf.com/cdn/shop/t/127/assets/scrolling.js?v=56944800252707256061790092426" 1334 fetchpriority="low" 1335> 1336<link 1337 rel="modulepreload" 1338 href="//www.bushnellgolf.com/cdn/shop/t/127/assets/events.js?v=81602296892335704251790092426" 1339 fetchpriority="low" 1340>
1341<script 1342 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/popover-polyfill.js?v=87956549048087295091790092426" 1343 type="module" 1344 fetchpriority="low" 1345></script>
1345
1346<script 1347 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/overflow-list.js?v=103972619002749600251790092426" 1348 type="module" 1349 fetchpriority="low" 1350></script>
1350
1351<script 1352 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/quick-add.js?v=139210347678326180991790092426" 1353 type="module" 1354 fetchpriority="low" 1355></script>
1355 1356 1357
1357<script 1358 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/cart-discount.js?v=138861295263764935711790092425" 1359 type="module" 1360 fetchpriority="low" 1361 ></script>
1361 1362 1363
1364<script 1365 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/dialog.js?v=98420710104516085021790092425" 1366 type="module" 1367 fetchpriority="low" 1368></script>
1368
1369<script 1370 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/variant-picker.js?v=6469487693213381221790092426" 1371 type="module" 1372 fetchpriority="low" 1373></script>
1373
1374<script 1375 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/product-card.js?v=177636412167985402681790092426" 1376 type="module" 1377 fetchpriority="low" 1378></script>
1378
1379<script 1380 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/product-form.js?v=65688817668972432781790092426" 1381 type="module" 1382 fetchpriority="low" 1383></script>
1383
1384<script 1385 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/fly-to-cart.js?v=65654735866222019691790092425" 1386 type="module" 1387 fetchpriority="low" 1388></script>
1388
1389<script 1390 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/accordion-custom.js?v=109161695428116401221790092426" 1391 type="module" 1392 fetchpriority="low" 1393></script>
1393
1394<script 1395 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/media.js?v=125180963674196456411790092426" 1396 type="module" 1397 fetchpriority="low" 1398></script>
1398
1399<script 1400 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/product-price.js?v=56949708730051287511790092426" 1401 type="module" 1402 fetchpriority="low" 1403></script>
1403
1404<script 1405 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/product-sku.js?v=12707995544342967231790092426" 1406 type="module" 1407 fetchpriority="low" 1408></script>
1408
1409<script 1410 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/product-title-truncation.js?v=171142440647363214041790092426" 1411 type="module" 1412 fetchpriority="low" 1413></script>
1413
1414<script 1415 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/product-inventory.js?v=97482887429145606201790092426" 1416 type="module" 1417 fetchpriority="low" 1418></script>
1418
1419<script 1420 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/show-more.js?v=70689597587884376891790092426" 1421 type="module" 1422 fetchpriority="low" 1423></script>
1423
1424<script 1425 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/slideshow.js?v=135511145289867776151790092426" 1426 type="module" 1427 fetchpriority="low" 1428></script>
1428
1429<script 1430 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/layered-slideshow.js?v=150049425201492448951790092426" 1431 type="module" 1432 fetchpriority="low" 1433></script>
1433
1434<script 1435 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/anchored-popover.js?v=168929214168724352541790092426" 1436 type="module" 1437 fetchpriority="low" 1438></script>
1438
1439<script 1440 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/floating-panel.js?v=134624273071112507821790092426" 1441 type="module" 1442 fetchpriority="low" 1443></script>
1443
1444<script 1445 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/video-background.js?v=125155869468546408071790092426" 1446 type="module" 1447 fetchpriority="low" 1448></script>
1448
1449<script 1450 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/component-quantity-selector.js?v=9159700773030885271790092425" 1451 type="module" 1452 fetchpriority="low" 1453></script>
1453
1454<script 1455 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/media-gallery.js?v=88799770645515588651790092426" 1456 type="module" 1457 fetchpriority="low" 1458></script>
1458
1459<script 1460 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/rte-formatter.js?v=50196128441411127351790092426" 1461 type="module" 1462 fetchpriority="low" 1463></script>
1463
1464<script 1465 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/volume-pricing.js?v=130575904330974358741790092426" 1466 type="module" 1467 fetchpriority="low" 1468></script>
1468
1469<script 1470 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/price-per-item.js?v=40571194438189935441790092426" 1471 type="module" 1472 fetchpriority="low" 1473></script>
1473
1474<script 1475 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/volume-pricing-info.js?v=16866589937000989531790092426" 1476 type="module" 1477 fetchpriority="low" 1478></script>
1478 1479 1480 1481 1482 1483
1484<script 1485 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/auto-close-details.js?v=46360069785536700841790092426" 1486 defer="defer" 1487></script>
1487 1488
1489<script> 1490 const Theme = { 1491 translations: { 1492 placeholder_image: `Placeholder image`, 1493 added: `Added`, 1494 recipient_form_fields_visible: `Recipient form fields are now visible`, 1495 recipient_form_fields_hidden: `Recipient form fields are now hidden`, 1496 recipient_form_error: `There was an error with the form submission`, 1497 items_added_to_cart_one: `1 item added to cart`, 1498 items_added_to_cart_other: `{{ count }} items added to cart`, 1499 }, 1500 routes: { 1501 cart_add_url: '/cart/add.js', 1502 cart_change_url: '/cart/change', 1503 cart_update_url: '/cart/update', 1504 cart_url: '/cart', 1505 predictive_search_url: '/search/suggest', 1506 search_url: '/search', 1507 }, 1508 template: { 1509 name: 'page.about', 1510 }, 1511 }; 1512</script>
1512 1513<link rel="preload" as="font" href="//www.bushnellgolf.com/cdn/shop/t/127/assets/acumin-pro.woff2?v=102240913865752762161790092426" type="font/woff2" crossorigin><link href="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell.css?v=28925328111356423891790092425" rel="stylesheet" type="text/css" media="all" /> 1514 <link href="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-buy-now-patch.css?v=85352361508442732821790092425" rel="stylesheet" type="text/css" media="all" /> 1515 <link href="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-cro-patch.css?v=162323756666457044951790092425" rel="stylesheet" type="text/css" media="all" /> 1516 <link href="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-fitcheck.css?v=97541241949286130371790092425" rel="stylesheet" type="text/css" media="all" />�<link rel="preload" as="font" href="//www.bushnellgolf.com/cdn/shop/t/127/assets/industry-medium.woff2?v=132185208873765463631790092426" type="font/woff2" crossorigin fetchpriority="low"> 1517<link rel="preload" as="font" href="//www.bushnellgolf.com/cdn/shop/t/127/assets/industry-bold.woff2?v=110081505489078479111790092425" type="font/woff2" crossorigin> 1518 1519<style> 1520 @font-face { 1521 font-family: 'Acumin Pro'; 1522 src: url('//www.bushnellgolf.com/cdn/shop/t/127/assets/acumin-pro.woff2?v=102240913865752762161790092426') format('woff2'); 1523 font-weight: 400; 1524 font-style: normal; 1525 font-display: swap; 1526 } 1527 1528 @font-face { 1529 font-family: 'Acumin Pro Medium'; 1530 src: url('//www.bushnellgolf.com/cdn/shop/t/127/assets/acumin-pro-medium.woff2?v=90873278444693665241790092426') format('woff2'); 1531 font-weight: 500; 1532 font-style: normal; 1533 font-display: swap; 1534 } 1535 1536 @font-face { 1537 font-family: 'Acumin Pro Bold'; 1538 src: url('//www.bushnellgolf.com/cdn/shop/t/127/assets/acumin-pro-bold.woff2?v=16147239003615737331790092425') format('woff2'); 1539 font-weight: 700; 1540 font-style: normal; 1541 font-display: swap; 1542 } 1543 1544 @font-face { 1545 font-family: 'Industry Light'; 1546 src: url('//www.bushnellgolf.com/cdn/shop/t/127/assets/industry-light.woff2?v=45057905669618413361790092426') format('woff2'); 1547 font-weight: 300; 1548 font-style: normal; 1549 font-display: swap; 1550 } 1551 @font-face { 1552 font-family: 'Industry'; 1553 src: url('//www.bushnellgolf.com/cdn/shop/t/127/assets/industry-medium.woff2?v=132185208873765463631790092426') format('woff2'); 1554 font-weight: 500; 1555 font-style: normal; 1556 font-display: swap; 1557 } 1558 @font-face { 1559 font-family: 'Industry Medium'; 1560 src: url('//www.bushnellgolf.com/cdn/shop/t/127/assets/industry-medium.woff2?v=132185208873765463631790092426') format('woff2'); 1561 font-weight: 500; 1562 font-style: normal; 1563 font-display: swap; 1564 } 1565 1566 @font-face { 1567 font-family: 'Industry Bold'; 1568 src: url('//www.bushnellgolf.com/cdn/shop/t/127/assets/industry-bold.woff2?v=110081505489078479111790092425') format('woff2'); 1569 font-weight: 700; 1570 font-style: normal; 1571 font-display: swap; 1572 } 1573 1574 @font-face { 1575 font-family: 'Industry'; 1576 src: url('//www.bushnellgolf.com/cdn/shop/t/127/assets/industry-medium.woff2?v=132185208873765463631790092426') format('woff2'); 1577 font-weight: 500; 1578 font-style: normal; 1579 font-display: swap; 1580 } 1581 1582 1583 1584 :root { 1585 /* ââ Per-heading Shopify theme CSS variables ââ */ 1586 --font-h1--family: 'Industry Bold', sans-serif; 1587 --font-h2--family: 'Industry Bold', sans-serif; 1588 --font-h3--family: 'Industry Bold', sans-serif; 1589 --font-h4--family: 'Industry Medium', sans-serif; 1590 --font-h5--family: 'Industry Medium', sans-serif; 1591 --font-h6--family: 'Industry Medium', sans-serif; 1592 1593 /* ââ General heading/body Shopify variables ââ */ 1594 --font-heading--family: 'Industry Bold', sans-serif; 1595 --font-subheading--family: 'Industry Bold', sans-serif; 1596 --font-body--family: 'Acumin Pro', sans-serif; 1597 --font-paragraph--family: 'Acumin Pro', sans-serif; 1598 --font-accent--family: 'Acumin Pro', sans-serif; 1599 1600 /* ââ Bushnell UI kit variables (bushnell.css) ââ */ 1601 --font-display: 'Industry Bold', sans-serif; 1602 --font-ui: 'Industry Bold', sans-serif; 1603 --font-body: 'Acumin Pro', sans-serif; 1604 } 1605 1606 /* ââ Direct element overrides for full coverage ââ */ 1607 h1 { font-family: 'Industry Bold', sans-serif; } 1608 h2 { font-family: 'Industry Bold', sans-serif; } 1609 h3 { font-family: 'Industry Bold', sans-serif; } 1610 h4 { font-family: 'Industry Medium', sans-serif; } 1611 h5 { font-family: 'Industry Medium', sans-serif; } 1612 h6 { font-family: 'Industry Medium', sans-serif; } 1613 body, p { font-family: 'Acumin Pro', sans-serif; } 1614</style> 1615 1616
1616<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
1616<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/94598496440/digital_wallets/dialog"> 1617<meta id="in-context-paypal-metadata" data-shop-id="94598496440" data-venmo-supported="false" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD">
1618<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=4716069048"></script>
1618 1619<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
1620<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=4716069048&shop_id=94598496440" crossorigin="anonymous"></script>
vendor: 1 bytes, line 1620
1620
1621<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":94598496440,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/94598496440","merchantName":"Bushnell Golf","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","elo","jcb"],"total":{"type":"pending","label":"Bushnell Golf","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 1621
1621
1622<script id="shopify-features" type="application/json">{"accessToken":"c0757fe088970775118d58865578e6d4","betas":["rich-media-storefront-analytics"],"domain":"www.bushnellgolf.com","predictiveSearch":true,"shopId":94598496440,"locale":"en"}</script>
vendor: 1 bytes, line 1622
1622
1623<script>var Shopify = Shopify || {}; 1624Shopify.shop = "1zkvfh-xt.myshopify.com"; 1625Shopify.locale = "en"; 1626Shopify.currency = {"active":"USD","rate":"1.0"}; 1627Shopify.country = "US"; 1628Shopify.theme = {"name":"9-22-2026-sold-out-lpi-and-lpi-smb","id":191774392504,"schema_name":"Horizon","schema_version":"3.4.0","theme_store_id":null,"role":"main"}; 1629Shopify.theme.handle = "null"; 1630Shopify.theme.style = {"id":null,"handle":null}; 1631Shopify.cdnHost = "www.bushnellgolf.com/cdn"; 1632Shopify.routes = Shopify.routes || {}; 1633Shopify.routes.root = "/"; 1634Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 1635Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 1636Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 1637Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 1637
1637
1638<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 1638
1638
1639<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 1639
1639
1640<script> 1641 window.ShopifyPay = window.ShopifyPay || {}; 1642 window.ShopifyPay.apiHost = "shop.app\/pay"; 1643 window.ShopifyPay.redirectState = null; 1644</script>
vendor: 1 bytes, line 1644
1644
1645<script> 1646 window.Shopify = window.Shopify || {}; 1647 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 1648 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 1649 window.Shopify.SignInWithShop.eligible = true; 1650</script>
vendor: 1 bytes, line 1650
1650
1651<script id="shop-js-analytics" type="application/json">{"pageType":"page"}</script>
vendor: 1 bytes, line 1651
1651
1652<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 1652
1652
1653<script type="module"> 1654 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 1655 1656 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 1657 1658</script>
vendor: 1 bytes, line 1658
1658
1659<script> 1660 window.Shopify = window.Shopify || {}; 1661 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 1662 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 1663</script>
vendor: 1 bytes, line 1663
1663
1664<script>(function() { 1665 var isLoaded = false; 1666 function asyncLoad() { 1667 if (isLoaded) return; 1668 isLoaded = true; 1669 var urls = ["https:\/\/na.shgcdn3.com\/pixel-collector.js?shop=1zkvfh-xt.myshopify.com","\/\/cdn.shopify.com\/proxy\/97cd65ac45fbe7fdf6a885e2ab658a9e3163e2b1e786e17a38330ef45486114f\/cdn-scripts.signifyd.com\/shopify\/script-tag.js?shop=1zkvfh-xt.myshopify.com\u0026sp-cache-control=cHVibGljLCBtYXgtYWdlPTkwMA"]; 1670 for (var i = 0; i < urls.length; i++) { 1671 var s = document.createElement('script'); 1672 s.type = 'text/javascript'; 1673 s.async = true; 1674 s.src = urls[i]; 1675 var x = document.getElementsByTagName('script')[0]; 1676 x.parentNode.insertBefore(s, x); 1677 } 1678 }; 1679 if(window.attachEvent) { 1680 window.attachEvent('onload', asyncLoad); 1681 } else { 1682 window.addEventListener('load', asyncLoad, false); 1683 } 1684})();</script>
vendor: 1 bytes, line 1684
1684
1685<script id="__st">var __st={"a":94598496440,"offset":-25200,"reqid":"afd644ad-ef44-42fd-b0c9-16f367671da7-1790241164","pageurl":"www.bushnellgolf.com\/pages\/about-bushnell-golf","s":"pages-165898748088","u":"fe92a2b267c4","p":"page","rtyp":"page","rid":165898748088};</script>
vendor: 1 bytes, line 1685
1685
1686<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 1686
1686
1687<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 1687
1687
1688<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//www.bushnellgolf.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 1688
1688
1689<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//www.bushnellgolf.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
1689<script crossorigin="anonymous" defer="defer" src="//www.bushnellgolf.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 1689
1689
1690<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 1690
1690
1691<script> 1692 window.Shopify = window.Shopify || {}; 1693 window.Shopify.MCP = window.Shopify.MCP || {}; 1694 window.Shopify.MCP.enabled = true; 1695 window.Shopify.MCP.shop = "1zkvfh-xt.myshopify.com"; 1696 window.Shopify.MCP.mcpEndpoint = "https:\/\/www.bushnellgolf.com\/api\/mcp"; 1697 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 1698</script>
vendor: 1 bytes, line 1698
1698
1699<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/www.bushnellgolf.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 1700</script>
vendor: 1 bytes, line 1700
1700
1701<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://www.bushnellgolf.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 1702</script>
vendor: 1 bytes, line 1702
1702
1703<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 1704 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 1705</script>
vendor: 1 bytes, line 1705
1705
1706<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}})); 1707</script>
1707 1708<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://www.bushnellgolf.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 1709<style id="shopify-accelerated-checkout-cart"> 1710 #shopify-buyer-consent { 1711 margin-top: 1em; 1712 display: inline-block; 1713 width: 100%; 1714} 1715 1716#shopify-buyer-consent.hidden { 1717 display: none; 1718} 1719 1720#shopify-subscription-policy-button { 1721 background: none; 1722 border: none; 1723 padding: 0; 1724 text-decoration: underline; 1725 font-size: inherit; 1726 cursor: pointer; 1727} 1728 1729#shopify-subscription-policy-button::before { 1730 box-shadow: none; 1731} 1732 1733 </style> 1734<link rel="stylesheet" media="screen" href="//www.bushnellgolf.com/cdn/shop/t/127/compiled_assets/styles.css?v=160800271737863426111790100414">
1735<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
1735 1736 1737 1738 1739 1740 1741 1742
1742<script type="text/javascript"> 1743 1744 window.__shgMoneyFormat = window.__shgMoneyFormat || {"USD":{"currency":"USD","currency_symbol":"$","currency_symbol_location":"left","decimal_places":2,"decimal_separator":".","thousands_separator":","}}; 1745 1746 window.__shgCurrentCurrencyCode = window.__shgCurrentCurrencyCode || { 1747 currency: "USD", 1748 currency_symbol: "$", 1749 decimal_separator: ".", 1750 thousands_separator: ",", 1751 decimal_places: 2, 1752 currency_symbol_location: "left" 1753 }; 1754 </script>
1754 1755 1756 1757 1758 1759 1760
1761<script type="text/javascript"> 1762 1763 window.SHG_CUSTOMER = null; 1764 1765</script>
1765 1766 1767 1768 1769 1770 1771 1772 1773 <!-- Extend -- Load Extend SDK Configuration script --> 1774 <!-- Extend - Add necessary SDK script tags and configure the store -->
1775<script src='https://sdk.helloextend.com/extend-sdk-client/v1/extend-sdk-client.min.js' defer='defer'></script>
1775
1776<script src='https://sdk.helloextend.com/extend-sdk-client-shopify-addon/v1/extend-sdk-client-shopify-addon.min.js' defer='defer'></script>
1776 1777
1778<script> 1779 window.addEventListener('DOMContentLoaded', function () { 1780 // Set store ID 1781 const storeId = '1bb870ec-2d72-437e-94ce-7159cce5aeae'; 1782 // Set environment (production, demo, or development) 1783 const env = 'production'; 1784 1785 window.Extend.config({ storeId: storeId, environment: env }); 1786 1787 // Only sets window variables if Extend and ExtendShopify is defined 1788 if (window.Extend && window.ExtendShopify) { 1789 // Contains window variables used in integration 1790 window.Extend.integration = {}; 1791 1792 // Configurables - Start 1793 // Set currency required to display offers (USD or CAD) 1794 window.Extend.integration.currency = 'USD'; 1795 // PDP Visible Offer 1796 window.Extend.integration.pdpOffer = true; 1797 // PDP Modal Offer 1798 window.Extend.integration.pdpModalOffer = false; 1799 // PDP Offer Properties 1800 window.Extend.integration.offerProperties = {}; 1801 // Cart Offers 1802 window.Extend.integration.cartOffer = true; 1803 // Sidecart Offers 1804 window.Extend.integration.sidecartOffer = true; 1805 // Cart Balancing 1806 window.Extend.integration.cartBalancing = true; 1807 // Aftermarket Modal 1808 window.Extend.integration.aftermarketModal = true; 1809 // ATC Modal Offer 1810 window.Extend.integration.atcOffer = true; 1811 // Quickview visible offer 1812 window.Extend.integration.quickviewOffer = true; 1813 // Quickview modal offer 1814 window.Extend.integration.quickviewModalOffer = true; 1815 // Cart SP 1816 window.Extend.integration.cartSP = false; 1817 // Configurables - End 1818 1819 // Aftermarket Code 1820 if (Shopify && Shopify.currency && Shopify.currency.active === Extend.integration.currency && Extend.integration.aftermarketModal) { 1821 try { 1822 // Get params from URL 1823 const params = (new URL(document.location)).searchParams; 1824 1825 // Check if leadToken or leadtoken is in the URL 1826 let leadToken = params.get('leadToken') 1827 ? params.get('leadToken') 1828 : params.get('leadtoken'); 1829 1830 if (leadToken) { 1831 Extend.aftermarketModal.open({ 1832 leadToken: leadToken, 1833 onClose: function (plan, product, quantity) { 1834 if (plan && product) { 1835 ExtendShopify.addPlanToCart({ 1836 plan: plan, 1837 product: product, 1838 leadToken: leadToken, 1839 quantity: quantity || 1 1840 }, function () { 1841 location = '/cart' 1842 }) 1843 } 1844 } 1845 }); 1846 } 1847 } catch (error) { 1848 console.error("EXTEND: " + error); 1849 } 1850 } 1851 } 1852 }, { once: true }); 1853</script>
1853 1854 1855<!-- Optional --> 1856<!-- Extend - Render cart shipping protection --> 1857 1858<!-- Extend - Render checkout plus --> 1859 1860 1861<!-- Extend - Render product page -->
1862<script> 1863 1864 // Run scripts on DOMContentLoaded to avoid affecting site load time 1865 window.addEventListener('DOMContentLoaded', function () { 1866 // Checks if Extend lives in the window and the active currency is USD before showing Extend offers 1867 if (Extend && ExtendShopify && Shopify && Shopify.currency && Shopify.currency.active === Extend.integration.currency && meta.page.pageType == 'product') { 1868 1869 /************************/ 1870 /* Initial Variables */ 1871 /************************/ 1872 const productForm = document.querySelector('form[action="/cart/add"]'); // Change this to the product form element 1873 const addToCartButton = productForm.querySelector('.bpdp-atc-btn'); // Change this to the Add-To-Cart element 1874 const dispatchSideCart = true; // Set to true if a sidecart opens after adding to cart via pdp 1875 const productCategory = (meta && meta.product) ? meta.product.type : null; // Grabs product category from meta object, works on most themes 1876 1877 // Handles creating and prepending Extend offer div 1878 const extendOffer = document.createElement('div'); 1879 if (!Extend.integration.pdpOffer) extendOffer.style.display = 'none'; 1880 extendOffer.className = 'extend-offer'; 1881 addToCartButton.before(extendOffer); 1882 1883 /************************/ 1884 /* initProductOffer */ 1885 /************************/ 1886 // Initializes product offers and handles ATC button functionality for the main PDP ATC 1887 async function initProductOffer() { 1888 try { 1889 1890 // Fail safes 1891 if (!productForm || !addToCartButton || !extendOffer) { 1892 throw new Error("Exiting - missing productForm, addToCartButton, or extendOffer") 1893 } 1894 1895 // Disables ATC if product is Extend 1896 if (meta && meta.product && meta.product.vendor === 'Extend') addToCartButton.disabled = true; 1897 1898 // Grabs the variantId from the productForm and renders the initial offers for it 1899 let variantId = productForm.id.value; 1900 1901 // Grabs the product price from the metadata, works on most themes 1902 let productPrice = (meta && meta.product && meta.product.variants) ? parseInt(meta.product.variants.filter(variant => variant.id.toString() === variantId.toString())[0].price) : null; 1903 1904 // Saves the offer properties to an easily accessible window object that is initialized in the config 1905 Extend.integration.offerProperties = {variant: variantId, category: productCategory, price: productPrice} 1906 1907 // Fetches bundle components, empty array if non-bundle 1908 const { components } = await ExtendShopify.getBundleComponents({ 1909 variantId: `gid://shopify/ProductVariant/${variantId}` 1910 }) || {}; 1911 1912 // Renders bundle offer or regular offer as needed 1913 Extend.buttons.render(extendOffer, components?.length > 0 1914 ? { referenceId: variantId, products: components } 1915 : { referenceId: variantId, price: productPrice, category: productCategory } 1916 ); 1917 1918 // Listens for changes to the productForm and sets the activeProduct for extend via variantID 1919 productForm.addEventListener('change', async function () { 1920 variantId = productForm.id.value; 1921 productPrice = meta?.product?.variants?.find(v => v.id.toString() === variantId.toString())?.price ? parseInt(meta.product.variants.find(v => v.id.toString() === variantId.toString()).price) : null; 1922 const { components } = await ExtendShopify.getBundleComponents({ 1923 variantId: `gid://shopify/ProductVariant/${variantId}` 1924 }) || {}; 1925 if (!variantId) return; 1926 Extend.setActiveProduct(extendOffer, components?.length > 0 1927 ? { referenceId: variantId, products: components } 1928 : { referenceId: variantId, price: productPrice, category: productCategory } 1929 ); 1930 }); 1931 1932 document.querySelector('button.header-actions__action').addEventListener('click', function () { 1933 console.log("Extend: click listener"); 1934 setTimeout(function () { window.dispatchEvent(new Event('resize')) }, 500) 1935 }) 1936 1937 1938 // Immediate loading feedback on the ATC button (uses the PDP's own 1939 // .bpdp-atc-btn.is-loading spinner styles) so there's instant feedback 1940 // on click for BOTH flows: plan selected (Extend takes a moment to add 1941 // the plan) and no plan (Extend opens its upsell popup). 1942 function setAtcLoading(on) { 1943 if (!addToCartButton) return; 1944 if (on) { 1945 try { 1946 var c = getComputedStyle(addToCartButton).color; 1947 if (!c || c === 'transparent' || c.indexOf('rgba(0, 0, 0, 0)') !== -1) c = '#1c1c1c'; 1948 addToCartButton.style.setProperty('--bpdp-spin', c); 1949 } catch (e) {} 1950 addToCartButton.classList.add('is-loading'); 1951 } else { 1952 addToCartButton.classList.remove('is-loading'); 1953 addToCartButton.style.removeProperty('--bpdp-spin'); 1954 } 1955 } 1956 1957 // click simulation handling add to cart 1958 function handleAddToCart(e) { 1959 e.preventDefault(); 1960 e.stopImmediatePropagation(); 1961 1962 // Instant feedback for both flows. 1963 setAtcLoading(true); 1964 clearTimeout(window.__bnAtcLoaderT); 1965 window.__bnAtcLoaderT = setTimeout(function () { setAtcLoading(false); }, 12000); 1966 1967 const quantityEl = productForm.querySelector('[name="quantity"]'); 1968 const quantity = quantityEl && quantityEl.value ? quantityEl.value : 1; 1969 1970 ExtendShopify.handleAddToCart(extendOffer, { 1971 quantity: quantity, 1972 modal: Extend.integration.pdpModalOffer, 1973 done: function () { 1974 // keep the loader on through the actual add-to-cart 1975 setAtcLoading(true); 1976 // remove default click listener 1977 addToCartButton.removeEventListener('click', handleAddToCart, true); 1978 // click atc button 1979 addToCartButton.click(); 1980 // add default click listener back 1981 addToCartButton.addEventListener('click', handleAddToCart, true); 1982 // If variable set to true, dispatches Extend side cart integration to run after adding to cart via pdp
1983 if (dispatchSideCart) window.setTimeout(function () { window.dispatchEvent(new Event('refreshAjaxSideCart')) }, 1000) 1984 } 1985 }); 1986 } 1987 // run handleCaddtoCart when we click ATC, capturing event 1988 addToCartButton.addEventListener('click', handleAddToCart, true); 1989 1990 // The sticky bar's Add-to-Cart submits the form directly, so it bypasses 1991 // the Extend flow (no protection popup). Route its click through the main 1992 // ATC so Extend runs (popup / plan add) for the sticky button too. 1993 const stickyAtc = document.querySelector('.bpdp-sticky__atc'); 1994 if (stickyAtc) { 1995 stickyAtc.addEventListener('click', function (e) { 1996 e.preventDefault(); 1997 e.stopImmediatePropagation(); 1998 // mirror the loading spinner on the sticky button for feedback 1999 try { stickyAtc.style.setProperty('--bpdp-spin', getComputedStyle(stickyAtc).color); } catch (err) {} 2000 stickyAtc.classList.add('is-loading'); 2001 clearTimeout(window.__bnStickyAtcT); 2002 window.__bnStickyAtcT = setTimeout(function () { stickyAtc.classList.remove('is-loading'); }, 12000); 2003 // trigger the main ATC's Extend handler (shows popup / adds plan) 2004 addToCartButton.click(); 2005 }, true); 2006 // clear the sticky spinner once the cart updates 2007 document.addEventListener('cart:update', function () { stickyAtc.classList.remove('is-loading'); }); 2008 } 2009 } catch (error) { 2010 console.error("EXTEND:", error) 2011 } 2012 } 2013 // Initial product offer render 2014 if (!Extend.buttons.instance(extendOffer)) { 2015 initProductOffer(); 2016 } 2017 } 2018 }, { once: true }); 2019</script>
2019 2020 2021<style> 2022 .extend-offer { 2023 margin: 0 !important; 2024 } 2025</style> 2026<!-- Extend - Render cart -->
2027<script> 2028 2029 // run scripts on DOMContentLoaded to avoid affecting site load time 2030 window.addEventListener('DOMContentLoaded', function () { 2031 2032 // Only run ajax integration if Extend and ExtendShopify is defined, and the currency is set to USD 2033 if (!Extend || !ExtendShopify || !Shopify || !Shopify.currency || Shopify.currency.active !== Extend.integration.currency) { 2034 return; 2035 } 2036 2037 // Checks url if page is main cart 2038 const isMainCart = location.pathname.includes('/cart'); 2039 2040 if (!isMainCart && !window.Extend.integration.sidecartOffer) return; 2041 2042 // store value to know if script initialized already 2043 let init = false; 2044 2045 /*****************************************/ 2046 /* Global Variables - THEME SPECIFIC */ 2047 /*****************************************/ 2048 let cartRowItem, cartRowItemTitle, cartRowItemImage, cartRowItemQuantity, warrantyContainer, warrantyOriginalMeta, metadataContainer; 2049 if (isMainCart) { 2050 // Main cart variables 2051 cartRowItem = '.bgc-item-row'; // This is the container element for each item in the cart 2052 cartRowItemImage = '.bgc-item-img a'; // This is the product image or image anchor element 2053 cartRowItemTitle = '.bgc-item-name'; // This is the title anchor element for the product 2054 cartRowItemQuantity = '.bgc-qty span'; // This is the input element containing the product quantity 2055 warrantyOriginalMeta = '.bgc-item-variant'; // Each warranty metadata item we want to remove. 2056 warrantyContainer = '.bgc-item-name'; // This is the container where the offer will be appended 2057 metadataContainer = '.bgc-item-name'; // This is where warranty metadata will be appended (Product and Term) 2058 } else { 2059 // Side cart variables 2060 cartRowItem = '.cart-items__table-row--full-width-variants'; // This is the container element for each item in the cart 2061 cartRowItemImage = '.cart-items__media-container'; // This is the product image or image anchor element 2062 cartRowItemTitle = '.cart-items__title'; // This is the title anchor element for the product 2063 cartRowItemQuantity = 'input'; // This is the input element containing the product quantity 2064 warrantyOriginalMeta = '.cart-items__variants-wrapper'; // Each warranty metadata item we want to remove. 2065 warrantyContainer = '.cart-items__product-info'; // This is the container where the offer will be appended 2066 metadataContainer = '.cart-items__product-info'; // This is where warranty metadata will be appended (Product and Term) 2067 } 2068 2069 // Add quantity wrapper selector to disable use of quantity selector on Extend items, ignored if empty string 2070 const quantityWrapper = isMainCart ? '.bgc-qty' : '.quantity-selector'; 2071 2072 const offerClass = !isMainCart ? 'extend-side-cart-offer' : 'extend-cart-offer'; // This is the class that will be assigned to each Extend offer 2073 const cartEvent = !isMainCart ? 'refreshAjaxSideCart' : 'refreshAjaxCart'; 2074 const regEx = /\d+$/; 2075 let localCart = {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}; // Shopify Cart Object on initial load 2076 2077 // Fail safe for cart 2078 if (!localCart) { 2079 console.error("EXTEND: Exiting - localCart unavailable") 2080 return false; 2081 } 2082 2083 /**************************************/ 2084 /* refreshCart - THEME SPECIFIC */ 2085 /**************************************/ 2086 // Refresh the cart (hard refresh by default) 2087 async function refreshCart(cart) { 2088 if (isMainCart) { 2089 // Main cart specific refresh 2090 location.reload(); 2091 } else { 2092 // Sidecart specific refresh 2093 const res = await fetch('/cart.js'); 2094 localCart = await res.json(); 2095 2096 const cartItemsEl = document.querySelector('cart-items-component[data-drawer]'); 2097 if (!cartItemsEl) return; 2098 const sectionId = cartItemsEl.dataset.sectionId; 2099 const sectionsRes = await fetch(`${window.location.pathname}?sections=${sectionId}`); 2100 const sections = await sectionsRes.json(); 2101 document.dispatchEvent(new CustomEvent('cart:update', { 2102 bubbles: true, 2103 detail: { data: { sections } } 2104 })); 2105 await new Promise(resolve => setTimeout(resolve, 300)); 2106 2107 handleStyling(); 2108 //location.reload(); 2109 } 2110 } 2111 2112 /* Full-screen loader shown while a protection plan is being added to the cart. */ 2113 function showExtendLoader() { 2114 if (document.getElementById('bn-extend-loader')) return; 2115 const o = document.createElement('div'); 2116 o.id = 'bn-extend-loader'; 2117 o.setAttribute('style', 'position:fixed;inset:0;z-index:2147483647;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,0.45);'); 2118 o.innerHTML = '<div style="width:46px;height:46px;border:4px solid rgba(255,255,255,0.35);border-top-color:#fff;border-radius:50%;animation:bn-extend-spin 0.7s linear infinite;"></div>'; 2119 document.body.appendChild(o); 2120 } 2121 function hideExtendLoader() { 2122 const o = document.getElementById('bn-extend-loader'); 2123 if (o) o.remove(); 2124 } 2125 /* Reopen the cart drawer (used after a plan is added, since we close it when the modal opens). */ 2126 function openCartDrawer() { 2127 const drawer = document.querySelector('cart-drawer-component'); 2128 if (!drawer) return; 2129 try { if (typeof drawer.open === 'function') { drawer.open(); return; } } catch (e) {} 2130 const trigger = document.querySelector('[data-testid="cart-drawer-trigger"]') || 2131 document.querySelector('.header-actions__cart-icon, a[href$="/cart"]'); 2132 if (trigger) trigger.click(); 2133 } 2134 /* Called from onAddToCart: show loader, then after the cart refreshes, reopen the drawer. */ 2135 function afterPlanAdded() { 2136 Promise.resolve(refreshCart()).then(function () { 2137 hideExtendLoader(); 2138 if (!isMainCart) setTimeout(openCartDrawer, 150); 2139 }).catch(function () { hideExtendLoader(); }); 2140 } 2141 2142 function renderCartOffer(el, variantId, quantity, index) { 2143 // Grabs the product category and price from the current item metadata 2144 let productCategory = localCart.items[index].product_type; 2145 let productPrice = localCart.items[index].price; 2146 2147 2148 if (ExtendShopify.warrantyAlreadyInCart(parseInt(variantId), localCart.items) || ExtendShopify.warrantyAlreadyInCart(variantId.toString(), localCart.items)) { 2149 return; 2150 } else { 2151 2152 // Return if this is a cart snippet and cart offers are disabled 2153 if (isMainCart && !Extend.integration.cartOffer) return; 2154 // Return if this is a sidecart snippet and sidecart offers are disabled 2155 if (!isMainCart && !Extend.integration.sidecartOffer) return; 2156 2157 // Bundle logic 2158 2159 2160 // Gather bundle components 2161 //const bundleComponents = await getBundleComponents(variantId) 2162 let isBundle = false;
2163 //if (bundleComponents && bundleComponents.components && bundleComponents.components.length > 0) isBundle = true; 2164 // Renders Extend offer 2165 if (!isBundle) { 2166 // Render all other buttons 2167 Extend.buttons.renderSimpleOffer(el, { 2168 referenceId: variantId, 2169 price: productPrice, 2170 category: productCategory, 2171 onAddToCart: function (options) { 2172 if (!isMainCart) showExtendLoader(); 2173 ExtendShopify.addPlanToCart({ 2174 plan: options.plan, 2175 product: options.product, 2176 quantity: quantity 2177 }, function (err) { 2178 // An error occurred 2179 if (err) { 2180 hideExtendLoader(); 2181 throw new Error({ "Exiting - Error in onAddToCart": error }); 2182 } else { 2183 afterPlanAdded(); 2184 } 2185 }); 2186 } 2187 }); 2188 } else { 2189 // Render all button offer button 2190 Extend.buttons.renderSimpleOffer(el, { 2191 referenceId: variantId, 2192 products: bundleComponents.components, 2193 onAddToCart: function (options) { 2194 if (!isMainCart) showExtendLoader(); 2195 ExtendShopify.addPlanToCart({ 2196 plan: options.plan, 2197 product: options.product, 2198 products: options.products, 2199 quantity: quantity 2200 }, function (err) { 2201 // An error occurred 2202 if (err) { 2203 hideExtendLoader(); 2204 throw new Error({ "Exiting - Error in onAddToCart": error }); 2205 } else { 2206 afterPlanAdded(); 2207 } 2208 }); 2209 } 2210 }); 2211 } 2212 } 2213 } 2214 2215 /***********************/ 2216 /* createElement */ 2217 /***********************/ 2218 // createElement(product) - Takes in the product element, and creates the Extend offer element + appends the offer 2219 function createElement(product, index) { 2220 // Grab URL from title anchor href 2221 let url = product.querySelector(cartRowItemTitle).href; 2222 2223 // Grabs variant ID from URL if available, otherwise from localCart 2224 let variantId = (url && url.match(regEx)) ? url.match(regEx)[0] : localCart.items[index].id; 2225 2226 // Select quantity value 2227 let quantityEl = product.querySelector(cartRowItemQuantity); 2228 let quantity = quantityEl ? parseInt(quantityEl.value ?? quantityEl.innerText) : 1; 2229 2230 if (!variantId || quantity.length > 0) { 2231 throw new Error("Exiting - Error with variantId {0} or quantity {1}", variantId, quantity); 2232 } 2233 2234 // Removes existing offer elements before creating new ones 2235 let extendOffer = product.querySelector('.' + offerClass); 2236 if (extendOffer) { 2237 if (extendOffer.dataset.extendVariant !== variantId || extendOffer.dataset.extendQuantity !== quantity) { 2238 extendOffer.remove(); 2239 } else { 2240 return; 2241 } 2242 } 2243 2244 // Parent container to append ajax offer 2245 let container = product.querySelector(warrantyContainer); 2246 2247 // Fail safes 2248 if (!variantId || !quantity || !container) { 2249 throw new Error("Exiting - variant, quantity or container unavailable"); 2250 } 2251 2252 // Create new element & set class, data-extend-variant, and data-extend-quantity attributes 2253 let newExtendOffer = document.createElement('div'); 2254 newExtendOffer.className = offerClass; 2255 newExtendOffer.setAttribute('data-extend-variant', variantId); 2256 newExtendOffer.setAttribute('data-extend-quantity', quantity); 2257 2258 // Append the offer to the container element (THEME SPECIFIC) 2259 container.append(newExtendOffer); 2260 2261 renderCartOffer(newExtendOffer, variantId, quantity, index); 2262 2263 // The Extend widget renders asynchronously (after the drawer grid has already 2264 // laid out), so the item row can stay too short and clip the offer until the 2265 // user interacts. Watch the offer for its render/size change and nudge the row 2266 // to reflow + repaint so it shows correctly straight away. 2267 if ('ResizeObserver' in window) { 2268 let ro = new ResizeObserver(function () { 2269 let row = newExtendOffer.closest(cartRowItem) || newExtendOffer.closest('.cart-items__table-row'); 2270 if (!row) return; 2271 void row.offsetHeight; // force reflow (grow the grid row) 2272 row.style.transform = 'translateZ(0)'; // force a repaint of the clipped row 2273 requestAnimationFrame(function () { row.style.transform = ''; }); 2274 }); 2275 ro.observe(newExtendOffer); 2276 // Stop observing once the widget has settled to avoid ongoing overhead. 2277 setTimeout(function () { ro.disconnect(); }, 6000); 2278 } 2279 } 2280 2281 /************************/ 2282 /* Handle Styling */ 2283 /************************/ 2284 // Finds all cartRowItems and styles only Extend warranties 2285 function handleStyling() { 2286 2287 document.querySelectorAll(cartRowItem).forEach(function (el, index) { 2288 try { 2289 // Grab the title of the current item 2290 let title = el.querySelector(cartRowItemTitle); 2291 2292 // Title fail safe 2293 if (!title) { 2294 throw new Error("Exiting - title unavailable"); 2295 } 2296 2297 // If it's a warranty set isExtend to true and remove links
2298 if (title.innerText.toLowerCase().indexOf('extend protection') > -1) { // Grab the image of the current item and fail safe 2299 // Select and remove pointerEvents from warranty title 2300 title.style.pointerEvents = 'none'; 2301 2302 let image = el.querySelector(cartRowItemImage); 2303 2304 if (!image) { 2305 throw new Error("Exiting - image unavailable"); 2306 } 2307 2308 // Select and remove pointerEvents from warranty image 2309 image.style.pointerEvents = 'none'; 2310 2311 /**************************************/ 2312 /* THEME SPECIFIC STYLING START */ 2313 /**************************************/ 2314 // Removes old metadata 2315 if (el.querySelector(warrantyOriginalMeta)) { 2316 el.querySelectorAll(warrantyOriginalMeta).forEach(function (each) { 2317 each.remove(); 2318 }) 2319 } 2320 2321 if (quantityWrapper && quantityWrapper != '' && el.querySelector(quantityWrapper)) { 2322 el.querySelectorAll(quantityWrapper).forEach((each) => { 2323 each.style.opacity = '75%'; 2324 each.style.pointerEvents = 'none'; 2325 }) 2326 } 2327 2328 // Selects where to append warranty metadata 2329 let contentContainer = el.querySelector(metadataContainer) 2330 let warrantyProductData; 2331 let warrantyTermData; 2332 2333 if (!localCart.items[index]) return; 2334 2335 if (localCart.items[index].options_with_values && localCart.items[index].options_with_values[1]) { // Finds the ref id string in the product info string and replaces with an empty string 2336 let regexReplace = localCart.items[index].options_with_values[0].value.match(/\-\d{5,}/g); 2337 warrantyProductData = localCart.items[index].options_with_values[0].value.replace(regexReplace, ''); 2338 warrantyTermData = localCart.items[index].options_with_values[1].value; 2339 } else { 2340 warrantyProductData = localCart.items[index].properties.Product; 2341 warrantyTermData = localCart.items[index].properties.Term; 2342 } 2343 2344 // For category offers, fetch title by filtering through cart for warranted product refId 2345 if (warrantyProductData === "Covered Product") { 2346 const coveredProdId = localCart.items[index].properties['_Extend.ProductId']; 2347 const coveredProdTitle = localCart.items.filter((item) => item.id.toString() == coveredProdId)[0].title; 2348 warrantyProductData = coveredProdTitle; 2349 } 2350 2351 // Appends Product and Term metadata 2352 if (el.querySelector(metadataContainer)) { 2353 let warrantyProductName = document.createElement('p'); 2354 warrantyProductName.className = 'extend-warranty-info extend-warranty-info-product'; 2355 warrantyProductName.innerHTML = '<b>Product: </b>' + warrantyProductData; 2356 warrantyProductName.setAttribute('data-cy', 'warranty-description-product'); 2357 let warrantyProductTerm = document.createElement('p') 2358 warrantyProductTerm.className = 'extend-warranty-info extend-warranty-info-term'; 2359 warrantyProductTerm.innerHTML = '<b>Term: </b>' + warrantyTermData; 2360 warrantyProductTerm.setAttribute('data-cy', 'warranty-description-term'); 2361 2362 // Only append the metadata if it's not already there 2363 if (!el.querySelector('.extend-warranty-info')) { 2364 contentContainer.append(warrantyProductName, warrantyProductTerm) 2365 } 2366 } 2367 2368 /**************************************/ 2369 /* THEME SPECIFIC STYLING END */ 2370 /**************************************/ 2371 2372 } else { // Create an offer element for each product 2373 createElement(el, index); 2374 } 2375 } catch (error) { 2376 console.error("EXTEND:", error); 2377 } 2378 }); 2379 } 2380 2381 function initEventListeners() { 2382 if (init) return; 2383 2384 function refreshCartOffer() { 2385 fetch('/cart.js', { 2386 credentials: 'same-origin', 2387 method: 'GET', 2388 headers: { 2389 'Content-Type': 'application/json', 2390 'X-Requested-With': 'XMLHttpRequest'
2391 } 2392 }) 2393 .then((e) => e.json()) 2394 .then((e) => { 2395 localCart = e; 2396 initializeCartOffer(); 2397 }) 2398 .catch((error) => { 2399 console.error("EXTEND:", error) 2400 }); 2401 } 2402 2403 // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Multiple_identical_event_listeners 2404 window.addEventListener(cartEvent, refreshCartOffer); 2405 2406 // Listen for SP dispatching refresh 2407 window.addEventListener('refreshSP', refreshCart); 2408 2409 } 2410 2411 /************************/ 2412 /* initializeCartOffer */ 2413 /************************/ 2414 // Invokes handleStyling and finds all offers in the cart, handling both normalization and balancing 2415 function initializeCartOffer() { 2416 2417 // ** Checkout Plus Init - Uncomment if using Checkout Plus ** 2418 // let cartSpLocation; 2419 // cartSpLocation = isMainCart ? 'main' : 'side'; 2420 // window.Extend.integration.SPHelper.RenderOrUpdate(localCart, cartSpLocation); 2421 // window.Extend.integration.SPHelper.addOrUpdateCheckoutPlusOffer(localCart); 2422 2423 // Runs this normalization from extend-shipping.liquid if using cart SP 2424 if (Extend.integration.cartSP && Extend.integration.normalizeCartSP) { 2425 Extend.integration.normalizeCartSP() 2426 } 2427 2428 // Handles styling and creates offer elements 2429 handleStyling(); 2430 2431 initEventListeners(); 2432 2433 init = true; 2434 2435 // Use standard normalization if SP is not present in cart 2436 if (!window.Extend.integration.cartSP) { 2437 // Normalization ensures there is a 1:1 relationship between the product and the warranty 2438 ExtendShopify.normalizeCart({ 2439 cart: localCart, 2440 balance: Extend.integration.cartBalancing 2441 }, function (err, data) { 2442 try { 2443 // An error occurred 2444 if (err) { 2445 throw new Error({ "Exiting - Error in normalizeCart": error }); 2446 } else if (data && data.updates) { // Calls refreshCart to update the cart for normalization 2447 refreshCart(); 2448 } 2449 } catch (error) { 2450 console.error("EXTEND:", error) 2451 } 2452 }); 2453 } 2454 } 2455 2456 try { 2457 // initializeCartOffer when script is initially rendered 2458 initializeCartOffer(); 2459 2460 // The side-cart offer is often rendered while the drawer is still hidden 2461 // (display:none / off-screen), so Extend measures it at ~0 height and it 2462 // stays collapsed until the user interacts. When the drawer opens, nudge the 2463 // widgets to recompute and, if any are still collapsed, re-render them while 2464 // the drawer is visible so they show at full height immediately. 2465 if (!isMainCart) { 2466 function fixCollapsedSideCartOffers() { 2467 window.dispatchEvent(new Event('resize')); 2468 setTimeout(function () { 2469 let collapsed = false; 2470 document.querySelectorAll('.' + offerClass).forEach(function (el) { 2471 if (el.offsetHeight > 0 && el.offsetHeight < 30) collapsed = true; 2472 }); 2473 if (collapsed) { 2474 document.querySelectorAll('.' + offerClass).forEach(function (el) { el.remove(); }); 2475 handleStyling(); 2476 } 2477 }, 150); 2478 } 2479 2480 const drawerEl = document.querySelector('cart-drawer-component'); 2481 if (drawerEl) { 2482 // Fires when the drawer <dialog> opens. 2483 drawerEl.addEventListener('dialog:open', fixCollapsedSideCartOffers); 2484 // Fallback: watch the dialog's `open` attribute directly. 2485 const dlg = drawerEl.querySelector('dialog, .cart-drawer__dialog'); 2486 if (dlg && 'MutationObserver' in window) { 2487 new MutationObserver(function () { 2488 if (dlg.open || dlg.hasAttribute('open')) fixCollapsedSideCartOffers(); 2489 }).observe(dlg, { attributes: true, attributeFilter: ['open'] }); 2490 } 2491 } 2492 } 2493 2494 // When the shopper clicks the Extend offer in the drawer, Extend opens its 2495 // protection modal over the page. Close the cart drawer so the modal isn't 2496 // hidden behind it. 2497 function closeCartDrawer() { 2498 const drawer = document.querySelector('cart-drawer-component'); 2499 if (!drawer) return; 2500 try { 2501 if (typeof drawer.close === 'function') { drawer.close(); return; } 2502 } catch (e) {} 2503 const closeBtn = drawer.querySelector('.cart-drawer__close-button, [ref="closeButton"], [aria-label*="close" i]'); 2504 if (closeBtn) closeBtn.click(); 2505 } 2506 if (!isMainCart) { 2507 // The offer button is often a cross-origin iframe, so a click on it does 2508 // not bubble to the page. Instead, watch for Extend's protection modal 2509 // (added to <body>, or a pre-existing hidden modal being shown) and close 2510 // the drawer when it becomes visible. 2511 const isModalVisible = function (el) { 2512 if (!el) return false; 2513 const r = el.getBoundingClientRect(); 2514 const cs = getComputedStyle(el); 2515 return r.height > 80 && r.width > 80 && 2516 cs.display !== 'none' && cs.visibility !== 'hidden' && cs.opacity !== '0'; 2517 }; 2518 const watchModal = function (el) { 2519 if (!el || el.__bnModalWatch) return; 2520 el.__bnModalWatch = true; 2521 const check = function () { if (isModalVisible(el)) closeCartDrawer(); }; 2522 check(); 2523 if ('MutationObserver' in window) { 2524 new MutationObserver(check).observe(el, { 2525 attributes: true, 2526 attributeFilter: ['style', 'class', 'hidden', 'aria-hidden', 'open'] 2527 }); 2528 } 2529 };
2530 const MODAL_SEL = '#extend-offers-modal-iframe, #extend-learn-more-modal-iframe, [id*="extend"][id*="modal"], [class*="extend"][class*="modal"]'; 2531 document.querySelectorAll(MODAL_SEL).forEach(watchModal); 2532 if ('MutationObserver' in window) { 2533 new MutationObserver(function (muts) { 2534 muts.forEach(function (m) { 2535 m.addedNodes.forEach(function (n) { 2536 if (n.nodeType !== 1) return; 2537 if (n.matches && n.matches(MODAL_SEL)) watchModal(n); 2538 if (n.querySelectorAll) n.querySelectorAll(MODAL_SEL).forEach(watchModal); 2539 }); 2540 }); 2541 }).observe(document.body, { childList: true, subtree: true }); 2542 } 2543 2544 // Also try the direct click path (works when the offer is a normal DOM button). 2545 document.addEventListener('click', function (e) { 2546 if (e.target && e.target.closest && e.target.closest('.' + offerClass)) { 2547 setTimeout(closeCartDrawer, 0); 2548 } 2549 }, true); 2550 } 2551 2552 // Use this to refresh the sidecart when the mini cart trigger or quantity selectors/remove buttons are clicked 2553 document.addEventListener('click', function(e) { 2554 if (e.target.closest('.quantity-plus') || e.target.closest('.quantity-minus') || e.target.closest('.cart-items__remove')) { // Replace with your click listen selector 2555 window.setTimeout(function () { 2556 window.dispatchEvent(new Event('refreshAjaxSideCart')); 2557 }, 2000); 2558 } 2559 }) 2560 2561 document.addEventListener('click', function(e) { 2562 if (e.target.closest('button[data-bgc-action="qty-plus"]') || e.target.closest('button[data-bgc-action="qty-minus"]') || e.target.closest('.bgc-remove')) { // Replace with your click listen selector 2563 console.log("Extend: main cart quant") 2564 window.setTimeout(function () { 2565 window.dispatchEvent(new Event('refreshAjaxCart')); 2566 }, 2000); 2567 } 2568 }) 2569 2570 } catch (err) { 2571 console.error('EXTEND: ', err); 2572 } 2573 2574 }, { once: true }); 2575</script>
2575 2576 2577<style> 2578 .extend-cart-offer { 2579 margin: 0; 2580 } 2581 2582 .extend-side-cart-offer { 2583 margin: 10px 0; 2584 } 2585 2586 @keyframes bn-extend-spin { to { transform: rotate(360deg); } } 2587 2588 /* Side cart (drawer): render the offer as a full-width block under the title 2589 so it lays out cleanly and the item row grows to fit it (no clipping). */ 2590 .cart-drawer .extend-side-cart-offer { 2591 display: block; 2592 width: 100%; 2593 margin: 8px 0 4px; 2594 clear: both; 2595 } 2596 .cart-drawer .extend-side-cart-offer:empty { 2597 display: none; 2598 } 2599 2600 .extend-warranty-info { 2601 margin: 0 !important; 2602 } 2603 2604 .extend-warranty-info-product {} 2605 2606 .extend-warranty-info-term {} 2607 2608 #extend-offers-modal-iframe { 2609 z-index: 99999999999 !important; 2610 } 2611 2612 #extend-learn-more-modal-iframe { 2613 z-index: 99999999999 !important; 2614 } 2615</style> 2616 2617<!-- Optional --> 2618<!-- Extend - Render atc --> 2619 2620<!-- Extend - Render quickview --> 2621 2622 <!-- Extend -- End Extend code --> 2623<!-- BEGIN app block: shopify://apps/coframe-app-prod/blocks/coframe/019f3a40-3aa2-70f5-b75e-ee2ca0be8280 -->
2624<script> 2625 (function () { 2626 var d = document; 2627 // `cf_disable` is the kill switch the SDK and the hand-installed snippet 2628 // both honour, and it is what LCP benchmarking uses for its "Coframe 2629 // off" arm. Hiding here anyway would put a blank page in that arm and 2630 // make the comparison meaningless. 2631 if (/cf_disable/.test(location.search)) return; 2632 // Another integration on this page already hides it â the hand-installed 2633 // snippet uses this same element id, and a store can carry both it and 2634 // the app embed. Two hides do not stack (both read --cf-show, so the 2635 // first reveal un-hides both), but only one should own the element. 2636 if (d.getElementById('coframe-antiflicker')) return; 2637 var s = d.createElement('style'); 2638 s.id = 'coframe-antiflicker'; 2639 s.textContent = ':root{--cf-show:0}body{opacity:var(--cf-show)!important;transition:opacity 0.2s ease}'; 2640 (d.head || d.documentElement).appendChild(s); 2641 setTimeout(function () { 2642 var r = d.documentElement; 2643 r.style.setProperty('--cf-show', '1'); 2644 r.style.setProperty('--cf-visibility', 'visible'); 2645 if (s.parentNode) s.parentNode.removeChild(s); 2646 }, 1000); 2647 })(); 2648 </script>
2648<script async src="https://shop.coframe.com/coframe-storefront.js?shop=1zkvfh-xt.myshopify.com"></script>
2648 2649 2650 2651<!-- END app block --><!-- BEGIN app block: shopify://apps/yotpo-product-reviews/blocks/settings/eb7dfd7d-db44-4334-bc49-c893b51b36cf --> 2652 2653 2654
2654<script type="text/javascript" src="https://cdn-widgetsrepository.yotpo.com/v1/loader/m2djy7T11NLc8kN2FyPVbHo7xpNI2IQ4yhET0ca9?languageCode=en" async></script>
2654 2655 2656 2657 2658 2659<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672
2672<script async src="https://static.klaviyo.com/onsite/js/XDCv4C/klaviyo.js?company_id=XDCv4C"></script>
2672 2673
2673<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
2673 2674 2675 2676 2677 2678 2679 2680
2680<script> 2681 window.klaviyoReviewsProductDesignMode = false 2682 </script>
2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692<!-- END app block --><!-- BEGIN app block: shopify://apps/triplewhale/blocks/triple_pixel_snippet/483d496b-3f1a-4609-aea7-8eee3b6b7a2a --><link rel='preconnect dns-prefetch' href='https://api.config-security.com/' crossorigin /> 2693<link rel='preconnect dns-prefetch' href='https://conf.config-security.com/' crossorigin />
2694<script> 2695/* >> TriplePixel :: start*/ 2696window.TriplePixelData={TripleName:"1zkvfh-xt.myshopify.com",ver:"2.16",plat:"SHOPIFY",isHeadless:false,src:'SHOPIFY_EXT',product:{id:"",name:``,price:"",variant:"",av:{ }},search:"",collection:"",cart:"drawer",template:"page",curr:"USD" || "USD", market:"97117700280"},function(W,H,A,L,E,_,B,N){function O(U,T,P,H,R){void 0===R&&(R=!1),H=new XMLHttpRequest,P?(H.open("POST",U,!0),H.setRequestHeader("Content-Type","text/plain")):H.open("GET",U,!0),H.send(JSON.stringify(P||{})),H.onreadystatechange=function(){4===H.readyState&&200===H.status?(R=H.responseText,U.includes("/first")?eval(R):P||(N[B]=R)):(299<H.status||H.status<200)&&T&&!R&&(R=!0,O(U,T-1,P))}}if(N=window,!N[H+"sn"]){N[H+"sn"]=1,L=function(){return Date.now().toString(36)+"_"+Math.random().toString(36)};try{A.setItem(H,1+(0|A.getItem(H)||0)),(E=JSON.parse(A.getItem(H+"U")||"[]")).push({u:location.href,r:document.referrer,t:Date.now(),id:L()}),A.setItem(H+"U",JSON.stringify(E))}catch(e){}var i,m,p;A.getItem('"!nC`')||(_=A,A=N,A[H]||(E=A[H]=function(t,e,i){return void 0===i&&(i=[]),"State"==t?E.s:(W=L(),(E._q=E._q||[]).push([W,t,e].concat(i)),W)},E.s="Installed",E._q=[],E.ch=W,B="configSecurityConfModel",N[B]=1,O("https://conf.config-security.com/model",5),i=L(),m=A[atob("c2NyZWVu")],_.setItem("di_pmt_wt",i),p={id:i,action:"profile",avatar:_.getItem("auth-security_rand_salt_"),time:m[atob("d2lkdGg=")]+":"+m[atob("aGVpZ2h0")],host:A.TriplePixelData.TripleName,plat:A.TriplePixelData.plat,url:window.location.href.slice(0,500),ref:document.referrer,ver:A.TriplePixelData.ver},O("https://api.config-security.com/event",5,p),O("https://api.config-security.com/first?host=".concat(p.host,"&plat=").concat(p.plat),5)))}}("","TriplePixel",localStorage); 2697/* << TriplePixel :: end*/ 2698</script>
2698 2699 2700 2701 2702<!-- END app block --><!-- BEGIN app block: shopify://apps/bushnell-sale-automation/blocks/sale-collection-control/019ffd7a-8c8a-7a7c-bdeb-ed3ef47858b1 --><style> 2703 a[href$="/collections/sale"], 2704 a[href*="/collections/sale?"], 2705 a[href*="/collections/sale/"] { display: none !important; } 2706 </style> 2707<!-- END app block --><link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
2708<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 94598496440,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "page"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 2708
2708
2709<script> 2710 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 2711</script>
vendor: 1 bytes, line 2711
2711
2712<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
2712).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 94598496440,storefrontBaseUrl: "https://www.bushnellgolf.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://www.bushnellgolf.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["16072cab","8450a54b"],webPixelsConfigList: [{"id":"2886140088","configuration":"{\"vibePixelId\":\"dlziuF\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"72859894ec8aa8d5e0246c40aaed9466","type":"APP","apiClientId":132266098689,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":[],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2880995512","configuration":"{\"storeId\":\"bf76c0df-fca6-4f5e-b65c-2fe873f7a65d\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"9b5c7e9eba54366aed35e340586c8163","type":"APP","apiClientId":274629623809,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"}
2712,{"id":"2869592248","configuration":"{\"pixel_id\":\"2tFoSPhFieY73nNhnmrSPE\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"494c214c3e1e2dea2c94ffa97cf51a83","type":"APP","apiClientId":411130036225,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_email","read_customer_name","read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2795241656","configuration":"{\"shop\":\"1zkvfh-xt.myshopify.com\",\"projectId\":\"69cea0d90db02b3cc2b51877\",\"ingestUrl\":\"https:\/\/ingest.app.coframe.com\/ingest\/v2\/batched_events\/69cea0d90db02b3cc2b51877\/\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"27e42a1a1a8f90b0bfce6ce93f32df83","type":"APP","apiClientId":376669110273,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2770731192","configuration":"{\"shopId\":\"1zkvfh-xt.myshopify.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"3b0a66505e38d4995b6d711dbc972bc9","type":"APP","apiClientId":2753413,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2764996792","configuration":"{\"campaignID\":\"43462\",\"externalExecutionURL\":\"https:\/\/engine.saasler.com\/api\/v1\/webhook_executions\/0442a54891f774312a521fc6f8d6fff2\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7a47b06116c806e4367c27d301f4f458","type":"APP","apiClientId":3546795,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"2753855672","configuration":"{\"ti\":\"211076447\",\"endpoint\":\"https:\/\/bat.bing.com\/action\/0\",\"tagIds\":\"[\\\"-1\\\"]\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"58a904981d2724b937c16718aa2f1aee","type":"APP","apiClientId":2997493,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2747859128","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-YEJ1EQ502M\\\",\\\"AW-791379230\\\"],\\\"target_country\\\":\\\"ZZ\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-YEJ1EQ502M\\\",\\\"AW-791379230\\\/DzybCN3ml-AcEJ76rfkC\\\"]},{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-YEJ1EQ502M\\\",\\\"AW-791379230\\\/0Y-fCNHml-AcEJ76rfkC\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-YEJ1EQ502M\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-YEJ1EQ502M\\\",\\\"AW-791379230\\\/B7r3CNrml-AcEJ76rfkC\\\"]},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-YEJ1EQ502M\\\",\\\"AW-791379230\\\/5TPqCM7ml-AcEJ76rfkC\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-YEJ1EQ502M\\\"},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-YEJ1EQ502M\\\",\\\"AW-791379230\\\/lxT0CNfml-AcEJ76rfkC\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-YEJ1EQ502M\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-YEJ1EQ502M\\\",\\\"AW-791379230\\\/HhY-CODml-AcEJ76rfkC\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-YEJ1EQ502M\\\",\\\"AW-791379230\\\/9pjcCNTml-AcEJ76rfkC\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-YEJ1EQ502M\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2721710264","configuration":"{\"partnerId\":\"bushnell\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"af1c8d508ab35da0347db9e4cc555741","type":"APP","apiClientId":397
2712737066497,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data","read_customer_address","read_customer_email","read_customer_name","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2708242616","configuration":"{\"yotpoStoreId\":\"m2djy7T11NLc8kN2FyPVbHo7xpNI2IQ4yhET0ca9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c5c2579aac465eb24ca7bc0501a6000d","type":"APP","apiClientId":70132,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"2659156152","configuration":"{\"pixel_id\":\"580491339402695\",\"pixel_type\":\"facebook_pixel\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2525659320","configuration":"{\"accountID\":\"XDCv4C\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2451079352","configuration":"{\"site_id\":\"a2d7b46f-6832-4637-907f-1bf09faa9896\",\"analytics_endpoint\":\"https:\\\/\\\/na.shgcdn3.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"695709fc3f146fa50a25299517a954f2","type":"APP","apiClientId":1158168,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"164593848","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"PostHog"},{"id":"167968952","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"3","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"AudioHook"},{"id":"168001720","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Criteo"},{"id":"168034488","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"MNTN"},{"id":"168067256","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Quora"},{"id":"168100024","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Triple Whale"},{"id":"173015224","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"10","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"name":"Google tag manager"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Bushnell Golf","paymentSettings":{"currencyCode":"USD"}
2712,"myshopifyDomain":"1zkvfh-xt.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/www.bushnellgolf.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"10358022930616","handle":"pro-x3-link","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53271988469944","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358021292216","handle":"tour-hybrid","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53271985750200","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358022504632","handle":"tour-v7-shift","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53271987749048","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358021456056","handle":"a1-slope","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53271986110648","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358021488824","handle":"launch-pro","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53271986143416","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10362618839224","handle":"lpi-personal-launch-monitor","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53281601945784","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358021652664","handle":"launch-pro-simulator-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53458011029688","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10364598223032","handle":"launch-pro-i-simulator-bundle","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53287034388664","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358021947576","handle":"wingman-hd","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53271986831544","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358021619896","handle":"wingman-view","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53271986274488","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358022963384","handle":"wingman-2-gps-speaker","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53271988764856","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358022537400","handle":"wingman-mini-gps-speaker","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53458024661176","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358022340792","handle":"ion-elite","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53458024923320","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"10358023127224","handle":"phantom-3-slope-gps","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"53458018926776","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://www.bushnellgolf.com/cdn","c8540278we853e1abpb62b2c4amde256306",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"191774392504","themePublished":"true","eventMetadataId":"4707c850-9f87-417b-a6dc-a5e1201b2e96","pageType":"page","resourceId":"165898748088","shopId":"94598496440","storefrontBaseUrl":"https:\/\/www.bushnellgolf.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"16072cab\", \"8450a54b\"]","isMerchantRequest":"false","hashVersion":"c8540278we853e1abpb62b2c4amde256306","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
2712<script> 2713 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 2714 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 2715 window.ShopifyAnalytics.meta.currency = 'USD'; 2716 var meta = {"page":{"pageType":"page","resourceType":"page","resourceId":165898748088,"requestId":"afd644ad-ef44-42fd-b0c9-16f367671da7-1790241164"}}; 2717 for (var attr in meta) { 2718 window.ShopifyAnalytics.meta[attr] = meta[attr]; 2719 } 2720</script>
vendor: 1 bytes, line 2720
2720
2721<script class="analytics"> 2722 (function () { 2723 var customDocumentWrite = function(content) { 2724 var jquery = null; 2725 2726 if (window.jQuery) { 2727 jquery = window.jQuery; 2728 } else if (window.Checkout && window.Checkout.$) { 2729 jquery = window.Checkout.$; 2730 } 2731 2732 if (jquery) { 2733 jquery('body').append(content); 2734 } 2735 }; 2736 2737 var hasLoggedConversion = function(token) { 2738 if (token) { 2739 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 2740 } 2741 return false; 2742 } 2743 2744 var setCookieIfConversion = function(token) { 2745 if (token) { 2746 var twoMonthsFromNow = new Date(Date.now()); 2747 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 2748 2749 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 2750 } 2751 } 2752 2753 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 2754 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 2755 if (trekkie.integrations) { 2756 return; 2757 } 2758 trekkie.methods = [ 2759 'identify', 2760 'page', 2761 'ready', 2762 'track', 2763 'trackForm', 2764 'trackLink' 2765 ]; 2766 trekkie.factory = function(method) { 2767 return function() { 2768 var args = Array.prototype.slice.call(arguments); 2769 args.unshift(method); 2770 trekkie.push(args); 2771 if (method == 'track' || method == 'page') { 2772 try { 2773 if (window.__TREKKIE_SHIM_QUEUE == null) { 2774 window.__TREKKIE_SHIM_QUEUE = []; 2775 } 2776 window.__TREKKIE_SHIM_QUEUE.push({ 2777 from: 'trekkie-stub', 2778 method: method, 2779 args: args.slice(1) 2780 }); 2781 } catch (e) { 2782 // no-op 2783 } 2784 } 2785 return trekkie; 2786 }; 2787 }; 2788 for (var i = 0; i < trekkie.methods.length; i++) { 2789 var key = trekkie.methods[i]; 2790 trekkie[key] = trekkie.factory(key); 2791 } 2792 trekkie.load = function(config) { 2793 trekkie.config = config || {}; 2794 trekkie.config.initialDocumentCookie = document.cookie; 2795 var first = document.getElementsByTagName('script')[0]; 2796var script = document.createElement('script'); 2797script.type = 'text/javascript'; 2798script.onerror = function(e) { 2799 var scriptFallback = document.createElement('script'); 2800 scriptFallback.type = 'text/javascript'; 2801 scriptFallback.onerror = function(error) { 2802 var Monorail = { 2803 produce: function produce(monorailDomain, schemaId, payload) { 2804 var currentMs = new Date().getTime(); 2805 var event = { 2806 schema_id: schemaId, 2807 payload: payload, 2808 metadata: { 2809 event_created_at_ms: currentMs, 2810 event_sent_at_ms: currentMs 2811 } 2812 }; 2813 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 2814 }, 2815 sendRequest: function sendRequest(endpointUrl, payload) { 2816 // Try the sendBeacon API 2817 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 2818 var blobData = new window.Blob([payload], { 2819 type: 'text/plain' 2820 }); 2821 2822 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 2823 return true; 2824 } // sendBeacon was not successful 2825 2826 } // XHR beacon 2827 2828 var xhr = new XMLHttpRequest(); 2829 2830 try { 2831 xhr.open('POST', endpointUrl); 2832 xhr.setRequestHeader('Content-Type', 'text/plain'); 2833 xhr.send(payload); 2834 } catch (e) { 2835 console.log(e); 2836 } 2837 2838 return false; 2839 }, 2840 isIos12: function isIos12() { 2841 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 2842 } 2843 }; 2844 Monorail.produce('monorail-edge.shopifysvc.com', 2845 'trekkie_storefront_load_errors/1.1', 2846 {shop_id: 94598496440, 2847 theme_id: 191774392504, 2848 app_name: "storefront", 2849 context_url: window.location.href, 2850 source_url: "//www.bushnellgolf.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"}); 2851 2852 }; 2853 scriptFallback.async = true; 2854 scriptFallback.src = '//www.bushnellgolf.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 2855 first.parentNode.insertBefore(scriptFallback, first); 2856}; 2857script.async = true; 2858script.src = '//www.bushnellgolf.com/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js'; 2859first.parentNode.insertBefore(script, first); 2860 2861 }; 2862 trekkie.load( 2863 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":94598496440,"isMerchantRequest":null,"themeId":191774392504,"themeCityHash":"9880103544750747950","contentLanguage":"en","currency":"USD","eventMetadataId":"4707c850-9f87-417b-a6dc-a5e1201b2e96"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 2864 ); 2865 2866 var loaded = false;
2867 trekkie.ready(function() { 2868 if (loaded) return; 2869 loaded = true; 2870 2871 window.ShopifyAnalytics.lib = window.trekkie; 2872 2873 var originalDocumentWrite = document.write; 2874 document.write = customDocumentWrite; 2875 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 2876 document.write = originalDocumentWrite; 2877 2878 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 2879 var token = match? match[1]: undefined; 2880 if (!hasLoggedConversion(token)) { 2881 setCookieIfConversion(token); 2882 2883 } 2884 }); 2885 2886 window.ShopifyAnalytics.lib.page(null,{"pageType":"page","resourceType":"page","resourceId":165898748088,"requestId":"afd644ad-ef44-42fd-b0c9-16f367671da7-1790241164","shopifyEmitted":true}); 2887 2888 var eventsListenerScript = document.createElement('script'); 2889 eventsListenerScript.async = true; 2890 eventsListenerScript.src = "//www.bushnellgolf.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 2891 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 2892})();</script>
vendor: 1 bytes, line 2892
2892
2893<script 2894 defer 2895 src="https://www.bushnellgolf.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 2896 data-application="storefront-renderer" 2897 data-shop-id="94598496440" 2898 data-render-region="gcp-us-central1" 2899 data-page-type="page" 2900 data-theme-instance-id="191774392504" 2901 data-theme-name="Horizon" 2902 data-theme-version="3.4.0" 2903 data-monorail-region="shop_domain" 2904 data-resource-timing-sampling-rate="10" 2905 data-shs="true" 2906 data-shs-beacon="true" 2907 data-shs-export-with-fetch="true" 2908 data-shs-logs-sample-rate="1" 2909 data-shs-beacon-endpoint="https://www.bushnellgolf.com/api/collect" 2910></script>
vendor: 1 bytes, line 2910
2910
2911<script src="https://cdn.shopify.com/storefront/web-components/account.js" type="module" crossorigin fetchpriority="low" async></script>
2911<script id="shopify-customer-account-data" type="application/json">{"customer":null,"shop":{"id":"94598496440","customerAccountTranslations":[{"key":"account_menu.signed_out_state.sheet_title","value":"Sign in or create account"},{"key":"account_menu.signed_out_state.section_divider","value":"More ways to sign in"},{"key":"account_menu.signed_out_state.alternate_divider","value":"OR"},{"key":"account_menu.signed_out_state.email_field_label","value":"Email"},{"key":"account_menu.signed_out_state.orders_button","value":"Orders"},{"key":"account_menu.signed_out_state.profile_button","value":"Profile"},{"key":"account_menu.signed_out_state.shop_login_button","value":"Sign in with Shop"},{"key":"account_menu.signed_out_state.continue_with_google","value":"Continue with Google"},{"key":"account_menu.signed_out_state.continue_with_facebook","value":"Continue with Facebook"},{"key":"account_menu.signed_out_state.marketing_consent_label","value":"Email me with news and offers"},{"key":"account_menu.signed_in_state.greeting_with_name","value":"Hi, {{first_name}}"},{"key":"account_menu.signed_in_state.greeting_without_name","value":"Account"},{"key":"account_menu.signed_in_state.orders_button","value":"Orders"},{"key":"account_menu.signed_in_state.profile_button","value":"Profile"},{"key":"account_menu.location_picker.sheet_title","value":"Locations"},{"key":"account_menu.location_picker.search_field_placeholder","value":"Search"},{"key":"account_menu.aria_labels.close_menu","value":"Close menu"},{"key":"account_menu.aria_labels.back_to_main_menu","value":"Back to main menu from {{title}}"},{"key":"account_menu.aria_labels.open_submenu","value":"{{title}}, opens submenu"},{"key":"account_menu.aria_labels.loading_menu","value":"Loading menu"},{"key":"account_menu.aria_labels.account","value":"Account"},{"key":"account_menu.aria_labels.sign_in_with_email","value":"Sign in with email"},{"key":"account_menu.aria_labels.sign_in","value":"Sign in"}],"socialLoginProviders":[{"handle":"Shop"}],"legacyCustomerAccounts":false,"signInLinksVisible":true,"b2bEnabled":false,"marketingConsentSigninEnabled":false},"visitor":{"country":"US","language":"en"}}</script>
2911 2912<meta name="shopify-y" content="140db174-3f5d-4ae6-b755-3f4dbff6f348" data-expiration="1821798764000"><meta name="shopify-s" content="899cca35-0358-4392-a60f-d47f42da7b6c" data-expiration="1790242964000"><meta name="new-cookie-storage-activated" content="t"> 2913</head> 2914<body class="template-page bushnell-theme">
vendor: 67 bytes, line 2914
2914<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
2914GTM-W2RQBLD
vendor: 84 bytes, line 2914
2914" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
2915<div id="shopify-section-bushnell-utility-bar" class="shopify-section"><style> 2916 #shopify-section-bushnell-utility-bar h1, 2917 #shopify-section-bushnell-utility-bar h2, 2918 #shopify-section-bushnell-utility-bar h3, 2919 #shopify-section-bushnell-utility-bar h4, 2920 #shopify-section-bushnell-utility-bar h5, 2921 #shopify-section-bushnell-utility-bar h6 { font-family: 'Industry Bold', sans-serif; } 2922 #shopify-section-bushnell-utility-bar p, 2923 #shopify-section-bushnell-utility-bar li, 2924 #shopify-section-bushnell-utility-bar span, 2925 #shopify-section-bushnell-utility-bar a { font-family: 'Acumin Pro', sans-serif; } 2926 #shopify-section-bushnell-utility-bar .utility-links > a, 2927#shopify-section-bushnell-utility-bar .utility-links > .utility-account > a, 2928#shopify-section-bushnell-utility-bar .utility-links .bn-region-trigger { 2929 font-family: 'Industry Bold', sans-serif; 2930} 2931 @media screen and (max-width: 749px) { 2932 #shopify-section-bushnell-utility-bar .main-nav { 2933 padding-top: 8px; 2934 padding-bottom: 8px; 2935 } 2936 } 2937 @media screen and (min-width: 750px) and (max-width: 989px) { 2938 #shopify-section-bushnell-utility-bar .utility-bar { 2939 padding-top: 8px; 2940 padding-bottom: 8px; 2941 } 2942 } 2943 /* Fix: mega menu dropdown must size to its content, not the full viewport. */ 2944 .mega-menu-dropdown { 2945 height: auto !important; 2946 min-height: 0 !important; 2947 max-height: none !important; 2948 overflow: visible !important; 2949 } 2950 .mega-menu-dropdown > .container { 2951 height: auto !important; 2952 max-height: none !important; 2953 overflow: visible !important; 2954 } 2955 .mega-menu-grid { 2956 height: auto !important; 2957 min-height: 0 !important; 2958 max-height: none !important; 2959 overflow: visible !important; 2960 align-items: flex-start !important; 2961 } 2962 .mega-menu-columns { 2963 height: auto !important; 2964 max-height: none !important; 2965 overflow: visible !important; 2966 } 2967 /* Full-width mega-menu sheet: span the whole viewport under the nav. */ 2968 .mega-menu-dropdown { 2969 left: 0 !important; 2970 right: 0 !important; 2971 width: 100% !important; 2972 max-width: none !important; 2973 border-radius: 0 !important; 2974 border-left: none !important; 2975 border-right: none !important; 2976 border-bottom: 1px solid #e5e1dc; 2977 box-shadow: 0 12px 40px rgba(30, 37, 43, 0.18); 2978 } 2979 /* Accessories panel: every link is an unmistakable row â 2980 hairline separators + chevron affordance (name + sub read as one unit). */ 2981 [data-mega-panel="accessories"] .mega-menu-col-links li { 2982 border-top: 1px solid #e5e1dc; 2983 } 2984 [data-mega-panel="accessories"] .mega-menu-col-links li a { 2985 position: relative; 2986 display: block; 2987 padding: 14px 26px 14px 0; 2988 } 2989 [data-mega-panel="accessories"] .mega-menu-col-links li a::after { 2990 content: ""; 2991 position: absolute; 2992 right: 4px; 2993 top: 50%; 2994 width: 8px; 2995 height: 8px; 2996 border-top: 2px solid #9b968f; 2997 border-right: 2px solid #9b968f; 2998 transform: translateY(-50%) rotate(45deg); 2999 } 3000 /* Compact collection hero: match the approved mockups \u2014 slim padding, 3001 smaller title and stat scale. Overrides the tall base-CSS hero. */ 3002 .collection-hero { 3003 padding: 44px 40px 40px !important; 3004 min-height: 0 !important; 3005 } 3006 .collection-hero-inner { 3007 padding: 0 !important; 3008 } 3009 .collection-hero h1 { 3010 font-size: 36px !important; 3011 letter-spacing: 2px !important; 3012 margin: 0 !important; 3013 } 3014 .collection-hero p { 3015 font-size: 15px !important; 3016 margin: 8px 0 0 !important; 3017 } 3018 .collection-stats { 3019 margin-top: 26px !important; 3020 gap: 48px !important; 3021 } 3022 .collection-stat-value { 3023 font-size: 28px !important; 3024 } 3025 .collection-stat-label { 3026 font-size: 11px !important; 3027 letter-spacing: 1.5px !important; 3028 } 3029 @media screen and (max-width: 749px) { 3030 .collection-hero { padding: 32px 20px 28px !important; } 3031 .collection-hero h1 { font-size: 26px !important; } 3032 .collection-stats { gap: 24px !important; margin-top: 18px !important; } 3033 .collection-stat-value { font-size: 22px !important; } 3034 } 3035 /* Product-card styling moved to bushnell.css */ 3036 /* Comparison charts (custom-liquid): price shown under the product name 3037 in the header row â the JS below moves it there from a "Price" line item. */ 3038 #lrf-comparison-chart .product-price { 3039 display: block; 3040 font-family: "acumin-pro-condensed", "Helvetica Neue", Arial, sans-serif; 3041 font-weight: bold; 3042 color: #000000; 3043 font-size: 1.2rem; 3044 margin-top: 0.25rem; 3045 } 3046 /* Account state â signed-out shows SIGN IN; signed-in shows pip + first name 3047 with a hover/focus dropdown (Orders, Profile, Register, Support, Sign out). */ 3048 .utility-account { position: relative; display:contents; } 3049 .utility-account > a { display: inline-flex; align-items: center; gap: 7px; } 3050 .bn-acct-pip {
3051 width: 20px; height: 20px; border-radius: 50%; 3052 background: #fe5000; color: #ffffff !important; 3053 display: inline-flex; align-items: center; justify-content: center; 3054 font-family: 'Industry Bold', 'Oswald', sans-serif; 3055 font-size: 10px; font-weight: 700; line-height: 1; 3056 } 3057 .bn-acct-caret { width: 10px; height: 10px; transition: transform 0.2s ease; } 3058 .bn-acct-menu { 3059 position: fixed; z-index: 200; 3060 width: 240px; padding-top: 8px; 3061 opacity: 0; visibility: hidden; transform: translateY(-4px); 3062 transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s; 3063 } 3064 .utility-account.bn-open .bn-acct-menu { 3065 opacity: 1; visibility: visible; transform: translateY(0); 3066 } 3067 .utility-account.bn-open .bn-acct-caret { transform: rotate(180deg); } 3068 .bn-acct-menu-card { 3069 background: #ffffff; border: 1px solid #e5e1dc; border-radius: 12px; 3070 box-shadow: 0 12px 40px rgba(30,37,43,0.18); overflow: hidden; 3071 } 3072 .bn-acct-menu-head { padding: 14px 18px 12px; border-bottom: 1px solid #f0ece7; } 3073 .bn-acct-menu-name { 3074 font-family: 'Industry Bold', 'Oswald', sans-serif; 3075 font-size: 13px; font-weight: 600; letter-spacing: 0.5px; 3076 text-transform: uppercase; color: #1e252b; 3077 } 3078 .bn-acct-menu-email { 3079 font-family: 'Acumin Pro', 'DM Sans', sans-serif; 3080 font-size: 12px; color: #6b6b6b; 3081 overflow: hidden; text-overflow: ellipsis; white-space: nowrap; 3082 } 3083 .bn-acct-menu-list { padding: 6px 0; } 3084 .bn-acct-menu-list + .bn-acct-menu-list { border-top: 1px solid #f0ece7; } 3085 .bn-acct-menu a.bn-acct-item { 3086 display: flex !important; align-items: center; gap: 10px; 3087 padding: 10px 18px !important; 3088 font-family: 'Industry Bold', 'Oswald', sans-serif; 3089 font-size: 12px; font-weight: 600; letter-spacing: 1px; 3090 text-transform: uppercase; color: #1e252b !important; 3091 text-decoration: none; transition: background 0.2s ease, color 0.2s ease; 3092 } 3093 .bn-acct-menu a.bn-acct-item:hover { background: #f7f3ee; color: #fe5000 !important; } 3094 .bn-acct-menu a.bn-acct-item--muted { color: #6b6b6b !important; } 3095 .bn-acct-menu a.bn-acct-item--muted:hover { color: #1e252b !important; } 3096 .bn-acct-menu a.bn-acct-item svg { width: 15px; height: 15px; flex-shrink: 0; } 3097 @media screen and (max-width: 749px) { 3098 .bn-acct-menu { display: none; } 3099 } 3100 /* Region selector â flag + REGION:/country stacked, click dropdown with 3101 US/Europe/Canada storefront links. Same fixed-position pattern as the 3102 account menu so it survives ancestor overflow/stacking contexts. */ 3103 .utility-region { position: relative; display: flex; align-items: center; } 3104 .bn-region-trigger { 3105 display: inline-flex; align-items: center; gap: 8px; 3106 background: none; border: none; padding: 2px 0; cursor: pointer; 3107 color: #ffffff; text-align: left; 3108 font-family: inherit; letter-spacing: inherit; text-transform: inherit; 3109 } 3110 .bn-region-flag { flex-shrink: 0; } 3111 .bn-region-txt { display: flex; flex-direction: column; line-height: 1.25; } 3112 .bn-region-label { 3113 font-size: 9px; letter-spacing: 0.12em; opacity: 0.75; 3114 } 3115 .bn-region-current { 3116 display: inline-flex; align-items: center; gap: 4px; 3117 font-size: 11px; font-weight: 700; 3118 font-family: 'Industry Bold', 'Oswald', sans-serif; 3119 } 3120 .bn-region-caret { width: 10px; height: 10px; transition: transform 0.2s ease; } 3121 .utility-region.bn-open .bn-region-caret { transform: rotate(180deg); } 3122 .bn-region-menu { 3123 position: fixed; z-index: 200; 3124 width: 190px; padding-top: 8px; 3125 opacity: 0; visibility: hidden; transform: translateY(-4px); 3126 transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s; 3127 } 3128 .utility-region.bn-open .bn-region-menu { 3129 opacity: 1; visibility: visible; transform: translateY(0); 3130 } 3131 .bn-region-menu-card { 3132 background: #ffffff; border: 1px solid #e5e1dc; border-radius: 10px; 3133 box-shadow: 0 12px 40px rgba(30,37,43,0.18); overflow: hidden; 3134 padding: 6px 0; 3135 } 3136 .bn-region-menu a.bn-region-item { 3137 display: flex !important; align-items: center; gap: 8px; 3138 padding: 10px 16px !important; 3139 font-family: 'Acumin Pro', 'DM Sans', sans-serif; 3140 font-size: 13px; text-transform: none; letter-spacing: 0; 3141 color: #1e252b !important; text-decoration: none; 3142 transition: background 0.2s ease, color 0.2s ease; 3143 } 3144 .bn-region-menu a.bn-region-item:hover { background: #f7f3ee; color: #fe5000 !important; } 3145 .bn-region-menu a.bn-region-item.is-active { font-weight: 700; } 3146 .bn-region-check { 3147 width: 14px; height: 14px; flex-shrink: 0; 3148 display: inline-flex; align-items: center; justify-content: center; 3149 } 3150 .bn-region-check svg { width: 13px; height: 13px; } 3151 /* Mobile: base CSS hides .utility-links under 769px â bring the group back 3152 but show only the region selector; contact/support/account move into the 3153 header's user-icon menu at this width. */ 3154 @media screen and (max-width: 768px) { 3155 .utility-links { display: flex !important; } 3156 .utility-links > a, 3157 .utility-links .utility-account { display: none !important; } 3158 } 3159 /* Promo link inherits the bar's text colour;
3159 the highlight keeps its orange. */ 3160 .utility-promo__link { color: inherit; text-decoration: none; } 3161 .utility-promo__link:hover { text-decoration: underline; } 3162</style> 3163<div class="utility-bar"> 3164 <div class="container"> 3165 <div class="utility-promo"><strong>FREE SHIPPING</strong> ON ORDERS OVER $99 + FREE 30-DAY RETURNS�</div> 3166 <div class="utility-links"> 3167 3168 <a href="/pages/support"> 3169 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg> 3170 SUPPORT 3171 </a> 3172 �<a href="/account"> 3173 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"/><circle cx="12" cy="7" r="4"/></svg> 3174 SIGN IN 3175 </a></div> 3176 </div> 3177</div> 3178
3179<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-utility-bar.js?v=176354384251886478481790092425" defer></script>
3179 3180 3181 3182</div><div id="shopify-section-bushnell-header" class="shopify-section"><style> 3183 #shopify-section-bushnell-header h1, 3184 #shopify-section-bushnell-header h2, 3185 #shopify-section-bushnell-header h3, 3186 #shopify-section-bushnell-header h4, 3187 #shopify-section-bushnell-header h5, 3188 #shopify-section-bushnell-header h6 { font-family: 'Industry Bold', sans-serif; } 3189/* Main navigation */ 3190#shopify-section-bushnell-header .nav-links > li > a { 3191 font-family: 'Industry Bold', sans-serif; 3192} 3193 3194/* Mega menu product names */ 3195#shopify-section-bushnell-header .mega-link-name { 3196 font-family: 'Industry Bold', sans-serif; 3197} 3198 3199/* Featured product title */ 3200#shopify-section-bushnell-header .mega-menu-featured-name, 3201#shopify-section-bushnell-header .mega-menu-featured-name a { 3202 font-family: 'Industry Bold', sans-serif; 3203} 3204 3205/* Featured cards laid out in a row (wrap to next line if many) */ 3206#shopify-section-bushnell-header .mega-menu-featured-wrap { 3207 display: flex; 3208 flex-direction: row; 3209 flex-wrap: wrap; 3210 gap: 24px; 3211 flex-shrink: 0; 3212} 3213 @media screen and (max-width: 749px) { 3214 #shopify-section-bushnell-header .main-nav { 3215 padding-top: 8px; 3216 padding-bottom: 8px; 3217 } 3218 #shopify-section-bushnell-header .nav-links a { 3219 font-size: 24px; 3220 } 3221 } 3222 @media screen and (min-width: 750px) and (max-width: 989px) { 3223 #shopify-section-bushnell-header .main-nav { 3224 padding-top: 12px; 3225 padding-bottom: 12px; 3226 } 3227 #shopify-section-bushnell-header .nav-links a { 3228 font-size: 28px; 3229 } 3230 } 3231 #shopify-section-bushnell-header .logo img { 3232 object-fit: contain; 3233 height: 40px; 3234 width: auto; 3235 } 3236 @media screen and (min-width: 750px) { 3237 #shopify-section-bushnell-header .logo img { 3238 height: 33px; 3239 } 3240 } 3241 @media screen and (max-width: 749px) { 3242 .hide-mobile { display: none !important; } 3243 } 3244 .mobile-featured-cards { display: flex; flex-wrap: wrap; gap: 12px; padding: 8px 0 4px; } 3245 .mobile-featured-card { flex: 0 0 100%; min-width: 0; } 3246 .mobile-featured-card--half { flex: 0 0 calc(50% - 6px); } 3247 .mobile-featured-card__img { display: block; width: 100%; border-radius: 4px; margin-bottom: 6px; } 3248 .mobile-featured-card__badge { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; padding: 2px 6px; border-radius: 2px; display: inline-block; margin-bottom: 4px; } 3249 .mobile-featured-card__badge--new { background: var(--orange, #FE5000); color: #fff;position:absolute; } 3250 .mobile-featured-card__badge--bestseller { background: #000; color: #fff; position:absolute; } 3251 .mobile-featured-card__badge--sale { background: #e53; color: #fff;position:absolute; } 3252 .mobile-featured-card__name { font-size: 13px; font-weight: 600; color: inherit; text-decoration: none; display: block; margin-bottom: 2px; } 3253 .mobile-featured-card__price { font-size: 12px; color: var(--grey-500, #666); margin-bottom: 6px; } 3254 .mobile-featured-card__cta { font-size: 11px; font-weight: 700; color: var(--orange, #FE5000); text-transform: uppercase; letter-spacing: 0.05em; } 3255 #shopify-section-bushnell-header .bn-cart-actions { display: flex; align-items: center; } 3256 #shopify-section-bushnell-header .bn-cart-actions header-actions { display: flex; align-items: center; } 3257 #shopify-section-bushnell-header .bn-cart-actions .account-button { display: none !important; } 3258 #shopify-section-bushnell-header .bn-cart-actions .header-actions__cart-icon { color: currentColor; } 3259 /* Mobile/tablet user menu: person icon between search and cart; click opens 3260 My Account / Contact / Support. Desktop keeps these in the utility bar. 3261 Also unhide the search icon at this width â the search overlay is global. */ 3262 .bn-user-wrap { position: relative; display: none; align-items: center; } 3263 @media (max-width: 768px) { 3264 .bn-user-wrap { display: flex; } 3265 #shopify-section-bushnell-header .nav-search-btn { display: flex !important; } 3266 } 3267 .bn-user-btn { background: none; border: none; cursor: pointer; padding: 0; } 3268 .bn-user-menu { 3269 position: absolute; top: calc(100% + 12px); right: -10px; z-index: 300; 3270 width: 210px; 3271 opacity: 0; visibility: hidden; transform: translateY(-4px); 3272 transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s; 3273 } 3274 .bn-user-wrap.bn-open .bn-user-menu { opacity: 1; visibility: visible; transform: translateY(0); } 3275 .bn-user-menu-card { 3276 background: #ffffff; border: 1px solid #e5e1dc; border-radius: 10px; 3277 box-shadow: 0 12px 40px rgba(30,37,43,0.18); overflow: hidden; padding: 6px 0; 3278 }
3279 .bn-user-menu a.bn-user-item { 3280 display: flex; align-items: center; gap: 10px; 3281 padding: 11px 16px; 3282 font-family: 'Industry Bold', 'Oswald', sans-serif; 3283 font-size: 12px; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; 3284 color: #1e252b; text-decoration: none; 3285 transition: background 0.2s ease, color 0.2s ease; 3286 } 3287 .bn-user-menu a.bn-user-item:hover { background: #f7f3ee; color: #fe5000; } 3288 .bn-user-menu a.bn-user-item svg { width: 15px; height: 15px; flex-shrink: 0; } 3289 .bn-user-menu a.bn-user-item--muted { color: #6b6b6b; border-top: 1px solid #f0ece7; margin-top: 6px; padding-top: 12px; } 3290 .bn-user-menu a.bn-user-item--muted:hover { color: #1e252b; } 3291 .bn-user-pip { 3292 width: 24px; height: 24px; border-radius: 50%; 3293 background: #fe5000; color: #ffffff; 3294 display: inline-flex; align-items: center; justify-content: center; 3295 font-family: 'Industry Bold', 'Oswald', sans-serif; 3296 font-size: 11px; font-weight: 700; line-height: 1; 3297 } 3298 .bn-user-menu-head { padding: 12px 16px 10px; border-bottom: 1px solid #f0ece7; margin-bottom: 6px; } 3299 .bn-user-menu-name { 3300 font-family: 'Industry Bold', 'Oswald', sans-serif; 3301 font-size: 13px; font-weight: 600; letter-spacing: 0.5px; 3302 text-transform: uppercase; color: #1e252b; 3303 } 3304 .bn-user-menu-email { 3305 font-family: 'Acumin Pro', 'DM Sans', sans-serif; 3306 font-size: 12px; color: #6b6b6b; 3307 overflow: hidden; text-overflow: ellipsis; white-space: nowrap; 3308 } 3309 /* ============================================ 3310 NAV v2 (CRO) â whole-card featured links, quiet 3311 CTAs on multi-card panels, secondary Shop-all 3312 button, comparison cards, Greenbooks accent. 3313 ============================================ */ 3314 /* Featured card: entire card is one link (stretched overlay); inner 3315 links/CTAs sit above it so they still work. */ 3316 .mega-menu-featured { transition: transform 0.3s ease, box-shadow 0.3s ease; } 3317 .mega-menu-featured:hover { transform: translateY(-4px); box-shadow: 0 12px 40px rgba(30,37,43,0.10); } 3318 .mega-menu-featured-link { position: absolute; inset: 0; z-index: 1; border-radius: inherit; } 3319 .mega-menu-featured .mega-menu-featured-name a, 3320 .mega-menu-featured .mega-menu-featured-img a, 3321 .mega-menu-featured .mega-menu-featured-cta { position: relative; z-index: 2; } 3322 /* Multi-card panels (e.g. Rangefinders): the orange button per card 3323 becomes a quiet "View details" affordance â one CTA style, no four 3324 competing primaries. Single-card panels keep their orange CTA. */ 3325 .mega-menu-featured-cta--quiet, 3326 .mega-menu-featured-cta--quiet:hover { 3327 background: transparent; 3328 color: var(--orange, #FE5000); 3329 padding: 0; 3330 border-radius: 0; 3331 cursor: pointer; 3332 } 3333 /* Shop-all: visible secondary button instead of a quiet text link. */ 3334 .mega-menu-shop-all { 3335 border: 2px solid var(--midnight, #1E252B); 3336 border-radius: 6px; 3337 padding: 12px 24px; 3338 transition: border-color 0.2s ease, color 0.2s ease; 3339 } 3340 .mega-menu-shop-all:hover { border-color: var(--orange, #FE5000); color: var(--orange, #FE5000); } 3341 /* Comparison cards (2-SKU categories: Launch Monitors, Simulators). 3342 Equal cards with differentiator rows â the menu becomes the 3343 "which one?" step. Whole card is the link. */ 3344 .mega-menu-compare { 3345 display: grid; 3346 grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); 3347 gap: 20px; 3348 max-width: 920px; 3349 margin: 0 auto; 3350 width: 100%; 3351 } 3352 .mega-menu-compare-card { 3353 position: relative; 3354 display: flex; 3355 flex-direction: column; 3356 background: var(--cream, #F7F3EE); 3357 border: 1px solid var(--hairline, #E5E1DC); 3358 border-radius: var(--radius-lg, 12px); 3359 padding: 20px 24px 24px; 3360 color: var(--midnight, #1E252B); 3361 text-decoration: none; 3362 transition: transform 0.3s ease, box-shadow 0.3s ease; 3363 } 3364 .mega-menu-compare-card:hover { transform: translateY(-4px); box-shadow: 0 12px 40px rgba(30,37,43,0.10); } 3365 .mega-menu-compare-badge { 3366 position: absolute; top: 14px; left: 14px; 3367 font-family: var(--font-ui, 'Oswald', sans-serif); 3368 font-size: 10px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; 3369 padding: 5px 10px; border-radius: 4px; z-index: 1; 3370 } 3371 .mega-menu-compare-badge--bestseller { background: var(--midnight, #1E252B); color: #fff; } 3372 .mega-menu-compare-badge--new { background: var(--orange, #FE5000); color: #fff; } 3373 .mega-menu-compare-badge--sale { background: #C62828; color: #fff; } 3374 .mega-menu-compare-img { height: 150px; display: flex; align-items: center; justify-content: center; overflow: hidden; } 3375 .mega-menu-compare-img img { max-width: 80%; max-height: 100%; object-fit: contain; } 3376 .mega-menu-compare-head { 3377 display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-top: 14px; 3378 } 3379 .mega-menu-compare-name { 3380 font-family: var(--font-ui, 'Oswald', sans-serif); 3381 font-size: 16px; font-weight: 600; letter-spacing: 0.03em; text-transform: uppercase; 3382 } 3383 .mega-menu-compare-price { font-family: var(--font-ui, 'Oswald', sans-serif); font-size: 16px; font-weight: 600; white-space: nowrap; } 3384 .mega-menu-compare-desc { display: block; margin-top: 8px; font-size: 13px; line-height: 1.45; color: var(--grey-500, #6B6B6B); } 3385 .mega-menu-compare-specs { 3386 display: flex; flex-direction: column; gap: 8px; 3387 margin-top: 12px; padding-top: 12px; 3388 border-top: 1px solid var(--hairline, #E5E1DC); 3389 } 3390 .mega-menu-compare-spec { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; font-size: 13px; } 3391 .mega-menu-compare-spec-label { color: var(--grey-500, #888); } 3392 .mega-menu-compare-spec-value { font-weight: 500; text-align: right; } 3393 .mega-menu-compare-view { 3394 display: inline-flex; align-items: center; gap: 8px; margin-top: 14px; 3395 font-family: var(--font-ui, 'Oswald', sans-serif); 3396 font-size: 12px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; 3397 color: var(--orange, #FE5000); 3398 } 3399 .mega-menu-compare-view svg { width: 14px; height: 14px; } 3400 /* Mockup parity: cream featured cards, left-aligned, name+price on one 3401 row, dark badge top-left, trust promo moved into the footer row. */ 3402 .mega-menu-featured { 3403 position: relative; 3404 background: var(--cream, #F7F3EE); 3405 border: 1px solid var(--hairline, #E5E1DC); 3406 border-radius: 12px; 3407 text-align: left !important; 3408 display: flex; 3409 flex-direction: column; 3410 } 3411 /* Title on its own line, price below it. */ 3412 .mega-menu-featured-head { display: block; margin-top: 16px; } 3413 .mega-menu-featured-head .mega-menu-featured-name { 3414 margin: 0; 3415 white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 3416 } 3417 .mega-menu-featured-head .mega-menu-featured-price { 3418 margin: 4px 0 0; white-space: nowrap; 3419 font-family: var(--font-ui, 'Oswald', sans-serif); 3420 font-size: 17px; font-weight: 600; color: var(--midnight, #1E252B); 3421 } 3422 .mega-menu-featured-tagline { text-align: left; margin: 6px 0 0; color: var(--muted, #6B6B6B); } 3423 .mega-menu-featured .mega-menu-featured-cta { margin-top: auto; padding-top: 14px; justify-content: flex-start; align-self: flex-start; } 3424 .mega-menu-featured-badge { 3425 position: absolute; top: 14px; left: 14px; right: auto; z-index: 2; 3426 background: var(--midnight, #1E252B); color: #fff; 3427 font-family: var(--font-ui, 'Oswald', sans-serif); 3428 font-size: 10px; font-weight: 600; letter-spacing: 0.08em; text-transform: uppercase; 3429 padding: 5px 10px; border-radius: 4px; 3430 } 3431 .mega-menu-featured-badge--new { background: var(--orange, #FE5000); } 3432 .mega-menu-featured-badge--sale { background: #C62828; } 3433 .mega-menu-footer { display: flex; align-items: center; justify-content: space-between; gap: 20px; } 3434 .mega-menu-footer .mega-menu-promo { 3435 background: none; border: none; padding: 0; margin: 0; 3436 display: inline-flex; align-items: center; gap: 10px; 3437 color: var(--orange, #FE5000); 3438 font-family: var(--font-ui, 'Oswald', sans-serif); 3439 font-size: 12px; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; 3440 } 3441 /* Greenbooks is a sub-brand: give its accessories row the green accent. */ 3442 [data-mega-panel="accessories"] .mega-menu-col-links a[href*="greenbook" i] .mega-link-name { color: var(--green, #4CAF50); } 3443 [data-mega-panel="accessories"] .mega-menu-col-links li a[href*="greenbook" i]::after { border-color: var(--green, #4CAF50); } 3444 3445 /* When an accessory link has a thumbnail, the image stacks on top so the 3446 row is tall. Move the chevron off the whole-link center and onto the 3447 name line instead, so it reads with the title (not floating by the image). */ 3448 [data-mega-panel="accessories"] .mega-menu-col-links li a.mega-link--has-img::after { content: none; } 3449 [data-mega-panel="accessories"] .mega-menu-col-links li a.mega-link--has-img .mega-link-name { 3450 position: relative; 3451 padding-right: 22px; 3452 } 3453 [data-mega-panel="accessories"] .mega-menu-col-links li a.mega-link--has-img .mega-link-name::after { 3454 content: ""; 3455 position: absolute; 3456 right: 4px; 3457 top: 50%; 3458 width: 8px; 3459 height: 8px; 3460 border-top: 2px solid #9b968f; 3461 border-right: 2px solid #9b968f; 3462 transform: translateY(-50%) rotate(45deg); 3463 } 3464 [data-mega-panel="accessories"] .mega-menu-col-links li a[href*="greenbook" i].mega-link--has-img .mega-link-name::after { border-color: var(--green, #4CAF50); } 3465</style><nav class="main-nav" data-mega-nav> 3466 <div class="container"><button class="mobile-hamburger" aria-label="Open menu" data-drawer-open> 3467 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg> 3468 </button> 3469 3470 <a class="logo" href="/"><img src="//www.bushnellgolf.com/cdn/shop/files/Bushnell.png?v=1781040317&
3470width=600" alt="Bushnell Golf" srcset="//www.bushnellgolf.com/cdn/shop/files/Bushnell.png?v=1781040317&width=352 352w, //www.bushnellgolf.com/cdn/shop/files/Bushnell.png?v=1781040317&width=600 600w" width="600" height="213" loading="eager" class="logo__image">�</a><ul class="nav-links"><li 3471 data-mega-trigger="rangefinders" 3472 style="text-align:left;padding:0px 0px 0px 0px;" 3473 > 3474 <a href="/collections/golf-rangefinders">RANGEFINDERS</a> 3475 </li><li 3476 data-mega-trigger="launch-monitors" 3477 style="text-align:left;padding:0px 0px 0px 0px;" 3478 > 3479 <a href="/collections/launch-monitors">LAUNCH MONITORS</a> 3480 </li><li 3481 data-mega-trigger="SIMULATOR" 3482 style="text-align:left;padding:0px 0px 0px 0px;" 3483 > 3484 <a href="/collections/golf-simulators">SIMULATORS</a> 3485 </li><li 3486 data-mega-trigger="speakers" 3487 style="text-align:left;padding:0px 0px 0px 0px;" 3488 > 3489 <a href="/collections/golf-gps-speakers">Speakers</a> 3490 </li><li 3491 data-mega-trigger="gps" 3492 style="text-align:left;padding:0px 0px 0px 0px;" 3493 > 3494 <a href="/collections/golf-gps">GPS</a> 3495 </li><li 3496 data-mega-trigger="accessories" 3497 style="text-align:left;padding:0px 0px 0px 0px;" 3498 > 3499 <a href="/collections/accessories">ACCESSORIES</a> 3500 </li><li 3501 3502 style="text-align:left;padding:0px 0px 0px 0px;" 3503 > 3504 <a href="/collections/sale">Sale</a> 3505 </li></ul> 3506 3507 <div class="nav-actions"> 3508 <button aria-label="Search" class="nav-search-btn" data-search-toggle> 3509 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg> 3510 </button> 3511 <div class="bn-user-wrap" data-bn-user> 3512 <button type="button" aria-label="Account and support menu" class="bn-user-btn" aria-haspopup="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"/><circle cx="12" cy="7" r="4"/></svg></button> 3513 <div class="bn-user-menu"> 3514 <div class="bn-user-menu-card"><a class="bn-user-item" href="/account"> 3515 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"/><circle cx="12" cy="7" r="4"/></svg> 3516 Sign In 3517 </a><a class="bn-user-item" href="/pages/contact"> 3518 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/><path d="M22 6l-10 7L2 6"/></svg> 3519 Contact 3520 </a> 3521 <a class="bn-user-item" href="/pages/support"> 3522 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"/></svg> 3523 Support 3524 </a></div> 3525 </div> 3526 </div> 3527 <div class="bn-cart-actions"> 3528
3528<script 3529 type="module" 3530 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/cart-icon.js?v=149223991140032574051790092425" 3531 fetchpriority="low" 3532></script>
3532 3533
3534<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-ajax-cart.js?v=161944157569204579171790092425" defer></script>
3534
3535<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-drag-scroll.js?v=110690801177579278971790092425" defer></script>
3535 3536 3537 3538 3539 3540 3541<header-actions 3542 �> 3543 3544 3545 <div 3546 class="account-button header-actions__action color-scheme-1" 3547 > 3548 <shopify-store store-domain="https://www.bushnellgolf.com" country="US" language="en"></shopify-store> 3549<shopify-account 3550 menu="" 3551 3552 > 3553 3554 <span 3555 slot="signed-out-avatar" 3556 class="account-button__text header-actions__text-style hidden" 3557 > 3558 Account 3559 </span> 3560 3561 <span 3562 slot="signed-out-avatar" 3563 class="" 3564 aria-hidden="true" 3565 > 3566 3567 <svg 3568 xmlns="http://www.w3.org/2000/svg" 3569 width="15" 3570 height="17" 3571 viewBox="0 0 15 17" 3572 fill="none" 3573 slot="signed-out-avatar" 3574 class="account-button__icon" 3575 > 3576 <path 3577 stroke="currentColor" 3578 stroke-linejoin="round" 3579 stroke-width="var(--icon-stroke-width)" 3580 d="M10.375 3.813a3.063 3.063 0 1 1-6.125 0 3.063 3.063 0 0 1 6.125 0ZM7.313 9.5c-3.667 0-6.24 2.691-6.563 6.125h13.125C13.552 12.191 10.979 9.5 7.312 9.5Z" 3581 /> 3582 </svg> 3583 3584 </span> 3585 3586 </shopify-account> 3587 </div> 3588 3589 3590 3591
3591<script 3592 src="//www.bushnellgolf.com/cdn/shop/t/127/assets/cart-drawer.js?v=40387549154824438721790092425" 3593 type="module" 3594 fetchpriority="low" 3595 ></script>
3595 3596 3597 3598 3599 <cart-drawer-component 3600 class="cart-drawer" 3601 3602 3603 > 3604 <template id="empty-cart-template"> 3605 3606 <div class="cart-drawer__header"> 3607 <button 3608 ref="closeButton" 3609 on:click="cart-drawer-component/close" 3610 class="button close-button cart-drawer__close-button button-unstyled" 3611 aria-label="Close dialog" 3612 > 3613 <span class="svg-wrapper"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 3614 <path d="M12 2L2 12" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/> 3615 <path d="M12 12L2 2" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/> 3616</svg> 3617</span> 3618 </button> 3619 </div> 3620 3621 <div 3622 class="cart-drawer__content bn-empty" 3623 aria-label="Cart" 3624 > 3625 <div class="bn-empty__inner"> 3626 <div class="bn-empty__icon"> 3627 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg> 3628 </div> 3629 <div class="bn-empty__title" id="cart-drawer-heading-empty">Your cart is empty</div> 3630 <p class="bn-empty__text">Nothing here yet â explore the gear trusted by 98.4% of PGA Tour pros.</p> 3631 <button 3632 type="button" 3633 on:click="cart-drawer-component/close" 3634 class="bn-empty__cta button-unstyled" 3635 > 3636 Continue shopping 3637 </button> 3638 3639 <div class="bn-empty__cats"> 3640 <div class="bn-empty__eyebrow">Shop by category</div> 3641 <div class="bn-empty__grid"> 3642 <a href="/collections/golf-rangefinders" class="bn-empty__tile"> 3643 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><circle cx="12" cy="12" r="9"/><line x1="12" y1="2" x2="12" y2="6"/><line x1="12" y1="18" x2="12" y2="22"/><line x1="2" y1="12" x2="6" y2="12"/><line x1="18" y1="12" x2="22" y2="12"/><circle cx="12" cy="12" r="2.4"/></svg> 3644 <span>Rangefinders</span> 3645 </a> 3646 <a href="/collections/launch-monitors" class="bn-empty__tile"> 3647 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg> 3648 <span>Launch Monitors</span> 3649 </a> 3650 <a href="/collections/golf-gps" class="bn-empty__tile"> 3651 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg> 3652 <span>GPS</span> 3653 </a> 3654 <a href="/collections/accessories" class="bn-empty__tile"> 3655 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"/><line x1="7" y1="7" x2="7.01" y2="7"/></svg> 3656 <span>Accessories</span> 3657 </a> 3658 </div> 3659 </div> 3660 </div> 3661 </div> 3662 3663 </template> 3664 <button 3665 class="header-actions__action button-unstyled" 3666 on:click="/open" 3667 aria-haspopup="dialog" 3668 aria-label="Cart" 3669 aria-describedby="cart-bubble-text" 3670 data-testid="cart-drawer-trigger" 3671 > 3672 3673 <cart-icon 3674 class="header-actions__cart-icon" 3675 data-testid="cart-icon" 3676 > 3677 <span class="hidden"> 3678 Cart 3679 </span> 3680 3681 <span 3682 class="svg-wrapper " 3683 aria-hidden="true" 3684 > 3685 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="var(--icon-stroke-width)" d="M3.392 6.875h13.216v8.016c0 .567-.224 1.112-.624 1.513-.4.402-.941.627-1.506.627H5.522a2.13 2.13 0 0 1-1.506-.627 2.15 2.15 0 0 1-.624-1.513zM8.818 2.969h2.333c.618 0 1.211.247 1.649.686a2.35 2.35 0 0 1 .683 1.658v1.562H6.486V5.313c0-.622.246-1.218.683-1.658a2.33 2.33 0 0 1 1.65-.686"/></svg> 3686 3687 </span> 3688 3689 <div 3690 ref="cartBubble" 3691 class="cart-bubble visually-hidden" 3692 3693 3694 data-maintain-ratio 3695 3696> 3697 <span class="cart-bubble__background"></span> 3698 <span 3699 ref="cartBubbleText" 3700 id="cart-bubble-text" 3701 class="cart-bubble__text" 3702 3703 role="status" 3704 3705 > 3706 <span class="visually-hidden">Total items in cart: 0 3707 </span> 3708 <span 3709 class="cart-bubble__text-count hidden" 3710 ref="cartBubbleCount" 3711 aria-hidden="true" 3712 data-testid="cart-bubble" 3713 >�0</span> 3714 </span> 3715</div> 3716 3717 </cart-icon> 3718 3719 </button> 3720 3721 <dialog 3722 ref="dialog" 3723 class="cart-drawer__dialog dialog-modal dialog-drawer color-scheme-1 cart-drawer--empty" 3724 data-testid="cart-drawer-dialog" 3725 aria-labelledby="cart-drawer-heading-empty" 3726 scroll-lock 3727 cart-summary-sticky="true" 3728 > 3729 <div 3730 class="cart-drawer__inner" 3731 data-hydration-key="cart-drawer-inner" 3732 > 3733 <cart-items-component 3734 class="cart-items-component" 3735 data-drawer 3736 data-section-id="bushnell-header" 3737 > 3738 <div class="cart-drawer__header"> 3739 <button 3740 ref="closeButton" 3741 on:click="cart-drawer-component/close" 3742 class="button close-button cart-drawer__close-button button-unstyled" 3743 aria-label="Close dialog" 3744 >
3745 <span class="svg-wrapper"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 3746 <path d="M12 2L2 12" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/> 3747 <path d="M12 12L2 2" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/> 3748</svg> 3749</span> 3750 </button> 3751 </div> 3752 3753 <div 3754 class="cart-drawer__content bn-empty" 3755 aria-label="Cart" 3756 > 3757 <div class="bn-empty__inner"> 3758 <div class="bn-empty__icon"> 3759 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg> 3760 </div> 3761 <div class="bn-empty__title" id="cart-drawer-heading-empty">Your cart is empty</div> 3762 <p class="bn-empty__text">Nothing here yet â explore the gear trusted by 98.4% of PGA Tour pros.</p> 3763 <button 3764 type="button" 3765 on:click="cart-drawer-component/close" 3766 class="bn-empty__cta button-unstyled" 3767 > 3768 Continue shopping 3769 </button> 3770 3771 <div class="bn-empty__cats"> 3772 <div class="bn-empty__eyebrow">Shop by category</div> 3773 <div class="bn-empty__grid"> 3774 <a href="/collections/golf-rangefinders" class="bn-empty__tile"> 3775 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"><circle cx="12" cy="12" r="9"/><line x1="12" y1="2" x2="12" y2="6"/><line x1="12" y1="18" x2="12" y2="22"/><line x1="2" y1="12" x2="6" y2="12"/><line x1="18" y1="12" x2="22" y2="12"/><circle cx="12" cy="12" r="2.4"/></svg> 3776 <span>Rangefinders</span> 3777 </a> 3778 <a href="/collections/launch-monitors" class="bn-empty__tile"> 3779 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg> 3780 <span>Launch Monitors</span> 3781 </a> 3782 <a href="/collections/golf-gps" class="bn-empty__tile"> 3783 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg> 3784 <span>GPS</span> 3785 </a> 3786 <a href="/collections/accessories" class="bn-empty__tile"> 3787 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"/><line x1="7" y1="7" x2="7.01" y2="7"/></svg> 3788 <span>Accessories</span> 3789 </a> 3790 </div> 3791 </div> 3792 </div> 3793 </div> 3794 �</cart-items-component> 3795 </div> 3796 </dialog> 3797 </cart-drawer-component> 3798 3799</header-actions> 3800 3801 3802 3803 </div> 3804 </div> 3805 </div><div class="mega-menu-dropdown" data-mega-panel="rangefinders" hidden> 3806 <div class="container"><div class="mega-menu-grid"> 3807 <div class="mega-menu-columns"></div><div class="mega-menu-featured-wrap"><div class="mega-menu-featured" 3808 style="text-align:center;padding:20px 20px 20px 20px;" 3809 > 3810 <a class="mega-menu-featured-link" href="/products/pro-x3-link" aria-label="View Pro X3+LINK"></a><div class="mega-menu-featured-badge mega-menu-featured-badge--bestseller">Best Seller</div><div class="mega-menu-featured-img"> 3811 <a href="/products/pro-x3-link"> 3812 <img src="//www.bushnellgolf.com/cdn/shop/files/BG-DTC-202450-Pro-X3-Plus-Hero__38872.1748636017.386.513_08b9b827-7cea-42e0-b245-c8d6f0546c09.webp?v=1789408607&width=600" alt="Pro X3+LINK" width="600" height="200" loading="lazy"> 3813 </a> 3814 </div><div class="mega-menu-featured-head"> 3815 <div class="mega-menu-featured-name"><a href="/products/pro-x3-link">Pro X3+LINK</a></div> 3816 <div class="mega-menu-featured-price">$599.99</div> 3817 </div><div class="mega-menu-featured-tagline">The most accurate rangefinder that Bushnell Golf has ever made.</div><a class="mega-menu-featured-cta mega-menu-featured-cta--quiet" href="/products/pro-x3-link"> 3818 View details 3819 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3820 </a></div><div class="mega-menu-featured" 3821 style="text-align:center;padding:20px 20px 20px 20px;" 3822 > 3823 <a class="mega-menu-featured-link" href="/products/tour
3823-hybrid" aria-label="View Tour Hybrid"></a><div class="mega-menu-featured-img"> 3824 <a href="/products/tour-hybrid"> 3825 <img src="//www.bushnellgolf.com/cdn/shop/files/tour-hybrid-carousel-image__72261.png?v=1780538602&width=600" alt="Tour Hybrid" width="600" height="200" loading="lazy"> 3826 </a> 3827 </div><div class="mega-menu-featured-head"> 3828 <div class="mega-menu-featured-name"><a href="/products/tour-hybrid">Tour Hybrid</a></div> 3829 <div class="mega-menu-featured-price">$499.99</div> 3830 </div><div class="mega-menu-featured-tagline">Slope Compensated Laser and GPS Distances in the display</div><a class="mega-menu-featured-cta mega-menu-featured-cta--quiet" href="/products/tour-hybrid"> 3831 View details 3832 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3833 </a></div><div class="mega-menu-featured" 3834 style="text-align:center;padding:20px 20px 20px 20px;" 3835 > 3836 <a class="mega-menu-featured-link" href="/products/tour-v7-shift" aria-label="View Tour V7 Shift"></a><div class="mega-menu-featured-badge mega-menu-featured-badge--new">New</div><div class="mega-menu-featured-img"> 3837 <a href="/products/tour-v7-shift"> 3838 <img src="//www.bushnellgolf.com/cdn/shop/files/TOUR_V7_Carousel_Image_1__03665.1773382564.386.513_fa921b3e-6d9e-4449-9297-a97d5faa0802.png?v=1781021526&width=600" alt="Tour V7 Shift" width="600" height="200" loading="lazy"> 3839 </a> 3840 </div><div class="mega-menu-featured-head"> 3841 <div class="mega-menu-featured-name"><a href="/products/tour-v7-shift">Tour V7 Shift</a></div> 3842 <div class="mega-menu-featured-price">$399.99</div> 3843 </div><div class="mega-menu-featured-tagline">All-new Dual Color (red and green) OLED Display with Slope-Switch Technology.</div><a class="mega-menu-featured-cta mega-menu-featured-cta--quiet" href="/products/tour-v7-shift"> 3844 View details 3845 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3846 </a></div><div class="mega-menu-featured" 3847 style="text-align:center;padding:20px 20px 20px 20px;" 3848 > 3849 <a class="mega-menu-featured-link" href="/products/a1-slope" aria-label="View A1-Slope"></a><div class="mega-menu-featured-img"> 3850 <a href="/products/a1-slope"> 3851 <img src="//www.bushnellgolf.com/cdn/shop/files/a1-slope-feature-image__34701.png?v=1782349159&width=600" alt="A1-Slope" width="600" height="200" loading="lazy"> 3852 </a> 3853 </div><div class="mega-menu-featured-head"> 3854 <div class="mega-menu-featured-name"><a href="/products/a1-slope">A1-Slope</a></div> 3855 <div class="mega-menu-featured-price">$299.99</div> 3856 </div><div class="mega-menu-featured-tagline">Precision and Slope gone ultra-compact.</div><a class="mega-menu-featured-cta mega-menu-featured-cta--quiet" href="/products/a1-slope"> 3857 View details 3858 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3859 </a></div></div></div><div class="mega-menu-footer"><div class="mega-menu-promo"> 3860 Trusted by 98.4% of PGA Tour pros. 3861 </div><a href="/collections/golf-rangefinders" class="mega-menu-shop-all"> 3862 SHOP ALL RANGEFINDERS 3863 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3864 </a></div></div> 3865 </div><div class="mega-menu-dropdown" data-mega-panel="launch-monitors" hidden> 3866 <div class="container"><div class="mega-menu-compare"><a class="mega-menu-compare-card" href="/products/launch-pro" ><span class="mega-menu-compare-badge mega-menu-compare-badge--bestseller">Best Seller</span><span class="mega-menu-compare-img"> 3867 <img src="//www.bushnellgolf.com/cdn/shop/files/LP_Product_Carousel_1_2_1__62065.1762889085.386.513_4c815453-5a18-4f6b-b55d-5e161ad7ab2a.png?v=1781021541&width=600" alt="Launch Pro" width="600" height="300" loading="lazy"> 3868 </span><span class="mega-menu-compare-head">
3869 <span class="mega-menu-compare-name">Launch Pro</span> 3870 <span class="mega-menu-compare-price">$2,999.99</span> 3871 </span><span class="mega-menu-compare-specs"><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Where</span><span class="mega-menu-compare-spec-value">Indoor + Outdoor</span></span><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Data</span><span class="mega-menu-compare-spec-value">Club + Ball</span></span><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Best for</span><span class="mega-menu-compare-spec-value">Full sim + range use</span></span></span> 3872 <span class="mega-menu-compare-view"> 3873 View details 3874 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3875 </span> 3876 </a><a class="mega-menu-compare-card" href="/products/lpi-personal-launch-monitor" ><span class="mega-menu-compare-img"> 3877 <img src="//www.bushnellgolf.com/cdn/shop/files/LPi_Product_Carousel_1_1__92363.1762888626.386.513.png?v=1781021499&width=600" alt="Launch Pro Indoor" width="600" height="300" loading="lazy"> 3878 </span><span class="mega-menu-compare-head"> 3879 <span class="mega-menu-compare-name">Launch Pro Indoor</span> 3880 <span class="mega-menu-compare-price">$1,999.99</span> 3881 </span><span class="mega-menu-compare-specs"><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Where</span><span class="mega-menu-compare-spec-value">Indoor only</span></span><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Data</span><span class="mega-menu-compare-spec-value">Club + Ball</span></span><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Best for</span><span class="mega-menu-compare-spec-value">Home simulator setups</span></span></span> 3882 <span class="mega-menu-compare-view"> 3883 View details 3884 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3885 </span> 3886 </a></div><div class="mega-menu-footer"><span></span><a href="/collections/launch-monitors" class="mega-menu-shop-all"> 3887 SHOP ALL LAUNCH MONITORS 3888 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3889 </a></div></div> 3890 </div><div class="mega-menu-dropdown" data-mega-panel="SIMULATOR" hidden> 3891 <div class="container"><div class="mega-menu-compare"><a class="mega-menu-compare-card" href="/products/launch-pro-simulator-bundle" ><span class="mega-menu-compare-badge mega-menu-compare-badge--bestseller">Best Seller</span><span class="mega-menu-compare-img"> 3892 <img src="//www.bushnellgolf.com/cdn/shop/files/LP_Simulator_Package_Carousel_8.png?v=1789702490&width=600" alt="Launch Pro Simulator Bundle" width="600" height="300" loading="lazy"> 3893 </span><span class="mega-menu-compare-head"> 3894 <span class="mega-menu-compare-name">Launch Pro Simulator Bundle</span> 3895 <span class="mega-menu-compare-price">$6,499.99</span> 3896 </span><span class="mega-menu-compare-specs"><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Monitor</span><span class="mega-menu-compare-spec-value">Launch Pro (indoor + outdoor)</span></span><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Includes</span><span class="mega-menu-compare-spec-value">Screen + enclosure</span></span><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Best for</span><span class="mega-menu-compare-spec-value">The complete build</span></span></span>
3897 <span class="mega-menu-compare-view"> 3898 View details 3899 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3900 </span> 3901 </a><a class="mega-menu-compare-card" href="/products/launch-pro-i-simulator-bundle" ><span class="mega-menu-compare-img"> 3902 <img src="//www.bushnellgolf.com/cdn/shop/files/LP_Simulator_Package_Carousel_7.png?v=1789702153&width=600" alt="Launch Pro i Simulator Bundle" width="600" height="300" loading="lazy"> 3903 </span><span class="mega-menu-compare-head"> 3904 <span class="mega-menu-compare-name">Launch Pro i Simulator Bundle</span> 3905 <span class="mega-menu-compare-price">$5,499.99</span> 3906 </span><span class="mega-menu-compare-specs"><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Monitor</span><span class="mega-menu-compare-spec-value">Launch Pro i (indoor)</span></span><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Includes</span><span class="mega-menu-compare-spec-value">Full sim setup</span></span><span class="mega-menu-compare-spec"><span class="mega-menu-compare-spec-label">Best for</span><span class="mega-menu-compare-spec-value">Dedicated indoor rooms</span></span></span> 3907 <span class="mega-menu-compare-view"> 3908 View details 3909 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3910 </span> 3911 </a></div><div class="mega-menu-footer"><div class="mega-menu-promo"> 3912 Your home course, open 365 days a year. 3913 </div><a href="/collections/golf-simulators" class="mega-menu-shop-all"> 3914 SHOP ALL SIMULATORS 3915 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3916 </a></div></div> 3917 </div><div class="mega-menu-dropdown" data-mega-panel="speakers" hidden> 3918 <div class="container"><div class="mega-menu-grid"> 3919 <div class="mega-menu-columns"></div><div class="mega-menu-featured-wrap"><div class="mega-menu-featured" 3920 style="text-align:center;padding:20px 20px 20px 20px;" 3921 > 3922 <a class="mega-menu-featured-link" href="/products/wingman-hd" aria-label="View Wingman HD"></a><div class="mega-menu-featured-badge mega-menu-featured-badge--new">New</div><div class="mega-menu-featured-img"> 3923 <a href="/products/wingman-hd"> 3924 <img src="//www.bushnellgolf.com/cdn/shop/files/WINGMAN_HD_Carousel_Image_1__93749.1760039492.386.513_c2959888-8393-49f9-bd6a-77908e835669.png?v=1781021521&width=600" alt="Wingman HD" width="600" height="200" loading="lazy"> 3925 </a> 3926 </div><div class="mega-menu-featured-head"> 3927 <div class="mega-menu-featured-name"><a href="/products/wingman-hd">Wingman HD</a></div> 3928 <div class="mega-menu-featured-price">$249.99</div> 3929 </div><div class="mega-menu-featured-tagline">3.5ⳠHD touchscreen + 360° audio</div><a class="mega-menu-featured-cta mega-menu-featured-cta--quiet" href="/products/wingman-hd"> 3930 View details 3931 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3932 </a></div><div class="mega-menu-featured" 3933 style="text-align:center;padding:20px 20px 20px 20px;" 3934 > 3935 <a class="mega-menu-featured-link" href="/products/wingman-view" aria-label="View Wingman View"></a><div class="mega-menu-featured-img"> 3936 <a href="/products/wingman-view"> 3937 <img src="//www.bushnellgolf.com/cdn/shop/files/BG-DTC-362210-Wingman-View-Hero__83017.1713450886.386.513_d34b0b06-c47d-454a-a114-e8bb9c6a3649.png?v=1781021539&width=600" alt="Wingman View" width="600" height="200" loading="lazy"> 3938 </a> 3939 </div><div class="mega-menu-featured-head"> 3940 <div class="mega-menu-featured-name"><a href="/products/wingman-view">Wingman View</a></div> 3941 <div class="mega-menu-featured-price">$199.99</div> 3942 </div><div class="mega-menu-featured-tagline">Visual + audible GPS · speaker</div><a class="mega-menu-featured-cta mega-menu-featured-cta--quiet" href="/products/wingman-view"> 3943 View details 3944 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3945 </a></div><div class="mega-menu-featured" 3946 style="text-align:center;padding:20px 20px 20px 20px;" 3947 > 3948 <a class="mega-menu-featured-link" href="/products/wingman-2-gps-speaker" aria-label="View Wingman 2 GPS Speaker"></a><div class="mega-menu-featured-img"> 3949 <a href="/products/wingman-2-gps-speaker"> 3950 <img src="//www.bushnellgolf.com/cdn/shop/files/Wingman-2-Front-Three-Quarter__93889.1709586394.386.513_4e7f15ab-16ad-4aed-8329-7491ef314e42.png?v=1781021505&width=600" alt="Wingman 2 GPS Speaker" width="600" height="200" loading="lazy"> 3951 </a> 3952 </div><div class="mega-menu-featured-head"> 3953 <div class="mega-menu-featured-name"><a href="/products/wingman-2-gps-speaker">Wingman 2</a></div> 3954 <div class="mega-menu-featured-price">$169.99</div> 3955 </div><div class="mega-menu-featured-tagline">Audible GPS · BITE magnetic speaker</div><a class="mega-menu-featured-cta mega-menu-featured-cta--quiet" href="/products/wingman-2-gps-speaker"> 3956 View details 3957 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3958 </a></div><div class="mega-menu-featured" 3959 style="text-align:center;padding:20px 20px 20px 20px;" 3960 > 3961 <a class="mega-menu-featured-link" href="/products/wingman-mini-gps-speaker" aria-label="View Wingman Mini GPS Speaker"></a><div class="mega-menu-featured-img"> 3962 <a href="/products/wingman-mini-gps-speaker"> 3963 <img src="//www.bushnellgolf.com/cdn/shop/files/BG-DTC-362310-362311-Wingman-Mini-Group__46217.1713452376.386.513_70382c1b-115c-4dbe-8885-57e83f36d0da.png?v=1775581314&width=600" alt="Wingman Mini GPS Speaker" width="600" height="200" loading="lazy"> 3964 </a> 3965 </div><div class="mega-menu-featured-head"> 3966 <div class="mega-menu-featured-name"><a href="/products/wingman-mini-gps-speaker">Wingman Mini</a></div> 3967 <div class="mega-menu-featured-price">$109.99</div> 3968 </div><div class="mega-menu-featured-tagline">Compact GPS speaker · walkers & riders</div><a class="mega-menu-featured-cta mega-menu-featured-cta--quiet" href="/products/wingman-mini-gps-speaker"> 3969 View details 3970 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3971 </a></div></div></div><div class="mega-menu-footer"><div class="mega-menu-promo"> 3972 Premium Audio for Every Adventure. 3973 </div><a href="/collections/golf-gps-speakers" class="mega-menu-shop-all"> 3974 SHOP ALL SPEAKERS 3975 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3976 </a></div></div> 3977 </div><div class="mega-menu-dropdown" data-mega-panel="gps" hidden> 3978 <div class="container"><div class="mega-menu-grid"> 3979 <div class="mega-menu-columns"></div><div class="mega-menu-featured-wrap"><div class="mega-menu-featured" 3980 style="text-align:center;padding:20px 20px 20px 20px;" 3981 > 3982 <a class="mega-menu-featured-link" href="/products/ion-elite" aria-label="View iON Elite"></a><div class="mega-menu-featured-img"> 3983 <a href="/products/ion-elite"> 3984 <img src="//www.bushnellgolf.com/cdn/shop/files/BG-DTC-362150-362151-iON-Elite-Group__84330.1713454139.386.513_834afcd4-d363-4826-a310-1d5a1a8e1ffd.png?v=1775581209&width=600" alt="iON Elite" width="600" height="200" loading="lazy"> 3985 </a> 3986 </div><div class="mega-menu-featured-head"> 3987 <div class="mega-menu-featured-name"><a href="/products/ion-elite">iON Elite</a></div> 3988 <div class="mega-menu-featured-price">$219.99</div> 3989 </div><div class="mega-menu-featured-tagline">Slope GPS watch · preloaded courses</div><a class="mega-menu-featured-cta mega-menu-featured-cta--quiet" href="/products/ion-elite"> 3990 View details 3991 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 3992 </a></div><div class="mega-menu-featured" 3993 style="text-align:center;padding:20px 20px 20px 20px;" 3994 > 3995 <a class="mega-menu-featured-link" href="/products/phantom-3-slope-gps" aria-label="View Phantom 3 Slope GPS"></a><div class="mega-menu-featured-img"> 3996 <a href="/products/phantom-3-slope-gps"> 3997 <img src="//www.bushnellgolf.com/cdn/shop/files/BG-DTC-362401-362402-362403-362404-Phantom-3-Group__06111.1718293560.386.513_d002f9f9-db04-4721-abad-50909e1ccdc3.png?v=1775581452&width=600" alt="Phantom 3 Slope GPS" width="600" height="200" loading="lazy"> 3998 </a> 3999 </div><div class="mega-menu-featured-head"> 4000 <div class="mega-menu-featured-name"><a href="/products/phantom-3-slope-gps">Phantom 3</a></div> 4001 <div class="mega-menu-featured-price">$169.99</div> 4002 </div><div class="mega-menu-featured-tagline">Slope touchscreen GPS · front/center/back</div><a class="mega-menu-featured-cta mega-menu-featured-cta--quiet" href="/products/phantom-3-slope-gps"> 4003 View details 4004 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 4005 </a></div></div></div><div class="mega-menu-footer"><div class="mega-menu-promo"> 4006 Find the Perfect GPS for Every Round. 4007 </div><a href="/collections/golf-gps" class="mega-menu-shop-all"> 4008 SHOP ALL GPS 4009 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 4010 </a></div></div> 4011 </div><div class="mega-menu-dropdown" data-mega-panel="accessories" hidden> 4012 <div class="container"><div class="mega-menu-grid"> 4013 <div class="mega-menu-columns"><div class="mega-menu-col" 4014 style="text-align:left;padding:0px 0px 0px 0px;" 4015 > 4016 <div class="mega-menu-col-heading">Shop</div><ul class="mega-menu-col-links"><li 4017 style="text-align:left;padding:0px 0px 0px 0px;" 4018 > 4019 <a href="/collections/accessories"><span class="mega-link-text">
4020 <span class="mega-link-name"> 4021 Cases & Mounts�</span><span class="mega-link-sub">Protect and secure your gear.</span></span> 4022 </a> 4023 </li><li 4024 style="text-align:left;padding:0px 0px 0px 0px;" 4025 > 4026 <a href="/collections/replacement-parts"><span class="mega-link-text"> 4027 <span class="mega-link-name"> 4028 Replacement Parts�</span><span class="mega-link-sub">Genuine parts + Extend Protection Plan</span></span> 4029 </a> 4030 </li></ul> 4031 </div><div class="mega-menu-col" 4032 style="text-align:left;padding:0px 0px 0px 0px;" 4033 > 4034 <div class="mega-menu-col-heading">Resources</div><ul class="mega-menu-col-links"><li 4035 style="text-align:left;padding:0px 0px 0px 0px;" 4036 > 4037 <a href="https://greenbooks.com/?utm_source=Website&utm_medium=product&utm_campaign=sales&utm_content=learn+more" class="mega-link--has-img" target="_blank" rel="noopener noreferrer"><img class="mega-link-img" src="//www.bushnellgolf.com/cdn/shop/files/green-books-menu__66107.original.png?v=1785443625&width=320" alt="Greenbooks" width="160" height="160" style="width:160px;height:auto;" loading="lazy"><span class="mega-link-text"> 4038 <span class="mega-link-name"> 4039 Greenbooks�</span><span class="mega-link-sub">The #1 course guide, used by tour caddies.</span></span> 4040 </a> 4041 </li></ul> 4042 </div></div></div><div class="mega-menu-footer"><div class="mega-menu-promo"> 4043 Genuine Bushnell parts and guides 4044 </div><a href="/collections/accessories" class="mega-menu-shop-all"> 4045 SHOP ALL ACCESSORIES 4046 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 4047 </a></div></div> 4048 </div> 4049</nav><div class="mobile-overlay" data-drawer-overlay></div> 4050<div class="mobile-drawer" data-mobile-drawer> 4051 <div class="mobile-drawer-header"> 4052 <a class="logo" href="/"><img src="//www.bushnellgolf.com/cdn/shop/files/Bushnell.png?v=1781040317&width=600" alt="Bushnell Golf" srcset="//www.bushnellgolf.com/cdn/shop/files/Bushnell.png?v=1781040317&width=352 352w, //www.bushnellgolf.com/cdn/shop/files/Bushnell.png?v=1781040317&width=600 600w" width="600" height="213" loading="eager" class="logo__image">�</a> 4053 <button class="mobile-drawer-close" aria-label="Close menu" data-drawer-close> 4054 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg> 4055 </button> 4056 </div> 4057 <div class="mobile-drawer-search"> 4058 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg> 4059 <form action="/search" method="get"> 4060 <input type="text" name="q" placeholder="Search products..." autocomplete="off" aria-label="Search products"> 4061 </form> 4062 </div> 4063 <div class="mobile-drawer-nav"><div class="mobile-accordion"> 4064 <button class="mobile-accordion-trigger" data-accordion-trigger> 4065 <span>RANGEFINDERS</span> 4066 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg> 4067 </button> 4068 <div class="mobile-accordion-panel" hidden><a class="mobile-accordion-link" href="/products/pro-x3-link" > 4069 <span class="mobile-accordion-link-row">
4070 <span class="mobile-accordion-link-name"> 4071 Pro X3+LINK�<span class="mega-link-badge mega-link-badge--bestseller">Best Seller</span></span> 4072 <span class="mobile-accordion-link-price">$599.99</span> 4073 </span><span class="mobile-accordion-link-sub">The most accurate rangefinder that Bushnell Golf has ever made.</span></a><a class="mobile-accordion-link" href="/products/tour-hybrid" > 4074 <span class="mobile-accordion-link-row"> 4075 <span class="mobile-accordion-link-name"> 4076 Tour Hybrid�</span> 4077 <span class="mobile-accordion-link-price">$499.99</span> 4078 </span><span class="mobile-accordion-link-sub">Slope Compensated Laser and GPS Distances in the display</span></a><a class="mobile-accordion-link" href="/products/tour-v7-shift" > 4079 <span class="mobile-accordion-link-row"> 4080 <span class="mobile-accordion-link-name"> 4081 Tour V7 Shift�<span class="mega-link-badge mega-link-badge--new">New</span></span> 4082 <span class="mobile-accordion-link-price">$399.99</span> 4083 </span><span class="mobile-accordion-link-sub">All-new Dual Color (red and green) OLED Display with Slope-Switch Technology.</span></a><a class="mobile-accordion-link" href="/products/a1-slope" > 4084 <span class="mobile-accordion-link-row"> 4085 <span class="mobile-accordion-link-name"> 4086 A1-Slope�</span> 4087 <span class="mobile-accordion-link-price">$299.99</span> 4088 </span><span class="mobile-accordion-link-sub">Precision and Slope gone ultra-compact.</span></a><a class="mobile-accordion-shopall" href="/collections/golf-rangefinders"> 4089 SHOP ALL RANGEFINDERS 4090 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 4091 </a></div> 4092 </div><div class="mobile-accordion"> 4093 <button class="mobile-accordion-trigger" data-accordion-trigger> 4094 <span>LAUNCH MONITORS</span> 4095 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg> 4096 </button> 4097 <div class="mobile-accordion-panel" hidden><a class="mobile-accordion-link" href="/products/launch-pro"> 4098 <span class="mobile-accordion-link-row"> 4099 <span class="mobile-accordion-link-name"> 4100 Launch Pro�<span class="mega-link-badge mega-link-badge--bestseller">Best Seller</span></span><span class="mobile-accordion-link-price">$2,999.99</span> 4101 </span><span class="mobile-accordion-link-sub">Indoor + Outdoor, Club + Ball</span></a><a class="mobile-accordion-link" href="/products/lpi-personal-launch-monitor"> 4102 <span class="mobile-accordion-link-row"> 4103 <span class="mobile-accordion-link-name"> 4104 Launch Pro Indoor�</span><span class="mobile-accordion-link-price">$1,999.99</span> 4105 </span><span class="mobile-accordion-link-sub">Indoor only, Club + Ball</span></a><a class="mobile-accordion-shopall" href="/collections/launch-monitors"> 4106 SHOP ALL LAUNCH MONITORS 4107 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 4108 </a></div> 4109 </div><div class="mobile-accordion"> 4110 <button class="mobile-accordion-trigger" data-accordion-trigger> 4111 <span>SIMULATORS</span> 4112 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg> 4113 </button> 4114 <div class="mobile-accordion-panel" hidden><a class="mobile-accordion-link" href="/products/launch-pro-simulator-bundle">
4115 <span class="mobile-accordion-link-row"> 4116 <span class="mobile-accordion-link-name"> 4117 Launch Pro Simulator Bundle�<span class="mega-link-badge mega-link-badge--bestseller">Best Seller</span></span><span class="mobile-accordion-link-price">$6,499.99</span> 4118 </span><span class="mobile-accordion-link-sub">Launch Pro (indoor + outdoor), Screen + enclosure</span></a><a class="mobile-accordion-link" href="/products/launch-pro-i-simulator-bundle"> 4119 <span class="mobile-accordion-link-row"> 4120 <span class="mobile-accordion-link-name"> 4121 Launch Pro i Simulator Bundle�</span><span class="mobile-accordion-link-price">$5,499.99</span> 4122 </span><span class="mobile-accordion-link-sub">Launch Pro i (indoor), Full sim setup</span></a><a class="mobile-accordion-shopall" href="/collections/golf-simulators"> 4123 SHOP ALL SIMULATORS 4124 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 4125 </a></div> 4126 </div><div class="mobile-accordion"> 4127 <button class="mobile-accordion-trigger" data-accordion-trigger> 4128 <span>Speakers</span> 4129 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg> 4130 </button> 4131 <div class="mobile-accordion-panel" hidden><a class="mobile-accordion-link" href="/products/wingman-hd" > 4132 <span class="mobile-accordion-link-row"> 4133 <span class="mobile-accordion-link-name"> 4134 Wingman HD�<span class="mega-link-badge mega-link-badge--new">New</span></span> 4135 <span class="mobile-accordion-link-price">$249.99</span> 4136 </span><span class="mobile-accordion-link-sub">3.5ⳠHD touchscreen + 360° audio</span></a><a class="mobile-accordion-link" href="/products/wingman-view" > 4137 <span class="mobile-accordion-link-row"> 4138 <span class="mobile-accordion-link-name"> 4139 Wingman View�</span> 4140 <span class="mobile-accordion-link-price">$199.99</span> 4141 </span><span class="mobile-accordion-link-sub">Visual + audible GPS · speaker</span></a><a class="mobile-accordion-link" href="/products/wingman-2-gps-speaker" > 4142 <span class="mobile-accordion-link-row"> 4143 <span class="mobile-accordion-link-name"> 4144 Wingman 2 GPS Speaker�</span> 4145 <span class="mobile-accordion-link-price">$169.99</span> 4146 </span><span class="mobile-accordion-link-sub">Audible GPS · BITE magnetic speaker</span></a><a class="mobile-accordion-link" href="/products/wingman-mini-gps-speaker" > 4147 <span class="mobile-accordion-link-row"> 4148 <span class="mobile-accordion-link-name"> 4149 Wingman Mini GPS Speaker�</span> 4150 <span class="mobile-accordion-link-price">$109.99</span> 4151 </span><span class="mobile-accordion-link-sub">Compact GPS speaker · walkers & riders</span></a><a class="mobile-accordion-shopall" href="/collections/golf-gps-speakers"> 4152 SHOP ALL SPEAKERS 4153 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 4154 </a></div> 4155 </div><div class="mobile-accordion"> 4156 <button class="mobile-accordion-trigger" data-accordion-trigger> 4157 <span>GPS</span> 4158 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg> 4159 </button> 4160 <div class="mobile-accordion-panel" hidden><a class="mobile-accordion-link" href="/products/ion-elite" >
4161 <span class="mobile-accordion-link-row"> 4162 <span class="mobile-accordion-link-name"> 4163 iON Elite�</span> 4164 <span class="mobile-accordion-link-price">$219.99</span> 4165 </span><span class="mobile-accordion-link-sub">Slope GPS watch · preloaded courses</span></a><a class="mobile-accordion-link" href="/products/phantom-3-slope-gps" > 4166 <span class="mobile-accordion-link-row"> 4167 <span class="mobile-accordion-link-name"> 4168 Phantom 3 Slope GPS�</span> 4169 <span class="mobile-accordion-link-price">$169.99</span> 4170 </span><span class="mobile-accordion-link-sub">Slope touchscreen GPS · front/center/back</span></a><a class="mobile-accordion-shopall" href="/collections/golf-gps"> 4171 SHOP ALL GPS 4172 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 4173 </a></div> 4174 </div><div class="mobile-accordion"> 4175 <button class="mobile-accordion-trigger" data-accordion-trigger> 4176 <span>ACCESSORIES</span> 4177 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"/></svg> 4178 </button> 4179 <div class="mobile-accordion-panel" hidden><div class="mobile-accordion-group"> 4180 <div class="mobile-accordion-heading">Shop</div><a class="mobile-accordion-link" href="/collections/accessories"><span class="mobile-accordion-link-text"> 4181 <span class="mobile-accordion-link-row"> 4182 <span class="mobile-accordion-link-name"> 4183 Cases & Mounts�</span></span><span class="mobile-accordion-link-sub">Protect and secure your gear.</span></span> 4184 </a><a class="mobile-accordion-link" href="/collections/replacement-parts"><span class="mobile-accordion-link-text"> 4185 <span class="mobile-accordion-link-row"> 4186 <span class="mobile-accordion-link-name"> 4187 Replacement Parts�</span></span><span class="mobile-accordion-link-sub">Genuine parts + Extend Protection Plan</span></span> 4188 </a></div><div class="mobile-accordion-group"> 4189 <div class="mobile-accordion-heading">Resources</div><a class="mobile-accordion-link mobile-accordion-link--has-img" href="https://greenbooks.com/?utm_source=Website&utm_medium=product&utm_campaign=sales&utm_content=learn+more" target="_blank" rel="noopener noreferrer"><img class="mobile-accordion-link-img" src="//www.bushnellgolf.com/cdn/shop/files/green-books-menu__66107.original.png?v=1785443625&width=88" alt="Greenbooks" width="44" height="44" style="width:44px;height:auto;" loading="lazy"><span class="mobile-accordion-link-text"> 4190 <span class="mobile-accordion-link-row"> 4191 <span class="mobile-accordion-link-name"> 4192 Greenbooks�</span></span><span class="mobile-accordion-link-sub">The #1 course guide, used by tour caddies.</span></span> 4193 </a></div><a class="mobile-accordion-shopall" href="/collections/accessories"> 4194 SHOP ALL ACCESSORIES 4195 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg> 4196 </a></div> 4197 </div><a class="mobile-drawer-link" href="/pages/contact">Contact Us</a><a class="mobile-drawer-link" href="/pages/support">Support</a><a class="mobile-drawer-link" href="/collections/sale">Sale</a></div> 4198 <div class="mobile-drawer-footer"> 4199 FREE SHIPPING on orders over $99 4200 </div> 4201</div> 4202
4203<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-header-user-menu.js?v=136142066710242377001790092425" defer></script>
4203 4204 4205 4206</div><div class="search-overlay-backdrop" data-search-backdrop></div> 4207 <div class="search-overlay" data-search-overlay> 4208 <div class="search-overlay-inner"> 4209 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="20" height="20" style="color:var(--grey-500);flex-shrink:0;"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg> 4210 <form action="/search" method="get" style="flex:1;display:flex;"> 4211 <input type="text" name="q" class="search-overlay-input" placeholder="Search rangefinders, GPS, launch monitors..." autocomplete="off"> 4212 <input type="hidden" name="type" value="product"> 4213 </form> 4214 <button class="search-overlay-close" data-search-close aria-label="Close search"> 4215 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg> 4216 </button> 4217 </div> 4218 </div> 4219 4220 <main id="MainContent" role="main"> 4221 <section id="shopify-section-template--28849658233016__main" class="shopify-section bushnell-about"><style> 4222 #shopify-section-template--28849658233016__main h1, 4223 #shopify-section-template--28849658233016__main h2, 4224 #shopify-section-template--28849658233016__main h3, 4225 #shopify-section-template--28849658233016__main h4 { font-family: 'Industry Bold', sans-serif; } 4226 #shopify-section-template--28849658233016__main p, 4227 #shopify-section-template--28849658233016__main span, 4228 #shopify-section-template--28849658233016__main a, 4229 #shopify-section-template--28849658233016__main li, 4230 #shopify-section-template--28849658233016__main div { font-family: 'Acumin Pro', sans-serif; } 4231 4232 .bab-wrap { background: #F7F3EE; } 4233 .bab-inner { max-width: 1200px; margin: 0 auto; padding: 0 40px; } 4234 4235 .bab-hero { background: #1E252B; background-image: radial-gradient(circle at 85% 10%, rgba(254,80,0,0.10), transparent 55%); padding: 64px 0 56px; } 4236 .bab-hero-stack { display: flex; flex-direction: column; gap: 18px; } 4237 .bab-eyebrow { font-size: 11px; font-weight: 500; letter-spacing: 2px; text-transform: uppercase; color: #FE5000; } 4238 .bab-h1 { margin: 0; font-size: 56px; line-height: 1.05; letter-spacing: 1px; text-transform: uppercase; color: #fff; max-width: 20ch; } 4239 .bab-h1 em { font-style: normal; color: #FE5000; } 4240 .bab-sub { margin: 0; font-size: 16px; line-height: 1.6; color: rgba(255,255,255,0.6); max-width: 62ch; } 4241 4242 .bab-stats { display: flex; flex-wrap: wrap; gap: 48px; margin-top: 6px; } 4243 .bab-stat-value { font-size: 28px; line-height: 1; font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase; color: #FE5000; margin-bottom: 6px; } 4244 .bab-stat-label { font-size: 11px; letter-spacing: 1.5px; text-transform: uppercase; color: rgba(255,255,255,0.5); } 4245 4246 .bab-content { padding: 56px 0 80px; } 4247 .bab-rte { max-width: 900px; } 4248 .bab-rte > *:first-child { margin-top: 0; } 4249 .bab-rte p { margin: 0 0 20px; font-size: 16px; line-height: 1.75; color: #3A3F45; } 4250 .bab-rte h2 { margin: 40px 0 14px; font-size: 30px; line-height: 1.15; letter-spacing: 0.5px; text-transform: uppercase; color: #1E252B; } 4251 .bab-rte h3 { margin: 32px 0 12px; font-size: 20px; line-height: 1.2; letter-spacing: 0.5px; text-transform: uppercase; color: #1E252B; } 4252 .bab-rte strong { color: #1E252B; } 4253 .bab-rte a { color: #FE5000; text-decoration: none; } 4254 .bab-rte a:hover { text-decoration: underline; } 4255 .bab-rte ul, .bab-rte ol { margin: 0 0 20px; padding-left: 22px; display: flex; flex-direction: column; gap: 8px; font-size: 16px; line-height: 1.6; color: #3A3F45; } 4256 .bab-rte img { max-width: 100%; height: auto; border-radius: 10px; } 4257 4258 @media screen and (max-width: 989px) { 4259 .bab-inner { padding: 0 20px; } 4260 .bab-h1 { font-size: 42px; } 4261 } 4262 @media screen and (max-width: 749px) { 4263 .bab-hero { padding: 44px 0 40px; } 4264 .bab-h1 { font-size: 32px; } 4265 .bab-stats { gap: 28px; } 4266 .bab-content { padding: 40px 0 56px; } 4267 .bab-rte h2 { font-size: 24px; } 4268 } 4269</style> 4270 4271<div class="bab-wrap"><div class="bab-hero"> 4272 <div class="bab-inner bab-hero-stack"><span class="bab-eyebrow">About · Bushnell Golf</span><h1 class="bab-h1">About <em>Bushnell Golf</em></h1><p class="bab-sub">Industry-leading sports optics for more than 65 years â and the #1 rangefinder in golf.</p><div class="bab-stats"><div class="bab-stat" > 4273 <div class="bab-stat-value">65+ Years</div><div class="bab-stat-label">
4273Sports Optics Leader</div></div><div class="bab-stat" > 4274 <div class="bab-stat-value">#1</div><div class="bab-stat-label">Rangefinder in Golf</div></div><div class="bab-stat" > 4275 <div class="bab-stat-value">Award-Winning</div><div class="bab-stat-label">Design & Performance</div></div></div></div> 4276 </div> 4277 4278 <div class="bab-content"> 4279 <div class="bab-inner"> 4280 <div class="bab-rte"><div class="about"> 4281<div class="about-heading"> 4282<div class="PageHeader"> 4283<h2>About Bushnell Golf</h2> 4284</div> 4285</div> 4286<div class="about-content"> 4287<p>Bushnell has been the industry leader in high-performance sports optics for more than 65 years. Our guiding principle is to provide the highest quality, most reliable and affordable sports optics products on the market. And, our commitment to outstanding customer service and strong retailer partnerships is unmatched.</p> 4288<p>Bushnell boasts leading market share in all of the sports optics categories, and our products have consistently won design and performance awards. Our product lines enhance the enjoyment of every outdoor pursuit from golf, spectator sports, nature study, hunting, fishing and birding to stargazing. Indoors, binoculars bring the audience closer to the action in fast-moving sports or the fine arts at theaters and concerts.</p> 4289<p>With a constant emphasis on product innovation, Bushnell Golf developed the first combo laser/GPS device with the Hybrid, and in 2017 launched the revolutionary Pro X2 which features Slope-Switch Technology, Dual Display Technology, PinSeeker with JOLT Technology and 2nd Generation E.S.P. (Extreme. Speed. Precision.) to make it the world's most technologically advanced laser rangefinder. It is this constant dedication to innovation that has made Bushnell Golf the #1 Rangefinder in Golf.</p> 4290<span class="subheader">VISTA OUTDOOR LLC</span> 4291<p><a href="http://www.vistaoutdoor.com/" target="_blank">Vista Outdoor</a> is a leading global designer, manufacturer and marketer of consumer products in the growing outdoor sports and recreation markets. The company operates in two segments, Shooting Sports and Outdoor Products, and has more than 30 well-recognized brands that provide consumers with a range of performance-driven, high-quality and innovative products in the ammunition, firearms and outdoor accessories categories.</p> 4292<p>Vista Outdoor products are sold at leading retailers and distributors across North America and worldwide. Vista Outdoor is headquartered in Utah and has manufacturing operations and facilities in 10 U.S. States, Puerto Rico, Mexico and Canada along with international sales and sourcing operations in Canada, Europe, Australia, New Zealand and Asia.</p> 4293</div> 4294</div>�</div> 4295 </div> 4296 </div> 4297</div> 4298 4299 4300</section> 4301 </main><div id="shopify-section-bushnell-footer" class="shopify-section"><link href="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-footer-global.css?v=29849340986093782691790092425" rel="stylesheet" type="text/css" media="all" />�<style> 4302 /* ââ Typography ââ */ 4303 #shopify-section-bushnell-footer h1, #shopify-section-bushnell-footer h2, #shopify-section-bushnell-footer h3, 4304 #shopify-section-bushnell-footer h4, #shopify-section-bushnell-footer h5, #shopify-section-bushnell-footer h6 { 4305 font-family: 'Industry Bold', sans-serif; 4306 } 4307 #shopify-section-bushnell-footer p, #shopify-section-bushnell-footer li, 4308 #shopify-section-bushnell-footer span, #shopify-section-bushnell-footer a { 4309 font-family: 'Acumin Pro Medium', sans-serif; 4310 } 4311 4312 /* ââ Root ââ */ 4313 #shopify-section-bushnell-footer .bfooter { 4314 background-color: #1e252b; 4315 } 4316 4317 /* ââ Newsletter ââ */ 4318 #shopify-section-bushnell-footer .bfooter__nl-heading { font-family: 'Industry Bold', sans-serif; } 4319 #shopify-section-bushnell-footer .bfooter__nl-btn { font-family: 'Industry Bold', sans-serif; } 4320 4321 /* ââ Logo text fallback ââ */ 4322 #shopify-section-bushnell-footer .bfooter__logo { font-family: 'Industry Bold', sans-serif; } 4323 4324 /* ââ Main section padding (desktop) ââ */ 4325 #shopify-section-bushnell-footer .bfooter__main { 4326 padding-top: 64px; 4327 padding-bottom: 56px; 4328 } 4329 4330 /* ââ Desktop grid ââ */ 4331 #shopify-section-bushnell-footer .bfooter__grid { 4332 grid-template-columns: 1.6fr 1fr 1fr 1fr; 4333 gap: 40px; 4334 } 4335 4336 /* ââ Logo image width (desktop) ââ */ 4337 #shopify-section-bushnell-footer .bfooter__logo-img { width: 320px; } 4338 4339 /* ââ Tagline ââ */ 4340 #shopify-section-bushnell-footer .bfooter__tagline { 4341 font-size: 14px; 4342 color: #8899aa; 4343 } 4344 4345 /* ââ Column headings ââ */
4346 #shopify-section-bushnell-footer .bfooter__col-heading { 4347 font-family: 'Industry Bold', sans-serif; 4348 color: #fe5000; 4349 font-size: 11px; 4350 border-bottom-color: #2d3a44; 4351 } 4352 4353 /* ââ Column links ââ */ 4354 #shopify-section-bushnell-footer .bfooter__col-list a { 4355 color: #8899aa; 4356 font-size: 18px; 4357 } 4358 #shopify-section-bushnell-footer .bfooter__col-list a:hover { color: #ffffff; } 4359 4360 /* ââ Bottom bar ââ */ 4361 #shopify-section-bushnell-footer .bfooter__bottom { 4362 border-top-color: #2d3a44; 4363 padding-top: 20px; 4364 padding-bottom: 20px; 4365 } 4366 #shopify-section-bushnell-footer .bfooter__bottom-inner { 4367 flex-direction: column; 4368 align-items: center; 4369 justify-content: flex-start; 4370 } 4371 #shopify-section-bushnell-footer .bfooter__copyright { 4372 color: #dfdfdf; 4373 font-size: 16px; 4374 } 4375 #shopify-section-bushnell-footer .bfooter__policy-list a { 4376 color: #dfdfdf; 4377 font-size: 16px; 4378 } 4379 #shopify-section-bushnell-footer .bfooter__policy-list a:hover { color: #aabbcc; } 4380 #shopify-section-bushnell-footer .bfooter__policy-list li + li::before { background: #2d3a44; } 4381 #shopify-section-bushnell-footer .bfooter__copyright, 4382 #shopify-section-bushnell-footer .bfooter__policy-list { text-align: center; } 4383 4384 /* ââ Tablet ââ */ 4385 @media screen and (min-width: 750px) and (max-width: 989px) { 4386 #shopify-section-bushnell-footer .bfooter__main { 4387 padding-top: 48px; 4388 padding-bottom: 44px; 4389 } 4390 #shopify-section-bushnell-footer .bfooter__grid { 4391 grid-template-columns: 1fr 1fr; 4392 gap: 32px; 4393 } 4394 #shopify-section-bushnell-footer .bfooter__logo-img { width: 140px; } 4395 } 4396 4397 /* ââ Mobile ââ */ 4398 @media screen and (max-width: 749px) { 4399 #shopify-section-bushnell-footer .bfooter__main { 4400 padding-top: 40px; 4401 padding-bottom: 36px; 4402 } 4403 #shopify-section-bushnell-footer .bfooter__grid { 4404 grid-template-columns: 1fr; 4405 gap: 28px; 4406 } 4407 #shopify-section-bushnell-footer .bfooter__logo-img { width: 200px; } 4408 #shopify-section-bushnell-footer .bfooter__brand, 4409 #shopify-section-bushnell-footer .bfooter__col { text-align: center; } 4410 #shopify-section-bushnell-footer .bfooter__social { justify-content: center; } 4411 } 4412 4413 /* ââ Desktop alignment (min-width guard prevents overriding mobile/tablet) ââ */ 4414 @media screen and (min-width: 990px) { 4415 #shopify-section-bushnell-footer .bfooter__brand, 4416 #shopify-section-bushnell-footer .bfooter__col { text-align: left; } 4417 #shopify-section-bushnell-footer .bfooter__social { justify-content: flex-start; } 4418 } 4419 4420 /* ââ Tablet alignment ââ */ 4421 @media screen and (min-width: 750px) and (max-width: 989px) { 4422 #shopify-section-bushnell-footer .bfooter__brand, 4423 #shopify-section-bushnell-footer .bfooter__col { text-align: center; } 4424 #shopify-section-bushnell-footer .bfooter__social { justify-content: center; } 4425 } 4426 4427 /* ââ Per-block: Social & Newsletter column ââ */#bfooter-snl-social_newsletter_ntQEeN .bfooter__social-link { 4428 width: 46px; 4429 height: 46px; 4430 border-color: #2d3a44; 4431 color: #8899aa; 4432 } 4433 #bfooter-snl-social_newsletter_ntQEeN .bfooter__social-link svg { 4434 width: 24px; 4435 height: 24px; 4436 } 4437 #bfooter-snl-social_newsletter_ntQEeN .bfooter__social-link:hover { 4438 border-color: #fe5000; 4439 color: #fe5000; 4440 background-color: #1a1f24; 4441 } 4442 #bfooter-snl-social_newsletter_ntQEeN .bfooter__col-nl-label { 4443 color: #7a8ea0; 4444 font-size: 16px; 4445 } 4446 #bfooter-snl-social_newsletter_ntQEeN .bfooter__col-nl-input { 4447 background: #262f37; 4448 border-color: #2d3a44; 4449 color: #ffffff; 4450 font-size: 14px; 4451 } 4452 #bfooter-snl-social_newsletter_ntQEeN .bfooter__col-nl-btn { 4453 background: #fe5000; 4454 color: #ffffff; 4455 font-size: 14px; 4456 } 4457 #bfooter-snl-social_newsletter_ntQEeN .bfooter__col-nl-btn:hover { 4458 background: #d94500; 4459 } 4460 #bfooter-snl-social_newsletter_ntQEeN .bfooter__kl-btn { 4461 background-color: #fe5000; 4462 color: #ffffff; 4463 border: 0px solid #fe5000; 4464 border-radius: 4px; 4465 font-size: 14px; 4466 font-weight: 700; 4467 text-transform: uppercase; 4468 padding: 12px 24px; 4469 width: auto; 4470 } 4471 #bfooter-snl-social_newsletter_ntQEeN .bfooter__kl-btn:hover { 4472 background-color: #d94500; 4473 color: #ffffff; 4474 }/* Klaviyo popup trigger button â shared structural rules */ 4475 #shopify-section-bushnell-footer .bfooter__kl-btn { 4476 display: inline-block; 4477 cursor: pointer; 4478 line-height: 1; 4479 letter-spacing: 0.05em; 4480 text-decoration: none; 4481 transition: background-color 0.2s ease, color 0.2s ease; 4482 } 4483</style> 4484 4485<footer class="bfooter" id="footer" role="contentinfo"><div class="bfooter__main">
4486 <div class="bfooter__container"> 4487 <div class="bfooter__grid"><div class="bfooter__brand"><a href="/" class="bfooter__logo-img-link" aria-label="Bushnell Golf home"> 4488 <img 4489 src="//www.bushnellgolf.com/cdn/shop/files/Bushnell_logo_In_Golf.png?v=1780518942&width=320" 4490 srcset="//www.bushnellgolf.com/cdn/shop/files/Bushnell_logo_In_Golf.png?v=1780518942&width=320 1x, //www.bushnellgolf.com/cdn/shop/files/Bushnell_logo_In_Golf.png?v=1780518942&width=640 2x" 4491 alt="Bushnell Golf" 4492 class="bfooter__logo-img" 4493 width="320" 4494 height="290" 4495 loading="lazy" 4496 > 4497 </a></div><div class="bfooter__col bfooter__col--wide" ><ul class="bfooter__col-list" role="list"><li><a href="/pages/media">Media</a></li><li><a href="/collections/golf-simulators">Simulator Bundles</a></li><li><a href="/pages/contact">Contact Us</a></li><li><a href="/pages/support">Support</a></li><li><a href="https://customers.extend.com/en-US/warranty_terms/10001-misc-elec-adh-replace-1y" target="_blank" rel="noopener noreferrer">Extend Protection Plan</a></li><li><a href="/pages/military-discount">Military Discount</a></li><li><a href="/pages/product-registration">Product Registration</a></li><li><a href="/pages/returns">Returns</a></li><li><a href="/pages/shipping-delivery">Shipping & Delivery</a></li><li><a href="/pages/affiliate-program">Affiliate Program</a></li><li><a href="/pages/about-bushnell-golf">About Bushnell Golf</a></li><li><a href="/collections/previous-generations">Previous Generations</a></li><li><a href="/pages/cookie-policy">Cookie Policy</a></li></ul></div><div class="bfooter__col" id="bfooter-snl-social_newsletter_ntQEeN" ><nav class="bfooter__social" aria-label="Social media"><a href="https://www.facebook.com/BushnellGolf" class="bfooter__social-link" aria-label="Facebook" target="_blank" rel="noopener noreferrer"> 4498 <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z"/></svg> 4499 </a><a href="https://www.instagram.com/bushnellgolf/" class="bfooter__social-link" aria-label="Instagram" target="_blank" rel="noopener noreferrer"> 4500 <svg viewBox="0 0 24 24" aria-hidden="true"><rect x="2" y="2" width="20" height="20" rx="5"/><path d="M16 11.37A4 4 0 1112.63 8 4 4 0 0116 11.37z"/><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"/></svg> 4501 </a><a href="https://www.youtube.com/user/BushnellGolf/featured" class="bfooter__social-link" aria-label="YouTube" target="_blank" rel="noopener noreferrer"> 4502 <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M22.54 6.42a2.78 2.78 0 00-1.94-1.96C18.88 4 12 4 12 4s-6.88 0-8.59.46a2.78 2.78 0 00-1.95 1.96A29 29 0 001 12a29 29 0 00.46 5.58A2.78 2.78 0 003.41 19.6C5.12 20 12 20 12 20s6.88 0 8.59-.4a2.78 2.78 0 001.95-1.98A29 29 0 0023 12a29 29 0 00-.46-5.58z"/><polygon points="9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02"/></svg> 4503 </a></nav>
4503<div class="bfooter__col-nl bfooter__col-nl--spaced"><p class="bfooter__col-nl-label">Get the latest golf tips and exclusive deals.</p><button type="button" class="bfooter__kl-btn" data-kl-form="XeLsMZ">Subscribe</button></div></div></div> 4504 </div> 4505 </div> 4506 4507 <div class="bfooter__bottom"> 4508 <div class="bfooter__container"> 4509 <div class="bfooter__bottom-inner"> 4510 4511 <p class="bfooter__copyright"> 4512 © 2026 Bushnell Golf. All Rights Reserved. 4513 </p><ul class="bfooter__policy-list" role="list" aria-label="Legal links"><li><a href="https://www.revelyst.com/privacy-policy.html" target="_blank" rel="noopener noreferrer">Privacy Policy</a></li><li><a href="https://www.revelyst.com/termsconditions.html" target="_blank" rel="noopener noreferrer">Terms & Conditions</a></li><li><a href="https://www.revelyst.com/supply-chain-disclosure.html" target="_blank" rel="noopener noreferrer">California/UK Supply Chain Disclosure</a></li><li><a href="https://www.revelyst.com/do-not-sell-or-share-my-info.html" target="_blank" rel="noopener noreferrer">Do Not Sell or Share My Info</a></li><li><a href="https://www.revelyst.com/accessibility.html" target="_blank" rel="noopener noreferrer">Accessibility</a></li><li><a href="https://www.revelyst.com/patents.html" target="_blank" rel="noopener noreferrer">Patents</a></li></ul></div> 4514 </div> 4515 </div> 4516 4517</footer> 4518
4519<script> 4520 document.querySelectorAll('.bfooter__kl-btn[data-kl-form]').forEach(function(btn) { 4521 btn.addEventListener('click', function() { 4522 window._klOnsite = window._klOnsite || []; 4523 window._klOnsite.push(['openForm', btn.getAttribute('data-kl-form')]); 4524 }); 4525 }); 4526</script>
4526 4527 4528 4529</div>
4529<script>window.BN_GP_PCT = 0;</script>
4529<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell.js?v=104067278944737574051790092425" defer></script>
4529 4530
4530<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-buy-now-patch.js?v=119937881875179874721790092425" defer></script>
4530 4531
4531<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-cro-patch.js?v=107937624809619826151790092425" defer></script>
4531 4532
4532<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/bushnell-fitcheck.js?v=163253238342203939681790092425" defer></script>
4532<!-- === Bushnell Golf Body Scripts === --><!-- VenoBox lightbox -->
4532<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/venobox.min.js" defer></script>
4532
4533<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/venobox-modal.js?v=133750148818771280501790092426" defer></script>
4533<!-- AddShoppers sharing/referral pixel -->
4533<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/addshoppers-pixel.js?v=119463310293073622541790092426" defer></script>
4533<!-- AudioHook visitor ID + IP tag -->
4533<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/audiohook-img-tag.js?v=174756476640014750461790092425" defer></script>
4533<!-- IE browser detection (adds ie-browser class to <body>) -->
4533<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/ie-browser-detect.js?v=90317604072761044421790092426" defer></script>
4533<!-- Geo "Visiting from Europe?" popup --><link href="//www.bushnellgolf.com/cdn/shop/t/127/assets/country-popup.css?v=103088157342459723301790092426" rel="stylesheet" type="text/css" media="all" /> 4534 4535<div class="popup-overlay" id="popup-overlay" aria-hidden="true"></div> 4536 4537<div 4538 class="country-popup" 4539 id="pwraper" 4540 role="dialog" 4541 aria-modal="true" 4542 aria-labelledby="popup-messege-head" 4543 aria-describedby="popup-messege-body" 4544> 4545 <button class="country-popup__close" id="popup-close" type="button" aria-label="Close"> 4546 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="20" height="20" stroke-linecap="round"> 4547 <line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/> 4548 </svg> 4549 </button> 4550 4551 <img id="country-flag" class="country-popup__flag" src="" alt="" width="72" height="48" loading="lazy"> 4552 4553 <h2 class="country-popup__head" id="popup-messege-head"></h2> 4554 <p class="country-popup__body" id="popup-messege-body"></p> 4555 4556 <div class="country-popup__actions"> 4557 <a id="site-link" class="country-popup__cta" href="#" target="_blank" rel="noopener">Visit Global Store</a> 4558 <button id="popup-stay" class="country-popup__stay" type="button">Stay on US site</button> 4559 </div> 4560</div> 4561
4562<script src="//www.bushnellgolf.com/cdn/shop/t/127/assets/country-popup.js?v=150122749862362957461790092425" defer></script>
4562 4563<div id="shopify-block-AVjlXQmhCU0dqeWtte__13851707123811236908" class="shopify-block shopify-app-block">
4564<script> 4565 var Needle = window.Needle || {}; 4566 Object.defineProperty(Needle, 'scheme', { 4567 get: function() { return 'https'; }, 4568 set: function() {}, 4569 configurable: false 4570 }); 4571 window.Needle = Needle; 4572</script>
vendor: 1 bytes, line 4572
4572
4573<script 4574 async 4575 defer 4576 src="https://bushnell.needle.com/needle_service.js?ver=1" 4577></script>
4577 4578
4579<script> 4580(function() { 4581 var syncAttempts = 0; 4582 var MAX_ATTEMPTS = 30; 4583 4584 function isNeedleReady() { 4585 return typeof Needle !== 'undefined' && Needle.np; 4586 } 4587 4588 function getNeedleAttributes() { 4589 return { 4590 '_needlepin': Needle.np, 4591 '_needle_service': Needle.service, 4592 '_needle_version': Needle.version, 4593 '_needle_nps': Needle.nps || '' 4594 }; 4595 } 4596 4597 function isCartModifyUrl(url) { 4598 return url && (url.includes('/cart/add') || url.includes('/cart/change')); 4599 } 4600 4601 // Returns true on a 2xx response so callers can decide whether to retry. 4602 function syncToCartSync() { 4603 if (!isNeedleReady()) return false; 4604 var xhr = new XMLHttpRequest(); 4605 xhr.open('POST', '/cart/update.js', false); 4606 xhr.setRequestHeader('Content-Type', 'application/json'); 4607 xhr.send(JSON.stringify({ attributes: getNeedleAttributes() })); 4608 return xhr.status >= 200 && xhr.status < 300; 4609 } 4610 4611 function syncNeedlepinToCart() { 4612 syncAttempts++; 4613 if (isNeedleReady()) { 4614 fetch('/cart/update.js', { 4615 method: 'POST', 4616 headers: { 'Content-Type': 'application/json' }, 4617 body: JSON.stringify({ attributes: getNeedleAttributes() }) 4618 }); 4619 return; 4620 } 4621 if (syncAttempts < MAX_ATTEMPTS) { 4622 setTimeout(syncNeedlepinToCart, 500); 4623 } 4624 } 4625 4626 setTimeout(syncNeedlepinToCart, 300); 4627 4628 // Selector covers: 4629 // - .shopify-payment-button container (keyboard tab + Enter lands here) 4630 // - button/div descendants for pointer/touch activation 4631 // - [data-shopify="payment-button"] for headless/custom themes 4632 var EXPRESS_BTN_SELECTOR = [ 4633 '[name="buy_now"]', 4634 '.shopify-payment-button', 4635 '.shopify-payment-button button', 4636 '.shopify-payment-button__button', 4637 '[data-shopify="payment-button"]', 4638 '[data-shopify="payment-button"] button', 4639 '.dynamic-checkout__content button', 4640 '.dynamic-checkout__content [role="button"]' 4641 ].join(', '); 4642 4643 // Dedup timestamp. Only updated on confirmed XHR success so a failed sync 4644 // does not block immediate retry on the next event. 4645 var lastExpressSyncAt = 0; 4646 function maybeSyncExpress(target) { 4647 if (!isNeedleReady()) return; 4648 if (!target || !target.closest(EXPRESS_BTN_SELECTOR)) return; 4649 var now = Date.now(); 4650 if (now - lastExpressSyncAt < 500) return; 4651 if (syncToCartSync()) lastExpressSyncAt = Date.now(); 4652 } 4653 4654 // mousedown fires before click for pointer devices (mouse, trackpad, stylus). 4655 document.addEventListener('mousedown', function(e) { 4656 maybeSyncExpress(e.target); 4657 }, true); 4658 4659 // For touch: touchstart/touchmove track whether the gesture is a scroll; 4660 // touchend fires the sync only on confirmed taps (no significant move). 4661 // All three use passive: true â we never call preventDefault(). 4662 var _touchOnExpress = false; 4663 var _touchMoved = false; 4664 document.addEventListener('touchstart', function(e) { 4665 _touchMoved = false; 4666 _touchOnExpress = !!(e.target && e.target.closest(EXPRESS_BTN_SELECTOR)); 4667 }, { capture: true, passive: true }); 4668 document.addEventListener('touchmove', function() { 4669 _touchMoved = true; 4670 }, { capture: true, passive: true }); 4671 document.addEventListener('touchend', function(e) { 4672 if (_touchOnExpress && !_touchMoved) maybeSyncExpress(e.target); 4673 _touchOnExpress = false; 4674 _touchMoved = false; 4675 }, { capture: true, passive: true }); 4676 4677 var originalFetch = window.fetch; 4678 window.fetch = function(url) { 4679 var result = originalFetch.apply(this, arguments); 4680 if (typeof url === 'string' && isCartModifyUrl(url)) { 4681 result.then(function() { setTimeout(syncNeedlepinToCart, 100); }); 4682 } 4683 return result; 4684 }; 4685 4686 var originalXHROpen = XMLHttpRequest.prototype.open; 4687 XMLHttpRequest.prototype.open = function(method, url) { 4688 this._needleUrl = url; 4689 return originalXHROpen.apply(this, arguments); 4690 }; 4691 4692 var originalXHRSend = XMLHttpRequest.prototype.send; 4693 XMLHttpRequest.prototype.send = function() { 4694 var xhr = this; 4695 if (isCartModifyUrl(xhr._needleUrl)) { 4696 xhr.addEventListener('load', function() { setTimeout(syncNeedlepinToCart, 100); }); 4697 } 4698 return originalXHRSend.apply(this, arguments); 4699 }; 4700 4701 // pagehide fires only on true page unload (navigate away, tab close), 4702 // not on tab switches or screen lock. keepalive lets the request survive 4703 // after the document is torn down. 4704 window.addEventListener('pagehide', function() { 4705 if (!isNeedleReady()) return; 4706 fetch('/cart/update.js', { 4707 method: 'POST', 4708 headers: { 'Content-Type': 'application/json' }, 4709 body: JSON.stringify({ attributes: getNeedleAttributes() }), 4710 keepalive: true 4711 }).catch(function() {}); 4712 }); 4713 4714 document.addEventListener('submit', function(e) { 4715 var form = e.target; 4716 if (!form) return; 4717 var hasBuyNow = form.querySelector('[name="buy_now"]'); 4718 var isCartAction = form.action && (form.action.includes('/cart') || form.action.includes('/cart/add')); 4719 if (hasBuyNow || isCartAction) { 4720 if (isNeedleReady()) { 4721 syncToCartSync(); 4722 } else { 4723 setTimeout(syncNeedlepinToCart, 500); 4724 } 4725 } 4726 }, true); 4727 4728 document.addEventListener('click', function(e) { 4729 var addToCartBtn = e.target.closest('[name="add"], [data-add-to-cart], .add-to-cart, .product-form__submit'); 4730 if (addToCartBtn) { 4731 setTimeout(syncNeedlepinToCart, 500); 4732 return; 4733 } 4734 4735 var checkoutLink = e.target.closest('a[href*="/checkout"], a[href*="/cart"]'); 4736 if (checkoutLink && isNeedleReady()) { 4737 syncToCartSync(); 4738 return; 4739 } 4740 4741 // Catches keyboard (Enter/Space) activation of express checkout buttons. 4742 // maybeSyncExpress dedupes if mousedown/touchend already fired
4742within 500 ms. 4743 maybeSyncExpress(e.target); 4744 }, true); 4745})(); 4746</script>
4746 4747 4748 4749 4750</div>
4750<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
4750 4751</body> 4752</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.