PageSourceSearch

https://safetracksgpsshop.ca/cart

html safetracksgpsshop.ca collected 2026-10-04 10:31:42 UTC 207,772 bytes, 3,160 lines download raw bytes

1<!doctype html>
2<html class="no-js" lang="en">
3<head>
4  <meta charset="utf-8">
5  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
6  <meta name="viewport" content="width=device-width,initial-scale=1">
7  <meta name="theme-color" content="#3a3a3a">
8
9  <link rel="preconnect" href="https://cdn.shopify.com" crossorigin>
10  <link rel="preconnect" href="https://fonts.shopify.com" crossorigin>
11  <link rel="preconnect" href="https://monorail-edge.shopifysvc.com"><link rel="preload" href="//safetracksgpsshop.ca/cdn/shop/t/4/assets/theme.css?v=123821891045210198441693425564" as="style">
12  <link rel="preload" as="font" href="//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n4.3c0838aba1701047e60be6a99a1b0a40ce9b8419.woff2" type="font/woff2" crossorigin>
13  <link rel="preload" as="font" href="//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n4.3c0838aba1701047e60be6a99a1b0a40ce9b8419.woff2" type="font/woff2" crossorigin>
14  <link rel="preload" as="font" href="//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n7.2fd9bfe01586148e644724096c9d75e8c7a90e55.woff2" type="font/woff2" crossorigin>
15  <link rel="preload" href="//safetracksgpsshop.ca/cdn/shop/t/4/assets/theme.js?v=73407550851675742171693425564" as="script">
16  <link rel="preload" href="//safetracksgpsshop.ca/cdn/shop/t/4/assets/lazysizes.js?v=63098554868324070131693425564" as="script"><link rel="canonical" href="https://safetracksgpsshop.ca/cart"><link rel="shortcut icon" href="//safetracksgpsshop.ca/cdn/shop/files/green_favicon_32x32.jpg?v=1656195685" type="image/png"><title>Your Shopping Cart
17&ndash; SafeTracksGPS</title><!-- /snippets/social-meta-tags.liquid -->
18
19
20
21
22<meta property="og:site_name" content="SafeTracksGPS">
23<meta property="og:url" content="https://safetracksgpsshop.ca/cart">
24<meta property="og:title" content="Your Shopping Cart">
25<meta property="og:type" content="website">
26<meta property="og:description" content="SafeTracks GPS Personal Monitoring Solutions are used for both individual and commercial applications including; Lone Workers, Young Adults, Victims of Domestic/Family Violence, Independent Seniors, and those living with Alzheimer’s,
27Dementia, Autism, or PTSD.">
28
29<meta property="og:image" content="http://safetracksgpsshop.ca/cdn/shop/files/Green_Social_Image_1200x1200.jpg?v=1656193357">
30<meta property="og:image:secure_url" content="https://safetracksgpsshop.ca/cdn/shop/files/Green_Social_Image_1200x1200.jpg?v=1656193357">
31
32
33<meta name="twitter:card" content="summary_large_image">
34<meta name="twitter:title" content="Your Shopping Cart">
35<meta name="twitter:description" content="SafeTracks GPS Personal Monitoring Solutions are used for both individual and commercial applications including; Lone Workers, Young Adults, Victims of Domestic/Family Violence, Independent Seniors, and those living with Alzheimer’s,
36Dementia, Autism, or PTSD.">
37
38  
39<style data-shopify>
40:root {
41    --color-text: #3a3a3a;
42    --color-text-rgb: 58, 58, 58;
43    --color-body-text: #333232;
44    --color-sale-text: #ea0606;
45    --color-small-button-text-border: #3a3a3a;
46    --color-text-field: #ffffff;
47    --color-text-field-text: #000000;
48    --color-text-field-text-rgb: 0, 0, 0;
49
50    --color-btn-primary: #3a3a3a;
51    --color-btn-primary-darker: #212121;
52    --color-btn-primary-text: #ffffff;
53
54    --color-blankstate: rgba(51, 50, 50, 0.35);
55    --color-blankstate-border: rgba(51, 50, 50, 0.2);
56    --color-blankstate-background: rgba(51, 50, 50, 0.1);
57
58    --color-text-focus:#606060;
59    --color-overlay-text-focus:#e6e6e6;
60    --color-btn-primary-focus:#606060;
61    --color-btn-social-focus:#d2d2d2;
62    --color-small-button-text-border-focus:#606060;
63    --predictive-search-focus:#f2f2f2;
64
65    --color-body: #ffffff;
66    --color-bg: #ffffff;
67    --color-bg-rgb: 255, 255, 255;
68    --color-bg-alt: rgba(51, 50, 50, 0.05);
69    --color-bg-currency-selector: rgba(51, 50, 50, 0.2);
70
71    --color-overlay-title-text: #ffffff;
72    --color-image-overlay: #685858;
73    --color-image-overlay-rgb: 104, 88, 88;--opacity-image-overlay: 0.4;--hover-overlay-opacity: 0.8;
74
75    --color-border: #ebebeb;
76    --color-border-form: #cccccc;
77    --color-border-form-darker: #b3b3b3;
78
79    --svg-select-icon: url(//safetracksgpsshop.ca/cdn/shop/t/4/assets/ico-select.svg?v=29003672709104678581693425564);
80    --slick-img-url: url(//safetracksgpsshop.ca/cdn/shop/t/4/assets/ajax-loader.gif?v=41356863302472015721693425564);
81
82    --font-weight-body--bold: 700;
83    --font-weight-body--bolder: 700;
84
85    --font-stack-header: Figtree, sans-serif;
86    --font-style-header: normal;
87    --font-weight-header: 400;
88
89    --font-stack-body: Figtree, sans-serif;
90    --font-style-body: normal;
91    --font-weight-body: 400;
92
93    --font-size-header: 20;
94
95    --font-size-base: 15;
96
97    --font-h1-desktop: 27;
98    --font-h1-mobile: 25;
99    --font-h2-desktop: 15;
100    --font-h2-mobile: 14;
101    --font-h3-mobile: 15;
102    --font-h4-desktop: 13;
103    --font-h4-mobile: 12;
104    --font-h5-desktop: 11;
105    --font-h5-mobile: 10;
106    --font-h6-desktop: 10;
107    --font-h6-mobile: 9;
108
109    --font-mega-title-large-desktop: 50;
110
111    --font-rich-text-large: 17;
112    --font-rich-text-small: 13;
113
114    
115--color-video-bg: #f2f2f2;
116
117    
118    --global-color-image-loader-primary: rgba(58, 58, 58, 0.06);
119    --global-color-image-loader-secondary: rgba(58, 58, 58, 0.12);
120  }
121</style>
122
123
124  <style>*,::after,::before{box-sizing:border-box}body{margin:0}body,html{background-color:var(--color-body)}body,button{font-size:calc(var(--font-size-base) * 1px);font-family:var(--font-stack-body);font-style:var(--font-style-body);font-weight:var(--font-weight-body);color:var(--color-text);line-height:1.5}body,button{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%}.border-bottom{border-bottom:1px solid var(--color-border)}.btn--link{background-color:transparent;border:0;margin:0;color:var(--color-text);text-align:left}.text-right{text-align:right}.icon{display:inline-block;width:20px;height:20px;vertical-align:middle;fill:currentColor}.icon__fallback-text,.visually-hidden{position:absolute!important;overflow:hidden;clip:rect(0 0 0 0);height:1px;width:1px;margin:-1px;padding:0;border:0}svg.icon:not(.icon--full-color) circle,svg.icon:not(.icon--full-color) ellipse,svg.icon:not(.icon--full-color) g,svg.icon:not(.icon--full-color) line,svg.icon:not(.icon--full-color) path,svg.icon:not(.icon--full-color) polygon,svg.icon:not(.icon--full-color) polyline,svg.icon:not(.icon--full-color) rect,symbol.icon:not(.icon--full-color) circle,symbol.icon:not(.icon--full-color) ellipse,symbol.icon:not(.icon--full-color) g,symbol.icon:not(.icon--full-color) line,symbol.icon:not(.icon--full-color) path,symbol.icon:not(.icon--full-color) polygon,symbol.icon:not(.icon--full-color) polyline,symbol.icon:not(.icon--full-color) rect{fill:inherit;stroke:inherit}li{list-style:none}.list--inline{padding:0;margin:0}.list--inline>li{display:inline-block;margin-bottom:0;vertical-align:middle}a{color:var(--color-text);text-decoration:none}.h1,.h2,h1,h2{margin:0 0 17.5px;font-family:var(--font-stack-header);font-style:var(--font-style-header);font-weight:var(--font-weight-header);line-height:1.2;overflow-wrap:break-word;word-wrap:break-word}.h1 a,.h2 a,h1 a,h2 a{color:inherit;text-decoration:none;font-weight:inherit}.h1,h1{font-size:calc(((var(--font-h1-desktop))/ (var(--font-size-base))) * 1em);text-transform:none;letter-spacing:0}@media only screen and (max-width:749px){.h1,h1{font-size:calc(((var(--font-h1-mobile))/ (var(--font-size-base))) * 1em)}}.h2,h2{font-size:calc(((var(--font-h2-desktop))/ (var(--font-size-base))) * 1em);text-transform:uppercase;letter-spacing:.1em}@media only screen and (max-width:749px){.h2,h2{font-size:calc(((var(--font-h2-mobile))/ (var(--font-size-base))) * 1em)}}p{color:var(--color-body-text);margin:0 0 19.44444px}@media only screen and (max-width:749px){p{font-size:calc(((var(--font-size-base) - 1)/ (var(--font-size-base))) * 1em)}}p:last-child{margin-bottom:0}@media only screen and (max-width:749px){.small--hide{display:none!important}}.grid{list-style:none;margin:0;padding:0;margin-left:-30px}.grid::after{content:'';display:table;clear:both}@media only screen and (max-width:749px){.grid{margin-left:-22px}}.grid::after{content:'';display:table;clear:both}.grid--no-gutters{margin-left:0}.grid--no-gutters .grid__item{padding-left:0}.grid--table{display:table;table-layout:fixed;width:100%}.grid--table>.grid__item{float:none;display:table-cell;vertical-align:middle}.grid__item{float:left;padding-left:30px;width:100%}@media only screen and (max-width:749px){.grid__item{padding-left:22px}}.grid__item[class*="--push"]{position:relative}@media only screen and (min-width:750px){.medium-up--one-quarter{width:25%}.medium-up--push-one-third{width:33.33%}.medium-up--one-half{width:50%}.medium-up--push-one-third{left:33.33%;position:relative}}.site-header{position:relative;background-color:var(--color-body)}@media only screen and (max-width:749px){.site-header{border-bottom:1px solid var(--color-border)}}@media only screen and (min-width:750px){.site-header{padding:0 55px}.site-header.logo--center{padding-top:30px}}.site-header__logo{margin:15px 0}.logo-align--center .site-header__logo{text-align:center;margin:0 auto}@media only screen and (max-width:749px){.logo-align--center .site-header__logo{text-align:left;margin:15px 0}}@media only screen and (max-width:749px){.site-header__logo{padding-left:22px;text-align:left}.site-header__logo img{margin:0}}.site-header__logo-link{display:inline-block;word-break:break-word}@media only screen and (min-width:750px){.logo-align--center .site-header__logo-link{margin:0 auto}}.site-header__logo-image{display:block}@media only screen and (min-width:750px){.site-header__logo-image{margin:0 auto}}.site-header__logo-image img{width:100%}.site-header__logo-image--centered img{margin:0 auto}.site-header__logo img{display:block}.site-header__icons{position:relative;white-space:nowrap}@media only screen and (max-width:749px){.site-header__icons{width:auto;padding-right:13px}.site-header__icons .btn--link,.site-header__icons .site-header__cart{font-size:calc(((var(--font-size-base))/ (var(--font-size-base))) * 1em)}}.site-header__icons-wrapper{position:relative;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-o-align-items:center;align-items:center;
124-webkit-justify-content:flex-end;-ms-justify-content:flex-end;justify-content:flex-end}.site-header__account,.site-header__cart,.site-header__search{position:relative}.site-header__search.site-header__icon{display:none}@media only screen and (min-width:1400px){.site-header__search.site-header__icon{display:block}}.site-header__search-toggle{display:block}@media only screen and (min-width:750px){.site-header__account,.site-header__cart{padding:10px 11px}}.site-header__cart-title,.site-header__search-title{position:absolute!important;overflow:hidden;clip:rect(0 0 0 0);height:1px;width:1px;margin:-1px;padding:0;border:0;display:block;vertical-align:middle}.site-header__cart-title{margin-right:3px}.site-header__cart-count{display:flex;align-items:center;justify-content:center;position:absolute;right:.4rem;top:.2rem;font-weight:700;background-color:var(--color-btn-primary);color:var(--color-btn-primary-text);border-radius:50%;min-width:1em;height:1em}.site-header__cart-count span{font-family:HelveticaNeue,"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:calc(11em / 16);line-height:1}@media only screen and (max-width:749px){.site-header__cart-count{top:calc(7em / 16);right:0;border-radius:50%;min-width:calc(19em / 16);height:calc(19em / 16)}}@media only screen and (max-width:749px){.site-header__cart-count span{padding:.25em calc(6em / 16);font-size:12px}}.site-header__menu{display:none}@media only screen and (max-width:749px){.site-header__icon{display:inline-block;vertical-align:middle;padding:10px 11px;margin:0}}@media only screen and (min-width:750px){.site-header__icon .icon-search{margin-right:3px}}.announcement-bar{z-index:10;position:relative;text-align:center;border-bottom:1px solid transparent;padding:2px}.announcement-bar__link{display:block}.announcement-bar__message{display:block;padding:11px 22px;font-size:calc(((16)/ (var(--font-size-base))) * 1em);font-weight:var(--font-weight-header)}@media only screen and (min-width:750px){.announcement-bar__message{padding-left:55px;padding-right:55px}}.site-nav{position:relative;padding:0;text-align:center;margin:25px 0}.site-nav a{padding:3px 10px}.site-nav__link{display:block;white-space:nowrap}.site-nav--centered .site-nav__link{padding-top:0}.site-nav__link .icon-chevron-down{width:calc(8em / 16);height:calc(8em / 16);margin-left:.5rem}.site-nav__label{border-bottom:1px solid transparent}.site-nav__link--active .site-nav__label{border-bottom-color:var(--color-text)}.site-nav__link--button{border:none;background-color:transparent;padding:3px 10px}.site-header__mobile-nav{z-index:11;position:relative;background-color:var(--color-body)}@media only screen and (max-width:749px){.site-header__mobile-nav{display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;-ms-flex-align:center;-webkit-align-items:center;-moz-align-items:center;-ms-align-items:center;-o-align-items:center;align-items:center}}.mobile-nav--open .icon-close{display:none}.main-content{opacity:0}.main-content .shopify-section{display:none}.main-content .shopify-section:first-child{display:inherit}.critical-hidden{display:none}</style>
125
126  
126<script>
127    window.performance.mark('debut:theme_stylesheet_loaded.start');
128
129    function onLoadStylesheet() {
130      performance.mark('debut:theme_stylesheet_loaded.end');
131      performance.measure('debut:theme_stylesheet_loaded', 'debut:theme_stylesheet_loaded.start', 'debut:theme_stylesheet_loaded.end');
132
133      var url = "//safetracksgpsshop.ca/cdn/shop/t/4/assets/theme.css?v=123821891045210198441693425564";
134      var link = document.querySelector('link[href="' + url + '"]');
135      link.loaded = true;
136      link.dispatchEvent(new Event('load'));
137    }
138  </script>
138
139
140  <link rel="stylesheet" href="//safetracksgpsshop.ca/cdn/shop/t/4/assets/theme.css?v=123821891045210198441693425564" type="text/css" media="print" onload="this.media='all';onLoadStylesheet()">
141
142  <style>
143    @font-face {
144  font-family: Figtree;
145  font-weight: 400;
146  font-style: normal;
147  font-display: swap;
148  src: url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n4.3c0838aba1701047e60be6a99a1b0a40ce9b8419.woff2") format("woff2"),
149       url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n4.c0575d1db21fc3821f17fd6617d3dee552312137.woff") format("woff");
150}
151
152    @font-face {
153  font-family: Figtree;
154  font-weight: 400;
155  font-style: normal;
156  font-display: swap;
157  src: url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n4.3c0838aba1701047e60be6a99a1b0a40ce9b8419.woff2") format("woff2"),
158       url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n4.c0575d1db21fc3821f17fd6617d3dee552312137.woff") format("woff");
159}
160
161    @font-face {
162  font-family: Figtree;
163  font-weight: 700;
164  font-style: normal;
165  font-display: swap;
166  src: url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n7.2fd9bfe01586148e644724096c9d75e8c7a90e55.woff2") format("woff2"),
167       url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n7.ea05de92d862f9594794ab281c4c3a67501ef5fc.woff") format("woff");
168}
169
170    @font-face {
171  font-family: Figtree;
172  font-weight: 700;
173  font-style: normal;
174  font-display: swap;
175  src: url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n7.2fd9bfe01586148e644724096c9d75e8c7a90e55.woff2") format("woff2"),
176       url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_n7.ea05de92d862f9594794ab281c4c3a67501ef5fc.woff") format("woff");
177}
178
179    @font-face {
180  font-family: Figtree;
181  font-weight: 400;
182  font-style: italic;
183  font-display: swap;
184  src: url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_i4.89f7a4275c064845c304a4cf8a4a586060656db2.woff2") format("woff2"),
185       url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_i4.6f955aaaafc55a22ffc1f32ecf3756859a5ad3e2.woff") format("woff");
186}
187
188    @font-face {
189  font-family: Figtree;
190  font-weight: 700;
191  font-style: italic;
192  font-display: swap;
193  src: url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_i7.06add7096a6f2ab742e09ec7e498115904eda1fe.woff2") format("woff2"),
194       url("//safetracksgpsshop.ca/cdn/fonts/figtree/figtree_i7.ee584b5fcaccdbb5518c0228158941f8df81b101.woff") format("woff");
195}
196
197  </style>
198
199  
199<script>
200    var theme = {
201      breakpoints: {
202        medium: 750,
203        large: 990,
204        widescreen: 1400
205      },
206      strings: {
207        addToCart: "Add to cart",
208        soldOut: "Sold out",
209        unavailable: "Unavailable",
210        regularPrice: "Regular price",
211        salePrice: "Sale price",
212        sale: "Sale",
213        fromLowestPrice: "from [price]",
214        vendor: "Vendor",
215        showMore: "Show More",
216        showLess: "Show Less",
217        searchFor: "Search for",
218        addressError: "Error looking up that address",
219        addressNoResults: "No results for that address",
220        addressQueryLimit: "You have exceeded the Google API usage limit. Consider upgrading to a \u003ca href=\"https:\/\/developers.google.com\/maps\/premium\/usage-limits\"\u003ePremium Plan\u003c\/a\u003e.",
221        authError: "There was a problem authenticating your Google Maps account.",
222        newWindow: "Opens in a new window.",
223        external: "Opens external website.",
224        newWindowExternal: "Opens external website in a new window.",
225        removeLabel: "Remove [product]",
226        update: "Update",
227        quantity: "Quantity",
228        discountedTotal: "Discounted total",
229        regularTotal: "Regular total",
230        priceColumn: "See Price column for discount details.",
231        quantityMinimumMessage: "Quantity must be 1 or more",
232        cartError: "There was an error while updating your cart. Please try again.",
233        removedItemMessage: "Removed \u003cspan class=\"cart__removed-product-details\"\u003e([quantity]) [link]\u003c\/span\u003e from your cart.",
234        unitPrice: "Unit price",
235        unitPriceSeparator: "per",
236        oneCartCount: "1 item",
237        otherCartCount: "[count] items",
238        quantityLabel: "Quantity: [count]",
239        products: "Products",
240        loading: "Loading",
241        number_of_results: "[result_number] of [results_count]",
242        number_of_results_found: "[results_count] results found",
243        one_result_found: "1 result found"
244      },
245      moneyFormat: "${{amount}}",
246      moneyFormatWithCurrency: "${{amount}} CAD",
247      settings: {
248        predictiveSearchEnabled: true,
249        predictiveSearchShowPrice: false,
250        predictiveSearchShowVendor: false
251      },
252      stylesheet: "//safetracksgpsshop.ca/cdn/shop/t/4/assets/theme.css?v=123821891045210198441693425564"
253    }
254
255    document.documentElement.className = document.documentElement.className.replace('no-js', 'js');
256  </script>
256<script src="//safetracksgpsshop.ca/cdn/shop/t/4/assets/theme.js?v=73407550851675742171693425564" defer="defer"></script>
256
257  
257<script src="//safetracksgpsshop.ca/cdn/shop/t/4/assets/lazysizes.js?v=63098554868324070131693425564" async="async"></script>
257
258
259  
259<script type="text/javascript">
260    if (window.MSInputMethodContext && document.documentMode) {
261      var scripts = document.getElementsByTagName('script')[0];
262      var polyfill = document.createElement("script");
263      polyfill.defer = true;
264      polyfill.src = "//safetracksgpsshop.ca/cdn/shop/t/4/assets/ie11CustomProperties.min.js?v=146208399201472936201693425564";
265
266      scripts.parentNode.insertBefore(polyfill, scripts);
267    }
268  </script>
268
269
270  
270<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
270<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/26810187954/digital_wallets/dialog">
271<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
271<script async="async" src="/checkouts/internal/preloads.js?locale=en-US"></script>
271
272<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
273<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&shop_id=26810187954" crossorigin="anonymous"></script>
vendor: 1 bytes, line 273
273
274<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":26810187954,"countryCode":"CA","currencyCode":"CAD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/26810187954","merchantName":"SafeTracksGPS","requiredBillingContactFields":["postalAddress","email"],"requiredShippingContactFields":["postalAddress","email"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","interac","jcb"],"total":{"type":"pending","label":"SafeTracksGPS","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 274
274
275<script id="shopify-features" type="application/json">{"accessToken":"53ef6ab57106ad9d432ff5264afe3be2","betas":["rich-media-storefront-analytics"],"domain":"safetracksgpsshop.ca","predictiveSearch":true,"shopId":26810187954,"locale":"en"}</script>
vendor: 1 bytes, line 275
275
276<script>var Shopify = Shopify || {};
277Shopify.shop = "safetracksgps.myshopify.com";
278Shopify.locale = "en";
279Shopify.currency = {"active":"CAD","rate":"1.0"};
280Shopify.country = "US";
281Shopify.theme = {"name":"2023 Edited Debut|Bold","id":132753686706,"schema_name":"Debut","schema_version":"17.5.2","theme_store_id":796,"role":"main"};
282Shopify.theme.handle = "null";
283Shopify.theme.style = {"id":null,"handle":null};
284Shopify.cdnHost = "safetracksgpsshop.ca/cdn";
285Shopify.routes = Shopify.routes || {};
286Shopify.routes.root = "/";
287Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js";
288Shopify.SignInWithShop = Shopify.SignInWithShop || {};
289Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {};
290Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 290
290
291<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 291
291
292<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 292
292
293<script>
294  window.ShopifyPay = window.ShopifyPay || {};
295  window.ShopifyPay.apiHost = "shop.app\/pay";
296  window.ShopifyPay.redirectState = null;
297</script>
vendor: 1 bytes, line 297
297
298<script>
299  window.Shopify = window.Shopify || {};
300  window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {};
301  window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 };
302  window.Shopify.SignInWithShop.eligible = true;
303</script>
vendor: 1 bytes, line 303
303
304<script id="shop-js-analytics" type="application/json">{"pageType":"cart"}</script>
vendor: 1 bytes, line 304
304
305<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 305
305
306<script type="module">
307  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js");
308
309  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
310
311</script>
vendor: 1 bytes, line 311
311
312<script>
313  window.Shopify = window.Shopify || {};
314  if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {};
315  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"]};
316</script>
vendor: 1 bytes, line 316
316
317<script>(function() {
318  var isLoaded = false;
319  function asyncLoad() {
320    if (isLoaded) return;
321    isLoaded = true;
322    var urls = ["https:\/\/upsellproductaddons.com\/main.bundle.5d7b3c7054f5716ec06e.js?shop=safetracksgps.myshopify.com","https:\/\/tnc-app.herokuapp.com\/get_script\/508db1b228a111edb36466ad3c87fb4d.js?v=975563\u0026shop=safetracksgps.myshopify.com","https:\/\/cdn.s3.pop-convert.com\/pcjs.production.min.js?unique_id=safetracksgps.myshopify.com\u0026shop=safetracksgps.myshopify.com","https:\/\/script.pop-convert.com\/new-micro\/production.pc.min.js?unique_id=safetracksgps.myshopify.com\u0026shop=safetracksgps.myshopify.com"];
323    for (var i = 0; i < urls.length; i++) {
324      var s = document.createElement('script');
325      s.type = 'text/javascript';
326      s.async = true;
327      s.src = urls[i];
328      var x = document.getElementsByTagName('script')[0];
329      x.parentNode.insertBefore(s, x);
330    }
331  };
332  if(window.attachEvent) {
333    window.attachEvent('onload', asyncLoad);
334  } else {
335    window.addEventListener('load', asyncLoad, false);
336  }
337})();</script>
vendor: 1 bytes, line 337
337
338<script id="__st">var __st={"a":26810187954,"offset":-21600,"reqid":"df0d4841-ad02-4afd-b351-5af70fa4a03a-1791109901","pageurl":"safetracksgpsshop.ca\/cart","u":"993263a622fa","p":"cart"};</script>
vendor: 1 bytes, line 338
338
339<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 339
339
340<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 340
340
341<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//safetracksgpsshop.ca/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 341
341
342<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 = "//safetracksgpsshop.ca/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>
342<script crossorigin="anonymous" defer="defer" src="//safetracksgpsshop.ca/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 342
342
343<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 343
343
344<script>
345  window.Shopify = window.Shopify || {};
346  window.Shopify.MCP = window.Shopify.MCP || {};
347  window.Shopify.MCP.enabled = true;
348  window.Shopify.MCP.shop = "safetracksgps.myshopify.com";
349  window.Shopify.MCP.mcpEndpoint = "https:\/\/safetracksgpsshop.ca\/api\/mcp";
350  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"]}}];
351</script>
vendor: 1 bytes, line 351
351
352<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("\/\/safetracksgpsshop.ca\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})();
353</script>
vendor: 1 bytes, line 353
353
354<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://safetracksgpsshop.ca/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}};
355</script>
vendor: 1 bytes, line 355
355
356<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
357  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);
358</script>
vendor: 1 bytes, line 358
358
359<script>
360  function portableWalletsCleanup(e){e&&e.src&&console.error("Failed to load portable wallets script "+e.src);var t=document.querySelectorAll("shopify-accelerated-checkout .shopify-payment-button__skeleton, shopify-accelerated-checkout-cart .wallet-cart-button__skeleton"),e=document.getElementById("shopify-buyer-consent");for(let e=0;e<t.length;e++)t[e].remove();e&&e.remove()}function portableWalletsNotLoadedAsModule(e){e instanceof ErrorEvent&&"string"==typeof e.message&&e.message.includes("import.meta")&&"string"==typeof e.filename&&e.filename.includes("portable-wallets")&&(window.removeEventListener("error",portableWalletsNotLoadedAsModule),window.Shopify.PaymentButton.failedToLoad=e,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",window.Shopify.PaymentButton.init):window.Shopify.PaymentButton.init())}window.addEventListener("error",portableWalletsNotLoadedAsModule);
361</script>
361
362
363<script type="module" src="https://safetracksgpsshop.ca/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js" onError="portableWalletsCleanup(this)" crossorigin="anonymous"></script>
vendor: 1 bytes, line 363
363
364<script nomodule>
365  document.addEventListener("DOMContentLoaded", portableWalletsCleanup);
366</script>
366
367
368<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://safetracksgpsshop.ca/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous">
369<style id="shopify-accelerated-checkout-cart">
370        #shopify-buyer-consent {
371  margin-top: 1em;
372  display: inline-block;
373  width: 100%;
374}
375
376#shopify-buyer-consent.hidden {
377  display: none;
378}
379
380#shopify-subscription-policy-button {
381  background: none;
382  border: none;
383  padding: 0;
384  text-decoration: underline;
385  font-size: inherit;
386  cursor: pointer;
387}
388
389#shopify-subscription-policy-button::before {
390  box-shadow: none;
391}
392
393      </style>
394
395<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
395
396  
396<script src="//safetracksgpsshop.ca/cdn/shop/t/4/assets/bsub.js?v=158520562351594542841693425564" type="text/javascript"></script>
396
397<link href="//safetracksgpsshop.ca/cdn/shop/t/4/assets/bsub.scss.css?v=163461136494486031931693425683" rel="stylesheet" type="text/css" media="all" />
398<script>
399    // empty script tag to work around a platform issue where attributes of first script in file are scrubbed
400</script>
400
401
402<script id="bold-subscriptions-script" type="text/javascript">
403    window.BOLD = window.BOLD || {};
404    window.BOLD.subscriptions = window.BOLD.subscriptions || {};
405    window.BOLD.subscriptions.config = window.BOLD.subscriptions.config || {};
406    window.BOLD.subscriptions.config.legacyAssetsLoaded = true;
407
408    if (!window.BOLD.subscriptions.config.isAppEmbedEnabled) {
409        window.BOLD.subscriptions.classes = window.BOLD.subscriptions.classes || {};
410        window.BOLD.subscriptions.patches = window.BOLD.subscriptions.patches || {};
411        window.BOLD.subscriptions.patches.maxCheckoutRetries = window.BOLD.subscriptions.patches.maxCheckoutRetries || 200;
412        window.BOLD.subscriptions.patches.currentCheckoutRetries = window.BOLD.subscriptions.patches.currentCheckoutRetries || 0;
413        window.BOLD.subscriptions.patches.maxCashierPatchAttempts = window.BOLD.subscriptions.patches.maxCashierPatchAttempts || 200;
414        window.BOLD.subscriptions.patches.currentCashierPatchAttempts = window.BOLD.subscriptions.patches.currentCashierPatchAttempts || 0;
415        window.BOLD.subscriptions.config.platform = 'shopify';
416        window.BOLD.subscriptions.config.shopDomain = 'safetracksgps.myshopify.com';
417        window.BOLD.subscriptions.config.customDomain = 'safetracksgpsshop.ca';
418        window.BOLD.subscriptions.config.shopIdentifier = '26810187954';
419                    window.BOLD.subscriptions.config.appUrl = 'https://sub.boldapps.net';
420        window.BOLD.subscriptions.config.currencyCode = 'CAD';
421        window.BOLD.subscriptions.config.checkoutType = 'shopify';
422        window.BOLD.subscriptions.config.currencyFormat = "$\u0026#123;\u0026#123;amount}}";
423        window.BOLD.subscriptions.config.shopCurrencies = [{"id":1894,"currency":"CAD","currency_format":"$\u0026#123;\u0026#123;amount}}","created_at":"2021-03-17 20:40:07","updated_at":"2021-03-17 20:40:07"}];
424        window.BOLD.subscriptions.config.shopSettings = {"allow_msp_cancellation":false,"allow_msp_prepaid_renewal":true,"customer_can_pause_subscription":false,"customer_can_change_next_order_date":false,"customer_can_change_order_frequency":true,"customer_can_create_an_additional_order":false,"customer_can_use_passwordless_login":false,"customer_passwordless_login_redirect":false,"customer_can_add_products_to_existing_subscriptions":false,"show_currency_code":true,"stored_payment_method_policy":"required","customer_portal_path":null};
425        window.BOLD.subscriptions.config.customerLoginPath = null;
426
427        // TODO: Remove the isset with BS2-4659_improve_large_group_selection
428                    window.BOLD.subscriptions.config.loadSubscriptionGroupFrom = 'default';
429                                window.BOLD.subscriptions.config.loadSubscriptionGroupFromTypes = {"DEFAULT":"default","BSUB_API":"bsub_api"};
430                    window.BOLD.subscriptions.config.cashierPluginOnlyMode = window.BOLD.subscriptions.config.cashierPluginOnlyMode || false;
431        if (window.BOLD.subscriptions.config.waitForCheckoutLoader === undefined) {
432            window.BOLD.subscriptions.config.waitForCheckoutLoader = true;
433        }
434
435        window.BOLD.subscriptions.config.addToCartFormSelectors = window.BOLD.subscriptions.config.addToCartFormSelectors || [];
436        window.BOLD.subscriptions.config.addToCartButtonSelectors = window.BOLD.subscriptions.config.addToCartButtonSelectors || [];
437        window.BOLD.subscriptions.config.widgetInsertBeforeSelectors = window.BOLD.subscriptions.config.widgetInsertBeforeSelectors || [];
438        window.BOLD.subscriptions.config.quickAddToCartButtonSelectors = window.BOLD.subscriptions.config.quickAddToCartButtonSelectors || [];
439        window.BOLD.subscriptions.config.cartElementSelectors = window.BOLD.subscriptions.config.cartElementSelectors || [];
440        window.BOLD.subscriptions.config.cartTotalElementSelectors = window.BOLD.subscriptions.config.cartTotalElementSelectors || [];
441        window.BOLD.subscriptions.config.lineItemSelectors = window.BOLD.subscriptions.config.lineItemSelectors || [];
442        window.BOLD.subscriptions.config.lineItemNameSelectors = window.BOLD.subscriptions.config.lineItemNameSelectors || [];
443        window.BOLD.subscriptions.config.checkoutButtonSelectors = window.BOLD.subscriptions.config.checkoutButtonSelectors || [];
444
445        window.BOLD.subscriptions.config.featureFlags = window.BOLD.subscriptions.config.featureFlags || ["BE-1625-create-contract-without-delivery-method","BE-1563-direct-checkout-url","BS2-4293-skip-tx-fee-eq-zero","BE-1393-relocate-prepaid-metadata","BE-1614-use-seletedDate-for-offset","BE-1511-use-bold-platform-prepaid","BE-1642-bold-checkout-line-item-price"];
446        window.BOLD.subscriptions.config.subscriptionProcessingFrequency = '60';
447        window.BOLD.subscriptions.config.requireMSPInitialLoadingMessage = true;
448        window.BOLD.subscriptions.data = window.BOLD.subscriptions.data || {};
449
450        // Interval text markup template
451        window.BOLD.subscriptions.config.lineItemPropertyListSelectors = window.BOLD.subscriptions.config.lineItemPropertyListSelectors || [];
452        window.BOLD.subscriptions.config.lineItemPropertyListSelectors.push('dl.definitionList');
453        window.BOLD.subscriptions.config.lineItemPropertyListTemplate = window.BOLD.subscriptions.config.lineItemPropertyListTemplate || '<dl class="definitionList"></dl>';
454        window.BOLD.subscriptions.config.lineItemPropertyTemplate = window.BOLD.subscriptions.config.lineItemPropertyTemplate || '<dt class="definitionList-key">\:</dt><dd class="definitionList-value">\</dd>';
455
456        // Discount text markup template
457        window.BOLD.subscriptions.config.discountItemTemplate = window.BOLD.subscriptions.config.discountItemTemplate || '<div class="bold-subscriptions-discount"><div class="bold-subscriptions-discount__details">\</div><div class="bold-subscriptions-discount__total">\</div></div>';
458
459
460        // Constants in XMLHttpRequest are not reliable, so we will create our own
461        // reference: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState
462        window.BOLD.subscriptions.config.XMLHttpRequest = {
463            UNSENT:0,            // Client has been created. open() not called yet.
464            OPENED: 1,           // open() has been called.
465            HEADERS_RECEIVED: 2, // send() has been called, and headers and status are available.
466            LOADING: 3,          // Downloading; responseText holds partial data.
467            DONE: 4              // The operation is complete.
468        };
469
470        window.BOLD.subscriptions.config.assetBaseUrl = 'https://sub.boldapps.net';
471        if (window.localStorage && window.localStorage.getItem('boldSubscriptionsAssetBaseUrl')) {
472            window.BOLD.subscriptions.config.assetBaseUrl = window.localStorage.getItem('boldSubscriptionsAssetBaseUrl')
473        }
474
475        window.BOLD.subscriptions.data.subscriptionGroups = [];
476        if (localStorage && localStorage.getItem('boldSubscriptionsSubscriptionGroups')) {
477            window.BOLD.subscriptions.data.subscriptionGroups = JSON.parse(localStorage.getItem('boldSubscriptionsSubscriptionGroups'));
478        } else {
479            window.BOLD.subscriptions.data.subscriptionGroups = [{"id":12314,"billing_rules":[{"id":24826,"subscription_group_id":12314,"interval_name":"Monthly ","billing_rule":"FREQ=MONTHLY","custom_billing_rule":""}],"is_subscription_only":false,"allow_prepaid":false,"is_prepaid_only":false,"should_continue_prepaid":true,"continue_prepaid_type":"as_prepaid","prepaid_durations":[{"id":12255,"subscription_group_id":12314,"total_duration":1,"discount_type":"percentage","discount_value":0}],"selection_options":[{"platform_entity_id":"7274582048946"},{"platform_entity_id":"7274445897906"}],"discount_type":"no_discount","percent_discount":0,"fixed_discount":0,"can_add_to_cart":true},{"id":29902,"billing_rules":[{"id":67129,"subscription_group_id":29902,"interval_name":"Monthly ","billing_rule":"FREQ=MONTHLY","custom_billing_rule":""}],"is_subscription_only":false,"allow_prepaid":false,"is_prepaid_only":false,"should_continue_prepaid":true,"continue_prepaid_type":"as_prepaid","prepaid_durations":[{"id":29848,"subscription_group_id":29902,"total_duration":1,"discount_type":"percentage","discount_value":0}],"selection_options":[{"platform_entity_id":"6573461307570"},{"platform_entity_id":"7274445897906"},{"platform_entity_id":"4773868437682"}],"discount_type":"no_discount","percent_discount":0,"fixed_discount":0,"can_add_to_cart":true}];
480        }
481
482        window.BOLD.subscriptions.isFeatureFlagEnabled = function (featureFlag) {
483            for (var i = 0; i < window.BOLD.subscriptions.config.featureFlags.length; i++) {
484                if (window.BOLD.subscriptions.config.featureFlags[i] === featureFlag){
485                    return true;
486                }
487            }
488            return false;
489        }
490
491        window.BOLD.subscriptions.logger = {
492            tag: "bold_subscriptions",
493            // the bold subscriptions log level
494            // 0 - errors (default)
495            // 1 - warnings + errors
496            // 2 - info + warnings + errors
497            // use window.localStorage.setItem('boldSubscriptionsLogLevel', x) to set the log level
498            levels: {
499                ERROR: 0,
500                WARN: 1,
501                INFO: 2,
502            },
503            level: parseInt((window.localStorage && window.localStorage.getItem('boldSubscriptionsLogLevel')) || "0", 10),
504            _log: function(callArgs, level) {
505                if (!window.console) {
506                    return null;
507                }
508
509                if (window.BOLD.subscriptions.logger.level < level) {
510                    return;
511                }
512
513                var params = Array.prototype.slice.call(callArgs);
514                params.unshift(window.BOLD.subscriptions.logger.tag);
515
516                switch (level) {
517                    case window.BOLD.subscriptions.logger.levels.INFO:
518                        console.info.apply(null, params);
519                        return;
520                    case window.BOLD.subscriptions.logger.levels.WARN:
521                        console.warn.apply(null, params);
522                        return;
523                    case window.BOLD.subscriptions.logger.levels.ERROR:
524                        console.error.apply(null, params);
525                        return;
526                    default:
527                        console.log.apply(null, params);
528                        return;
529                }
530            },
531            info: function() {
532                window.BOLD.subscriptions.logger._log(arguments, window.BOLD.subscriptions.logger.levels.INFO);
533            },
534            warn: function() {
535                window.BOLD.subscriptions.logger._log(arguments, window.BOLD.subscriptions.logger.levels.WARN);
536            },
537            error: function() {
538                window.BOLD.subscriptions.logger._log(arguments, window.BOLD.subscriptions.logger.levels.ERROR);
539            }
540        }
541
542        window.BOLD.subscriptions.shouldLoadSubscriptionGroupFromAPI = function() {
543            return window.BOLD.subscriptions.config.loadSubscriptionGroupFrom === window.BOLD.subscriptions.config.loadSubscriptionGroupFromTypes['BSUB_API'];
544        }
545
546        window.BOLD.subscriptions.getSubscriptionGroupFromProductId = function (productId) {
547            var data = window.BOLD.subscriptions.data;
548            var foundGroup = null;
549            for (var i = 0; i < data.subscriptionGroups.length; i += 1) {
550                var subscriptionGroup = data.subscriptionGroups[i];
551                for (var j = 0; j < subscriptionGroup.selection_options.length; j += 1) {
552                    var selectionOption = subscriptionGroup.selection_options[j];
553                    if (selectionOption.platform_entity_id === productId.toString()) {
554                        foundGroup = subscriptionGroup;
555                        break;
556                    }
557                }
558                if (foundGroup) {
559                    break;
560                }
561            }
562            return foundGroup;
563        };
564
565        window.BOLD.subscriptions.getSubscriptionGroupById = function(subGroupId) {
566            var subscriptionGroups = window.BOLD.subscriptions.data.subscriptionGroups;
567
568            for (var i = 0; i < subscriptionGroups.length; i += 1) {
569                var subGroup = subscriptionGroups[i];
570                if (subGroup.id === subGroupId) {
571                    return subGroup;
572                }
573            }
574
575            return null;
576        };
577
578        window.BOLD.subscriptions.addSubscriptionGroup = function (subscriptionGroup) {
579            if(!window.BOLD.subscriptions.getSubscriptionGroupById(subscriptionGroup.id))
580            {
581                window.BOLD.subscriptions.data.subscriptionGroups.push(subscriptionGroup);
582            }
583        }
584
585        window.BOLD.subscriptions.getSubscriptionGroupPrepaidDurationById = function(subscriptionGroupId, prepaidDurationId) {
586            var subscriptionGroup = window.BOLD.subscriptions.getSubscriptionGroupById(subscriptionGroupId);
587
588            if (
589                !subscriptionGroup
590                || !subscriptionGroup.prepaid_durations
591                || !subscriptionGroup.prepaid_durations.length
592            ) {
593                return null;
594            }
595
596            for (var i = 0; i < subscriptionGroup.prepaid_durations.length; i++) {
597                var prepaidDuration = subscriptionGroup.prepaid_durations[i];
598                if (prepaidDuration.id === prepaidDurationId) {
599                    return prepaidDuration;
600                }
601            }
602
603            return null;
604        }
605
606        window.BOLD.subscriptions.getSubscriptionGroupBillingRuleById = function(subGroup, billingRuleId) {
607            for (var i = 0; i < subGroup.billing_rules.length; i += 1) {
608                var billingRule = subGroup.billing_rules[i];
609                if (billingRule.id === billingRuleId) {
610                    return billingRule;
611                }
612            }
613
614            return null;
615        };
616
617        window.BOLD.subscriptions.toggleDisabledAddToCartButtons = function(d) {
618            var addToCartForms = document.querySelectorAll(window.BOLD.subscriptions.config.addToCartFormSelectors.join(','));
619            var disable = !!d;
620            for (var i = 0; i < addToCartForms.length; i++) {
621                var addToCartForm = addToCartForms[i];
622                var productId = window.BOLD.subscriptions.getProductIdFromAddToCartForm(
622addToCartForm);
623                var subscriptionGroup = window.BOLD.subscriptions.getSubscriptionGroupFromProductId(productId);
624
625                if(window.BOLD.subscriptions.isFeatureFlagEnabled('BS2-4659_improve_large_group_selection') ) {
626                    if (subscriptionGroup || window.BOLD.subscriptions.shouldLoadSubscriptionGroupFromAPI()) {
627                        var addToCartButtons = addToCartForm.querySelectorAll(window.BOLD.subscriptions.config.addToCartButtonSelectors.join(','));
628                        for (var j = 0; j < addToCartButtons.length; j++) {
629                            var addToCartButton = addToCartButtons[j];
630                            var toggleAction = disable ?  addToCartButton.setAttribute : addToCartButton.removeAttribute;
631
632                            addToCartButton.disabled = disable;
633                            toggleAction.call(addToCartButton, 'data-disabled-by-subscriptions', disable);
634                        }
635                    }
636                } else {
637                    if (subscriptionGroup) {
638                        var addToCartButtons = addToCartForm.querySelectorAll(window.BOLD.subscriptions.config.addToCartButtonSelectors.join(','));
639                        for (var j = 0; j < addToCartButtons.length; j++) {
640                            var addToCartButton = addToCartButtons[j];
641                            var toggleAction = disable ?  addToCartButton.setAttribute : addToCartButton.removeAttribute;
642
643                            addToCartButton.disabled = disable;
644                            toggleAction.call(addToCartButton, 'data-disabled-by-subscriptions', disable);
645                        }
646                    }
647                }
648
649            }
650        };
651
652        window.BOLD.subscriptions.disableAddToCartButtons = function () {
653            // only disable the add to cart buttons if the app isn't loaded yet
654            if (!window.BOLD.subscriptions.app) {
655                window.BOLD.subscriptions.toggleDisabledAddToCartButtons(true);
656            } else {
657                window.BOLD.subscriptions.enableAddToCartButtons();
658            }
659        };
660
661        window.BOLD.subscriptions.enableAddToCartButtons = function () {
662            document.removeEventListener('click', window.BOLD.subscriptions.preventSubscriptionAddToCart);
663            window.BOLD.subscriptions.toggleDisabledAddToCartButtons(false);
664        };
665
666        window.BOLD.subscriptions.toggleDisabledCheckoutButtons = function(d) {
667            var checkoutButtons = document.querySelectorAll(window.BOLD.subscriptions.config.checkoutButtonSelectors.join(','));
668            var disable = !!d;
669            for (var i = 0; i < checkoutButtons.length; i++) {
670                var checkoutButton = checkoutButtons[i];
671                var toggleAction = disable ? checkoutButton.setAttribute : checkoutButton.removeAttribute;
672
673                checkoutButton.disabled = disable;
674                toggleAction.call(checkoutButton, 'data-disabled-by-subscriptions', disable);
675            }
676        }
677
678        window.BOLD.subscriptions.disableCheckoutButtons = function() {
679            // only disable the checkout buttons if the app isn't loaded yet
680            if (!window.BOLD.subscriptions.app) {
681                window.BOLD.subscriptions.toggleDisabledCheckoutButtons(true);
682            } else {
683                window.BOLD.subscriptions.enableCheckoutButtons();
684            }
685        }
686
687        window.BOLD.subscriptions.enableCheckoutButtons = function() {
688            document.removeEventListener('click', window.BOLD.subscriptions.preventCheckout);
689            window.BOLD.subscriptions.toggleDisabledCheckoutButtons(false);
690        }
691
692        window.BOLD.subscriptions.hasSuccessfulAddToCarts = function() {
693            if (typeof(Storage) !== "undefined") {
694                var successfulAddToCarts = JSON.parse(
695                    window.localStorage.getItem('boldSubscriptionsSuccessfulAddToCarts') || '[]'
696                );
697                if (successfulAddToCarts.length > 0) {
698                    return true;
699                }
700            }
701
702            return false;
703        }
704
705        window.BOLD.subscriptions.hasPendingAddToCarts = function() {
706            if (typeof(Storage) !== "undefined") {
707                var pendingAddToCarts = JSON.parse(
708                    window.localStorage.getItem('boldSubscriptionsPendingAddToCarts') || '[]'
709                );
710                if (pendingAddToCarts.length > 0) {
711                    return true;
712                }
713            }
714
715            return false;
716        }
717
718        window.BOLD.subscriptions.addJSAsset = function(src, deferred) {
719            var scriptTag = document.getElementById('bold-subscriptions-script');
720            var jsElement = document.createElement('script');
721            jsElement.type = 'text/javascript';
722            jsElement.src = src;
723            if (deferred) {
724                jsElement.defer = true;
725            }
726            scriptTag.parentNode.insertBefore(jsElement, scriptTag);
727        };
728
729        window.BOLD.subscriptions.addCSSAsset = function(href) {
730            var scriptTag = document.getElementById('bold-subscriptions-script');
731            var cssElement = document.createElement('link');
732            cssElement.href = href;
733            cssElement.rel = 'stylesheet';
734            scriptTag.parentNode.insertBefore(cssElement, scriptTag);
735        };
736
737        window.BOLD.subscriptions.loadStorefrontAssets = function loadStorefrontAssets() {
738            var assets = window.BOLD.subscriptions.config.assets;
739            window.BOLD.subscriptions.addCSSAsset(window.BOLD.subscriptions.config.assetBaseUrl + '/static/' + assets['storefront.css']);
740            window.BOLD.subscriptions.addJSAsset(window.BOLD.subscriptions.config.assetBaseUrl + '/static/' + assets['storefront.js'], false);
741        };
742
743        window.BOLD.subscriptions.loadCustomerPortalAssets = function loadCustomerPortalAssets() {
744            var assets = window.BOLD.subscriptions.config.assets;
745            window.BOLD.subscriptions.addCSSAsset(window.BOLD.subscriptions.config.assetBaseUrl + '/static/' + assets['customer_portal.css']);
746            window.BOLD.subscriptions.addJSAsset(window.BOLD.subscriptions.config.assetBaseUrl + '/static/' + assets['customer_portal.js'], true);
747        };
748
749        window.BOLD.subscriptions.processManifest = function() {
750            if (!window.BOLD.subscriptions.processedManifest) {
751                window.BOLD.subscriptions.processedManifest = true;
752                window.BOLD.subscriptions.config.assets = JSON.parse(this.responseText);
753
754                                window.BOLD.subscriptions.loadCustomerPortalAssets();
755            }
756        };
757
758        window.BOLD.subscriptions.addInitialLoadingMessage = function() {
759            var customerPortalNode = document.getElementById('customer-portal-root');
760            if (customerPortalNode && window.BOLD.subscriptions.config.requireMSPInitialLoadingMessage) {
761                customerPortalNode.innerHTML = '<div class="bold-subscriptions-loader-container"><div class="bold-subscriptions-loader"></div></div>';
762            }
763        }
764
765        window.BOLD.subscriptions.contentLoaded = function() {
766            window.BOLD.subscriptions.data.contentLoadedEventTriggered = true;
767            window.BOLD.subscriptions.addInitialLoadingMessage();
768                    };
769
770        window.BOLD.subscriptions.preventSubscriptionAddToCart = function(e) {
771            if (e.target.matches(window.BOLD.subscriptions.config.addToCartButtonSelectors.join(',')) && e.target.form) {
772                var productId = window.BOLD.subscriptions.getProductIdFromAddToCartForm(e.target.form);
773                var subscriptionGroup = window.BOLD.subscriptions.getSubscriptionGroupFromProductId(productId);
774                if(window.BOLD.subscriptions.isFeatureFlagEnabled('BS2-4659_improve_large_group_selection'))
775                {
776                    if (subscriptionGroup || window.BOLD.subscriptions.shouldLoadSubscriptionGroupFromAPI()) {
777                        // This code prevents products in subscription groups from being added to the cart before the
778                        // Subscriptions app fully loads. Once the subscriptions app loads it will re-enable the
779                        // buttons. Use window.BOLD.subscriptions.enableAddToCartButtons enable them manually.
780                        e.preventDefault();
781                        return false;
782                    }
783                } else {
784                    if (subscriptionGroup) {
785                        // This code prevents products in subscription groups from being added to the cart before the
786                        // Subscriptions app fully loads. Once the subscriptions app loads it will re-enable the
787                        // buttons. Use window.BOLD.subscriptions.enableAddToCartButtons enable them manually.
788                        e.preventDefault();
789                        return false;
790                    }
791                }
792
793            }
794        };
795
796        window.BOLD.subscriptions.preventCheckout = function(e) {
797            if (
798                e.target.matches(window.BOLD.subscriptions.config.checkoutButtonSelectors.join(','))
799                && (window.BOLD.subscriptions.hasSuccessfulAddToCarts() || window.BOLD.subscriptions.hasPendingAddToCarts())
800            ) {
801                // This code prevents checkouts on the shop until the Subscriptions app fully loads.
802                // When the Subscriptions app is ready it will enable the checkout buttons itself.
803                // Use window.BOLD.subscriptions.enableCheckoutButtons to enable them manually.
804                e.preventDefault();
805                return false;
806            }
807        }
808
809                document.addEventListener('DOMContentLoaded', window.BOLD.subscriptions.contentLoaded);
810
811        if (!Element.prototype.matches) {
812            Element.prototype.matches =
813                Element.prototype.matchesSelector ||
814                Element.prototype.mozMatchesSelector ||
815                Element.prototype.msMatchesSelector ||
816                Element.prototype.oMatchesSelector ||
817                Element.prototype.webkitMatchesSelector ||
818                function(s) {
819                    var matches = (this.document || this.ownerDocument).querySelectorAll(s),
820                        i = matches.length;
821                    while (--i >= 0 && matches.item(i) !== this) {}
822                    return i > -1;
823                };
824        }
825
826        if (!Element.prototype.closest) {
827            Element.prototype.closest = function(s) {
828                var el = this;
829
830                do {
831                    if (Element.prototype.matches.call(el, s)) return el;
832                    el = el.parentElement || el.parentNode;
833                } while (el !== null && el.nodeType === 1);
834                return null;
835            };
836        }
837
838        window.BOLD.subscriptions.setVisibilityOfAdditionalCheckoutButtons = function (isVisible) {
839            if (window.BOLD.subscriptions.config.additionalCheckoutSelectors === undefined) {
840                return;
841            }
842
843            var selectors = window.BOLD.subscriptions.config.additionalCheckoutSelectors;
844
845            for (var i = 0; i < selectors.length; i++) {
846                var elements = document.querySelectorAll(selectors[i]);
847
848                for (var j = 0; j < elements.length; j++) {
849                    elements[j].style.display = isVisible ? 'block' : 'none';
850                }
851            }
852        }
853
854        window.BOLD.subscriptions.hideAdditionalCheckoutButtons = function() {
855            window.BOLD.subscriptions.setVisibilityOfAdditionalCheckoutButtons(false);
856        };
857
858        window.BOLD.subscriptions.showAdditionalCheckoutButtons = function() {
859            window.BOLD.subscriptions.setVisibilityOfAdditionalCheckoutButtons(true);
860        };
861
862        window.BOLD.subscriptions.enhanceMspUrls = function(data) {
863            var mspUrl = 'https://sub.boldapps.net/shop/7003/customer_portal';
864            var elements = document.querySelectorAll("a[href='"+mspUrl+"']");
865
866            if(!elements.length || !data.success) {
867                return;
868            }
869
870            for (var i = 0; i < elements.length; i++) {
871                elements[i].href = elements[i].href + "?jwt="+data.value.jwt+"&customerId="+data.value.customerId;
872            }
873        };
874
875        window.addEventListener('load', function () {
876            window.BOLD.subscriptions.getJWT(window.BOLD.subscriptions.enhanceMspUrls);
877        });
878
879        // This will be called immediately
880        // Use this anonymous function to avoid polluting the global namespace
881        (function() {
882            var xhr = new XMLHttpRequest();
883            xhr.addEventListener('load', window.BOLD.subscriptions.processManifest);
884            xhr.open('GET', window.BOLD.subscriptions.config.assetBaseUrl + '/static/manifest.json?t=' + (new Date()).getTime());
885            xhr.send();
886        })()
887
888        window.BOLD.subscriptions.patches.patchCashier = function() {
889            if (window.BOLD && window.BOLD.checkout) {
890                window.BOLD.checkout.disable();
891                window.BOLD.checkout.listenerFn = window.BOLD.subscriptions.patches.cashierListenerFn;
892                window.BOLD.checkout.enable();
893            } else if (window.BOLD.subscriptions.patches.currentCashierPatchAttempts < window.BOLD.subscriptions.patches.maxCashierPatchAttempts) {
894                window.BOLD.subscriptions.patches.currentCashierPatchAttempts++;
895                setTimeout(window.BOLD.subscriptions.patches.patchCashier, 100);
896            }
897        };
898
899        window.BOLD.subscriptions.patches.finishCheckout = function(event, form, cart) {
900            window.BOLD.subscriptions.patches.currentCheckoutRetries++;
901
902            if (!window.BOLD.subscriptions.app
903                && window.BOLD.subscriptions.patches.currentCheckoutRetries < window.BOLD.subscriptions.patches.maxCheckoutRetries
904            ) {
905                setTimeout(function () { window.BOLD.subscriptions.patches.finishCheckout(event, form, cart); }, 100);
906                return;
907            } else if (window.BOLD.subscriptions.app) {
908                window.BOLD.subscriptions.patches.currentCheckoutRetries = 0;
909                window.BOLD.subscriptions.app.addCartParams(form, cart);
910            }
911
912            var noSubscriptions = false;
913            if ((window.BOLD.subscriptions.app && window.BOLD.subscriptions.app.successfulAddToCarts.length === 0)
914                || !window.BOLD.subscriptions.app
915            ) {
916                noSubscriptions = true;
917                event.target.dataset.cashierConfirmedNoPlugins = true;
918
919                if (window.BOLD.subscriptions.setCashierFeatureToken) {
920                    window.BOLD.subscriptions.setCashierFeatureToken(false);
921                }
922            }
923
924            if ((noSubscriptions && window.BOLD.subscriptions.config.cashierPluginOnlyMode)
925                || (typeof BOLD.checkout.isFeatureRequired === 'function' && !BOLD.checkout.isFeatureRequired())
926            ) {
927                // send them to the original checkout when in plugin only mode
928                // and either BSUB is there but there are no subscription products
929                // or BSUB isn't there at all
930                if (form.dataset.old_form_action) {
931                    form.action = form.dataset.old_form_action;
932                }
933                event.target.click();
934            } else {
935                // sends them to Cashier since BSUB got a chance to add it's stuff
936                // and plugin only mode is not enabled
937                form.submit();
938            }
939        };
940    }
941</script>
941
942
943<script id="bold-subscriptions-platform-script" type="text/javascript">
944    window.BOLD.subscriptions.config.shopPlatformId = '26810187954';
945    window.BOLD.subscriptions.config.appSlug = 'subscriptions';
946
947    window.BOLD = window.BOLD || {};
948    window.BOLD.subscriptions = window.BOLD.subscriptions || {};
949    window.BOLD.subscriptions.data = window.BOLD.subscriptions.data || {};
950    window.BOLD.subscriptions.data.platform = window.BOLD.subscriptions.data.platform || {};
951    window.BOLD.subscriptions.data.platform.customer = { id: '' };
952    window.BOLD.subscriptions.data.platform.product = null;
953    window.BOLD.subscriptions.data.platform.products = [];
954    window.BOLD.subscriptions.data.platform.variantProductMap = {};
955
956    window.BOLD.subscriptions.addCachedProductData = function(products) {
957        // ignore [], null, and undefined
958        if (!products) {
959            return
960        }
961
962        if (!Array.isArray(products)) {
963            window.BOLD.subscriptions.logger.warn('products must be an array')
964            return
965        }
966
967        window.BOLD.subscriptions.data.platform.products.concat(products)
968
969        for (var i = 0; i < products.length; i++) {
970            var product = products[i];
971            for (var j = 0; j < product.variants.length; j++) {
972                var variant = product.variants[j];
973                window.BOLD.subscriptions.data.platform.variantProductMap[variant.id] = product;
974            }
975        }
976    }
977
978    
979    
980    
981
982    window.BOLD.subscriptions.config.addToCartFormSelectors.push(
983        '.product-form.product-form-product-template:not(.bold-subscriptions-no-widget)'
984        ,'.product-form.product-form--payment-button:not(.bold-subscriptions-no-widget)'
985    );
986    window.BOLD.subscriptions.config.addToCartButtonSelectors.push('[type="submit"]');
987    window.BOLD.subscriptions.config.quickAddToCartButtonSelectors.push('a[data-event-type="product-click"]');
988    window.BOLD.subscriptions.config.widgetInsertBeforeSelectors.push('[type="submit"]');
989    window.BOLD.subscriptions.config.cartElementSelectors.push('form[action="/cart"]');
990    window.BOLD.subscriptions.config.cartTotalElementSelectors.push('[data-cart-subtotal]', '.text-right .ajaxcart__subtotal');
991    window.BOLD.subscriptions.config.checkoutButtonSelectors.push(
992        '[name="checkout"]',
993        '[href*="checkout"]:not([href*="tools/checkout"])',
994        '[onclick*="checkout"]:not([onclick*="tools/checkout"])',
995    );
996
997    // Discount text markup template
998    // NOTE: @ on double curly, so blade doesn't interpret, and `raw` liquid tags so liquid doesn't interpret.
999    
1000    window.BOLD.subscriptions.config.discountItemTemplate = '<div class="bold-subscriptions-discount"><div class="bold-subscriptions-discount__details">{{details}}</div><div class="bold-subscriptions-discount__total">{{total}}</div></div>';
1001    
1002
1003    window.BOLD.subscriptions.getProductIdFromAddToCartForm = function(addToCartForm) {
1004        var idInput = addToCartForm.querySelector('[name="id"]');
1005        if (idInput === null) {
1006            window.BOLD.subscriptions.logger.error('could not get variant id input from add to cart form — make sure your form has an input with [name="id"]')
1007            return null;
1008        }
1009
1010        var variantId = parseInt(idInput.value, 10);
1011        if (isNaN(variantId)) {
1012            window.BOLD.subscriptions.logger.error('could not parse variant id from [name="id"] input')
1013            return null;
1014        }
1015
1016        var product = window.BOLD.subscriptions.data.platform.variantProductMap[variantId];
1017
1018        if (product === undefined) {
1019            window.BOLD.subscriptions.logger.error('could not map variant id to cached product data — call window.BOLD.subscriptions.addCachedProductData(products) to add the product to the cache')
1020            return null;
1021        }
1022
1023        return product.id;
1024    };
1025
1026    window.BOLD.subscriptions.getAddToCartForms = function() {
1027        var forms = [];
1028        var idInputs = document.querySelectorAll('[name="id"]');
1029
1030        for (var i = 0; i < idInputs.length; i++) {
1031            var idInput = idInputs[i];
1032            var form = idInput.closest('form:not(.bold-subscriptions-no-widget)');
1033            if (form) {
1034                forms.push(form);
1035            }
1036        }
1037
1038        return forms;
1039    };
1040
1041    window.BOLD.subscriptions.getJWT = function (callback) {
1042        if(window.BOLD.subscriptions.data.platform.customer.id !== '') {
1043            var shopPlatformId = '26810187954';
1044            var appSlug = 'subscriptions';
1045            var customerPlatformId = window.BOLD.subscriptions.data.platform.customer.id;
1046            var proxyPath = '/apps/app-proxy/customers/v1/shops/'+shopPlatformId+'/apps/'+appSlug+'/customers/pid/'+customerPlatformId+'/jwt';
1047
1048            var xmlhttp = new XMLHttpRequest();
1049
1050            xmlhttp.onreadystatechange = function() {
1051                if (xmlhttp.readyState === window.BOLD.subscriptions.config.XMLHttpRequest.DONE) {
1052                    if (xmlhttp.status === 200) {
1053                        var data = JSON.parse(xmlhttp.responseText);
1054                        callback({
1055                            success: true,
1056                            value: {
1057                                jwt: data.bold_platform_jwt,
1058                                customerId: window.BOLD.subscriptions.data.platform.customer.id,
1059                            },
1060                        });
1061                    } else if (xmlhttp.status === 404) {
1062                        callback({
1063                            success: false,
1064                            error: 'not_logged_in',
1065                        });
1066                    } else {
1067                        callback({
1068                            success: false,
1069                            error: 'unknown',
1070                        });
1071                    }
1072                }
1073            };
1074
1075            xmlhttp.open("GET", proxyPath, true);
1076            xmlhttp.setRequestHeader('Accept', 'application/liquid');
1077            xmlhttp.send();
1078        } else {
1079            callback({
1080                success: false,
1081                error: 'not_logged_in',
1082            });
1083        }
1084    };
1085
1086    window.BOLD.subscriptions.setCashierFeatureToken = function(value) {
1087        if (window.BOLD.checkout_features_defaults && window.BOLD.subscriptions.config.cashierApplicationUUID) {
1088            window.BOLD.checkout_features_defaults.forEach(function(item) {
1089                if (item.id === window.BOLD.subscriptions.config.cashierApplicationUUID) {
1090                    item.require = value;
1091                }
1092            });
1093        }
1094    };
1095
1096    // Cashier patches
1097    window.BOLD.subscriptions.patches.cashierListenerFn = function(event) {
1098        if (window.BOLD.checkout.isCheckoutButton(event.target) && window.BOLD.checkout.isEnabled()) {
1099            window.BOLD.subscriptions.patches.pushToCashier(event);
1100        } else if(window.BOLD.checkout.isCheckoutButton(event.target) && typeof window.cashier_installed_on_site === 'undefined') {
1101            var request = new XMLHttpRequest();
1102            request.open('HEAD', '/apps/checkout/isInstalled', false);
1103            request.send(null);
1104
1105            if(request.status >= 200 && request.status < 400) {
1106                window.BOLD.subscriptions.patches.pushToCashier(event);
1107            } else {
1108                window.cashier_installed_on_site = false;
1109            }
1110        }
1111    };
1112
1113    window.BOLD.subscriptions.localTime = function() {
1114        var localDate = new Date();
1115        return localDate.getTime();
1116    };
1117
1118
1119    window.BOLD.subscriptions.patches.pushToCashier = function(event) {
1120        event.preventDefault();
1121        var form = window.BOLD.checkout.getForm(event.target);
1122        var formData = new FormData(form);
1123        var request = new XMLHttpRequest();
1124        request.open('POST', '/cart/update.js?tmp=' + Date.now(), true);
1125        request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
1126
1127        request.onload = function() {
1128            if (request.status >= 200 && request.status < 400) {
1129                // Success!
1130                var cart = JSON.parse(request.responseText);
1131
1132                // If items are empty redirect back to the cart
1133                if (cart.items.length === 0) {
1134                    return window.location.href = '/cart';
1135                }
1136
1137                cart.items.forEach(function(element) {
1138                    delete element.product_description;
1139                });
1140
1141                if (document.getElementById('CartSpecialInstructions')) {
1142                    // If the cart note exists, grab its value
1143                    cart.note = document.getElementById('CartSpecialInstructions').value;
1144                }
1145
1146                var cartObj = JSON.stringify(cart);
1147
1148                var form = window.BOLD.checkout.getForm(event.target);
1149                form.dataset.old_form_action = form.action;
1150                form.action = '/apps/checkout/begin-checkout' + googleAnalyticsGetParamString({});
1151                var cartCookie = window.BOLD.checkout.getCookie('cart');
1152                var element = document.createElement('INPUT');
1153                element.type = 'HIDDEN';
1154                element.name = 'cart_id';
1155                element.value = cartCookie;
1156                form.appendChild(element);
1157
1158                var dateElement = document.createElement('INPUT');
1159                dateElement.type = 'HIDDEN';
1160                dateElement.name = 'checkout_local_time';
1161                dateElement.value = window.BOLD.subscriptions.localTime();
1162                form.appendChild(dateElement);
1163
1164                var cartElement = document.createElement('INPUT');
1165                cartElement.type = 'HIDDEN';
1166                cartElement.name = 'cart';
1167                cartElement.value = cartObj;
1168                form.appendChild(cartElement);
1169                form.method = 'POST';
1170
1171                if(window.BOLD && window.BOLD.checkout && typeof window.BOLD.checkout.languageIsoCode === 'string') {
1172                    var langInput = document.createElement('INPUT');
1173                    langInput.type = 'HIDDEN';
1174                    langInput.name = 'language_iso';
1175                    langInput.value = window.BOLD.checkout.languageIsoCode;
1176                    form.appendChild(langInput);
1177                }
1178
1179                if (window.BOLD && window.BOLD.common && typeof window.BOLD.common.eventEmitter === 'object' && typeof window.BOLDCURRENCY !== 'undefined') {
1180                    window.BOLD.common.eventEmitter.emit('BOLD_CASHIER_checkout', {target: form});
1181                }
1182
1183                window.BOLD.subscriptions.patches.finishCheckout(event, form, cart);
1184            }
1185        };
1186
1187        request.send(formData);
1188    };
1189
1190    </script>
1190
1191
1192<script src='https://cdn.assortion.com/app.js?shop=safetracksgps.myshopify.com' defer></script>
1192
1193
1194      
1194<script>
1195        
1196          window.upsell = window.upsell || {};
1197  
1198          
1199          
1200          
1201            window.upsell.cart = { products:{}};
1202            
1203          
1204        
1205      </script>
1205
1206    
1207<!-- BEGIN app block: shopify://apps/assortion/blocks/app-embed/5588d7f9-a5bc-4f4a-9c54-39b7e081dd23 --><link rel='stylesheet' href='https://cdn.shopify.com/extensions/01a0f1f1-cb84-7b5e-97d4-e2b79b562973/assortion-114/assets/base.css' media='print' onload="this.media='all'">
1208<noscript><link rel='stylesheet' href='https://cdn.shopify.com/extensions/01a0f1f1-cb84-7b5e-97d4-e2b79b562973/assortion-114/assets/base.css'></noscript>
1209<script src='https://cdn.shopify.com/extensions/01a0f1f1-cb84-7b5e-97d4-e2b79b562973/assortion-114/assets/app.js' type='module'></script>
vendor: 1 bytes, line 1209
1209
1210<script>
1211  var d = window.__ASSORTION_DATA__ = {
1212    shop: {
1213      domain:"safetracksgps.myshopify.com"
1214    },
1215    customer: {
1216      isB2B: false
1217      
1218    },
1219    marketId: '2245623986',
1220    currency: "CAD",
1221    moneyFormat: "${{amount}}",
1222    designMode: false
1223    
1224    ,
1225    cart: {
1226      items: []
1227    }
1228    
1229  };
1230  d.storefrontToken = "0289dbe0ea0c37fe32da39e771a39661";
1231  
1232  d.offersData = [{"id":"d6b7fda0-e0cc-4bba-976f-38ca5ffb4935","type":"addon","data":{"max":2,"min":1,"name":"Watch Upsell","offer":{"type":"product","limit":1,"value":[{"id":"7926595223730"},{"id":"7925231911090"},{"id":"6573461307570"},{"id":"8545829879986"}]},"texts":{"en":{"title":"Select a Service Subscription"}},"layout":"vertical","trigger":{"type":"product","value":[{"id":"4773868437682"}],"exclude":null},"discount":{"type":"percentage","items":[],"value":null,"enabled":false,"limitOneUnit":false,"mustHaveMainProduct":true},"priority":0,"quantity":{"enabled":false,"selector":false},"atcMethod":"default","removeWithParent":false}},{"id":"b50d43ad-0e3c-4427-896d-87dc8a9080a8","type":"addon","data":{"max":2,"min":1,"name":"PMR4 Upsell","limit":{"value":1,"enabled":false},"offer":{"type":"product","limit":1,"value":[{"id":"6573461307570"},{"id":"7274582048946"},{"id":"4773881774258"}],"exclude":null},"texts":{"en":{"title":"Select a Service Subscription"}},"layout":"vertical","trigger":{"type":"product","value":[{"id":"7274445897906"}],"exclude":null},"discount":{"type":"percentage","items":[],"value":"","enabled":false,"mustHaveMainProduct":true},"atcMethod":"default"}}];
1233  
1234  
1235  d.settingsData = {"recommendations":{"showRating":true,"automatic":{"enabled":true},"breakpoints":{"mobile":{"slidesPerView":2,"slidesToScroll":2,"spaceBetween":20},"tablet":{"slidesPerView":3,"slidesToScroll":3,"spaceBetween":15},"desktop":{"slidesPerView":5,"slidesToScroll":3,"spaceBetween":10}},"carousel":{"desktop":5,"mobile":2},"image":{"aspectRatio":"auto"},"quickViewSettings":{"enabled":false,"preventBodyScrolling":true}},"bundles":{"showRating":true,"image":{"aspectRatio":"auto"},"addToCart":{"style":"primary-native"},"productLink":"page","useVariantImage":false},"addons":{"showRating":true,"clickBehavior":"open-quick-view","preselectVariant":true,"useComparePrice":true,"imageAspectRatio":"auto","carousel":{"desktop":{"slidesPerView":3,"spaceBetween":10,"slidesToScroll":3},"mobile":{"slidesPerView":2,"spaceBetween":8,"slidesToScroll":2}},"atcStyle":"primary-native","texts":{"en":{"alertMandatory":"Please Choose Your Subscription"}},"showTotal":true,"allowMultiple":true},"volume":{"priceType":"total","priceTypeActive":"total","atcStyle":"primary-native","splitOptions":true},"postPurchase":{"paymentCheck":{"enabled":true,"wait":10}},"popupCrossSell":{"showRating":true,"showSavings":true,"useComparePrice":true,"atc":{"style":"primary-native"},"style":{"addButton":"primary-native","continueButton":"primary-native","iytBgColor":"#fffbeb","iytColor":"#f59e0b","discountColor":"#ffffff","discountBgColor":"#201E50","timerColor":"#075985","timerBgColor":"#e0f2fe"},"preselectVariant":true,"clickBehavior":"open-quick-view"},"popupUpsell":{"showRating":true,"showSavings":true,"atc":{"style":"primary-native"},"style":{"discountColor":"#ffffff","discountBgColor":"#201E50"}},"checkoutUpsell":{},"bundleBuilder":{},"analytics":{"attribution":{"enabled":true}},"flags":{"disableAutoDarkDetection":false,"addonDelayBeforeMainItem":0,"openCartOnBuyNow":false,"discountFunction":true},"quickView":{"showRating":true,"preventBodyScrolling":true},"other":{"discountName":"Bundle","combinesWith":{"productDiscounts":true,"orderDiscounts":true,"shippingDiscounts":true},"orderTagUpsell":{"enabled":false,"value":"Assortion"},"product":{"atcButton":".product-form__cart-submit"},"hideDynamicCheckoutInCart":true},"cart":{"enabled":false,"general":{"openOnAddToCart":true,"clearAllButtonEnabled":false,"disableCartPage":false,"backgroundColor":"#ffffff","textColor":"#000000","buttonBgColor":"#000000","buttonColor":"#ffffff","buttonRadius":"theme","quantityStyle":"plain","quantityRadius":"md","footerBgColor":"inherit","
1235itemSavingColor":"#16a34a","totalSavingColor":"#16a34a","secondaryCta":"none","checkoutDiscountCode":"","preventBodyScrolling":false,"showItemSavings":false,"showTotalSavings":false,"variantSwitcherEnabled":false,"headerPadding":12,"width":480,"animationDuration":0.25},"announcement":{"minute":"00","seconds":"00","padding":12},"volume":{"radius":4,"padding":4,"borderColor":"#D5F1E2","backgroundColor":"#D5F1E2","enabled":true,"discountCodeColor":"#e37ab1"},"subscription":{"enabled":true},"installments":{"quantity":4,"provider":"sezzle","customProvider":null},"deliveryTime":{"enabled":false,"method":"fixed","fixedValue":2,"unit":"days"},"addons":{"enabled":false,"offerAccepted":true,"bgColor":"#f0fdf4","layout":"detailed"},"discount":{"enabled":true,"buttonVariant":"secondary","showCodes":true,"codeBackgroundColor":"#e5e7eb","codeColor":"#4B5563","collapsedByDefault":false},"note":{"enabled":true,"limit":50,"disableLimit":false,"openDefault":false},"advanced":{"css":"","js":"","theme":""},"empty":{"recommendation":{"title":"You may also like","componentType":"vertical","source":"manual","enabled":true,"products":{"type":"product","value":[]},"trigger":{"type":"product","value":[]}}},"recommendation":{"showRating":true,"limit":4,"disable":false,"componentType":"vertical","viewConfig":"link","variant":"secondary","enabled":true,"carousel":{"desktop":3,"mobile":3},"source":{"ai":true,"addon":false,"pcs":false,"rec":true}},"progressBar":{"enabled":false,"freeShippingForSubscriptions":false,"hideSingleTierIcon":true,"tiers":[{"type":"free-shipping","labelPromote":"\u003cp\u003eSpend \u003cspan data-type=\"mention\" data-id=\"threshold_remaining\"\u003e{{threshold_remaining}}\u003c\/span\u003e to get free shipping!\u003c\/p\u003e","labelSuccess":"\u003cp\u003eFree shipping unlocked\u003c\/p\u003e","label":"\u003cp\u003eFree shipping\u003c\/p\u003e"}]},"trustIcons":{"content":"https:\/\/cdn.assortion.com\/payment-icons.png"},"paymentIcons":{"methods":[{"id":"visa","label":"Visa"},{"id":"master","label":"Mastercard"},{"id":"apple_pay","label":"Apple Pay"},{"id":"google_pay","label":"Google Pay"}],"iconSize":28},"terms":{"enabled":false,"selected":false},"freeGift":{"enabled":true,"format":"vertical","hideProductLinks":false},"expressCheckout":{"enabled":false,"mode":"accelerated-checkout","buttonsPerRow":"auto"}},"store":{"currency":"CAD","moneyFormat":"${{amount}}"},"moneyFormat":"${{amount}}"};
1236  
1237</script>
1237
1238<!-- END app block --><!-- BEGIN app block: shopify://apps/inbox/blocks/chat/841fc607-4181-4ad1-842d-e24d7f8bad6b --><link rel='modulepreload' href='https://cdn.shopify.com/storefront/web-components/chat.js' crossorigin fetchpriority='low'>
1239
1240<script id='shopify-chat-app-embed-data' type='application/json'>
1241  {
1242    "settings": {
1243      "invertActivatorColors": true,
1244      "greetingMessage": "",
1245      "showFeaturedProducts": true,
1246      "featuredProducts": [],
1247      "horizontalPosition": "bottom_right",
1248      "icon": "chat_bubble",
1249      "buttonLabel": "Chat"
1250    }
1251  }
1252</script>
1252
1253
1254<style data-shopify>
1255  
1256
1257  /* Shadow DOM content does not prevent theme-wide :empty rules from matching the host. */
1258  shopify-chat:defined:empty {
1259    display: grid;
1260  }
1261
1262  :root {
1263    --shopify-chat-bg-color: #FFFFFF;
1264    --shopify-chat-text-color: #000000;
1265    --shopify-chat-accent-bg-color: #000000;
1266    --shopify-chat-accent-text-color: #FFFFFF;
1267    --shopify-chat-activator-offset: 20px;
1268
1269    
1270
1271    --shopify-chat-activator-font-size: 16px;
1272    --shopify-chat-border-radius: 16px;
1273  }
1274
1275  
1276</style>
1277
1278<script src='https://cdn.shopify.com/storefront/web-components/chat.js' type='module' crossorigin fetchpriority='low' async></script>
1278
1279
1280
1281<!-- END app block --><!-- BEGIN app block: shopify://apps/bold-subscriptions/blocks/bsub-embed/9ceb49f0-5fe5-4b5e-943d-f8af8985167d -->
1282<script id="bold-subscriptions-app-embed-script" type="text/javascript" defer>
1283    
1284        
1285            if (window.location.href.includes('pages/manage-subscriptions')) {
1286                const queryParams = new URLSearchParams(window.location.search);
1287                if(queryParams.has('deep_link') && queryParams.get('deep_link') === 'upsell' &&
1288                    queryParams.has('type') && queryParams.get('type') === 'upcoming-order-email'
1289                ) {
1290                    window.location.href=`https://safetracksgpsshop.ca/customer_authentication/redirect?locale=en&region_country=US?${queryParams.toString()}&from_msp=true`;
1291                }
1292            } else if (window.location.href.includes('https://safetracksgpsshop.ca/customer_authentication/redirect?locale=en&region_country=US')) {
1293                document.addEventListener('DOMContentLoaded', function() {
1294                    const queryParams = new URLSearchParams(window.location.search);
1295                    if(queryParams.has('from_msp')) {
1296                        queryParams.delete('from_msp');
1297
1298                        let form = document.querySelector("#customer_login");
1299
1300                        if(form) {
1301                            let input = document.createElement('input');
1302                            input.type = 'hidden';
1303                            input.name = 'return_to';
1304                            input.value = `https://safetracksgpsshop.ca/pages/manage-subscriptions?${queryParams.toString()}`;
1305
1306                            form.appendChild(input);
1307                        }
1308                    }
1309                });
1310            }
1311        
1312    
1313
1314    window.BOLD = window.BOLD || {};
1315    window.BOLD.subscriptions = window.BOLD.subscriptions || {};
1316    window.BOLD.subscriptions.config = window.BOLD.subscriptions.config || {};
1317    window.BOLD.subscriptions.config.isAppEmbedEnabled = true;
1318    window.BOLD.subscriptions.classes = window.BOLD.subscriptions.classes || {};
1319    window.BOLD.subscriptions.patches = window.BOLD.subscriptions.patches || {};
1320    window.BOLD.subscriptions.patches.maxCheckoutRetries = window.BOLD.subscriptions.patches.maxCheckoutRetries || 200;
1321    window.BOLD.subscriptions.patches.currentCheckoutRetries = window.BOLD.subscriptions.patches.currentCheckoutRetries || 0;
1322    window.BOLD.subscriptions.patches.maxCashierPatchAttempts = window.BOLD.subscriptions.patches.maxCashierPatchAttempts || 200;
1323    window.BOLD.subscriptions.patches.currentCashierPatchAttempts = window.BOLD.subscriptions.patches.currentCashierPatchAttempts || 0;
1324    window.BOLD.subscriptions.config.platform = 'shopify';
1325    window.BOLD.subscriptions.config.shopDomain = 'safetracksgps.myshopify.com';
1326    window.BOLD.subscriptions.config.customDomain = 'safetracksgpsshop.ca';
1327    window.BOLD.subscriptions.config.shopIdentifier = '26810187954';
1328    window.BOLD.subscriptions.config.cashierUrl = 'https://cashier.boldcommerce.com';
1329    window.BOLD.subscriptions.config.boldAPIBase = 'https://app-api.boldapps.net/';
1330    window.BOLD.subscriptions.config.cashierApplicationUUID = '2e6a2bbc-b12b-4255-abdf-a02af85c0d4e';
1331    window.BOLD.subscriptions.config.appUrl = 'https://sub.boldapps.net';
1332    window.BOLD.subscriptions.config.currencyCode = 'CAD';
1333    window.BOLD.subscriptions.config.checkoutType = 'shopify';
1334    window.BOLD.subscriptions.config.currencyFormat = "$\u0026#123;\u0026#123;amount}}";
1335    window.BOLD.subscriptions.config.shopCurrencies = [{"id":1894,"currency":"CAD","currency_format":"$\u0026#123;\u0026#123;amount}}","created_at":"2021-03-17 20:40:07","updated_at":"2021-03-17 20:40:07"}];
1336    window.BOLD.subscriptions.config.shopSettings = {"allow_msp_cancellation":false,"allow_msp_prepaid_renewal":true,"customer_can_pause_subscription":false,"customer_can_change_next_order_date":false,"customer_can_change_order_frequency":false,"customer_can_create_an_additional_order":false,"customer_can_use_passwordless_login":false,"customer_passwordless_login_redirect":false,"customer_can_add_products_to_existing_subscriptions":false,"customer_can_reactivate_subscription":true,"customer_can_reactivate_subscription_with_deleted_products":false,"show_currency_code":true,"stored_payment_method_policy":"required","customer_portal_path":"pages\/manage-subscriptions","display_only_subscription_products":false};
1337    window.BOLD.subscriptions.config.customerLoginPath = null;
1338    window.BOLD.subscriptions.config.isPrepaidEnabled = window.BOLD.subscriptions.config.isPrepaidEnabled || true;
1339    window.BOLD.subscriptions.config.loadSubscriptionGroupFrom = 'default';
1340    window.BOLD.subscriptions.config.loadSubscriptionGroupFromTypes = "default";
1341    window.BOLD.subscriptions.config.cashierPluginOnlyMode = window.BOLD.subscriptions.config.cashierPluginOnlyMode || false;
1342    if (window.BOLD.subscriptions.config.waitForCheckoutLoader === undefined) {
1343        window.BOLD.subscriptions.config.waitForCheckoutLoader = true;
1344    }
1345
1346    window.BOLD.subscriptions.config.addToCartFormSelectors = window.BOLD.subscriptions.config.addToCartFormSelectors || [];
1347    window.BOLD.subscriptions.config.addToCartButtonSelectors = window.BOLD.subscriptions.config.addToCartButtonSelectors || [];
1348    window.BOLD.subscriptions.config.widgetInsertBeforeSelectors = window.BOLD.subscriptions.config.widgetInsertBeforeSelectors || [];
1349    window.BOLD.subscriptions.config.quickAddToCartButtonSelectors = window.BOLD.subscriptions.config.quickAddToCartButtonSelectors || [];
1350    window.BOLD.subscriptions.config.cartElementSelectors = window.BOLD.subscriptions.config.cartElementSelectors || [];
1351    window.BOLD.subscriptions.config.cartTotalElementSelectors = window.BOLD.subscriptions.config.cartTotalElementSelectors || [];
1352    window.BOLD.subscriptions.config.lineItemSelectors = window.BOLD.subscriptions.config.lineItemSelectors || [];
1353    window.BOLD.subscriptions.config.lineItemNameSelectors = window.BOLD.subscriptions.config.lineItemNameSelectors || [];
1354    window.BOLD.subscriptions.config.checkoutButtonSelectors = window.BOLD.subscriptions.config.checkoutButtonSelectors || [];
1355
1356    window.BOLD.subscriptions.config.featureFlags = window.BOLD.subscriptions.config.featureFlagOverrides || ["BE-2298-Support-Variant-Selections-In-Sub-Groups","BE-6925-remove-bold-error-code-from-error-message","BE-8664-default-address-source-bold","BE-9502-add-logs-to-investigate-infinite-loop","BE-6695-improve-subs-onboarding","BE-10096-list-deleted-variants","BE-10183-customer-portal-paginates-products","BE-10178-suppress-dup-inventory-failure-emails","BE-9073-reactivate-subscription-setting"];
1357    window.BOLD.subscriptions.config.subscriptionProcessingFrequency = '60';
1358    window.BOLD.subscriptions.config.requireMSPInitialLoadingMessage = true;
1359    window.BOLD.subscriptions.data = window.BOLD.subscriptions.data || {};
1360
1361    // Interval text markup template
1362    window.BOLD.subscriptions.config.lineItemPropertyListSelectors = window.BOLD.subscriptions.config.lineItemPropertyListSelectors || [];
1363    window.BOLD.subscriptions.config.lineItemPropertyListSelectors.push('dl.definitionList');
1364    window.BOLD.subscriptions.config.lineItemPropertyListTemplate = window.BOLD.subscriptions.config.lineItemPropertyListTemplate || '<dl class="definitionList"></dl>';
1365    window.BOLD.subscriptions.config.lineItemPropertyTemplate = window.BOLD.subscriptions.config.lineItemPropertyTemplate || '<dt class="definitionList-key">{{key}}:</dt><dd class="definitionList-value">{{value}}</dd>';
1366
1367    // Discount text markup template
1368    window.BOLD.subscriptions.config.discountItemTemplate = window.BOLD.subscriptions.config.discountItemTemplate || '<div class="bold-subscriptions-discount"><div class="bold-subscriptions-discount__details">{{details}}</div><div class="bold-subscriptions-discount__total">{{total}}</div></div>';
1369
1370
1371    // Constants in XMLHttpRequest are not reliable, so we will create our own
1372    // reference: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState
1373    window.BOLD.subscriptions.config.XMLHttpRequest = {
1374        UNSENT:0,            // Client has been created. open() not called yet.
1375        OPENED: 1,           // open() has been called.
1376        HEADERS_RECEIVED: 2, // send() has been called, and headers and status are available.
1377        LOADING: 3,          // Downloading; responseText holds partial data.
1378        DONE: 4              // The operation is complete.
1379    };
1380
1381    window.BOLD.subscriptions.config.assetBaseUrl = 'https://sub.boldapps.net';
1382    if (window.localStorage && window.localStorage.getItem('boldSubscriptionsAssetBaseUrl')) {
1383        window.BOLD.subscriptions.config.assetBaseUrl = window.localStorage.getItem('boldSubscriptionsAssetBaseUrl')
1384    }
1385
1386    window.BOLD.subscriptions.data.subscriptionGroups = [];
1387    if (localStorage && localStorage.getItem('boldSubscriptionsSubscriptionGroups')) {
1388        window.BOLD.subscriptions.data.subscriptionGroups = JSON.parse(localStorage.getItem('boldSubscriptionsSubscriptionGroups'));
1389    } else {
1390        window.BOLD.subscriptions.data.subscriptionGroups = [{"id":12314,"billing_rules":[{"id":24826,"subscription_group_id":12314,"interval_name":"Monthly ","billing_rule":"FREQ=MONTHLY","custom_billing_rule":""}],"is_subscription_only":false,"allow_prepaid":false,"allow_dynamic_discount":false,"is_prepaid_only":false,"should_continue_prepaid":true,"continue_prepaid_type":"as_prepaid","prepaid_durations":[{"id":12255,"subscription_group_id":12314,"total_duration":1,"discount_type":"percentage","discount_value":0}],"dynamic_discounts":[],"selection_options":[{"platform_entity_id":"7274582048946"}],"discount_type":"no_discount","percent_discount":0,"fixed_discount":0,"can_add_to_cart":true},{"id":29902,"billing_rules":[{"id":67129,"subscription_group_id":29902,"interval_name":"Monthly ","billing_rule":"FREQ=MONTHLY","custom_billing_rule":""}],"is_subscription_only":false,"allow_prepaid":false,"allow_dynamic_discount":false,"is_prepaid_only":false,"should_continue_prepaid":true,"continue_prepaid_type":"as_prepaid","prepaid_durations":[{"id":29848,"subscription_group_id":29902,"total_duration":1,"discount_type":"percentage","discount_value":0}],"dynamic_discounts":[],"selection_options":[{"platform_entity_id":null}],"discount_type":"no_discount","percent_discount":0,"fixed_discount":0,"can_add_to_cart":true},{"id":37818,"billing_rules":[{"id":91621,"subscription_group_id":37818,"interval_name":"Yearly","billing_rule":"FREQ=YEARLY","custom_billing_rule":""}],"is_subscription_only":false,"allow_prepaid":false,"allow_dynamic_discount":false,"is_prepaid_only":false,"should_continue_prepaid":true,"continue_prepaid_type":"as_prepaid","prepaid_durations":[{"id":37015,"subscription_group_id":37818,"total_duration":1,"discount_type":"percentage","discount_value":0}],"dynamic_discounts":[],"selection_options":[{"platform_entity_id":"7925231911090"}],"discount_type":"no_discount","percent_discount":0,"fixed_discount":0,"can_add_to_cart":true},{"id":37819,"billing_rules":[{"id":91622,"subscription_group_id":37819,"interval_name":"Yearly","billing_rule":"FREQ=YEARLY","custom_billing_rule":""}],"is_subscription_only":false,"allow_prepaid":false,"allow_dynamic_discount":false,"is_prepaid_only":false,"should_continue_prepaid":true,"continue_prepaid_type":"as_prepaid","prepaid_durations":[{"id":37016,"subscription_group_id":37819,"total_duration":1,"discount_type":"percentage","discount_value":0}],"dynamic_discounts":[],"selection_options":[{"platform_entity_id":"7925237186738"}],"discount_type":"no_discount","percent_discount":0,"fixed_discount":0,"can_add_to_cart":true},{"id":37843,"billing_rules":[{"id":91669,"subscription_group_id":37843,"interval_name":"Monthly","billing_rule":"FREQ=MONTHLY","custom_billing_rule":""}],"is_subscription_only":false,"allow_prepaid":false,"allow_dynamic_discount":false,"is_prepaid_only":false,"should_continue_prepaid":false,"continue_prepaid_type":"as_standard","prepaid_durations":[],"dynamic_discounts":[],"selection_options":[{"platform_entity_id":"7926595223730"}],"discount_type":"no_discount","percent_discount":0,"fixed_discount":0,"can_add_to_cart":true}];
1391    }
1392
1393    window.BOLD.subscriptions.isFeatureFlagEnabled = function (featureFlag) {
1394        for (var i = 0; i < window.BOLD.subscriptions.config.featureFlags.length; i++) {
1395            if (window.BOLD.subscriptions.config.featureFlags[i] === featureFlag){
1396                return true;
1397            }
1398        }
1399        return false;
1400    }
1401
1402    window.BOLD.subscriptions.logger = {
1403        tag: "bold_subscriptions",
1404        // the bold subscriptions log level
1405        // 0 - errors (default)
1406        // 1 - warnings + errors
1407        // 2 - info + warnings + errors
1408        // use window.localStorage.setItem('boldSubscriptionsLogLevel', x) to set the log level
1409        levels: {
1410            ERROR: 0,
1411            WARN: 1,
1412            INFO: 2,
1413        },
1414        level: parseInt((window.localStorage && window.localStorage.getItem('boldSubscriptionsLogLevel')) || "0", 10),
1415        _log: function(callArgs, level) {
1416            if (!window.console) {
1417                return null;
1418            }
1419
1420            if (window.BOLD.subscriptions.logger.level < level) {
1421                return;
1422            }
1423
1424            var params = Array.prototype.slice.call(callArgs);
1425            params.unshift(window.BOLD.subscriptions.logger.tag);
1426
1427            switch (level) {
1428                case window.BOLD.subscriptions.logger.levels.INFO:
1429                    console.info.apply(null, params);
1430                    return;
1431                case window.BOLD.subscriptions.logger.levels.WARN:
1432                    console.warn.apply(null, params);
1433                    return;
1434                case window.BOLD.subscriptions.logger.levels.ERROR:
1435                    console.error.apply(null, params);
1436                    return;
1437                default:
1438                    console.log.apply(null, params);
1439                    return;
1440            }
1441        },
1442        info: function() {
1443            window.BOLD.subscriptions.logger._log(arguments, window.BOLD.subscriptions.logger.levels.INFO);
1444        },
1445        warn: function() {
1446            window.BOLD.subscriptions.logger._log(arguments, window.BOLD.subscriptions.logger.levels.WARN);
1447        },
1448        error: function() {
1449            window.BOLD.subscriptions.logger._log(arguments, window.BOLD.subscriptions.logger.levels.ERROR);
1450        }
1451    }
1452
1453    window.BOLD.subscriptions.shouldLoadSubscriptionGroupFromAPI = function() {
1454        return window.BOLD.subscriptions.config.loadSubscriptionGroupFrom === window.BOLD.subscriptions.config.loadSubscriptionGroupFromTypes['BSUB_API'];
1455    }
1456
1457    window.BOLD.subscriptions.getSubscriptionGroupFromProductId = function (productId) {
1458        var data = window.BOLD.subscriptions.data;
1459        var foundGroup = null;
1460        for (var i = 0; i < data.subscriptionGroups.length; i += 1) {
1461            var subscriptionGroup = data.subscriptionGroups[i];
1462            for (var j = 0; j < subscriptionGroup.selection_options.length; j += 1) {
1463                var selectionOption = subscriptionGroup.selection_options[j];
1464                if (selectionOption.platform_entity_id === productId.toString()) {
1465                    foundGroup = subscriptionGroup;
1466                    break;
1467                }
1468            }
1469            if (foundGroup) {
1470                break;
1471            }
1472        }
1473        return foundGroup;
1474    };
1475
1476    window.BOLD.subscriptions.getSubscriptionGroupById = function(subGroupId) {
1477        var subscriptionGroups = window.BOLD.subscriptions.data.subscriptionGroups;
1478
1479        for (var i = 0; i < subscriptionGroups.length; i += 1) {
1480            var subGroup = subscriptionGroups[i];
1481            if (subGroup.id === subGroupId) {
1482                return subGroup;
1483            }
1484        }
1485
1486        return null;
1487    };
1488
1489    window.BOLD.subscriptions.addSubscriptionGroup = function (subscriptionGroup) {
1490        if(!window.BOLD.subscriptions.getSubscriptionGroupById(subscriptionGroup.id))
1491        {
1492            window.BOLD.subscriptions.data.subscriptionGroups.push(subscriptionGroup);
1493        }
1494    }
1495
1496    window.BOLD.subscriptions.getSubscriptionGroupPrepaidDurationById = function(subscriptionGroupId, prepaidDurationId) {
1497        var subscriptionGroup = window.BOLD.subscriptions.getSubscriptionGroupById(subscriptionGroupId);
1498
1499        if (
1500            !subscriptionGroup
1501            || !subscriptionGroup.prepaid_durations
1502            || !subscriptionGroup.prepaid_durations.length
1503        ) {
1504            return null;
1505        }
1506
1507        for (var i = 0; i < subscriptionGroup.prepaid_durations.length; i++) {
1508            var prepaidDuration = subscriptionGroup.prepaid_durations[i];
1509            if (prepaidDuration.id === prepaidDurationId) {
1510                return prepaidDuration;
1511            }
1512        }
1513
1514        return null;
1515    }
1516
1517    window.BOLD.subscriptions.getSubscriptionGroupBillingRuleById = function(subGroup, billingRuleId) {
1518        for (var i = 0; i < subGroup.billing_rules.length; i += 1) {
1519            var billingRule = subGroup.billing_rules[i];
1520            if (billingRule.id === billingRuleId) {
1521                return billingRule;
1522            }
1523        }
1524
1525        return null;
1526    };
1527
1528    window.BOLD.subscriptions.toggleDisabledAddToCartButtons = function(d) {
1529        var addToCartForms = document.querySelectorAll(window.BOLD.subscriptions.config.addToCartFormSelectors.join(','));
1530        var disable = !!d;
1531        for (var i = 0; i < addToCartForms.length; i++) {
1532            var addToCartForm = addToCartForms[i];
1533            var productId = window.BOLD.subscriptions.getProductIdFromAddToCartForm(
1533addToCartForm);
1534            var subscriptionGroup = window.BOLD.subscriptions.getSubscriptionGroupFromProductId(productId);
1535
1536            if(window.BOLD.subscriptions.isFeatureFlagEnabled('BS2-4659_improve_large_group_selection') ) {
1537                if (subscriptionGroup || window.BOLD.subscriptions.shouldLoadSubscriptionGroupFromAPI()) {
1538                    var addToCartButtons = addToCartForm.querySelectorAll(window.BOLD.subscriptions.config.addToCartButtonSelectors.join(','));
1539                    for (var j = 0; j < addToCartButtons.length; j++) {
1540                        var addToCartButton = addToCartButtons[j];
1541                        var toggleAction = disable ?  addToCartButton.setAttribute : addToCartButton.removeAttribute;
1542
1543                        addToCartButton.disabled = disable;
1544                        toggleAction.call(addToCartButton, 'data-disabled-by-subscriptions', disable);
1545                    }
1546                }
1547            } else {
1548                if (subscriptionGroup) {
1549                    var addToCartButtons = addToCartForm.querySelectorAll(window.BOLD.subscriptions.config.addToCartButtonSelectors.join(','));
1550                    for (var j = 0; j < addToCartButtons.length; j++) {
1551                        var addToCartButton = addToCartButtons[j];
1552                        var toggleAction = disable ?  addToCartButton.setAttribute : addToCartButton.removeAttribute;
1553
1554                        addToCartButton.disabled = disable;
1555                        toggleAction.call(addToCartButton, 'data-disabled-by-subscriptions', disable);
1556                    }
1557                }
1558            }
1559
1560        }
1561    };
1562
1563    window.BOLD.subscriptions.disableAddToCartButtons = function () {
1564        // only disable the add to cart buttons if the app isn't loaded yet
1565        if (!window.BOLD.subscriptions.app) {
1566            window.BOLD.subscriptions.toggleDisabledAddToCartButtons(true);
1567        } else {
1568            window.BOLD.subscriptions.enableAddToCartButtons();
1569        }
1570    };
1571
1572    window.BOLD.subscriptions.enableAddToCartButtons = function () {
1573        document.removeEventListener('click', window.BOLD.subscriptions.preventSubscriptionAddToCart);
1574        window.BOLD.subscriptions.toggleDisabledAddToCartButtons(false);
1575    };
1576
1577    window.BOLD.subscriptions.toggleDisabledCheckoutButtons = function(d) {
1578        var checkoutButtons = document.querySelectorAll(window.BOLD.subscriptions.config.checkoutButtonSelectors.join(','));
1579        var disable = !!d;
1580        for (var i = 0; i < checkoutButtons.length; i++) {
1581            var checkoutButton = checkoutButtons[i];
1582            var toggleAction = disable ? checkoutButton.setAttribute : checkoutButton.removeAttribute;
1583
1584            checkoutButton.disabled = disable;
1585            toggleAction.call(checkoutButton, 'data-disabled-by-subscriptions', disable);
1586        }
1587    }
1588
1589    window.BOLD.subscriptions.disableCheckoutButtons = function() {
1590        // only disable the checkout buttons if the app isn't loaded yet
1591        if (!window.BOLD.subscriptions.app) {
1592            window.BOLD.subscriptions.toggleDisabledCheckoutButtons(true);
1593        } else {
1594            window.BOLD.subscriptions.enableCheckoutButtons();
1595        }
1596    }
1597
1598    window.BOLD.subscriptions.enableCheckoutButtons = function() {
1599        document.removeEventListener('click', window.BOLD.subscriptions.preventCheckout);
1600        window.BOLD.subscriptions.toggleDisabledCheckoutButtons(false);
1601    }
1602
1603    window.BOLD.subscriptions.hasSuccessfulAddToCarts = function() {
1604        if (typeof(Storage) !== "undefined") {
1605            var successfulAddToCarts = JSON.parse(
1606                window.localStorage.getItem('boldSubscriptionsSuccessfulAddToCarts') || '[]'
1607            );
1608            if (successfulAddToCarts.length > 0) {
1609                return true;
1610            }
1611        }
1612
1613        return false;
1614    }
1615
1616    window.BOLD.subscriptions.hasPendingAddToCarts = function() {
1617        if (typeof(Storage) !== "undefined") {
1618            var pendingAddToCarts = JSON.parse(
1619                window.localStorage.getItem('boldSubscriptionsPendingAddToCarts') || '[]'
1620            );
1621            if (pendingAddToCarts.length > 0) {
1622                return true;
1623            }
1624        }
1625
1626        return false;
1627    }
1628
1629    window.BOLD.subscriptions.addJSAsset = function(src, deferred) {
1630        var scriptTag = document.getElementById('bold-subscriptions-app-embed-script');
1631        var jsElement = document.createElement('script');
1632        jsElement.type = 'text/javascript';
1633        jsElement.src = src;
1634        if (deferred) {
1635           jsElement.defer = true;
1636        }
1637        scriptTag.parentNode.insertBefore(jsElement, scriptTag);
1638    };
1639
1640    window.BOLD.subscriptions.addCSSAsset = function(href) {
1641        var scriptTag = document.getElementById('bold-subscriptions-app-embed-script');
1642        var cssElement = document.createElement('link');
1643        cssElement.href = href;
1644        cssElement.rel = 'stylesheet';
1645        scriptTag.parentNode.insertBefore(cssElement, scriptTag);
1646    };
1647
1648    window.BOLD.subscriptions.loadStorefrontAssets = function loadStorefrontAssets() {
1649        var assets = window.BOLD.subscriptions.config.assets;
1650        window.BOLD.subscriptions.addCSSAsset(window.BOLD.subscriptions.config.assetBaseUrl + '/static/' + assets['storefront.css']);
1651        window.BOLD.subscriptions.addJSAsset(window.BOLD.subscriptions.config.assetBaseUrl + '/static/' + assets['storefront.js'], false);
1652    };
1653
1654    window.BOLD.subscriptions.loadCustomerPortalAssets = function loadCustomerPortalAssets() {
1655      if (document.getElementById('customer-portal-root') || document.getElementsByClassName('bsub-express-add-ons-widget')) {
1656        var assets = window.BOLD.subscriptions.config.assets;
1657        window.BOLD.subscriptions.addCSSAsset(window.BOLD.subscriptions.config.assetBaseUrl + '/static/' + assets['customer_portal.css']);
1658        window.BOLD.subscriptions.addJSAsset(window.BOLD.subscriptions.config.assetBaseUrl + '/static/' + assets['customer_portal.js'], true);
1659      }
1660    };
1661
1662    window.BOLD.subscriptions.processManifest = function() {
1663        if (!window.BOLD.subscriptions.processedManifest) {
1664            window.BOLD.subscriptions.processedManifest = true;
1665            window.BOLD.subscriptions.config.assets = JSON.parse(this.responseText);
1666
1667            
1668            window.BOLD.subscriptions.loadCustomerPortalAssets();
1669        }
1670    };
1671
1672    window.BOLD.subscriptions.addInitialLoadingMessage = function() {
1673        var customerPortalNode = document.getElementById('customer-portal-root');
1674        if (customerPortalNode && window.BOLD.subscriptions.config.requireMSPInitialLoadingMessage) {
1675            customerPortalNode.innerHTML = '<div class="bold-subscriptions-loader-container"><div class="bold-subscriptions-loader"></div></div>';
1676        }
1677    }
1678
1679    window.BOLD.subscriptions.contentLoaded = function() {
1680        window.BOLD.subscriptions.data.contentLoadedEventTriggered = true;
1681        window.BOLD.subscriptions.addInitialLoadingMessage();
1682        
1683    };
1684
1685    window.BOLD.subscriptions.preventSubscriptionAddToCart = function(e) {
1686        if (e.target.matches(window.BOLD.subscriptions.config.addToCartButtonSelectors.join(',')) && e.target.form) {
1687            var productId = window.BOLD.subscriptions.getProductIdFromAddToCartForm(e.target.form);
1688            var subscriptionGroup = window.BOLD.subscriptions.getSubscriptionGroupFromProductId(productId);
1689            if(window.BOLD.subscriptions.isFeatureFlagEnabled('BS2-4659_improve_large_group_selection'))
1690            {
1691                if (subscriptionGroup || window.BOLD.subscriptions.shouldLoadSubscriptionGroupFromAPI()) {
1692                    // This code prevents products in subscription groups from being added to the cart before the
1693                    // Subscriptions app fully loads. Once the subscriptions app loads it will re-enable the
1694                    // buttons. Use window.BOLD.subscriptions.enableAddToCartButtons enable them manually.
1695                    e.preventDefault();
1696                    return false;
1697                }
1698            } else {
1699                if (subscriptionGroup) {
1700                    // This code prevents products in subscription groups from being added to the cart before the
1701                    // Subscriptions app fully loads. Once the subscriptions app loads it will re-enable the
1702                    // buttons. Use window.BOLD.subscriptions.enableAddToCartButtons enable them manually.
1703                    e.preventDefault();
1704                    return false;
1705                }
1706            }
1707
1708        }
1709    };
1710
1711    window.BOLD.subscriptions.preventCheckout = function(e) {
1712        if (
1713            e.target.matches(window.BOLD.subscriptions.config.checkoutButtonSelectors.join(','))
1714            && (window.BOLD.subscriptions.hasSuccessfulAddToCarts() || window.BOLD.subscriptions.hasPendingAddToCarts())
1715        ) {
1716            // This code prevents checkouts on the shop until the Subscriptions app fully loads.
1717            // When the Subscriptions app is ready it will enable the checkout buttons itself.
1718            // Use window.BOLD.subscriptions.enableCheckoutButtons to enable them manually.
1719            e.preventDefault();
1720            return false;
1721        }
1722    }
1723
1724    if (!window.BOLD.subscriptions.config.legacyAssetsLoaded) {
1725        
1726        document.addEventListener('DOMContentLoaded', window.BOLD.subscriptions.contentLoaded);
1727    }
1728
1729    if (!Element.prototype.matches) {
1730        Element.prototype.matches =
1731            Element.prototype.matchesSelector ||
1732            Element.prototype.mozMatchesSelector ||
1733            Element.prototype.msMatchesSelector ||
1734            Element.prototype.oMatchesSelector ||
1735            Element.prototype.webkitMatchesSelector ||
1736            function(s) {
1737                var matches = (this.document || this.ownerDocument).querySelectorAll(s),
1738                    i = matches.length;
1739                while (--i >= 0 && matches.item(i) !== this) {}
1740                return i > -1;
1741            };
1742    }
1743
1744    if (!Element.prototype.closest) {
1745        Element.prototype.closest = function(s) {
1746            var el = this;
1747
1748            do {
1749                if (Element.prototype.matches.call(el, s)) return el;
1750                el = el.parentElement || el.parentNode;
1751            } while (el !== null && el.nodeType === 1);
1752            return null;
1753        };
1754    }
1755
1756    window.BOLD.subscriptions.setVisibilityOfAdditionalCheckoutButtons = function (isVisible) {
1757        if (window.BOLD.subscriptions.config.additionalCheckoutSelectors === undefined) {
1758            return;
1759        }
1760
1761        var selectors = window.BOLD.subscriptions.config.additionalCheckoutSelectors;
1762
1763        for (var i = 0; i < selectors.length; i++) {
1764            var elements = document.querySelectorAll(selectors[i]);
1765
1766            for (var j = 0; j < elements.length; j++) {
1767                elements[j].style.display = isVisible ? 'block' : 'none';
1768            }
1769        }
1770    }
1771
1772    window.BOLD.subscriptions.hideAdditionalCheckoutButtons = function() {
1773        window.BOLD.subscriptions.setVisibilityOfAdditionalCheckoutButtons(false);
1774    };
1775
1776    window.BOLD.subscriptions.showAdditionalCheckoutButtons = function() {
1777        window.BOLD.subscriptions.setVisibilityOfAdditionalCheckoutButtons(true);
1778    };
1779
1780    window.BOLD.subscriptions.enhanceMspUrls = function(data) {
1781        var mspUrl = 'https://sub.boldapps.net/shop/7003/customer_portal';
1782        var elements = document.querySelectorAll("a[href='"+mspUrl+"']");
1783
1784        if(!elements.length || !data.success) {
1785            return;
1786        }
1787
1788        for (var i = 0; i < elements.length; i++) {
1789            elements[i].href = elements[i].href + "?jwt="+data.value.jwt+"&customerId="+data.value.customerId;
1790        }
1791    };
1792
1793    if (!window.BOLD.subscriptions.config.legacyAssetsLoaded) {
1794        window.addEventListener('load', function () {
1795          if (document.getElementById('customer-portal-root')) {
1796            window.BOLD.subscriptions.getJWT(window.BOLD.subscriptions.enhanceMspUrls);
1797          }
1798        });
1799
1800        // This will be called immediately
1801        // Use this anonymous function to avoid polluting the global namespace
1802        (function() {
1803            var xhr = new XMLHttpRequest();
1804            xhr.addEventListener('load', window.BOLD.subscriptions.processManifest);
1805            xhr.open('GET', window.BOLD.subscriptions.config.assetBaseUrl + '/static/manifest.json?t=' + (new Date()).getTime());
1806            xhr.send();
1807        })()
1808    }
1809
1810    window.BOLD.subscriptions.patches.patchCashier = function() {
1811        if (window.BOLD && window.BOLD.checkout) {
1812            window.BOLD.checkout.disable();
1813            window.BOLD.checkout.listenerFn = window.BOLD.subscriptions.patches.cashierListenerFn;
1814            window.BOLD.checkout.enable();
1815        } else if (window.BOLD.subscriptions.patches.currentCashierPatchAttempts < window.BOLD.subscriptions.patches.maxCashierPatchAttempts) {
1816            window.BOLD.subscriptions.patches.currentCashierPatchAttempts++;
1817            setTimeout(window.BOLD.subscriptions.patches.patchCashier, 100);
1818        }
1819    };
1820
1821    window.BOLD.subscriptions.patches.finishCheckout = function(event, form, cart) {
1822        window.BOLD.subscriptions.patches.currentCheckoutRetries++;
1823
1824        if (!window.BOLD.subscriptions.app
1825            && window.BOLD.subscriptions.patches.currentCheckoutRetries < window.BOLD.subscriptions.patches.maxCheckoutRetries
1826        ) {
1827            setTimeout(function () { window.BOLD.subscriptions.patches.finishCheckout(event, form, cart); }, 100);
1828            return;
1829        } else if (window.BOLD.subscriptions.app) {
1830            window.BOLD.subscriptions.patches.currentCheckoutRetries = 0;
1831            window.BOLD.subscriptions.app.addCartParams(form, cart);
1832        }
1833
1834        var noSubscriptions = false;
1835        if ((window.BOLD.subscriptions.app && window.BOLD.subscriptions.app.successfulAddToCarts.length === 0)
1836            || !window.BOLD.subscriptions.app
1837        ) {
1838            noSubscriptions = true;
1839            event.target.dataset.cashierConfirmedNoPlugins = true;
1840
1841            if (window.BOLD.subscriptions.setCashierFeatureToken) {
1842                window.BOLD.subscriptions.setCashierFeatureToken(false);
1843            }
1844        }
1845
1846        if ((noSubscriptions && window.BOLD.subscriptions.config.cashierPluginOnlyMode)
1847            || (typeof BOLD.checkout.isFeatureRequired === 'function' && !BOLD.checkout.isFeatureRequired())
1848        ) {
1849            // send them to the original checkout when in plugin only mode
1850            // and either BSUB is there but there are no subscription products
1851            // or BSUB isn't there at all
1852            if (form.dataset.old_form_action) {
1853                form.action = form.dataset.old_form_action;
1854            }
1855            event.target.click();
1856        } else {
1857            // sends them to Cashier since BSUB got a chance to add it's stuff
1858            // and plugin only mode is not enabled
1859            form.submit();
1860        }
1861    };
1862</script>
vendor: 1 bytes, line 1862
1862
1863<script id="bold-subscriptions-app-embed-platform-script" type="text/javascript" defer>
1864    window.BOLD.subscriptions.config.shopPlatformId = '26810187954';
1865    window.BOLD.subscriptions.config.appSlug = 'subscriptions';
1866
1867    window.BOLD = window.BOLD || {};
1868    window.BOLD.subscriptions = window.BOLD.subscriptions || {};
1869    window.BOLD.subscriptions.data = window.BOLD.subscriptions.data || {};
1870    window.BOLD.subscriptions.data.platform = window.BOLD.subscriptions.data.platform || {};
1871    window.BOLD.subscriptions.data.platform.customer = { id: '' };
1872    window.BOLD.subscriptions.data.platform.product = null;
1873    window.BOLD.subscriptions.data.platform.products = [];
1874    window.BOLD.subscriptions.data.platform.variantProductMap = {};
1875
1876    window.BOLD.subscriptions.getProductByVariantId = function(variantId) {
1877        if (window.BOLD.subscriptions.data.platform.product && 
1878            window.BOLD.subscriptions.data.platform.product.variants) {
1879            for (var i = 0; i < window.BOLD.subscriptions.data.platform.product.variants.length; i++) {
1880                if (window.BOLD.subscriptions.data.platform.product.variants[i].id === variantId) {
1881                    return window.BOLD.subscriptions.data.platform.product;
1882                }
1883            }
1884        }
1885
1886        if (window.BOLD.subscriptions.data.platform.variantProductMap[variantId]) {
1887            return window.BOLD.subscriptions.data.platform.variantProductMap[variantId];
1888        }
1889
1890        var productElements = document.querySelectorAll('[data-product-id]');
1891        for (var i = 0; i < productElements.length; i++) {
1892            var productJsonElement = productElements[i].querySelector('[data-product-json]');
1893            
1894            if (productJsonElement) {
1895                try {
1896                    var productData = JSON.parse(productJsonElement.textContent);
1897                    if (productData && productData.variants) {
1898                        for (var j = 0; j < productData.variants.length; j++) {
1899                            if (productData.variants[j].id === variantId) {
1900                                return productData;
1901                            }
1902                        }
1903                    }
1904                } catch (e) {
1905                    // Continue if parsing fails
1906                }
1907            }
1908        }
1909
1910        return null;
1911    }
1912
1913    window.BOLD.subscriptions.config.addToCartFormSelectors.push(
1914        '.product-form.product-form-product-template:not(.bold-subscriptions-no-widget)'
1915        ,'.product-form.product-form--payment-button:not(.bold-subscriptions-no-widget)'
1916    );
1917    window.BOLD.subscriptions.config.addToCartButtonSelectors.push('[type="submit"]');
1918    window.BOLD.subscriptions.config.quickAddToCartButtonSelectors.push('a[data-event-type="product-click"]');
1919    window.BOLD.subscriptions.config.widgetInsertBeforeSelectors.push('[type="submit"]');
1920    window.BOLD.subscriptions.config.cartElementSelectors.push('form[action="/cart"]');
1921    window.BOLD.subscriptions.config.cartTotalElementSelectors.push('[data-cart-subtotal]', '.text-right .ajaxcart__subtotal');
1922    window.BOLD.subscriptions.config.checkoutButtonSelectors.push(
1923        '[name="checkout"]',
1924        '[href*="checkout"]:not([href*="tools/checkout"])',
1925        '[onclick*="checkout"]:not([onclick*="tools/checkout"])',
1926    );
1927
1928    // Discount text markup template
1929    
1930    window.BOLD.subscriptions.config.discountItemTemplate = '<div class="bold-subscriptions-discount"><div class="bold-subscriptions-discount__details">{{details}}</div><div class="bold-subscriptions-discount__total">{{total}}</div></div>';
1931    
1932
1933    window.BOLD.subscriptions.getProductIdFromAddToCartForm = function(addToCartForm) {
1934        var idInput = addToCartForm.querySelector('[name="id"]');
1935        if (idInput === null) {
1936            window.BOLD.subscriptions.logger.error('could not get variant id input from add to cart form — make sure your form has an input with [name="id"]')
1937            return null;
1938        }
1939
1940        var variantId = parseInt(idInput.value, 10);
1941        if (isNaN(variantId)) {
1942            window.BOLD.subscriptions.logger.error('could not parse variant id from [name="id"] input')
1943            return null;
1944        }
1945
1946        var product = window.BOLD.subscriptions.getProductByVariantId(variantId);
1947
1948        if (product === undefined || product === null) {
1949            window.BOLD.subscriptions.logger.error('could not find product data for variant id ' + variantId + ' — product data may not be available on this page')
1950            return null;
1951        }
1952
1953        return product.id;
1954    };
1955
1956    window.BOLD.subscriptions.getAddToCartForms = function() {
1957        var forms = [];
1958        var idInputs = document.querySelectorAll('[name="id"]');
1959
1960        for (var i = 0; i < idInputs.length; i++) {
1961            var idInput = idInputs[i];
1962            var form = idInput.closest('form:not(.bold-subscriptions-no-widget)');
1963            if (form) {
1964                forms.push(form);
1965            }
1966        }
1967
1968        return forms;
1969    };
1970
1971    window.BOLD.subscriptions.getJWT = function (callback) {
1972        if(window.BOLD.subscriptions.data.platform.customer.id !== '') {
1973            var shopPlatformId = '26810187954';
1974            var appSlug = 'subscriptions';
1975            var customerPlatformId = window.BOLD.subscriptions.data.platform.customer.id;
1976            var proxyPath = '/apps/app-proxy/customers/v1/shops/'+shopPlatformId+'/apps/'+appSlug+'/customers/pid/'+customerPlatformId+'/jwt';
1977
1978            var xmlhttp = new XMLHttpRequest();
1979
1980            xmlhttp.onreadystatechange = function() {
1981                if (xmlhttp.readyState === window.BOLD.subscriptions.config.XMLHttpRequest.DONE) {
1982                    if (xmlhttp.status === 200) {
1983                        var data = JSON.parse(xmlhttp.responseText);
1984                        callback({
1985                            success: true,
1986                            value: {
1987                                jwt: data.bold_platform_jwt,
1988                                customerId: window.BOLD.subscriptions.data.platform.customer.id,
1989                            },
1990                        });
1991                    } else if (xmlhttp.status === 404) {
1992                        callback({
1993                            success: false,
1994                            error: 'not_logged_in',
1995                        });
1996                    } else {
1997                        callback({
1998                            success: false,
1999                            error: 'unknown',
2000                        });
2001                    }
2002                }
2003            };
2004
2005            xmlhttp.open("GET", proxyPath, true);
2006            xmlhttp.setRequestHeader('Accept', 'application/liquid');
2007            xmlhttp.send();
2008        } else {
2009            callback({
2010                success: false,
2011                error: 'not_logged_in',
2012            });
2013        }
2014    };
2015
2016    window.BOLD.subscriptions.setCashierFeatureToken = function(value) {
2017        if (window.BOLD.checkout_features_defaults && window.BOLD.subscriptions.config.cashierApplicationUUID) {
2018            window.BOLD.checkout_features_defaults.forEach(function(item) {
2019                if (item.id === window.BOLD.subscriptions.config.cashierApplicationUUID) {
2020                    item.require = value;
2021                }
2022            });
2023        }
2024    };
2025
2026    // Cashier patches
2027    window.BOLD.subscriptions.patches.cashierListenerFn = function(event) {
2028        if (window.BOLD.checkout.isCheckoutButton(event.target) && window.BOLD.checkout.isEnabled()) {
2029            window.BOLD.subscriptions.patches.pushToCashier(event);
2030        } else if(window.BOLD.checkout.isCheckoutButton(event.target) && typeof window.cashier_installed_on_site === 'undefined') {
2031            var request = new XMLHttpRequest();
2032            request.open('HEAD', '/apps/checkout/isInstalled', false);
2033            request.send(null);
2034
2035            if(request.status >= 200 && request.status < 400) {
2036                window.BOLD.subscriptions.patches.pushToCashier(event);
2037            } else {
2038                window.cashier_installed_on_site = false;
2039            }
2040        }
2041    };
2042
2043    window.BOLD.subscriptions.localTime = function() {
2044        var localDate = new Date();
2045        return localDate.getTime();
2046    };
2047
2048
2049    window.BOLD.subscriptions.patches.pushToCashier = function(event) {
2050        event.preventDefault();
2051        var form = window.BOLD.checkout.getForm(event.target);
2052        var formData = new FormData(form);
2053        var request = new XMLHttpRequest();
2054        request.open('POST', '/cart/update.js?tmp=' + Date.now(), true);
2055        request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
2056
2057        request.onload = function() {
2058            if (request.status >= 200 && request.status < 400) {
2059                // Success!
2060                var cart = JSON.parse(request.responseText);
2061
2062                // If items are empty redirect back to the cart
2063                if (cart.items.length === 0) {
2064                    return window.location.href = '/cart';
2065                }
2066
2067                cart.items.forEach(function(element) {
2068                    delete element.product_description;
2069                });
2070
2071                if (document.getElementById('CartSpecialInstructions')) {
2072                    // If the cart note exists, grab its value
2073                    cart.note = document.getElementById('CartSpecialInstructions').value;
2074                }
2075
2076                var cartObj = JSON.stringify(cart);
2077
2078                var form = window.BOLD.checkout.getForm(event.target);
2079                form.dataset.old_form_action = form.action;
2080                form.action = '/apps/checkout/begin-checkout' + googleAnalyticsGetParamString({});
2081                var cartCookie = window.BOLD.checkout.getCookie('cart');
2082                var element = document.createElement('INPUT');
2083                element.type = 'HIDDEN';
2084                element.name = 'cart_id';
2085                element.value = cartCookie;
2086                form.appendChild(element);
2087
2088                var dateElement = document.createElement('INPUT');
2089                dateElement.type = 'HIDDEN';
2090                dateElement.name = 'checkout_local_time';
2091                dateElement.value = window.BOLD.subscriptions.localTime();
2092                form.appendChild(dateElement);
2093
2094                var cartElement = document.createElement('INPUT');
2095                cartElement.type = 'HIDDEN';
2096                cartElement.name = 'cart';
2097                cartElement.value = cartObj;
2098                form.appendChild(cartElement);
2099                form.method = 'POST';
2100
2101                if(window.BOLD && window.BOLD.checkout && typeof window.BOLD.checkout.languageIsoCode === 'string') {
2102                    var langInput = document.createElement('INPUT');
2103                    langInput.type = 'HIDDEN';
2104                    langInput.name = 'language_iso';
2105                    langInput.value = window.BOLD.checkout.languageIsoCode;
2106                    form.appendChild(langInput);
2107                }
2108
2109                if (window.BOLD && window.BOLD.common && typeof window.BOLD.common.eventEmitter === 'object' && typeof window.BOLDCURRENCY !== 'undefined') {
2110                    window.BOLD.common.eventEmitter.emit('BOLD_CASHIER_checkout', {target: form});
2111                }
2112
2113                window.BOLD.subscriptions.patches.finishCheckout(event, form, cart);
2114            }
2115        };
2116
2117        request.send(formData);
2118    };
2119
2120    
2121</script>
2121
2122
2123
2124<!-- END app block --><link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
2125<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: 26810187954,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "cart"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 2125
2125
2126<script>
2127  window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || [];
2128</script>
vendor: 1 bytes, line 2128
2128
2129<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}
2129).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: 26810187954,storefrontBaseUrl: "https://safetracksgpsshop.ca",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://safetracksgpsshop.ca/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"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":"SafeTracksGPS","paymentSettings":{"currencyCode":"CAD"},"myshopifyDomain":"safetracksgps.myshopify.com","countryCode":"CA","storefrontUrl":"https:\/\/safetracksgpsshop.ca"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://safetracksgpsshop.ca/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"132753686706","themeStoreId":"796","themePublished":"true","eventMetadataId":"28c885ef-9c1f-4aa8-a101-255cd9167449","pageType":"cart","shopId":"26810187954","storefrontBaseUrl":"https:\/\/safetracksgpsshop.ca","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
2129<script>
2130  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
2131  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
2132  window.ShopifyAnalytics.meta.currency = 'CAD';
2133  var meta = {"page":{"pageType":"cart","requestId":"df0d4841-ad02-4afd-b351-5af70fa4a03a-1791109901"}};
2134  for (var attr in meta) {
2135    window.ShopifyAnalytics.meta[attr] = meta[attr];
2136  }
2137</script>
vendor: 1 bytes, line 2137
2137
2138<script class="analytics">
2139  (function () {
2140    var customDocumentWrite = function(content) {
2141      var jquery = null;
2142
2143      if (window.jQuery) {
2144        jquery = window.jQuery;
2145      } else if (window.Checkout && window.Checkout.$) {
2146        jquery = window.Checkout.$;
2147      }
2148
2149      if (jquery) {
2150        jquery('body').append(content);
2151      }
2152    };
2153
2154    var hasLoggedConversion = function(token) {
2155      if (token) {
2156        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
2157      }
2158      return false;
2159    }
2160
2161    var setCookieIfConversion = function(token) {
2162      if (token) {
2163        var twoMonthsFromNow = new Date(Date.now());
2164        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
2165
2166        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
2167      }
2168    }
2169
2170    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
2171    window.ShopifyAnalytics.lib.trekkie = window.trekkie;
2172    if (trekkie.integrations) {
2173      return;
2174    }
2175    trekkie.methods = [
2176      'identify',
2177      'page',
2178      'ready',
2179      'track',
2180      'trackForm',
2181      'trackLink'
2182    ];
2183    trekkie.factory = function(method) {
2184      return function() {
2185        var args = Array.prototype.slice.call(arguments);
2186        args.unshift(method);
2187        trekkie.push(args);
2188        if (method == 'track' || method == 'page') {
2189          var pageUrl;
2190          try {
2191            pageUrl = window.location.href;
2192          } catch (e) {}
2193          var pageReferrer;
2194          try {
2195            pageReferrer = document.referrer;
2196          } catch (e) {}
2197          try {
2198            if (window.__TREKKIE_SHIM_QUEUE == null) {
2199              window.__TREKKIE_SHIM_QUEUE = [];
2200            }
2201            window.__TREKKIE_SHIM_QUEUE.push({
2202              from: 'trekkie-stub',
2203              method: method,
2204              args: args.slice(1),
2205              pageContext: {
2206                url: pageUrl,
2207                referrer: pageReferrer
2208              }
2209            });
2210          } catch (e) {
2211            // no-op
2212          }
2213        }
2214        return trekkie;
2215      };
2216    };
2217    for (var i = 0; i < trekkie.methods.length; i++) {
2218      var key = trekkie.methods[i];
2219      trekkie[key] = trekkie.factory(key);
2220    }
2221    trekkie.load = function(config) {
2222      trekkie.config = config || {};
2223      trekkie.config.initialDocumentCookie = document.cookie;
2224      var first = document.getElementsByTagName('script')[0];
2225var script = document.createElement('script');
2226script.type = 'text/javascript';
2227script.onerror = function(e) {
2228  var scriptFallback = document.createElement('script');
2229  scriptFallback.type = 'text/javascript';
2230  scriptFallback.onerror = function(error) {
2231          var Monorail = {
2232      produce: function produce(monorailDomain, schemaId, payload) {
2233        var currentMs = new Date().getTime();
2234        var event = {
2235          schema_id: schemaId,
2236          payload: payload,
2237          metadata: {
2238            event_created_at_ms: currentMs,
2239            event_sent_at_ms: currentMs
2240          }
2241        };
2242        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
2243      },
2244      sendRequest: function sendRequest(endpointUrl, payload) {
2245        // Try the sendBeacon API
2246        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
2247          var blobData = new window.Blob([payload], {
2248            type: 'text/plain'
2249          });
2250
2251          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
2252            return true;
2253          } // sendBeacon was not successful
2254
2255        } // XHR beacon
2256
2257        var xhr = new XMLHttpRequest();
2258
2259        try {
2260          xhr.open('POST', endpointUrl);
2261          xhr.setRequestHeader('Content-Type', 'text/plain');
2262          xhr.send(payload);
2263        } catch (e) {
2264          console.log(e);
2265        }
2266
2267        return false;
2268      },
2269      isIos12: function isIos12() {
2270        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
2271      }
2272    };
2273    Monorail.produce('monorail-edge.shopifysvc.com',
2274      'trekkie_storefront_load_errors/1.1',
2275      {shop_id: 26810187954,
2276      theme_id: 132753686706,
2277      app_name: "storefront",
2278      context_url: window.location.href,
2279      source_url: "//safetracksgpsshop.ca/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"});
2280
2281  };
2282  scriptFallback.async = true;
2283  scriptFallback.src = '//safetracksgpsshop.ca/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js';
2284  first.parentNode.insertBefore(scriptFallback, first);
2285};
2286script.async = true;
2287script.src = '//safetracksgpsshop.ca/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js';
2288first.parentNode.insertBefore(script, first);
2289
2290    };
2291    trekkie.load(
2292      {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":26810187954,"isMerchantRequest":null,"themeId":132753686706,"themeCityHash":"4667151912421486723","contentLanguage":"en","currency":"CAD","eventMetadataId":"28c885ef-9c1f-4aa8-a101-255cd9167449"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}}
2293    );
2294
2295    var loaded = false;
2296    trekkie.ready(function() {
2297      if (loaded) return;
2298      loaded = true;
2299
2300      window.ShopifyAnalytics.lib = window.trekkie;
2301
2302      var originalDocumentWrite = document.write;
2303      document.write = customDocumentWrite;
2304      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
2305      document.write = originalDocumentWrite;
2306
2307      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
2308      var token = match? match[1]: undefined;
2309      if (!hasLoggedConversion(token)) {
2310        setCookieIfConversion(token);
2311        
2312      }
2313    });
2314
2315    window.ShopifyAnalytics.lib.page(null,{"pageType":"cart","requestId":"df0d4841-ad02-4afd-b351-5af70fa4a03a-1791109901","shopifyEmitted":true});
2316
2317    var eventsListenerScript = document.createElement('script');
2318    eventsListenerScript.async = true;
2319    eventsListenerScript.src = "//safetracksgpsshop.ca/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js";
2320    document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
2321})();</script>
vendor: 1 bytes, line 2321
2321
2322<script
2323  defer
2324  src="https://safetracksgpsshop.ca/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js"
2325  data-application="storefront-renderer"
2326  data-shop-id="26810187954"
2327  data-render-region="gcp-us-central1"
2328  data-page-type="cart"
2329  data-theme-instance-id="132753686706"
2330  data-theme-name="Debut"
2331  data-theme-version="17.5.2"
2332  data-monorail-region="shop_domain"
2333  data-resource-timing-sampling-rate="10"
2334  data-shs="true"
2335  data-shs-beacon="true"
2336  data-shs-export-with-fetch="true"
2337  data-shs-logs-sample-rate="1"
2338  data-shs-beacon-endpoint="https://safetracksgpsshop.ca/api/collect"
2339></script>
vendor: 1 bytes, line 2339
2339
2340<script id="shopify-chat-page-data" type="application/json">{"greetingMessage":"Welcome to SafeTracksGPS. How can I help?","customerServiceEmail":"[email protected]","onlineStorePasswordProtected":false,"continueAsChip":false,"translations":[{"key":"agent_chat.panel.open_chat","value":"Open chat"},{"key":"agent_chat.panel.ask_anything","value":"Ask anything"},{"key":"agent_chat.panel.title","value":"Storekick"},{"key":"agent_chat.panel.unread_replies","value":"Unread replies"},{"key":"agent_chat.panel.back_to_chat","value":"Back to chat"},{"key":"agent_chat.panel.see_history","value":"See chat history"},{"key":"agent_chat.panel.new_chat","value":"Create a new chat"},{"key":"agent_chat.panel.close","value":"Close chat"},{"key":"agent_chat.panel.undock","value":"Undock chat"},{"key":"agent_chat.panel.dock","value":"Dock chat"},{"key":"agent_chat.panel.expand","value":"Expand chat"},{"key":"agent_chat.panel.contract","value":"Contract chat"},{"key":"agent_chat.panel.jump_to_latest","value":"Jump to latest"},{"key":"agent_chat.panel.loading_chat","value":"Loading chat"},{"key":"agent_chat.input.label","value":"Type your message"},{"key":"agent_chat.input.placeholder","value":"Ask anything..."},{"key":"agent_chat.input.send","value":"Send"},{"key":"agent_chat.input.stop","value":"Stop generating"},{"key":"agent_chat.thinking","value":"Thinking..."},{"key":"agent_chat.first_response_delayed","value":"Agent is taking longer to respond…"},{"key":"agent_chat.searching","value":"Searching..."},{"key":"agent_chat.message.sent_timestamp","value":"Sent · {{time}}"},{"key":"agent_chat.message.automated_label","value":"Automated"},{"key":"agent_chat.message.automated_timestamp","value":"Automated · {{time}}"},{"key":"agent_chat.liveAgentHandoff","value":"Someone from our team will be with you shortly"},{"key":"agent_chat.human_handoff.action","value":"Chat with our team"},{"key":"agent_chat.human_handoff.request","value":"I’d like to talk to someone from your team"},{"key":"agent_chat.human_handoff.ai_assistant","value":"AI assistant"},{"key":"agent_chat.greeting.default","value":"Hi there!"},{"key":"agent_chat.greeting.with_name","value":"Hi {{name}}!"},{"key":"agent_chat.greeting.welcome","value":"You can ask questions about shopping, sizing\/dimensions, shipping, returns, or order status."},{"key":"agent_chat.greeting.welcome_back","value":"Welcome back to %{shop_name}! How can I help?"},{"key":"agent_chat.greeting.welcome_back_no_shop","value":"Welcome back! How can I help?"},{"key":"agent_chat.greeting.welcome_to_shop","value":"Welcome to %{shop_name}. How can I help?"},{"key":"agent_chat.greeting.generic","value":"How can I help?"},{"key":"agent_chat.disclaimer.text","value":"This chat is powered by AI from Shopify and may make mistakes. Your messages are visible to {{shop_name}}. See"},{"key":"agent_chat.disclaimer.text_human","value":"Your messages are visible to {{shop_name}} and to Shopify for the provision and improvement of the services. See"},{"key":"agent_chat.disclaimer.link_text","value":"privacy policy"},{"key":"agent_chat.error.response_unavailable","value":"Response unavailable"},{"key":"agent_chat.error.generic","value":"Something went wrong."},{"key":"agent_chat.error.response_failed","value":"Couldn’t load this message"},{"key":"agent_chat.error.message_send_failed","value":"Your message couldn’t be sent"},{"key":"agent_chat.error.attachment_upload_failed","value":"Your attachment didn’t upload"},{"key":"agent_chat.error.first_response_stalled","value":"Agent couldn’t respond"},{"key":"agent_chat.error.try_again","value":"Try again"},{"key":"agent_chat.error.unavailable","value":"Chat isn't available right now - try again later"},{"key":"agent_chat.error.usage_limit","value":"Message limit reached — try again later or email us at {{email}}"},{"key":"agent_chat.error.usage_limit_no_email","value":"Message limit reached — try again later"},{"key":"agent_chat.error.cost_quota_unhandled","value":"Chat isn’t available right now—email us at {{email}}"},{"key":"agent_chat.error.cost_quota_unhandled_no_email","value":"Chat isn’t available right now"},{"key":"agent_chat.error.cost_quota_handover","value":"AI assistant isn’t available right now — our team will reply shortly"},{"key":"agent_chat.history.heading","value":"Chat history"},{"key":"agent_chat.history.loading","value":"Loading conversation history"},{"key":"agent_chat.history.aria_label","value":"Conversation history"},{"key":"agent_chat.history.no_conversations","value":"No conversations"},{"key":"agent_chat.history.conversation.one","value":"conversation"},{"key":"agent_chat.history.conversation.other","value":"conversations"},{"key":"agent_chat.history.error_message","value":"Something went wrong."},{"key":"agent_chat.history.try_again","value":"Try again"},{"key":"agent_chat.history.no_past","value":"No past conversations"},{"key":"agent_chat.history.start_new","value":"Start a new chat"},{"key":"agent_chat.history.untitled","value":"Untitled conversation"},{"key":"agent_chat.history.resume","value":"Resume: {{title}}"},{"key":"agent_chat.history.resume_with_time","value":"Resume: {{title}}, {{time}}"},{"key":"agent_chat.history.delete","value":"Delete conversation: {{title}}"},{"key":"agent_chat.history.delete_failed","value":"Could not delete conversation"},{"key":"agent_chat.feedback.group_label","value":"Message feedback"},{"key":"agent_chat.feedback.thumbs_up","value":"Thumbs up"},{"key":"agent_chat.feedback.thumbs_down","value":"Thumbs down"},{"key":"agent_chat.feedback.add_comment","value":"Add comment"},{"key":"agent_chat.feedback.thanks","value":"Thanks for your feedback"},{"key":"agent_chat.feedback.placeholder_up","value":"Tell us what went well"},{"key":"agent_chat.feedback.placeholder_down","value":"Tell us what could have been better"},{"key":"agent_chat.feedback.comment_label","value":"Feedback comment"},{"key":"agent_chat.feedback.cancel","value":"Cancel"},{"key":"agent_chat.feedback.submit","value":"Submit"},{"key":"agent_chat.feedback.character_count","value":"{{current}}\/{{max}}"},{"key":"agent_chat.feedback.character_limit_reached","value":"Maximum length reached. Feedback is limited to {{max}} characters."},{"key":"agent_chat.buyer_profile.button.open","value":"Buyer Profile"},{"key":"agent_chat.buyer_profile.title","value":"Buyer Profile"},{"key":"agent_chat.buyer_profile.empty","value":"No buyer profile available."},{"key":"agent_chat.buyer_profile.close","value":"Close"},{"key":"agent_chat.suggestions.empty_state_label","value":"Suggested questions"},{"key":"agent_chat.suggestions.quick_reply_label","value":"Suggested replies"},{"key":"agent_chat.auth.sign_in_to_continue","value":"Sign in to continue"},{"key":"agent_chat.auth.sign_in","value":"Sign in"},{"key":"agent_chat.auth.skip_and_chat","value":"Skip and start chatting"},{"key":"agent_chat.auth.pre_chat_title","value":"Sign in to personalize and save your chats"},{"key":"agent_chat.auth.pre_chat_subtitle","value":"Sign in or create an account"},{"key":"agent_chat.auth.staff_chat_required_title","value":"Don't miss a reply"},{"key":"agent_chat.auth.staff_chat_required_subtitle","value":"Sign in to chat with our team. We'll email you if you leave the chat."},{"key":"agent_chat.auth.share_disclaimer","value":"By continuing, Shop will share your name and email with this store. See their {{terms_link}} and {{privacy_link}}"},{"key":"agent_chat.auth.terms_link","value":"terms"},{"key":"agent_chat.auth.privacy_link","value":"privacy policy"},{"key":"agent_chat.auth.declined_pre_chat","value":"I can’t connect you with the store unless you sign in."},{"key":"agent_chat.reply_by_email.continuation_prompt","value":"If you leave the chat, we’ll email you when there’s a reply."},{"key":"agent_chat.reply_by_email.sign_in_prompt","value":"Sign in to get emailed when there’s a reply."},{"key":"agent_chat.order_lookup.track_order","value":"Track my order"},{"key":"agent_chat.order_lookup.track_another_order","value":"Track another order"},{"key":"agent_chat.order_lookup.new_conversation","value":"New conversation"},{"key":"agent_chat.order_lookup.follow_up_label","value":"Order lookup actions"},{"key":"agent_chat.order_lookup.enter_order_information","value":"Enter order information"},{"key":"agent_chat.order_lookup.prompt","value":"To see your order status, please provide your order details."},{"key":"agent_chat.order_lookup.form_title","value":"Track my order"},{"key":"agent_chat.order_lookup.form_subtitle","value":"Please provide your information."},{"key":"agent_chat.order_lookup.order_number_label","value":"Order number"},{"key":"agent_chat.order_lookup.email_label","value":"Email address"},{"key":"agent_chat.order_lookup.submit","value":"Track my order"},{"key":"agent_chat.order_lookup.cancel","value":"Cancel"},{"key":"agent_chat.order_lookup.invalid_order_number","value":"Please enter a valid order number with only numbers and letters, no spaces (e.g. 1006)."},{"key":"agent_chat.order_lookup.invalid_order_number_whitespace","value":"Please enter a valid order number with only numbers and letters, no spaces (e.g. 1006)."},{"key":"agent_chat.order_lookup.invalid_email","value":"Please enter a valid email address"},{"key":"agent_chat.order_lookup.generic_error","value":"There was a problem looking up your order. Please try again."},{"key":"agent_chat.order_lookup.rate_limited_error","value":"Too many attempts. Try again later."},{"key":"agent_chat.order_lookup.locked_composer_status","value":"Order lookup is in progress. Start a new conversation to ask something else."},{"key":"agent_chat.legacy_contact.form_title","value":"Before we get started"},{"key":"agent_chat.legacy_contact.form_subtitle","value":"Please provide your information so we can reply to you if you leave the chat."},{"key":"agent_chat.legacy_contact.first_name_label","value":"First name"},{"key":"agent_chat.legacy_contact.last_name_label","value":"Last name"},{"key":"agent_chat.legacy_contact.email_label","value":"Email"},{"key":"agent_chat.legacy_contact.marketing_opt_in","value":"Email me with news and offers"},{"key":"agent_chat.legacy_contact.submit","value":"Start chat"},{"key":"agent_chat.legacy_contact.cancel","value":"Cancel"}
2340,{"key":"agent_chat.legacy_contact.invalid_first_name","value":"Enter a valid first name."},{"key":"agent_chat.legacy_contact.invalid_last_name","value":"Enter a valid last name."},{"key":"agent_chat.legacy_contact.invalid_email","value":"Enter a valid email address."},{"key":"agent_chat.legacy_contact.invalid_email_length","value":"Email address is too long."},{"key":"agent_chat.legacy_contact.generic_error","value":"Something went wrong."},{"key":"agent_chat.legacy_contact.rate_limited_error","value":"Too many attempts. Try again later."},{"key":"agent_chat.discountCard.useDiscount","value":"Use discount"},{"key":"agent_chat.discountCard.discountApplicationContext","value":"Applies automatically at checkout"},{"key":"agent_chat.cart.checkout","value":"Checkout"},{"key":"agent_chat.product.add_to_cart","value":"Add to cart"},{"key":"agent_chat.product.view_details","value":"View details"},{"key":"agent_chat.product.out_of_stock","value":"Out of stock"},{"key":"agent_chat.product.compare_suggestions","value":"Compare suggestions"},{"key":"agent_chat.product.hide_suggestions","value":"Hide suggestions"},{"key":"agent_chat.product.sold_out","value":"Sold out"},{"key":"agent_chat.order.item.one","value":"item"},{"key":"agent_chat.order.item.other","value":"items"},{"key":"agent_chat.order.less_items.one","value":"- hide {{count}} item"},{"key":"agent_chat.order.less_items.other","value":"- hide {{count}} items"},{"key":"agent_chat.order.more_items.one","value":"+ {{count}} more item"},{"key":"agent_chat.order.more_items.other","value":"+ {{count}} more items"},{"key":"agent_chat.order.view_order","value":"View order {{orderId}}"},{"key":"agent_chat.order.track_shipment","value":"Track shipment"},{"key":"agent_chat.order.of_total","value":"{{index}} of {{total}}"},{"key":"agent_chat.order.label","value":"Order {{number}}"},{"key":"agent_chat.order.count.one","value":"{{count}} Order"},{"key":"agent_chat.order.count.other","value":"{{count}} Orders"},{"key":"agent_chat.order.ordered_on","value":"Ordered {{date}}"},{"key":"agent_chat.order.select","value":"Select order {{number}}"},{"key":"agent_chat.return.heading","value":"Select items to return"},{"key":"agent_chat.return.toggle_item","value":"Select {{name}}"},{"key":"agent_chat.return.select_item_non_returnable","value":"{{name}}, not returnable"},{"key":"agent_chat.return.quantity_label","value":"Return quantity"},{"key":"agent_chat.return.reason_label","value":"Reason for return"},{"key":"agent_chat.return.reason_placeholder","value":"Select a reason"},{"key":"agent_chat.return.confirm","value":"Request return"},{"key":"agent_chat.return.confirmed","value":"Return requested"},{"key":"agent_chat.return.reason.size_too_small","value":"Size too small"},{"key":"agent_chat.return.reason.size_too_large","value":"Size too large"},{"key":"agent_chat.return.reason.unwanted","value":"Unwanted"},{"key":"agent_chat.return.reason.not_as_described","value":"Not as described"},{"key":"agent_chat.return.reason.wrong_item","value":"Wrong item"},{"key":"agent_chat.return.reason.defective","value":"Defective"},{"key":"agent_chat.return.reason.style","value":"Style"},{"key":"agent_chat.return.reason.color","value":"Color"},{"key":"agent_chat.return.reason.other_reason","value":"Other"},{"key":"agent_chat.scroll.previous","value":"Previous"},{"key":"agent_chat.scroll.next","value":"Next"}]}</script>
vendor: 1 bytes, line 2340
2340
2341<script id="shopify-customer-account-data" type="application/json">{"customer":null,"shop":{"id":"26810187954","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":true,"marketingConsentPreselected":false},"visitor":{"country":"US","language":"en"}}</script>
2341
2342<meta name="shopify-y" content="e23ae321-de40-489f-be3e-86a12387a396" data-expiration="1822667502000"><meta name="shopify-s" content="346f4a0e-f271-4079-8310-49d74d8fc3a1" data-expiration="1791111702000"><meta name="new-cookie-storage-activated" content="t">
2343</head>
2344
2345<body class="template-cart">
2346
2347  <a class="in-page-link visually-hidden skip-link" href="#MainContent">Skip to content</a><style data-shopify>
2348
2349  .cart-popup {
2350    box-shadow: 1px 1px 10px 2px rgba(235, 235, 235, 0.5);
2351  }</style><div class="cart-popup-wrapper cart-popup-wrapper--hidden critical-hidden" role="dialog" aria-modal="true" aria-labelledby="CartPopupHeading" data-cart-popup-wrapper>
2352  <div class="cart-popup" data-cart-popup tabindex="-1">
2353    <div class="cart-popup__header">
2354      <h2 id="CartPopupHeading" class="cart-popup__heading">Just added to your cart</h2>
2355      <button class="cart-popup__close" aria-label="Close" data-cart-popup-close><svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 40 40"><path d="M23.868 20.015L39.117 4.78c1.11-1.108 1.11-2.77 0-3.877-1.109-1.108-2.773-1.108-3.882 0L19.986 16.137 4.737.904C3.628-.204 1.965-.204.856.904c-1.11 1.108-1.11 2.77 0 3.877l15.249 15.234L.855 35.248c-1.108 1.108-1.108 2.77 0 3.877.555.554 1.248.831 1.942.831s1.386-.277 1.94-.83l15.25-15.234 15.248 15.233c.555.554 1.248.831 1.941.831s1.387-.277 1.941-.83c1.11-1.109 1.11-2.77 0-3.878L23.868 20.015z" class="layer"/></svg></button>
2356    </div>
2357    <div class="cart-popup-item">
2358      <div class="cart-popup-item__image-wrapper hide" data-cart-popup-image-wrapper data-image-loading-animation></div>
2359      <div class="cart-popup-item__description">
2360        <div>
2361          <h3 class="cart-popup-item__title" data-cart-popup-title></h3>
2362          <ul class="product-details" aria-label="Product details" data-cart-popup-product-details></ul>
2363        <span class="selling-plan-details"></span>
2364</div>
2365        <div class="cart-popup-item__quantity">
2366          <span class="visually-hidden" data-cart-popup-quantity-label></span>
2367          <span aria-hidden="true">Qty:</span>
2368          <span aria-hidden="true" data-cart-popup-quantity></span>
2369        </div>
2370      </div>
2371    </div>
2372
2373    <a href="/cart" class="cart-popup__cta-link btn btn--secondary-accent">
2374      View cart (<span data-cart-popup-cart-quantity></span>)
2375    </a>
2376
2377    <div class="cart-popup__dismiss">
2378      <button class="cart-popup__dismiss-button text-link text-link--accent" data-cart-popup-dismiss>
2379        Continue shopping
2380      </button>
2381    </div>
2382  </div>
2383</div>
2384
2385<div id="shopify-section-header" class="shopify-section">
2386
2387<div id="SearchDrawer" class="search-bar drawer drawer--top critical-hidden" role="dialog" aria-modal="true" aria-label="Search" data-predictive-search-drawer>
2388  <div class="search-bar__interior">
2389    <div class="search-form__container" data-search-form-container>
2390      <form class="search-form search-bar__form" action="/search" method="get" role="search">
2391        <div class="search-form__input-wrapper">
2392          <input
2393            type="text"
2394            name="q"
2395            placeholder="Search"
2396            role="combobox"
2397            aria-autocomplete="list"
2398            aria-owns="predictive-search-results"
2399            aria-expanded="false"
2400            aria-label="Search"
2401            aria-haspopup="listbox"
2402            class="search-form__input search-bar__input"
2403            data-predictive-search-drawer-input
2404          />
2405          <input type="hidden" name="options[prefix]" value="last" aria-hidden="true" />
2406          <div class="predictive-search-wrapper predictive-search-wrapper--drawer" data-predictive-search-mount="drawer"></div>
2407        </div>
2408
2409        <button class="search-bar__submit search-form__submit"
2410          type="submit"
2411          data-search-form-submit>
2412          <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-search" viewBox="0 0 37 40"><path d="M35.6 36l-9.8-9.8c4.1-5.4 3.6-13.2-1.3-18.1-5.4-5.4-14.2-5.4-19.7 0-5.4 5.4-5.4 14.2 0 19.7 2.6 2.6 6.1 4.1 9.8 4.1 3 0 5.9-1 8.3-2.8l9.8 9.8c.4.4.9.6 1.4.6s1-.2 1.4-.6c.9-.9.9-2.1.1-2.9zm-20.9-8.2c-2.6 0-5.1-1-7-2.9-3.9-3.9-3.9-10.1 0-14C9.6 9 12.2 8 14.7 8s5.1 1 7 2.9c3.9 3.9 3.9 10.1 0 14-1.9 1.9-4.4 2.9-7 2.9z"/></svg>
2413          <span class="icon__fallback-text">Submit</span>
2414        </button>
2415      </form>
2416
2417      <div class="search-bar__actions">
2418        <button type="button" class="btn--link search-bar__close js-drawer-close">
2419          <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 40 40"><path d="M23.868 20.015L39.117 4.78c1.11-1.108 1.11-2.77 0-3.877-1.109-1.108-2.773-1.108-3.882 0L19.986 16.137 4.737.904C3.628-.204 1.965-.204.856.904c-1.11 1.108-1.11 2.77 0 3.877l15.249 15.234L.855 35.248c-1.108 1.108-1.108 2.77 0 3.877.555.554 1.248.831 1.942.831s1.386-.277 1.94-.83l15.25-15.234 15.248 15.233c.555.554 1.248.831 1.941.831s1.387-.277 1.941-.83c1.11-1.109 1.11-2.77 0-3.878L23.868 20.015z" class="layer"/></svg>
2420          <span class="icon__fallback-text">Close search</span>
2421        </button>
2422      </div>
2423    </div>
2424  </div>
2425</div>
2426
2427
2428<div data-section-id="header" data-section-type="header-section" data-header-section>
2429  
2430
2431  <header class="site-header border-bottom logo--left" role="banner">
2432    <div class="grid grid--no-gutters grid--table site-header__mobile-nav">
2433      
2434
2435      <div class="grid__item medium-up--one-quarter logo-align--left">
2436        
2437        
2438          <div class="h2 site-header__logo">
2439        
2440          
2441<a href="/" class="site-header__logo-image" data-image-loading-animation>
2442              
2443              <img class="lazyload js"
2444                   src="//safetracksgpsshop.ca/cdn/shop/files/BB_STGPS_LOGO_1_300x300.png?v=1786554549"
2445                   data-src="//safetracksgpsshop.ca/cdn/shop/files/BB_STGPS_LOGO_1_{width}x.png?v=1786554549"
2446                   data-widths="[180, 360, 540, 720, 900, 1080, 1296, 1512, 1728, 2048]"
2447                   data-aspectratio="1.6292352371732817"
2448                   data-sizes="auto"
2449                   alt="SafeTracksGPS"
2450                   style="max-width: 175px">
2451              <noscript>
2452                
2453                <img src="//safetracksgpsshop.ca/cdn/shop/files/BB_STGPS_LOGO_1_175x.png?v=1786554549"
2454                     srcset="//safetracksgpsshop.ca/cdn/shop/files/BB_STGPS_LOGO_1_175x.png?v=1786554549 1x, //safetracksgpsshop.ca/cdn/shop/files/[email protected]?v=1786554549 2x"
2455                     alt="SafeTracksGPS"
2456                     style="max-width: 175px;">
2457              </noscript>
2458            </a>
2459          
2460        
2461          </div>
2462        
2463      </div>
2464
2465      
2466        <nav class="grid__item medium-up--one-half small--hide" id="AccessibleNav" role="navigation">
2467          
2468<ul class="site-nav list--inline" id="SiteNav">
2469  
2470
2471
2472
2473    
2474      <li >
2475        <a href="https://www.safetracksgpswellness.ca/"
2476          class="site-nav__link site-nav__link--main"
2477          
2478        >
2479          <span class="site-nav__label">Back to SafeTracks GPS Wellness</span>
2480        </a>
2481      </li>
2482    
2483  
2484
2485
2486
2487    
2488      <li class="site-nav--has-dropdown" data-has-dropdowns>
2489        <button class="site-nav__link site-nav__link--main site-nav__link--button" type="button" aria-expanded="false" aria-controls="SiteNavLabel-all-products">
2490          <span class="site-nav__label">All Products</span><svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-down" viewBox="0 0 9 9"><path d="M8.542 2.558a.625.625 0 0 1 0 .884l-3.6 3.6a.626.626 0 0 1-.884 0l-3.6-3.6a.625.625 0 1 1 .884-.884L4.5 5.716l3.158-3.158a.625.625 0 0 1 .884 0z" fill="#fff"/></svg>
2491        </button>
2492
2493        <div class="site-nav__dropdown critical-hidden" id="SiteNavLabel-all-products">
2494          
2495            <ul>
2496              
2497                <li>
2498                  <a href="/products/prime-mobile-r4-pendant"
2499                  class="site-nav__link site-nav__child-link"
2500                  
2501                >
2502                    <span class="site-nav__label">Prime Mobile R4</span>
2503                  </a>
2504                </li>
2505              
2506                <li>
2507                  <a href="/products/safetracks%E2%84%A2-theoracare-wrist-watch"
2508                  class="site-nav__link site-nav__child-link site-nav__link--last"
2509                  
2510                >
2511                    <span class="site-nav__label">Theora Connect™ </span>
2512                  </a>
2513                </li>
2514              
2515            </ul>
2516          
2517        </div>
2518      </li>
2519    
2520  
2521
2522
2523
2524    
2525      <li class="site-nav--has-dropdown" data-has-dropdowns>
2526        <button class="site-nav__link site-nav__link--main site-nav__link--button" type="button" aria-expanded="false" aria-controls="SiteNavLabel-accessories">
2527          <span class="site-nav__label">Accessories</span><svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-down" viewBox="0 0 9 9"><path d="M8.542 2.558a.625.625 0 0 1 0 .884l-3.6 3.6a.626.626 0 0 1-.884 0l-3.6-3.6a.625.625 0 1 1 .884-.884L4.5 5.716l3.158-3.158a.625.625 0 0 1 .884 0z" fill="#fff"/></svg>
2528        </button>
2529
2530        <div class="site-nav__dropdown critical-hidden" id="SiteNavLabel-accessories">
2531          
2532            <ul>
2533              
2534                <li>
2535                  <a href="/products/blue-beacon"
2536                  class="site-nav__link site-nav__child-link"
2537                  
2538                >
2539                    <span class="site-nav__label">SafeTracks Blue Beacon</span>
2540                  </a>
2541                </li>
2542              
2543                <li>
2544                  <a href="/products/prime-mobile-charging-base"
2545                  class="site-nav__link site-nav__child-link"
2546                  
2547                >
2548                    <span class="site-nav__label">Prime Mobile Charging Base</span>
2549                  </a>
2550                </li>
2551              
2552                <li>
2553                  <a href="/products/prime-mobile-lanyard"
2554                  class="site-nav__link site-nav__child-link"
2555                  
2556                >
2557                    <span class="site-nav__label">Prime Mobile Lanyard</span>
2558                  </a>
2559                </li>
2560              
2561                <li>
2562                  <a href="/products/prime-mobile-belt-clip"
2563                  class="site-nav__link site-nav__child-link"
2564                  
2565                >
2566                    <span class="site-nav__label">Prime Mobile Belt Clip</span>
2567                  </a>
2568                </li>
2569              
2570                <li>
2571                  <a href="/products/prime-mobile-wristband"
2572                  class="site-nav__link site-nav__child-link"
2573                  
2574                >
2575                    <span class="site-nav__label">Prime Mobile Wristband</span>
2576                  </a>
2577                </li>
2578              
2579                <li>
2580                  <a href="/products/prime-mobile-r4-magnetic-charging-cable"
2581                  class="site-nav__link site-nav__child-link"
2582                  
2583                >
2584                    <span class="site-nav__label">Prime Mobile R4 Magnetic Charging Cable</span>
2585                  </a>
2586                </li>
2587              
2588                <li>
2589                  <a href="/products/locking-clasp"
2590                  class="site-nav__link site-nav__child-link site-nav__link--last"
2591                  
2592                >
2593                    <span class="site-nav__label">Locking Clasp</span>
2594                  </a>
2595                </li>
2596              
2597            </ul>
2598          
2599        </div>
2600      </li>
2601    
2602  
2603
2604
2605
2606    
2607      <li class="site-nav--has-dropdown" data-has-dropdowns>
2608        <button class="site-nav__link site-nav__link--main site-nav__link--button" type="button" aria-expanded="false" aria-controls="SiteNavLabel-service-subscriptions">
2609          <span class="site-nav__label">Service Subscriptions</span><svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-down" viewBox="0 0 9 9"><path d="M8.542 2.558a.625.625 0 0 1 0 .884l-3.6 3.6a.626.626 0 0 1-.884 0l-3.6-3.6a.625.625 0 1 1 .884-.884L4.5 5.716l3.158-3.158a.625.625 0 0 1 .884 0z" fill="#fff"/></svg>
2610        </button>
2611
2612        <div class="site-nav__dropdown critical-hidden" id="SiteNavLabel-service-subscriptions">
2613          
2614            <ul>
2615              
2616                <li>
2617                  <a href="/products/copy-of-monthly-subscription-msf"
2618                  class="site-nav__link site-nav__child-link"
2619                  
2620                >
2621                    <span class="site-nav__label">Monthly Family Monitored</span>
2622                  </a>
2623                </li>
2624              
2625                <li>
2626                  <a href="/products/copy-of-monthly-subscription-911-monitored-msf"
2627                  class="site-nav__link site-nav__child-link"
2628                  
2629                >
2630                    <span class="site-nav__label">Monthly 911 Monitored</span>
2631                  </a>
2632                </li>
2633              
2634                <li>
2635                  <a href="/products/yearly-subscription-family-monitored-msf"
2636                  class="site-nav__link site-nav__child-link"
2637                  
2638                >
2639                    <span class="site-nav__label">Yearly Family Monitored</span>
2640                  </a>
2641                </li>
2642              
2643                <li>
2644                  <a href="/products/yearly-subscription-n911-monitored-msf"
2645                  class="site-nav__link site-nav__child-link"
2646                  
2647                >
2648                    <span class="site-nav__label">Yearly N911 Monitored</span>
2649                  </a>
2650                </li>
2651              
2652                <li>
2653                  <a href="/products/theora-smart-fall-detection%E2%84%A2"
2654                  class="site-nav__link site-nav__child-link site-nav__link--last"
2655                  
2656                >
2657                    <span class="site-nav__label">Fall Detection (Optional)</span>
2658                  </a>
2659                </li>
2660              
2661            </ul>
2662          
2663        </div>
2664      </li>
2665    
2666  
2667</ul>
2668
2669        </nav>
2670      
2671
2672      <div class="grid__item medium-up--one-quarter text-right site-header__icons site-header__icons--plus">
2673        <div class="site-header__icons-wrapper">
2674
2675          <button type="button" class="btn--link site-header__icon site-header__search-toggle js-drawer-open-top" data-predictive-search-open-drawer>
2676            <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-search" viewBox="0 0 37 40"><path d="M35.6 36l-9.8-9.8c4.1-5.4 3.6-13.2-1.3-18.1-5.4-5.4-14.2-5.4-19.7 0-5.4 5.4-5.4 14.2 0 19.7 2.6 2.6 6.1 4.1 9.8 4.1 3 0 5.9-1 8.3-2.8l9.8 9.8c.4.4.9.6 1.4.6s1-.2 1.4-.6c.9-.9.9-2.1.1-2.9zm-20.9-8.2c-2.6 0-5.1-1-7-2.9-3.9-3.9-3.9-10.1 0-14C9.6 9 12.2 8 14.7 8s5.1 1 7 2.9c3.9 3.9 3.9 10.1 0 14-1.9 1.9-4.4 2.9-7 2.9z"/></svg>
2677            <span class="icon__fallback-text">Search</span>
2678          </button>
2679
2680          
2681            
2682              <a href="https://safetracksgpsshop.ca/customer_authentication/redirect?locale=en&region_country=US" class="site-header__icon site-header__account">
2683                <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-login" viewBox="0 0 28.33 37.68"><path d="M14.17 14.9a7.45 7.45 0 1 0-7.5-7.45 7.46 7.46 0 0 0 7.5 7.45zm0-10.91a3.45 3.45 0 1 1-3.5 3.46A3.46 3.46 0 0 1 14.17 4zM14.17 16.47A14.18 14.18 0 0 0 0 30.68c0 1.41.66 4 5.11 5.66a27.17 27.17 0 0 0 9.06 1.34c6.54 0 14.17-1.84 14.17-7a14.18 14.18 0 0 0-14.17-14.21zm0 17.21c-6.3 0-10.17-1.77-10.17-3a10.17 10.17 0 1 1 20.33 0c.01 1.23-3.86 3-10.16 3z"/></svg>
2684                <span class="icon__fallback-text">Log in</span>
2685              </a>
2686            
2687          
2688
2689          <a href="/cart" class="site-header__icon site-header__cart">
2690            <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-cart" viewBox="0 0 37 40"><path d="M36.5 34.8L33.3 8h-5.9C26.7 3.9 23 .8 18.5.8S10.3 3.9 9.6 8H3.7L.5 34.8c-.2 1.5.4 2.4.9 3 .5.5 1.4 1.2 3.1 1.2h28c1.3 0 2.4-.4 3.1-1.3.7-.7 1-1.8.9-2.9zm-18-30c2.2 0 4.1 1.4 4.7 3.2h-9.5c.7-1.9 2.6-3.2 4.8-3.2zM4.5 35l2.8-23h2.2v3c0 1.1.9 2 2 2s2-.9 2-2v-3h10v3c0 1.1.9 2 2 2s2-.9 2-2v-3h2.2l2.8 23h-28z"/></svg>
2691            <span class="icon__fallback-text">Cart</span>
2692            <div id="CartCount" class="site-header__cart-count hide critical-hidden" data-cart-count-bubble>
2693              <span data-cart-count>0</span>
2694              <span class="icon__fallback-text medium-up--hide">items</span>
2695            </div>
2696          </a>
2697
2698          
2699            <button type="button" class="btn--link site-header__icon site-header__menu js-mobile-nav-toggle mobile-nav--open" aria-controls="MobileNav"  aria-expanded="false" aria-label="Menu">
2700              <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-hamburger" viewBox="0 0 37 40"><path d="M33.5 25h-30c-1.1 0-2-.9-2-2s.9-2 2-2h30c1.1 0 2 .9 2 2s-.9 2-2 2zm0-11.5h-30c-1.1 0-2-.9-2-2s.9-2 2-2h30c1.1 0 2 .9 2 2s-.9 2-2 2zm0 23h-30c-1.1 0-2-.9-2-2s.9-2 2-2h30c1.1 0 2 .9 2 2s-.9 2-2 2z"/></svg>
2701              <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-close" viewBox="0 0 40 40"><path d="M23.868 20.015L39.117 4.78c1.11-1.108 1.11-2.77 0-3.877-1.109-1.108-2.773
2701-1.108-3.882 0L19.986 16.137 4.737.904C3.628-.204 1.965-.204.856.904c-1.11 1.108-1.11 2.77 0 3.877l15.249 15.234L.855 35.248c-1.108 1.108-1.108 2.77 0 3.877.555.554 1.248.831 1.942.831s1.386-.277 1.94-.83l15.25-15.234 15.248 15.233c.555.554 1.248.831 1.941.831s1.387-.277 1.941-.83c1.11-1.109 1.11-2.77 0-3.878L23.868 20.015z" class="layer"/></svg>
2702            </button>
2703          
2704        </div>
2705
2706      </div>
2707    </div>
2708
2709    <nav class="mobile-nav-wrapper medium-up--hide critical-hidden" role="navigation">
2710      <ul id="MobileNav" class="mobile-nav">
2711        
2712<li class="mobile-nav__item border-bottom">
2713            
2714              <a href="https://www.safetracksgpswellness.ca/"
2715                class="mobile-nav__link"
2716                
2717              >
2718                <span class="mobile-nav__label">Back to SafeTracks GPS Wellness</span>
2719              </a>
2720            
2721          </li>
2722        
2723<li class="mobile-nav__item border-bottom">
2724            
2725              
2726              <button type="button" class="btn--link js-toggle-submenu mobile-nav__link" data-target="all-products-2" data-level="1" aria-expanded="false">
2727                <span class="mobile-nav__label">All Products</span>
2728                <div class="mobile-nav__icon">
2729                  <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-right" viewBox="0 0 14 14"><path d="M3.871.604c.44-.439 1.152-.439 1.591 0l5.515 5.515s-.049-.049.003.004l.082.08c.439.44.44 1.153 0 1.592l-5.6 5.6a1.125 1.125 0 0 1-1.59-1.59L8.675 7 3.87 2.195a1.125 1.125 0 0 1 0-1.59z" fill="#fff"/></svg>
2730                </div>
2731              </button>
2732              <ul class="mobile-nav__dropdown" data-parent="all-products-2" data-level="2">
2733                <li class="visually-hidden" tabindex="-1" data-menu-title="2">All Products Menu</li>
2734                <li class="mobile-nav__item border-bottom">
2735                  <div class="mobile-nav__table">
2736                    <div class="mobile-nav__table-cell mobile-nav__return">
2737                      <button class="btn--link js-toggle-submenu mobile-nav__return-btn" type="button" aria-expanded="true" aria-label="All Products">
2738                        <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-left" viewBox="0 0 14 14"><path d="M10.129.604a1.125 1.125 0 0 0-1.591 0L3.023 6.12s.049-.049-.003.004l-.082.08c-.439.44-.44 1.153 0 1.592l5.6 5.6a1.125 1.125 0 0 0 1.59-1.59L5.325 7l4.805-4.805c.44-.439.44-1.151 0-1.59z" fill="#fff"/></svg>
2739                      </button>
2740                    </div>
2741                    <span class="mobile-nav__sublist-link mobile-nav__sublist-header mobile-nav__sublist-header--main-nav-parent">
2742                      <span class="mobile-nav__label">All Products</span>
2743                    </span>
2744                  </div>
2745                </li>
2746
2747                
2748                  <li class="mobile-nav__item border-bottom">
2749                    
2750                      <a href="/products/prime-mobile-r4-pendant"
2751                        class="mobile-nav__sublist-link"
2752                        
2753                      >
2754                        <span class="mobile-nav__label">Prime Mobile R4</span>
2755                      </a>
2756                    
2757                  </li>
2758                
2759                  <li class="mobile-nav__item">
2760                    
2761                      <a href="/products/safetracks%E2%84%A2-theoracare-wrist-watch"
2762                        class="mobile-nav__sublist-link"
2763                        
2764                      >
2765                        <span class="mobile-nav__label">Theora Connect™ </span>
2766                      </a>
2767                    
2768                  </li>
2769                
2770              </ul>
2771            
2772          </li>
2773        
2774<li class="mobile-nav__item border-bottom">
2775            
2776              
2777              <button type="button" class="btn--link js-toggle-submenu mobile-nav__link" data-target="accessories-3" data-level="1" aria-expanded="false">
2778                <span class="mobile-nav__label">Accessories</span>
2779                <div class="mobile-nav__icon">
2780                  <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-right" viewBox="0 0 14 14"><path d="M3.871.604c.44-.439 1.152-.439 1.591 0l5.515 5.515s-.049-.049.003.004l.082.08c.439.44.44 1.153 0 1.592l-5.6 5.6a1.125 1.125 0 0 1-1.59-1.59L8.675 7 3.87 2.195a1.125 1.125 0 0 1 0-1.59z" fill="#fff"/></svg>
2781                </div>
2782              </button>
2783              <ul class="mobile-nav__dropdown" data-parent="accessories-3" data-level="2">
2784                <li class="visually-hidden" tabindex="-1" data-menu-title="2">Accessories Menu</li>
2785                <li class="mobile-nav__item border-bottom">
2786                  <div class="mobile-nav__table">
2787                    <div class="mobile-nav__table-cell mobile-nav__return">
2788                      <button class="btn--link js-toggle-submenu mobile-nav__return-btn" type="button" aria-expanded="true" aria-label="Accessories">
2789                        <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-left" viewBox="0 0 14 14"><path d="M10.129.604a1.125 1.125 0 0 0-1.591 0L3.023 6.12s.049-.049-.003.004l-.082.08c-.439.44-.44 1.153 0 1.592l5.6 5.6a1.125 1.125 0 0 0 1.59-1.59L5.325 7l4.805-4.805c.44-.439.44-1.151 0-1.59z" fill="#fff"/></svg>
2790                      </button>
2791                    </div>
2792                    <span class="mobile-nav__sublist-link mobile-nav__sublist-header mobile-nav__sublist-header--main-nav-parent">
2793                      <span class="mobile-nav__label">Accessories</span>
2794                    </span>
2795                  </div>
2796                </li>
2797
2798                
2799                  <li class="mobile-nav__item border-bottom">
2800                    
2801                      <a href="/products/blue-beacon"
2802                        class="mobile-nav__sublist-link"
2803                        
2804                      >
2805                        <span class="mobile-nav__label">SafeTracks Blue Beacon</span>
2806                      </a>
2807                    
2808                  </li>
2809                
2810                  <li class="mobile-nav__item border-bottom">
2811                    
2812                      <a href="/products/prime-mobile-charging-base"
2813                        class="mobile-nav__sublist-link"
2814                        
2815                      >
2816                        <span class="mobile-nav__label">Prime Mobile Charging Base</span>
2817                      </a>
2818                    
2819                  </li>
2820                
2821                  <li class="mobile-nav__item border-bottom">
2822                    
2823                      <a href="/products/prime-mobile-lanyard"
2824                        class="mobile-nav__sublist-link"
2825                        
2826                      >
2827                        <span class="mobile-nav__label">Prime Mobile Lanyard</span>
2828                      </a>
2829                    
2830                  </li>
2831                
2832                  <li class="mobile-nav__item border-bottom">
2833                    
2834                      <a href="/products/prime-mobile-belt-clip"
2835                        class="mobile-nav__sublist-link"
2836                        
2837                      >
2838                        <span class="mobile-nav__label">Prime Mobile Belt Clip</span>
2839                      </a>
2840                    
2841                  </li>
2842                
2843                  <li class="mobile-nav__item border-bottom">
2844                    
2845                      <a href="/products/prime-mobile-wristband"
2846                        class="mobile-nav__sublist-link"
2847                        
2848                      >
2849                        <span class="mobile-nav__label">Prime Mobile Wristband</span>
2850                      </a>
2851                    
2852                  </li>
2853                
2854                  <li class="mobile-nav__item border-bottom">
2855                    
2856                      <a href="/products/prime-mobile-r4-magnetic-charging-cable"
2857                        class="mobile-nav__sublist-link"
2858                        
2859                      >
2860                        <span class="mobile-nav__label">Prime Mobile R4 Magnetic Charging Cable</span>
2861                      </a>
2862                    
2863                  </li>
2864                
2865                  <li class="mobile-nav__item">
2866                    
2867                      <a href="/products/locking-clasp"
2868                        class="mobile-nav__sublist-link"
2869                        
2870                      >
2871                        <span class="mobile-nav__label">Locking Clasp</span>
2872                      </a>
2873                    
2874                  </li>
2875                
2876              </ul>
2877            
2878          </li>
2879        
2880<li class="mobile-nav__item">
2881            
2882              
2883              <button type="button" class="btn--link js-toggle-submenu mobile-nav__link" data-target="service-subscriptions-4" data-level="1" aria-expanded="false">
2884                <span class="mobile-nav__label">Service Subscriptions</span>
2885                <div class="mobile-nav__icon">
2886                  <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-right" viewBox="0 0 14 14"><path d="M3.871.604c.44-.439 1.152-.439 1.591 0l5.515 5.515s-.049-.049.003.004l.082.08c.439.44.44 1.153 0 1.592l-5.6 5.6a1.125 1.125 0 0 1-1.59-1.59L8.675 7 3.87 2.195a1.125 1.125 0 0 1 0-1.59z" fill="#fff"/></svg>
2887                </div>
2888              </button>
2889              <ul class="mobile-nav__dropdown" data-parent="service-subscriptions-4" data-level="2">
2890                <li class="visually-hidden" tabindex="-1" data-menu-title="2">Service Subscriptions Menu</li>
2891                <li class="mobile-nav__item border-bottom">
2892                  <div class="mobile-nav__table">
2893                    <div class="mobile-nav__table-cell mobile-nav__return">
2894                      <button class="btn--link js-toggle-submenu mobile-nav__return-btn" type="button" aria-expanded="true" aria-label="Service Subscriptions">
2895                        <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-chevron-left" viewBox="0 0 14 14"><path d="M10.129.604a1.125 1.125 0 0 0-1.591 0L3.023 6.12s.049-.049-.003.004l-.082.08c-.439.44-.44 1.153 0 1.592l5.6 5.6a1.125 1.125 0 0 0 1.59-1.59L5.325 7l4.805-4.805c.44-.439.44-1.151 0-1.59z" fill="#fff"/></svg>
2896                      </button>
2897                    </div>
2898                    <span class="mobile-nav__sublist-link mobile-nav__sublist-header mobile-nav__sublist-header--main-nav-parent">
2899                      <span class="mobile-nav__label">Service Subscriptions</span>
2900                    </span>
2901                  </div>
2902                </li>
2903
2904                
2905                  <li class="mobile-nav__item border-bottom">
2906                    
2907                      <a href="/products/copy-of-monthly-subscription-msf"
2908                        class="mobile-nav__sublist-link"
2909                        
2910                      >
2911                        <span class="mobile-nav__label">Monthly Family Monitored</span>
2912                      </a>
2913                    
2914                  </li>
2915                
2916                  <li class="mobile-nav__item border-bottom">
2917                    
2918                      <a href="/products/copy-of-monthly-subscription-911-monitored-msf"
2919                        class="mobile-nav__sublist-link"
2920                        
2921                      >
2922                        <span class="mobile-nav__label">Monthly 911 Monitored</span>
2923                      </a>
2924                    
2925                  </li>
2926                
2927                  <li class="mobile-nav__item border-bottom">
2928                    
2929                      <a href="/products/yearly-subscription-family-monitored-msf"
2930                        class="mobile-nav__sublist-link"
2931                        
2932                      >
2933                        <span class="mobile-nav__label">Yearly Family Monitored</span>
2934                      </a>
2935                    
2936                  </li>
2937                
2938                  <li class="mobile-nav__item border-bottom">
2939                    
2940                      <a href="/products/yearly-subscription-n911-monitored-msf"
2941                        class="mobile-nav__sublist-link"
2942                        
2943                      >
2944                        <span class="mobile-nav__label">Yearly N911 Monitored</span>
2945                      </a>
2946                    
2947                  </li>
2948                
2949                  <li class="mobile-nav__item">
2950                    
2951                      <a href="/products/theora-smart-fall-detection%E2%84%A2"
2952                        class="mobile-nav__sublist-link"
2953                        
2954                      >
2955                        <span class="mobile-nav__label">Fall Detection (Optional)</span>
2956                      </a>
2957                    
2958                  </li>
2959                
2960              </ul>
2961            
2962          </li>
2963        
2964      </ul>
2965    </nav>
2966  </header>
2967
2968  
2969</div>
2970
2971
2972
2973<script type="application/ld+json">
2974{
2975  "@context": "http://schema.org",
2976  "@type": "Organization",
2977  "name": "SafeTracksGPS",
2978  
2979    
2980    "logo": "https:\/\/safetracksgpsshop.ca\/cdn\/shop\/files\/BB_STGPS_LOGO_1_1683x.png?v=1786554549",
2981  
2982  "sameAs": [
2983    "",
2984    "",
2985    "",
2986    "",
2987    "",
2988    "",
2989    "",
2990    ""
2991  ],
2992  "url": "https:\/\/safetracksgpsshop.ca"
2993}
2994</script>
2994
2995
2996
2997
2998
2999</div>
3000
3001  <div class="page-container drawer-page-content" id="PageContainer">
3002
3003    <main class="main-content js-focus-hidden" id="MainContent" role="main" tabindex="-1">
3004      
3005
3006<div id="shopify-section-cart-template" class="shopify-section"><div class="page-width" data-section-id="cart-template" data-section-type="cart-template" data-ajax-enabled="true">
3007
3008  <div class="hide" data-cart-wrapper>
3009    <div class="cart-header">
3010      <h1 class="cart-header__title">Your cart</h1>
3011      <a href="/collections/all" class="text-link text-link--accent">
3012        Continue shopping
3013      </a>
3014    </div>
3015
3016    <form action="/cart" method="post" novalidate class="cart">
3017      <table>
3018        <thead class="cart__row cart__row--heading">
3019          <th scope="col">Product</th>
3020          <th class="text-right" scope="col">Price</th>
3021          <th class="text-right small--hide" scope="col">Quantity</th>
3022          <th class="text-right small--hide" scope="col">Total</th>
3023        </thead>
3024        <tbody data-cart-line-items></tbody>
3025      </table>
3026
3027      <div class="cart__footer">
3028        <div class="grid"><div class="grid__item text-right small--text-center"><div class="hide" data-cart-discount-wrapper>
3029              <div class="order-discount-card-wrapper" data-cart-discount><span class="order-discount order-discount--title order-discount--cart">
3030                    <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-saletag"><path d="M10 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm0-3H7a1 1 0 0 0-.71.29l-6 6a1 1 0 0 0 0 1.42l4 4a1 1 0 0 0 1.42 0c.19-.2 5.8-5.81 6-6A1 1 0 0 0 12 5V2a2 2 0 0 0-2-2z" fill="#231F20"/></svg><span class="visually-hidden">Discount:</span><span data-cart-discount-title></span>
3031                  </span>
3032                  <span class="order-discount order-discount--cart order-discount--cart-total">
3033                    -<span data-cart-discount-amount></span>
3034                  </span></div>
3035            </div>
3036
3037            <div class="cart-subtotal">
3038              <span class="cart-subtotal__title">Subtotal</span>
3039              <span class="cart-subtotal__price" data-cart-subtotal>$0.00 CAD</span>
3040            </div><div class="cart__shipping rte">Taxes and shipping calculated at checkout
3041</div>
3042            <div class="cart__buttons-container">
3043              <div class="cart__submit-controls"><input type="submit" name="checkout"
3044                  class="cart__submit btn btn--small-wide"
3045                  value="Check out">
3046              </div>
3047
3048              <div class="cart__error-message-wrapper hide" role="alert" data-cart-error-message-wrapper>
3049                <span class="visually-hidden">Error </span>
3050                <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-error" viewBox="0 0 14 14"><g fill="none" fill-rule="evenodd"><path d="M7 0a7 7 0 0 1 7 7 7 7 0 1 1-7-7z"/><path class="icon-error__symbol" d="M6.328 8.396l-.252-5.4h1.836l-.24 5.4H6.328zM6.04 10.16c0-.528.432-.972.96-.972s.972.444.972.972c0 .516-.444.96-.972.96a.97.97 0 0 1-.96-.96z"/></g></svg>
3051                <span class="cart__error-message" data-cart-error-message></span>
3052              </div><div class="additional-checkout-buttons"><div class="dynamic-checkout__content" id="dynamic-checkout-cart" data-shopify="dynamic-checkout-cart"> <shopify-accelerated-checkout-cart wallet-configs="[{&quot;supports_subs&quot;:true,&quot;supports_def_opts&quot;:false,&quot;name&quot;:&quot;shop_pay&quot;,&quot;wallet_params&quot;:{&quot;shopId&quot;:26810187954,&quot;merchantName&quot;:&quot;SafeTracksGPS&quot;,&quot;personalized&quot;:true}}]" access-token="53ef6ab57106ad9d432ff5264afe3be2" buyer-country="US" buyer-locale="en" buyer-currency="CAD" shop-id="26810187954" cart-id="39efafab9bb75a56e1f8883656f98eaf" enabled-flags="[&quot;1172c16a&quot;,&quot;a1d1f9a1&quot;,&quot;f5afabb3&quot;,&quot;370070f3&quot;]" > <div class="wallet-button-wrapper"> <ul class='wallet-cart-grid wallet-cart-grid--skeleton' role="list" data-shopify-buttoncontainer="true"> <li data-testid='grid-cell' class='wallet-cart-button-container'><div class='wallet-cart-button wallet-cart-button__skeleton' role='button' disabled aria-hidden='true'>&nbsp</div></li> </ul> </div> </shopify-accelerated-checkout-cart> </div></div></div>
3053          </div>
3054        </div>
3055      </div>
3056    </form>
3057
3058    <p class="visually-hidden" data-cart-status
3059      aria-live="polite"
3060      role="status"
3061    ></p>
3062  </div>
3063
3064  <div class="empty-page-content text-center" data-empty-page-content>
3065    <h1>Your cart</h1>
3066    <p class="cart--empty-message">Your cart is currently empty.</p>
3067    <div class="cookie-message">
3068      <p>Enable cookies to use the shopping cart</p>
3069    </div>
3070    <a href="/" class="btn btn--has-icon-after cart__continue-btn">Continue shopping<svg aria-hidden="true" focusable="false" role="presentation" class="icon icon--wide icon-arrow-right" viewBox="0 0 20 8"><path d="M15.186.445c.865.944 1.614 1.662 2.246 2.154.631.491 1.227.857 1.787 1.098v.44a9.933 9.933 0 0 0-1.875 1.196c-.606.485-1.328 1.196-2.168 2.134h-.752c.612-1.309 1.253-2.315 1.924-3.018H.77v-.986h15.577c-.495-.632-.84-1.1-1.035-1.406-.196-.306-.486-.843-.87-1.612h.743z" fill="#000" fill-rule="evenodd"/></svg></a>
3071  </div>
3072</div>
3073
3074
3075
3076
3077</div>
3078
3079
3080    </main>
3081
3082    <div id="shopify-section-footer" class="shopify-section">
3083<style>
3084  .site-footer__hr {
3085    border-bottom: 1px solid #191919;
3086  }
3087
3088  .site-footer p,
3089  .site-footer__linklist-item a,
3090  .site-footer__rte a,
3091  .site-footer h4,
3092  .site-footer small,
3093  .site-footer__copyright-content a,
3094  .site-footer__newsletter-error,
3095  .site-footer__social-icons .social-icons__link {
3096    color: #ebebeb;
3097  }
3098
3099  .site-footer {
3100    color: #ebebeb;
3101    background-color: #333232;
3102  }
3103
3104  .site-footer__rte a {
3105    border-bottom: 1px solid #ebebeb;
3106  }
3107
3108  .site-footer__rte a:hover,
3109  .site-footer__linklist-item a:hover,
3110  .site-footer__copyright-content a:hover {
3111    color: #d2d2d2;
3112    border-bottom: 1px solid #d2d2d2;
3113  }
3114
3115  .site-footer__social-icons .social-icons__link:hover {
3116    color: #d2d2d2;
3117  }
3118</style><footer class="site-footer critical-hidden" role="contentinfo" data-section-id="footer" data-section-type="footer-section">
3119  <div class="page-width">
3120    <div class="site-footer__content"></div>
3121  </div>
3122
3123  <hr class="site-footer__hr"><div class="page-width">
3124    <div class="grid grid--no-gutters small--text-center grid--footer-float-right"><div class="grid__item small--hide one-half "></div><div class="grid__item  small--one-whole site-footer-item-tall"><div class="small--hide site-footer-item-align-right ">
3125            <small class="site-footer__copyright-content">&copy; 2026, <a href="/" title="">SafeTracksGPS</a></small>
3126            <small class="site-footer__copyright-content site-footer__copyright-content-powered-by"><a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&amp;utm_medium=shopify&amp;utm_source=onlinestore">Powered by Shopify</a></small>
3127          </div></div><div class="grid__item medium-up--hide one-half small--one-whole"></div><div class="grid__item small--one-whole medium-up--hide site-footer-item-align-right">
3128        <small class="site-footer__copyright-content">&copy; 2026, <a href="/" title="">SafeTracksGPS</a></small>
3129        <small class="site-footer__copyright-content site-footer__copyright-content--powered-by"><a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&amp;utm_medium=shopify&amp;utm_source=onlinestore">Powered by Shopify</a></small>
3130      </div>
3131    </div>
3132  </div>
3133</footer>
3134
3135
3136
3137
3138</div>
3139
3140    <div id="slideshow-info" class="visually-hidden" aria-hidden="true">
3140Use left/right arrows to navigate the slideshow or swipe left/right if using a mobile device</div>
3141
3142  </div>
3143
3144  <ul hidden>
3145    <li id="a11y-refresh-page-message">Choosing a selection results in a full page refresh.</li>
3146    <li id="a11y-selection-message">Press the space key then arrow keys to make a selection.</li>
3147  </ul>
3148<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
3148
3149<shopify-store store-domain="https://safetracksgpsshop.ca" country="US" language="en"></shopify-store>
3150<shopify-chat></shopify-chat>
3151</body>
3152</html>
3153
3154.grid-view-item__image-wrapper div {
3155    padding-top: 100% !important;
3156}
3157.grid-view-item__image-wrapper .grid-view-item__image {
3158height: 100%;
3159    object-fit: contain;
3160}

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.