PageSourceSearch

https://thealinker.ca/search

html thealinker.ca collected 2026-09-29 09:28:40 UTC 202,470 bytes, 3,213 lines download raw bytes

1<!doctype html><html class="no-js" lang="en" dir="ltr">
2  <head>
3    <meta charset="utf-8">
4    <meta name="viewport" content="width=device-width, initial-scale=1.0, height=device-height, minimum-scale=1.0, maximum-scale=5.0">
5    <meta name="theme-color" content="#f5f5f5">
6
7    <title>Search</title><meta name="description" content="The Alinker is a radically different walking bike that keeps you active, mobile and engaged socially. Together we move differently."><link rel="canonical" href="https://thealinker.ca/search"><link rel="shortcut icon" href="//thealinker.ca/cdn/shop/files/favicon_96x96_webp_96x96.jpg?v=1749824122" type="image/png"><link rel="preconnect" href="https://cdn.shopify.com">
8    <link rel="dns-prefetch" href="https://productreviews.shopifycdn.com">
9    <link rel="dns-prefetch" href="https://www.google-analytics.com"><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin><link rel="preload" as="style" href="//thealinker.ca/cdn/shop/t/21/assets/theme.css?v=15473330818351774541721142201">
10    <link rel="preload" as="style" href="//thealinker.ca/cdn/shop/t/21/assets/custom-styles.css?v=162123720830711778191723213455">
11    <link rel="preload" as="style" href="//thealinker.ca/cdn/shop/t/21/assets/translation.css?v=118168554902359556521698087541">
12    <link rel="preload" as="script" href="//thealinker.ca/cdn/shop/t/21/assets/vendor.js?v=31715688253868339281698087541">
13    <link rel="preload" as="script" href="//thealinker.ca/cdn/shop/t/21/assets/theme.js?v=138105436246083635401698087541"><meta property="og:type" content="website">
14  <meta property="og:title" content="Search"><meta property="og:description" content="The Alinker is a radically different walking bike that keeps you active, mobile and engaged socially. Together we move differently."><meta property="og:url" content="https://thealinker.ca/search">
15<meta property="og:site_name" content="The Alinker Inventions Ltd."><meta name="twitter:card" content="summary"><meta name="twitter:title" content="Search">
16  <meta name="twitter:description" content="The Alinker is a radically different walking bike that keeps you active, mobile and engaged socially. Together we move differently.">
17    
18
19
20  
20<script type="application/ld+json">
21  {
22    "@context": "https://schema.org",
23    "@type": "BreadcrumbList",
24  "itemListElement": [{
25      "@type": "ListItem",
26      "position": 1,
27      "name": "Home",
28      "item": "https://thealinker.ca"
29    }]
30  }
31  </script>
31
32
33
34    <link rel="preload" href="//thealinker.ca/cdn/fonts/poppins/poppins_n8.580200d05bca09e2e0c6f4c922047c227dfa8e8c.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="//thealinker.ca/cdn/fonts/muli/muli_n4.e949947cfff05efcc994b2e2db40359a04fa9a92.woff2" as="font" type="font/woff2" crossorigin><style>
35  /* Typography (heading) */
36  @font-face {
37  font-family: Poppins;
38  font-weight: 800;
39  font-style: normal;
40  font-display: swap;
41  src: url("//thealinker.ca/cdn/fonts/poppins/poppins_n8.580200d05bca09e2e0c6f4c922047c227dfa8e8c.woff2") format("woff2"),
42       url("//thealinker.ca/cdn/fonts/poppins/poppins_n8.f4450f472fdcbe9e829f3583ebd559988f5a3d25.woff") format("woff");
43}
44
45@font-face {
46  font-family: Poppins;
47  font-weight: 800;
48  font-style: italic;
49  font-display: swap;
50  src: url("//thealinker.ca/cdn/fonts/poppins/poppins_i8.55af7c89c62b8603457a34c5936ad3b39f67e29c.woff2") format("woff2"),
51       url("//thealinker.ca/cdn/fonts/poppins/poppins_i8.1143b85f67a233999703c64471299cee6bc83160.woff") format("woff");
52}
53
54/* Typography (body) */
55  @font-face {
56  font-family: Muli;
57  font-weight: 400;
58  font-style: normal;
59  font-display: swap;
60  src: url("//thealinker.ca/cdn/fonts/muli/muli_n4.e949947cfff05efcc994b2e2db40359a04fa9a92.woff2") format("woff2"),
61       url("//thealinker.ca/cdn/fonts/muli/muli_n4.35355e4a0c27c9bc94d9af3f9bcb586d8229277a.woff") format("woff");
62}
63
64@font-face {
65  font-family: Muli;
66  font-weight: 400;
67  font-style: italic;
68  font-display: swap;
69  src: url("//thealinker.ca/cdn/fonts/muli/muli_i4.c0a1ea800bab5884ab82e4eb25a6bd25121bd08c.woff2") format("woff2"),
70       url("//thealinker.ca/cdn/fonts/muli/muli_i4.a6c39b1b31d876de7f99b3646461aa87120de6ed.woff") format("woff");
71}
72
73@font-face {
74  font-family: Muli;
75  font-weight: 600;
76  font-style: normal;
77  font-display: swap;
78  src: url("//thealinker.ca/cdn/fonts/muli/muli_n6.cc1d2d4222c93c9ee9f6de4489226d2e1332d85b.woff2") format("woff2"),
79       url("//thealinker.ca/cdn/fonts/muli/muli_n6.2bb79714f197c09d3f5905925734a3f1166d5d27.woff") format("woff");
80}
81
82@font-face {
83  font-family: Muli;
84  font-weight: 600;
85  font-style: italic;
86  font-display: swap;
87  src: url("//thealinker.ca/cdn/fonts/muli/muli_i6.8f2d01d188d44c7a6149f7e8d2688f96baea5098.woff2") format("woff2"),
88       url("//thealinker.ca/cdn/fonts/muli/muli_i6.be105ddc6534276d93778a9b02f60679ab15f9e1.woff") format("woff");
89}
90
91:root {--heading-color: 80, 72, 91;
92    --text-color: 80, 72, 91;
93    --background: 255, 255, 255;
94    --secondary-background: 245, 245, 245;
95    --border-color: 229, 228, 230;
96    --border-color-darker: 185, 182, 189;
97    --success-color: 255, 192, 0;
98    --success-background: 255, 242, 204;
99    --error-color: 222, 42, 42;
100    --error-background: 253, 240, 240;
101    --primary-button-background: 255, 192, 0;
102    --primary-button-text-color: 80, 72, 91;
103    --secondary-button-background: 80, 72, 91;
104    --secondary-button-text-color: 255, 192, 0;
105    --product-star-rating: 255, 192, 0;
106    --product-on-sale-accent: 255, 192, 0;
107    --product-sold-out-accent: 255, 192, 0;
108    --product-custom-label-background: 255, 192, 0;
109    --product-custom-label-text-color: 0, 0, 0;
110    --product-custom-label-2-background: 255, 192, 0;
111    --product-custom-label-2-text-color: 0, 0, 0;
112    --product-low-stock-text-color: 222, 42, 42;
113    --product-in-stock-text-color: 46, 158, 123;
114    --loading-bar-background: 80, 72, 91;
115
116    /* We duplicate some "base" colors as root colors, which is useful to use on drawer elements or popover without. Those should not be overridden to avoid issues */
117    --root-heading-color: 80, 72, 91;
118    --root-text-color: 80, 72, 91;
119    --root-background: 255, 255, 255;
120    --root-border-color: 229, 228, 230;
121    --root-primary-button-background: 255, 192, 0;
122    --root-primary-button-text-color: 80, 72, 91;
123
124    --base-font-size: 18px;
125    --heading-font-family: Poppins, sans-serif;
126    --heading-font-weight: 800;
127    --heading-font-style: normal;
128    --heading-text-transform: uppercase;
129    --text-font-family: Muli, sans-serif;
130    --text-font-weight: 400;
131    --text-font-style: normal;
132    --text-font-bold-weight: 600;
133
134    /* Typography (font size) */
135    --heading-xxsmall-font-size: 11px;
136    --heading-xsmall-font-size: 11px;
137    --heading-small-font-size: 13px;
138    --heading-large-font-size: 40px;
139    --heading-h1-font-size: 40px;
140    --heading-h2-font-size: 32px;
141    --heading-h3-font-size: 28px;
142    --heading-h4-font-size: 26px;
143    --heading-h5-font-size: 22px;
144    --heading-h6-font-size: 18px;
145
146    /* Control the look and feel of the theme by changing radius of various elements */
147    --button-border-radius: 10px;
148    --block-border-radius: 0px;
149    --block-border-radius-reduced: 0px;
150    --color-swatch-border-radius: 0px;
151
152    /* Button size */
153    --button-height: 48px;
154    --button-small-height: 40px;
155
156    /* Form related */
157    --form-input-field-height: 48px;
158    --form-input-gap: 16px;
159    --form-submit-margin: 24px;
160
161    /* Product listing related variables */
162    --product-list-block-spacing: 32px;
163
164    /* Video related */
165    --play-button-background: 255, 255, 255;
166    --play-button-arrow: 80, 72, 91;
167
168    /* RTL support */
169    --transform-logical-flip: 1;
170    --transform-origin-start: left;
171    --transform-origin-end: right;
172
173    /* Other */
174    --zoom-cursor-svg-url: url(//thealinker.ca/cdn/shop/t/21/assets/zoom-cursor.svg?v=25715627919558945481698087541);
175    --arrow-right-svg-url: url(//thealinker.ca/cdn/shop/t/21/assets/arrow-right.svg?v=45993115627850675691698087541);
176    --arrow-left-svg-url: url(//thealinker.ca/cdn/shop/t/21/assets/arrow-left.svg?v=22547255716561432031698087541);
177
178    /* Some useful variables that we can reuse in our CSS. Some explanation are needed for some of them:
179       - container-max-width-minus-gutters: represents the container max width without the edge gutters
180       - container-outer-width: considering the screen width, represent all the space outside the container
181       - container-outer-margin: same as container-outer-width but get set to 0 inside a container
182       - container-inner-width: the effective space inside the container (minus gutters)
183       - grid-column-width: represents the width of a single column of the grid
184       - vertical-breather: this is a variable that defines the global "spacing" between sections, and inside the section
185                            to create some "breath" and minimum spacing
186     */
187    --container-max-width: 1600px;
188    --container-gutter: 24px;
189    --container-max-width-minus-gutters: calc(var(--container-max-width) - (var(--container-gutter)) * 2);
190    --container-outer-width: max(calc((100vw - var(--container-max-width-minus-gutters)) / 2), var(--container-gutter));
191    --container-outer-margin: var(--container-outer-width);
192    --container-inner-width: calc(100vw - var(--container-outer-width) * 2);
193
194    --grid-column-count: 10;
195    --grid-gap: 24px;
196    --grid-column-width: calc((100vw - var(--container-outer-width) * 2 - var(--grid-gap) * (var(--grid-column-count) - 1)) / var(--grid-column-count));
197
198    --vertical-breather: 36px;
199    --vertical-breather-tight: 36px;
200
201    /* Shopify related variables */
202    --payment-terms-background-color: #ffffff;
203  }
204
205  @media screen and (min-width: 741px) {
206    :root {
207      --container-gutter: 40px;
208      --grid-column-count: 20;
209      --vertical-breather: 48px;
210      --vertical-breather-tight: 48px;
211
212      /* Typography (font size) */
213      --heading-xsmall-font-size: 13px;
214      --heading-small-font-size: 14px;
215      --heading-large-font-size: 58px;
216      --heading-h1-font-size: 58px;
217      --heading-h2-font-size: 44px;
218      --heading-h3-font-size: 36px;
219      --heading-h4-font-size: 28px;
220      --heading-h5-font-size: 22px;
221      --heading-h6-font-size: 20px;
222
223      /* Form related */
224      --form-input-field-height: 52px;
225      --form-submit-margin: 32px;
226
227      /* Button size */
228      --button-height: 52px;
229      --button-small-height: 44px;
230    }
231  }
232
233  @media screen and (min-width: 1200px) {
234    :root {
235      --vertical-breather: 64px;
236      --vertical-breather-tight: 48px;
237      --product-list-block-spacing: 48px;
238
239      /* Typography */
240      --heading-large-font-size: 72px;
241      --heading-h1-font-size: 62px;
242      --heading-h2-font-size: 54px;
243      --heading-h3-font-size: 40px;
244      --heading-h4-font-size: 34px;
245      --heading-h5-font-size: 26px;
246      --heading-h6-font-size: 18px;
247    }
248  }
249
250  @media screen and (min-width: 1600px) {
251    :root {
252      --vertical-breather: 64px;
253      --vertical-breather-tight: 48px;
254    }
255  }
256</style>
257    
257<script>
258  // This allows to expose several variables to the global scope, to be used in scripts
259  window.themeVariables = {
260    settings: {
261      direction: "ltr",
262      pageType: "search",
263      cartCount: 0,
264      moneyFormat: "${{amount}}",
265      moneyWithCurrencyFormat: "${{amount}} CAD",
266      showVendor: false,
267      discountMode: "saving",
268      currencyCodeEnabled: false,
269      searchMode: "product,article,collection",
270      searchUnavailableProducts: "last",
271      cartType: "page",
272      cartCurrency: "CAD",
273      mobileZoomFactor: 2.5
274    },
275
276    routes: {
277      host: "thealinker.ca",
278      rootUrl: "\/",
279      rootUrlWithoutSlash: '',
280      cartUrl: "\/cart",
281      cartAddUrl: "\/cart\/add",
282      cartChangeUrl: "\/cart\/change",
283      searchUrl: "\/search",
284      predictiveSearchUrl: "\/search\/suggest",
285      productRecommendationsUrl: "\/recommendations\/products"
286    },
287
288    strings: {
289      accessibilityDelete: "Delete",
290      accessibilityClose: "Close",
291      collectionSoldOut: "Sold out",
292      collectionDiscount: "Save @savings@",
293      productSalePrice: "Sale price",
294      productRegularPrice: "Regular price",
295      productFormUnavailable: "Unavailable",
296      productFormSoldOut: "Sold out",
297      productFormPreOrder: "Pre-order",
298      productFormAddToCart: "Add to cart",
299      searchNoResults: "No results could be found.",
300      searchNewSearch: "New search",
301      searchProducts: "Products",
302      searchArticles: "Journal",
303      searchPages: "Pages",
304      searchCollections: "Collections",
305      cartViewCart: "View cart",
306      cartItemAdded: "Item added to your cart!",
307      cartItemAddedShort: "Added to your cart!",
308      cartAddOrderNote: "Add order note",
309      cartEditOrderNote: "Edit order note",
310      shippingEstimatorNoResults: "Sorry, we do not ship to your address.",
311      shippingEstimatorOneResult: "There is one shipping rate for your address:",
312      shippingEstimatorMultipleResults: "There are several shipping rates for your address:",
313      shippingEstimatorError: "One or more error occurred while retrieving shipping rates:"
314    },
315
316    libs: {
317      flickity: "\/\/thealinker.ca\/cdn\/shop\/t\/21\/assets\/flickity.js?v=176646718982628074891698087541",
318      photoswipe: "\/\/thealinker.ca\/cdn\/shop\/t\/21\/assets\/photoswipe.js?v=132268647426145925301698087541",
319      qrCode: "\/\/thealinker.ca\/cdn\/shopifycloud\/storefront\/assets\/themes_support\/vendor\/qrcode-1f6c2eb7.js"
320    },
321
322    breakpoints: {
323      phone: 'screen and (max-width: 740px)',
324      tablet: 'screen and (min-width: 741px) and (max-width: 999px)',
325      tabletAndUp: 'screen and (min-width: 741px)',
326      pocket: 'screen and (max-width: 999px)',
327      lap: 'screen and (min-width: 1000px) and (max-width: 1199px)',
328      lapAndUp: 'screen and (min-width: 1000px)',
329      desktop: 'screen and (min-width: 1200px)',
330      wide: 'screen and (min-width: 1400px)'
331    }
332  };
333
334  window.addEventListener('pageshow', async () => {
335    const cartContent = await (await fetch(`${window.themeVariables.routes.cartUrl}.js`, {cache: 'reload'})).json();
336    document.documentElement.dispatchEvent(new CustomEvent('cart:refresh', {detail: {cart: cartContent}}));
337  });
338
339  if ('noModule' in HTMLScriptElement.prototype) {
340    // Old browsers (like IE) that does not support module will be considered as if not executing JS at all
341    document.documentElement.className = document.documentElement.className.replace('no-js', 'js');
342
343    requestAnimationFrame(() => {
344      const viewportHeight = (window.visualViewport ? window.visualViewport.height : document.documentElement.clientHeight);
345      document.documentElement.style.setProperty('--window-height',viewportHeight + 'px');
346    });
347  }</script>
347
348
349    <link rel="stylesheet" href="//thealinker.ca/cdn/shop/t/21/assets/theme.css?v=15473330818351774541721142201">
350    <link rel="stylesheet" href="//thealinker.ca/cdn/shop/t/21/assets/custom-styles.css?v=162123720830711778191723213455">
351  <link rel="stylesheet" href="//thealinker.ca/cdn/shop/t/21/assets/translation.css?v=118168554902359556521698087541">
352    <link rel="stylesheet" href="//thealinker.ca/cdn/shop/t/21/assets/imagebox.scss?v=36896846824105379031698087541">
353
354    
354<script src="//thealinker.ca/cdn/shop/t/21/assets/vendor.js?v=31715688253868339281698087541" defer></script>
354
355    
355<script src="//thealinker.ca/cdn/shop/t/21/assets/theme.js?v=138105436246083635401698087541" defer></script>
355
356    
356<script src="//thealinker.ca/cdn/shop/t/21/assets/custom.js?v=165930397078196874451698087541" defer></script>
356
357
358    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.carousel.min.css">
359    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/assets/owl.theme.default.css">
360
361    
361<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
361
362    
362<script src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.js"></script>
362
363
364     <!-- Add Crowdfunding -->
365  	
365<script>(function() { var d = document, fr = d.createElement('script'); fr.type = 'text/javascript'; fr.async = true; fr.src = 'https://static.fundrazr.com/widgets/loader.js'; var s = d.getElementsByTagName('script')[0]; s.parentNode.insertBefore(fr, s);})();</script>
365
366    <!-- APP Snippets -->
367    
367<script src="https://modapps.com.au/geolocationredirect/assets/geo/alinker.myshopify.com/main_geo.js" type="text/javascript"></script>
367  
368<script>
369var safariBrowserCompatibility = false;
370var sessionStCall = false;
371var ajaxLinkUrl = 'https://modapps.com.au/geolocationredirect/assets/geo/alinker.myshopify.com/geolocationredirect.js';
372 if(typeof(Storage) !== 'undefined') {
373       try {
374                localStorage.setItem('lStorageBrowserCheck', 1);
375                localStorage.removeItem('lStorageBrowserCheck');
376                safariBrowserCompatibility = true;
377            } 
378            catch (e) {
379                Storage.prototype._setItem = Storage.prototype.setItem;
380                Storage.prototype.setItem = function () { };
381                safariBrowserCompatibility = false;
382                console.log('Sorry, your browser does not support web storage...');
383            }
384            if (safariBrowserCompatibility) {
385                if (window.sessionStorage.geoJsCodeTxt) {
386                    sessionStCall = true;
387                } else {
388                    sessionStCall = false;
389                }
390            }
391    } else {
392            safariBrowserCompatibility = false;
393            sessionStCall = false;
394            console.log('Sorry, your browser does not support web storage...');
395        }
396if(sessionStCall){
397          var s = document.createElement('script');
398        s.type = 'text/javascript';
399        try{
400          s.appendChild(document.CreateTextNode(window.sessionStorage.geoJsCodeTxt));
401          document.getElementsByTagName('head')[0].appendChild(s);
402          
403        }
404        catch (e) {
405          s.text = window.sessionStorage.geoJsCodeTxt;
406          document.getElementsByTagName('head')[0].appendChild(s);
407          
408        }
409  }
410else {
411modBarjquery.ajax({
412          type: 'GET',
413          data: { urlajaxpath : ajaxLinkUrl },  
414          dataType: 'text', 
415          async: false,
416          url: 'https://modapps.com.au/geolocationredirect/getfilecs.php',
417          timeout: 7000,   
418          success: function (data) {           
419            var tempScriptTxt = '';
420                    if (safariBrowserCompatibility) {
421                        window.sessionStorage.geoJsCodeTxt = data;
422                        tempScriptTxt = window.sessionStorage.geoJsCodeTxt;
423                    }  
424                    else {
425                      tempScriptTxt = data;
426                      //alert(tempScriptTxt);
427                    }                  
428                    var s = document.createElement('script');
429                    s.type = 'text/javascript';
430                    try {
431                        s.appendChild(document.CreateTextNode(tempScriptTxt));
432                        document.getElementsByTagName('head')[0].appendChild(s);
433
434                    }
435                    catch (e) {
436                        s.text = tempScriptTxt;
437                        document.getElementsByTagName('head')[0].appendChild(s);
438
439                    } }, 
440          error: function (data) 
441            { console.log('Cannot load service from server'); }
442    });
443}
444</script>
444 
445
446     <!-- Google Tag Manager -->
447    
447<script>
vendor: 323 bytes, line 447
447(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','
447GTM-MGSRJ78
vendor: 3 bytes, line 447
447');
447</script>
447
448    <!-- End Google Tag Manager -->
449    <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 449-450
449
450    <script async src="https://www.googletagmanager.com/gtag/js?id=
450AW-702397120
vendor: 16 bytes, lines 450-451
450"></script>
451    
451<script>
452  
vendor: 133 bytes, lines 452-455
452window.dataLayer = window.dataLayer || [];
453  function gtag(){dataLayer.push(arguments);}
454  gtag('js', new Date());
455  gtag('config', '
455AW-702397120
vendor: 8 bytes, lines 455-456
455');
456    
456</script>
456
457
458
459    
459<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
459<meta name="google-site-verification" content="jTL6x1F0ls5Bc4EuF0-imas-LUF96ta44_JncOoSRXc">
460<meta name="google-site-verification" content="CKd6ZNWHtFGKzw-8z2Wr_M-xF5QypbdGG5PlL2j-r38">
461<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/15333935/digital_wallets/dialog">
462<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="alternate" hreflang="x-default" href="https://thealinker.ca/search">
463<link rel="alternate" hreflang="en" href="https://thealinker.ca/search">
464<link rel="alternate" hreflang="fr" href="https://thealinker.ca/fr/search">
465<script async="async" src="/checkouts/internal/preloads.js?locale=en-CA"></script>
465
466<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
467<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-CA&shop_id=15333935" crossorigin="anonymous"></script>
vendor: 1 bytes, line 467
467
468<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":15333935,"countryCode":"CA","currencyCode":"CAD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/15333935","merchantName":"The Alinker Inventions Ltd.","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover","interac","jcb"],"total":{"type":"pending","label":"The Alinker Inventions Ltd.","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 468
468
469<script id="shopify-features" type="application/json">{"accessToken":"98ca2b91d91c735c445f16f8e4832142","betas":["rich-media-storefront-analytics"],"domain":"thealinker.ca","predictiveSearch":true,"shopId":15333935,"locale":"en"}</script>
vendor: 1 bytes, line 469
469
470<script>var Shopify = Shopify || {};
471Shopify.shop = "alinker-ca.myshopify.com";
472Shopify.locale = "en";
473Shopify.currency = {"active":"CAD","rate":"1.0"};
474Shopify.country = "CA";
475Shopify.theme = {"name":"PROD | Fireside - FLEX","id":123845214285,"schema_name":"Focal","schema_version":"9.0.0","theme_store_id":null,"role":"main"};
476Shopify.theme.handle = "null";
477Shopify.theme.style = {"id":null,"handle":null};
478Shopify.cdnHost = "thealinker.ca/cdn";
479Shopify.routes = Shopify.routes || {};
480Shopify.routes.root = "/";
481Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js";
482Shopify.SignInWithShop = Shopify.SignInWithShop || {};
483Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {};
484Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 484
484
485<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 485
485
486<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 486
486
487<script>
488  window.ShopifyPay = window.ShopifyPay || {};
489  window.ShopifyPay.apiHost = "shop.app\/pay";
490  window.ShopifyPay.redirectState = null;
491</script>
vendor: 1 bytes, line 491
491
492<script>
493  window.Shopify = window.Shopify || {};
494  window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {};
495  window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 };
496  window.Shopify.SignInWithShop.eligible = true;
497</script>
vendor: 1 bytes, line 497
497
498<script id="shop-js-analytics" type="application/json">{"pageType":"search"}</script>
vendor: 1 bytes, line 498
498
499<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 499
499
500<script type="module">
501  await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js");
502
503  window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true});
504
505</script>
vendor: 1 bytes, line 505
505
506<script>
507  window.Shopify = window.Shopify || {};
508  if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {};
509  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"]};
510</script>
vendor: 1 bytes, line 510
510
511<script>(function() {
512  var isLoaded = false;
513  function asyncLoad() {
514    if (isLoaded) return;
515    isLoaded = true;
516    var urls = ["https:\/\/cdn.crazyrocket.io\/widget\/scripts\/crazyrocket.start-cdn.js?id=62b5e6f6117cee193c5f13cf\u0026shop=alinker-ca.myshopify.com","https:\/\/config.gorgias.chat\/bundle-loader\/01GYCCDPHT8BRGTAXTWQN47ASW?source=shopify1click\u0026shop=alinker-ca.myshopify.com","https:\/\/media.9gtb.com\/loader.js?g_cvt_id=e597f41b-0dc5-463a-aa49-834b7427304a\u0026shop=alinker-ca.myshopify.com"];
517    for (var i = 0; i < urls.length; i++) {
518      var s = document.createElement('script');
519      s.type = 'text/javascript';
520      s.async = true;
521      s.src = urls[i];
522      var x = document.getElementsByTagName('script')[0];
523      x.parentNode.insertBefore(s, x);
524    }
525  };
526  if(window.attachEvent) {
527    window.attachEvent('onload', asyncLoad);
528  } else {
529    window.addEventListener('load', asyncLoad, false);
530  }
531})();</script>
vendor: 1 bytes, line 531
531
532<script id="__st">var __st={"a":15333935,"offset":-25200,"reqid":"5d44a55d-320b-45d3-9fa2-c115a73804ac-1790674119","pageurl":"thealinker.ca\/search","u":"49bb47f1558c","p":"searchresults"};</script>
vendor: 1 bytes, line 532
532
533<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 533
533
534<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 534
534
535<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//thealinker.ca/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 535
535
536<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 = "//thealinker.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>
536<script crossorigin="anonymous" defer="defer" src="//thealinker.ca/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 536
536
537<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 537
537
538<script>
539  window.Shopify = window.Shopify || {};
540  window.Shopify.MCP = window.Shopify.MCP || {};
541  window.Shopify.MCP.enabled = true;
542  window.Shopify.MCP.shop = "alinker-ca.myshopify.com";
543  window.Shopify.MCP.mcpEndpoint = "https:\/\/thealinker.ca\/api\/mcp";
544  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"]}}];
545</script>
vendor: 1 bytes, line 545
545
546<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("\/\/thealinker.ca\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})();
547</script>
vendor: 1 bytes, line 547
547
548<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://thealinker.ca/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}};
549</script>
vendor: 1 bytes, line 549
549
550<script data-source-attribution="shopify.dynamic_checkout.buyer_consent">
551  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);
552</script>
vendor: 1 bytes, line 552
552
553<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}}));
554</script>
554
555<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://thealinker.ca/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous">
556<style id="shopify-accelerated-checkout-cart">
557        #shopify-buyer-consent {
558  margin-top: 1em;
559  display: inline-block;
560  width: 100%;
561}
562
563#shopify-buyer-consent.hidden {
564  display: none;
565}
566
567#shopify-subscription-policy-button {
568  background: none;
569  border: none;
570  padding: 0;
571  text-decoration: underline;
572  font-size: inherit;
573  cursor: pointer;
574}
575
576#shopify-subscription-policy-button::before {
577  box-shadow: none;
578}
579
580      </style>
581
582<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
582
583  <meta class='geo-ip' content='eyJwYXJhbWV0ZXJzIjp7InJlZGlyZWN0X3RleHQiOiJJdCBzZWVtcyB5b3UmIzM5cmUgaW4gJUNPVU5UUlklLiBSZWRpcmVjdCB0byAlU1RPUkVOQU1FJT8iLCJ5ZXMiOiJZZXMsIHBsZWFzZSIsIm5vIjoiTm8sIHRoYW5rcyIsInBvcHVwX2RlbGF5IjoiMCIsInBlcm1hbmVudC1yZWRpcmVjdCI6IjEiLCJiYWNrZ3JvdW5kLWNvbG9yIjoiZmZlMDY2IiwidGV4dC1jb2xvciI6IjAwMDAwMCIsInllcy1iYWNrZ3JvdW5kLWNvbG9yIjoiZmZmZmZmIiwieWVzLXRleHQtY29sb3IiOiIwMDAwMDAiLCJuby1iYWNrZ3JvdW5kLWNvbG9yIjoiZmZjYzAwIiwibm8tdGV4dC1jb2xvciI6IjAwMDAwMCIsImxheW91dC1zZWxlY3RvciI6InJlZGlyZWN0In0sInJ1bGVzTGlzdCI6W3siY291bnRyaWVzIjoiQ2FuYWRhIiwiZXhjZXB0aW9ucyI6IiIsImlwIjoiIiwic3RvcmVfbmFtZSI6IkNBIHN0b3JlIiwibGluayI6Imh0dHBzOlwvXC93d3cudGhlYWxpbmtlci5jYSIsImRvbWFpbl9yZWRpcmVjdCI6IjAifV19'>
583<script async src='//thealinker.ca/apps/easylocation/easylocation-1.0.2.min.js'></script>
583<!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 -->
584
585
586
587
588
589
590
591
592
593
594
595
596  
596<script async src="https://static.klaviyo.com/onsite/js/SLnEMq/klaviyo.js?company_id=SLnEMq"></script>
596
597  
597<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
597
598
599  
600
601
602
603
604  
604<script>
605    window.klaviyoReviewsProductDesignMode = false
606  </script>
606
607
608
609
610
611
612
613
614
615
616<!-- END app block -->
616<script src="https://cdn.shopify.com/extensions/019d43d1-bbad-7de5-bd49-ea6de5e8ca58/accessibly-app-30/assets/acc-main.js" type="text/javascript" defer="defer"></script>
616
617<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
618<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: 15333935,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "search"};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 618
618
619<script>
620  window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || [];
621</script>
vendor: 1 bytes, line 621
621
622<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}
622).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: 15333935,storefrontBaseUrl: "https://thealinker.ca",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://thealinker.ca/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"1508900941","configuration":"{\"accountID\":\"SLnEMq\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]}
622,{"id":"137592909","configuration":"{\"pixel_id\":\"1400672013387954\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"66420813","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS"],"name":"Google Analytics tag (migrated)"},{"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":"The Alinker Inventions Ltd.","paymentSettings":{"currencyCode":"CAD"},"myshopifyDomain":"alinker-ca.myshopify.com","countryCode":"CA","storefrontUrl":"https:\/\/thealinker.ca"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://thealinker.ca/cdn","a5bf51cfwabd6c495p49b74ff1maa529d2b",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"123845214285","themePublished":"true","eventMetadataId":"3bdb9db1-80ec-4456-85c4-2780493e9b3c","pageType":"searchresults","shopId":"15333935","storefrontBaseUrl":"https:\/\/thealinker.ca","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"a5bf51cfwabd6c495p49b74ff1maa529d2b","publish":"custom","events":"[[\"page_viewed\",{}],[\"search_submitted\",{\"searchResult\":{\"query\":\"\",\"productVariants\":[]}}]]"});})();</script>
622<script>
623  window.ShopifyAnalytics = window.ShopifyAnalytics || {};
624  window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
625  window.ShopifyAnalytics.meta.currency = 'CAD';
626  var meta = {"products":[],"page":{"pageType":"searchresults","requestId":"5d44a55d-320b-45d3-9fa2-c115a73804ac-1790674119"}};
627  for (var attr in meta) {
628    window.ShopifyAnalytics.meta[attr] = meta[attr];
629  }
630</script>
vendor: 1 bytes, line 630
630
631<script class="analytics">
632  (function () {
633    var customDocumentWrite = function(content) {
634      var jquery = null;
635
636      if (window.jQuery) {
637        jquery = window.jQuery;
638      } else if (window.Checkout && window.Checkout.$) {
639        jquery = window.Checkout.$;
640      }
641
642      if (jquery) {
643        jquery('body').append(content);
644      }
645    };
646
647    var hasLoggedConversion = function(token) {
648      if (token) {
649        return document.cookie.indexOf('loggedConversion=' + token) !== -1;
650      }
651      return false;
652    }
653
654    var setCookieIfConversion = function(token) {
655      if (token) {
656        var twoMonthsFromNow = new Date(Date.now());
657        twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);
658
659        document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow;
660      }
661    }
662
663    var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
664    window.ShopifyAnalytics.lib.trekkie = window.trekkie;
665    if (trekkie.integrations) {
666      return;
667    }
668    trekkie.methods = [
669      'identify',
670      'page',
671      'ready',
672      'track',
673      'trackForm',
674      'trackLink'
675    ];
676    trekkie.factory = function(method) {
677      return function() {
678        var args = Array.prototype.slice.call(arguments);
679        args.unshift(method);
680        trekkie.push(args);
681        if (method == 'track' || method == 'page') {
682          var pageUrl;
683          try {
684            pageUrl = window.location.href;
685          } catch (e) {}
686          var pageReferrer;
687          try {
688            pageReferrer = document.referrer;
689          } catch (e) {}
690          try {
691            if (window.__TREKKIE_SHIM_QUEUE == null) {
692              window.__TREKKIE_SHIM_QUEUE = [];
693            }
694            window.__TREKKIE_SHIM_QUEUE.push({
695              from: 'trekkie-stub',
696              method: method,
697              args: args.slice(1),
698              pageContext: {
699                url: pageUrl,
700                referrer: pageReferrer
701              }
702            });
703          } catch (e) {
704            // no-op
705          }
706        }
707        return trekkie;
708      };
709    };
710    for (var i = 0; i < trekkie.methods.length; i++) {
711      var key = trekkie.methods[i];
712      trekkie[key] = trekkie.factory(key);
713    }
714    trekkie.load = function(config) {
715      trekkie.config = config || {};
716      trekkie.config.initialDocumentCookie = document.cookie;
717      var first = document.getElementsByTagName('script')[0];
718var script = document.createElement('script');
719script.type = 'text/javascript';
720script.onerror = function(e) {
721  var scriptFallback = document.createElement('script');
722  scriptFallback.type = 'text/javascript';
723  scriptFallback.onerror = function(error) {
724          var Monorail = {
725      produce: function produce(monorailDomain, schemaId, payload) {
726        var currentMs = new Date().getTime();
727        var event = {
728          schema_id: schemaId,
729          payload: payload,
730          metadata: {
731            event_created_at_ms: currentMs,
732            event_sent_at_ms: currentMs
733          }
734        };
735        return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event));
736      },
737      sendRequest: function sendRequest(endpointUrl, payload) {
738        // Try the sendBeacon API
739        if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) {
740          var blobData = new window.Blob([payload], {
741            type: 'text/plain'
742          });
743
744          if (window.navigator.sendBeacon(endpointUrl, blobData)) {
745            return true;
746          } // sendBeacon was not successful
747
748        } // XHR beacon
749
750        var xhr = new XMLHttpRequest();
751
752        try {
753          xhr.open('POST', endpointUrl);
754          xhr.setRequestHeader('Content-Type', 'text/plain');
755          xhr.send(payload);
756        } catch (e) {
757          console.log(e);
758        }
759
760        return false;
761      },
762      isIos12: function isIos12() {
763        return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1;
764      }
765    };
766    Monorail.produce('monorail-edge.shopifysvc.com',
767      'trekkie_storefront_load_errors/1.1',
768      {shop_id: 15333935,
769      theme_id: 123845214285,
770      app_name: "storefront",
771      context_url: window.location.href,
772      source_url: "//thealinker.ca/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js"});
773
774  };
775  scriptFallback.async = true;
776  scriptFallback.src = '//thealinker.ca/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js';
777  first.parentNode.insertBefore(scriptFallback, first);
778};
779script.async = true;
780script.src = '//thealinker.ca/cdn/s/trekkie.storefront.f1ba865b3fecd812ad617f74ac079261075e9edb.min.js';
781first.parentNode.insertBefore(script, first);
782
783    };
784    trekkie.load(
785      {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":15333935,"isMerchantRequest":null,"themeId":123845214285,"themeCityHash":"8457644184449260418","contentLanguage":"en","currency":"CAD","eventMetadataId":"3bdb9db1-80ec-4456-85c4-2780493e9b3c"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}}
786    );
787
788    var loaded = false;
789    trekkie.ready(function() {
790      if (loaded) return;
791      loaded = true;
792
793      window.ShopifyAnalytics.lib = window.trekkie;
794
795      var originalDocumentWrite = document.write;
796      document.write = customDocumentWrite;
797      try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
798      document.write = originalDocumentWrite;
799
800      var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/)
801      var token = match? match[1]: undefined;
802      if (!hasLoggedConversion(token)) {
803        setCookieIfConversion(token);
804        window.ShopifyAnalytics.lib.track("Performed Search",{"query":null},undefined,undefined,{"shopifyEmitted":true});
805      }
806    });
807
808    window.ShopifyAnalytics.lib.page(null,{"pageType":"searchresults","requestId":"5d44a55d-320b-45d3-9fa2-c115a73804ac-1790674119","shopifyEmitted":true});
809
810    var eventsListenerScript = document.createElement('script');
811    eventsListenerScript.async = true;
812    eventsListenerScript.src = "//thealinker.ca/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js";
813    document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
814})();</script>
814
815  
815<script>
816  if (!window.ga || (window.ga && typeof window.ga !== 'function')) {
817    window.ga = function ga() {
818      (window.ga.q = window.ga.q || []).push(arguments);
819      if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
820        window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"});
821      }
822      console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information.");
823    };
824    if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') {
825      window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"});
826    }
827  }
828</script>
vendor: 1 bytes, line 828
828
829<script
830  defer
831  src="https://thealinker.ca/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js"
832  data-application="storefront-renderer"
833  data-shop-id="15333935"
834  data-render-region="gcp-us-central1"
835  data-page-type="search"
836  data-theme-instance-id="123845214285"
837  data-theme-name="Focal"
838  data-theme-version="9.0.0"
839  data-monorail-region="shop_domain"
840  data-resource-timing-sampling-rate="10"
841  data-shs="true"
842  data-shs-beacon="true"
843  data-shs-export-with-fetch="true"
844  data-shs-logs-sample-rate="1"
845  data-shs-beacon-endpoint="https://thealinker.ca/api/collect"
846></script>
846
847<meta name="shopify-y" content="d8cb7a95-a5c1-4dc8-b735-508aac7fafba" data-expiration="1822231720000"><meta name="shopify-s" content="463af5bf-bfbd-431c-b9f4-4399e9dd6e62" data-expiration="1790675920000"><meta name="new-cookie-storage-activated" content="t">
848</head><body class="no-focus-outline  features--image-zoom" data-instant-allow-query-string>
849    <!-- Google Tag Manager (noscript) -->
vendor: 72 bytes, lines 849-850
849
850	   <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
850GTM-MGSRJ78
vendor: 84 bytes, lines 850-851
850" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
851	
851<!-- End Google Tag Manager (noscript) --><svg class="visually-hidden">
852      <linearGradient id="rating-star-gradient-half">
853        <stop offset="50%" stop-color="rgb(var(--product-star-rating))" />
854        <stop offset="50%" stop-color="rgb(var(--product-star-rating))" stop-opacity="0.4" />
855      </linearGradient>
856    </svg>
857
858    <a href="#main" class="visually-hidden skip-to-content">Skip to content</a>
859    <loading-bar class="loading-bar"></loading-bar><div id="shopify-section-announcement-bar" class="shopify-section shopify-section--announcement-bar"><style>
860  :root {
861    --enable-sticky-announcement-bar: 0;
862  }
863
864  #shopify-section-announcement-bar {
865    --heading-color: 40, 40, 40;
866    --text-color: 40, 40, 40;
867    --primary-button-background: 40, 40, 40;
868    --primary-button-text-color: 255, 255, 255;
869    --section-background: 255, 192, 0;
870    z-index: 5; /* Make sure it goes over header */position: relative;top: 0;
871  }
872
873  @media screen and (min-width: 741px) {
874    :root {
875      --enable-sticky-announcement-bar: 0;
876    }
877
878    #shopify-section-announcement-bar {position: relative;}
879  }
880</style></div><div id="shopify-section-popup" class="shopify-section shopify-section--popup"><style>
881    [aria-controls="newsletter-popup"] {
882      display: none; /* Allows to hide the toggle icon in the header if the section is disabled */
883    }
884  </style></div><div id="shopify-section-header" class="shopify-section shopify-section--header"><style>
885  :root {
886    --enable-sticky-header: 1;
887    --enable-transparent-header: 0;
888    --loading-bar-background: 80, 72, 91; /* Prevent the loading bar to be invisible */
889  }
890
891  #shopify-section-header {--header-background: 245, 245, 245;
892    --header-text-color: 80, 72, 91;
893    --header-border-color: 220, 219, 222;
894    --reduce-header-padding: 1;position: -webkit-sticky;
895      position: sticky;top: calc(var(--enable-sticky-announcement-bar) * var(--announcement-bar-height, 0px));
896    z-index: 4;
897  }#shopify-section-header .header__logo-image {
898    max-width: 100px;
899  }
900
901  @media screen and (min-width: 741px) {
902    #shopify-section-header .header__logo-image {
903      max-width: 140px;
904    }
905  }
906
907  @media screen and (min-width: 1200px) {/* For this navigation we have to move the logo and make sure the navigation takes the whole width */
908      .header__logo {
909        order: -1;
910        flex: 1 1 0;
911      }
912
913      .header__inline-navigation {
914        flex: 1 1 auto;
915        justify-content: center;
916        max-width: max-content;
917        margin-inline: 48px;
918      }}</style>
919
920<store-header sticky  class="header  " role="banner"><div class="container">
921    <div class="header__wrapper">
922      <!-- LEFT PART -->
923      <nav class="header__inline-navigation" role="navigation"><desktop-navigation>
924  <ul class="header__linklist list--unstyled hidden-pocket hidden-lap" role="list"><li class="header__linklist-item has-dropdown" data-item-title="Shop">
925        <a class="header__linklist-link link--animated" href="#" aria-controls="desktop-menu-1" aria-expanded="false">Shop</a><div hidden id="desktop-menu-1" class="mega-menu" >
926              <div class="container">
927                <div class="mega-menu__inner"><div class="mega-menu__columns-wrapper"><div class="mega-menu__column"><a href="/products/the-alinker" class="mega-menu__title heading heading--small">The Alinker</a></div><div class="mega-menu__column"><a href="/products/the-alinker-rent-to-own" class="mega-menu__title heading heading--small">Rent to Own</a></div><div class="mega-menu__column"><a href="/products/gently-used-alinker-series" class="mega-menu__title heading heading--small">Gently Used Alinker</a></div><div class="mega-menu__column"><a href="/collections/replacement-parts" class="mega-menu__title heading heading--small">Replacement Parts</a></div><div class="mega-menu__column"><a href="/products/alinker-rear-wheel" class="mega-menu__title heading heading--small">Rear Wheel</a></div></div><div class="mega-menu__images-wrapper mega-menu__images-wrapper--tight"><a href="/products/the-alinker" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
928                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="500" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_0010_anna_500x.jpg?v=1741369380" srcset="//thealinker.ca/cdn/shop/files/img_0010_anna_240x.jpg?v=1741369380 240w, //thealinker.ca/cdn/shop/files/img_0010_anna_480x.jpg?v=1741369380 480w, //thealinker.ca/cdn/shop/files/img_0010_anna_500x.jpg?v=1741369380 500w">
929                  </div><p class="mega-menu__heading heading heading--small">The Alinker</p></a><a href="/products/the-alinker-rent-to-own" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
930                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="496" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_placeholder_0003_Layer_2_500x.jpg?v=1677784281" srcset="//thealinker.ca/cdn/shop/files/img_placeholder_0003_Layer_2_240x.jpg?v=1677784281 240w, //thealinker.ca/cdn/shop/files/img_placeholder_0003_Layer_2_480x.jpg?v=1677784281 480w, //thealinker.ca/cdn/shop/files/img_placeholder_0003_Layer_2_500x.jpg?v=1677784281 500w">
931                  </div><p class="mega-menu__heading heading heading--small">Rent to own</p></a><a href="/products/gently-used-alinker" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
932                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="496" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_placeholder_0005_Backgroun
932d_500x.jpg?v=1677784318" srcset="//thealinker.ca/cdn/shop/files/img_placeholder_0005_Background_240x.jpg?v=1677784318 240w, //thealinker.ca/cdn/shop/files/img_placeholder_0005_Background_480x.jpg?v=1677784318 480w, //thealinker.ca/cdn/shop/files/img_placeholder_0005_Background_500x.jpg?v=1677784318 500w">
933                  </div><p class="mega-menu__heading heading heading--small">Gently Used</p></a></div></div>
934              </div>
935            </div></li><li class="header__linklist-item has-dropdown" data-item-title="Learn More">
936        <a class="header__linklist-link link--animated" href="#" aria-controls="desktop-menu-2" aria-expanded="false">Learn More</a><div hidden id="desktop-menu-2" class="mega-menu" >
937              <div class="container">
938                <div class="mega-menu__inner"><div class="mega-menu__columns-wrapper"><div class="mega-menu__column"><a href="/pages/crowdfund-alinker-family" class="mega-menu__title heading heading--small">Crowdfund</a></div><div class="mega-menu__column"><a href="/pages/faq" class="mega-menu__title heading heading--small">FAQ</a></div><div class="mega-menu__column"><a href="/pages/how-it-works" class="mega-menu__title heading heading--small">How it works</a></div><div class="mega-menu__column"><a href="/pages/warranty" class="mega-menu__title heading heading--small">Warranty + Refund</a></div></div><div class="mega-menu__images-wrapper mega-menu__images-wrapper--tight"><a href="/pages/crowdfund-alinker-family" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
939                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="496" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_placeholder_0000_Layer_5_500x.jpg?v=1677784389" srcset="//thealinker.ca/cdn/shop/files/img_placeholder_0000_Layer_5_240x.jpg?v=1677784389 240w, //thealinker.ca/cdn/shop/files/img_placeholder_0000_Layer_5_480x.jpg?v=1677784389 480w, //thealinker.ca/cdn/shop/files/img_placeholder_0000_Layer_5_500x.jpg?v=1677784389 500w">
940                  </div><p class="mega-menu__heading heading heading--small">Crowdfund</p></a><a href="/pages/faq" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
941                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="496" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_placeholder_0002_Layer_3_500x.jpg?v=1677784389" srcset="//thealinker.ca/cdn/shop/files/img_placeholder_0002_Layer_3_240x.jpg?v=1677784389 240w, //thealinker.ca/cdn/shop/files/img_placeholder_0002_Layer_3_480x.jpg?v=1677784389 480w, //thealinker.ca/cdn/shop/files/img_placeholder_0002_Layer_3_500x.jpg?v=1677784389 500w">
942                  </div><p class="mega-menu__heading heading heading--small">FAQ</p></a><a href="/pages/how-it-works" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
943                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="390" width="390" alt="" src="//thealinker.ca/cdn/shop/files/img_390px_0005_Layer_6_390x_jpg_390x.webp?v=1677784426" srcset="//thealinker.ca/cdn/shop/files/img_390px_0005_Layer_6_390x_jpg_240x.webp?v=1677784426 240w, //thealinker.ca/cdn/shop/files/img_390px_0005_Layer_6_390x_jpg_390x.webp?v=1677784426 390w">
944                  </div><p class="mega-menu__heading heading heading--small">How it Works</p></a><a href="/pages/limited-warranty" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
945                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="480" width="480" alt="" src="//thealinker.ca/cdn/shop/files/3_-_Back_in_charge_480x_jpg_480x.webp?v=1677781930" srcset="//thealinker.ca/cdn/shop/files/3_-_Back_in_charge_480x_jpg_240x.webp?v=1677781930 240w, //thealinker.ca/cdn/shop/files/3_-_Back_in_charge_480x_jpg_480x.webp?v=1677781930 480w">
946                  </div><p class="mega-menu__heading heading heading--small">Warranty + Refund</p></a></div></div>
947              </div>
948            </div></li><li class="header__linklist-item has-dropdown" data-item-title="About">
949        <a class="header__linklist-link link--animated" href="#" aria-controls="desktop-menu-3" aria-expanded="false">About</a><div hidden id="desktop-menu-3" class="mega-menu" >
950              <div class="container">
951                <div class="mega-menu__inner"><div class="mega-menu__columns-wrapper"><div class="mega-menu__column"><a href="/pages/about" class="mega-menu__title heading heading--small">About Us</a></div><div class="mega-menu__column"><a href="/pages/contact-us" class="mega-menu__title heading heading--small">Contact Us</a></div><div class="mega-menu__column"><a href="/pages/international-distribution-partners" class="mega-menu__title heading heading--small">International Distribution</a></div></div><div class="mega-menu__images-wrapper mega-menu__images-wrapper--tight"><a href="/pages/about" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
952                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="480" width="480" alt="" src="//thealinker.ca/cdn/shop/files/Barbara_on_Alinker_1024_480x_JPG_480x.webp?v=1677784464" srcset="//thealinker.ca/cdn/shop/files/Barbara_on_Alinker_1024_480x_JPG_240x.webp?v=1677784464 240w, //thealinker.ca/cdn/shop/files/Barbara_on_Alinker_1024_480x_JPG_480x.webp?v=1677784464 480w">
953                  </div><p class="mega-menu__heading heading heading--small">About Us</p></a><a href="/pages/contact-us" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
954                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="390" width="390" alt="" src="//thealinker.ca/cdn/shop/files/img_390px_0007_Layer_4_390x_jpg_390x.webp?v=1677784473" srcset="//thealinker.ca/cdn/shop/files/img_390px_0007_Layer_4_390x_jpg_240x.webp?v=1677784473 240w, //thealinker.ca/cdn/shop/files/img_390px_0007_Layer_4_390x_jpg_390x.webp?v=1677784473 390w">
955                  </div><p class="mega-menu__heading heading heading--small">Contact Us</p></a><a href="/pages/international-distribution-partners" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
956                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="480" width="480" alt="" src="//thealinker.ca/cdn/shop/files/2_-_Go_beyond_480x_jpg_480x.webp?v=1677781930" srcset="//thealinker.ca/cdn/shop/files/2_-_Go_beyond_480x_jpg_240x.webp?v=1677781930 240w, //thealinker.ca/cdn/shop/files/2_-_Go_beyond_480x_jpg_480x.webp?v=1677781930 480w">
957                  </div><p class="mega-menu__heading heading heading--small">International Distribution</p></a></div></div>
958              </div>
959            </div></li><li class="header__linklist-item has-dropdown" data-item-title="Community">
960        <a class="header__linklist-link link--animated" href="#" aria-controls="desktop-menu-4" aria-expanded="false">Community</a><div hidden id="desktop-menu-4" class="mega-menu" >
961              <div class="container">
962                <div class="mega-menu__inner"><div class="mega-menu__columns-wrapper"><div class="mega-menu__column"><a href="/blogs/all" class="mega-menu__title heading heading--small">The Blog</a></div><div class="mega-menu__column"><a href="/pages/testimonials" class="mega-menu__title heading heading--small">Testimonials</a></div><div class="mega-menu__column"><a href="/pages/newsletter-archive" class="mega-menu__title heading heading--small">Newsletter Archive</a></div></div><div class="mega-menu__images-wrapper mega-menu__images-wrapper--tight"><a href="/blogs/all" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
963                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="496" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_placeholder_0004_Layer_1_500x.jpg?v=1677784523" srcset="//thealinker.ca/cdn/shop/files/img_placeholder_0004_Layer_1_240x.jpg?v=1677784523 240w, //thealinker.ca/cdn/shop/files/img_placeholder_0004_Layer_1_480x.jpg?v=1677784523 480w, //thealinker.ca/cdn/shop/files/img_placeholder_0004_Layer_1_500x.jpg?v=1677784523 500w">
964                  </div><p class="mega-menu__heading heading heading--small">Alinker Blog</p></a><a href="/pages/testimonials" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
965                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="480" width="480" alt="" src="//thealinker.ca/cdn/shop/files/1_-_Be_active_480x_jpg_480x.webp?v=1677781930" srcset="//thealinker.ca/cdn/shop/files/1_-_Be_active_480x_jpg_240x.webp?v=1677781930 240w, //thealinker.ca/cdn/shop/files/1_-_Be_active_480x_jpg_480x.webp?v=1677781930 480w">
966                  </div><p class="mega-menu__heading heading heading--small">Testimonials</p></a><a href="/pages/newsletter-archive" class="mega-menu__image-push image-zoom"><div class="mega-menu__image-wrapper">
967                    <img class="mega-menu__image" loading="lazy" sizes="240px" height="480" width="480" alt="" src="//thealinker.ca/cdn/shop/files/6_-_Overcome_480x_jpg_480x.webp?v=1677781930" srcset="//thealinker.ca/cdn/shop/files/6_-_Overcome_480x_jpg_240x.webp?v=1677781930 240w, //thealinker.ca/cdn/shop/files/6_-_Overcome_480x_jpg_480x.webp?v=1677781930 480w">
968                  </div><p class="mega-menu__heading heading heading--small">Newsletter Archive</p></a></div></div>
969              </div>
970            </div></li><li class="header__linklist-item " data-item-title="Order Now">
971        <a class="header__linklist-link link--animated" href="/pages/ways-to-buy" >Order Now</a></li></ul>
972</desktop-navigation><div class="header__icon-list "><button is="toggle-button" class="header__icon-wrapper tap-area hidden-desk" aria-controls="mobile-menu-drawer" aria-expanded="false">
973              <span class="visually-hidden">Navigation</span><svg focusable="false" width="18" height="14" class="icon icon--header-hamburger   " viewBox="0 0 18 14">
974        <path d="M0 1h18M0 13h18H0zm0-6h18H0z" fill="none" stroke="currentColor" stroke-width="2"></path>
975      </svg></button><a href="/search" is="toggle-link" class="header__icon-wrapper tap-area  hidden-desk" aria-controls="search-drawer" aria-expanded="false" aria-label="Search"><svg focusable="false" width="18" height="18" class="icon icon--header-search   " viewBox="0 0 18 18">
976        <path d="M12.336 12.336c2.634-2.635 2.682-6.859.106-9.435-2.576-2.576-6.8-2.528-9.435.106C.373 5.642.325 9.866 2.901 12.442c2.576 2.576 6.8 2.528 9.435-.106zm0 0L17 17" fill="none" stroke="currentColor" stroke-width="2"></path>
977      </svg></a>
978        </div></nav>
979
980      <!-- LOGO PART --><span class="header__logo"><a class="header__logo-link" href="/"><span class="visually-hidden">The Alinker Inventions Ltd.</span>
981            <img class="header__logo-image" width="280" height="105" src="//thealinker.ca/cdn/shop/files/checkout_logo_5_280x_png_280x.webp?v=1677781700" alt=""></a></span><!-- SECONDARY LINKS PART -->
982      <div class="header__secondary-links"><form method="post" action="/localization" id="header-localization-form" accept-charset="UTF-8" class="header__cross-border hidden-pocket" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/search" /><div class="popover-container">
983                <input type="hidden" name="locale_code" value="en">
984                <span class="visually-hidden">Language</span>
985
986                <button type="button" is="toggle-button" class="popover-button text--small" aria-expanded="false" aria-controls="header-localization-form-locale">English<svg focusable="false" width="9" height="6" class="icon icon--chevron icon--inline  " viewBox="0 0 12 8">
987        <path fill="none" d="M1 1l5 5 5-5" stroke="currentColor" stroke-width="2"></path>
988      </svg></button>
989
990                <popover-content id="header-localization-form-locale" class="popover">
991                  <span class="popover__overlay"></span>
992
993                  <header class="popover__header">
994                    <span class="popover__title heading h6">Language</span>
995
996                    <button type="button" class="popover__close-button tap-area tap-area--large" data-action="close" title="Close"><svg focusable="false" width="14" height="14" class="icon icon--close   " viewBox="0 0 14 14">
997        <path d="M13 13L1 1M13 1L1 13" stroke="currentColor" stroke-width="2" fill="none"></path>
998      </svg></button>
999                  </header>
1000
1001                  <div class="popover__content">
1002                    <div class="popover__choice-list"><button type="submit" name="locale_code" value="en" class="popover__choice-item">
1003                          <span class="popover__choice-label" aria-current="true">English</span>
1004                        </button><button type="submit" name="locale_code" value="fr" class="popover__choice-item">
1005                          <span class="popover__choice-label" >Français</span>
1006                        </button></div>
1007                  </div>
1008                </popover-content>
1009              </div></form><div class="header__icon-list"><button is="toggle-button" class="header__icon-wrapper tap-area hidden-phone " aria-controls="newsletter-popup" aria-expanded="false">
1010            <span class="visually-hidden">Newsletter</span><svg focusable="false" width="20" height="16" class="icon icon--header-email   " viewBox="0 0 20 16">
1011        <path d="M19 4l-9 5-9-5" fill="none" stroke="currentColor" stroke-width="2"></path>
1012        <path stroke="currentColor" fill="none" stroke-width="2" d="M1 1h18v14H1z"></path>
1013      </svg></button><a href="/search" is="toggle-link" class="header__icon-wrapper tap-area hidden-pocket hidden-lap " aria-label="Search" aria-controls="search-drawer" aria-expanded="false"><svg focusable="false" width="18" height="18" class="icon icon--header-search   " viewBox="0 0 18 18">
1014        <path d="M12.336 12.336c2.634-2.635 2.682-6.859.106-9.435-2.576-2.576-6.8-2.528-9.435.106C.373 5.642.325 9.866 2.901 12.442c2.576 2.576 6.8 2.528 9.435-.106zm0 0L17 17" fill="none" stroke="currentColor" stroke-width="2"></path>
1015      </svg></a><a href="https://thealinker.ca/customer_authentication/redirect?locale=en&region_country=CA" class="header__icon-wrapper tap-area hidden-phone " aria-label="Login"><svg focusable="false" width="18" height="17" class="icon icon--header-customer   " viewBox="0 0 18 17">
1016        <circle cx="9" cy="5" r="4" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></circle>
1017        <path d="M1 17v0a4 4 0 014-4h8a4 4 0 014 4v0" fill="none" stroke="currentColor" stroke-width="2"></path>
1018      </svg></a><a href="/cart"  class="header__icon-wrapper tap-area " aria-label="Cart" data-no-instant><svg focusable="false" width="20" height="18" class="icon icon--header-cart   " viewBox="0 0 20 18">
1019        <path d="M3 1h14l1 16H2L3 1z" fill="none" stroke="currentColor" stroke-width="2"></path>
1020        <path d="M7 4v0a3 3 0 003 3v0a3 3 0 003-3v0" fill="none" stroke="currentColor" stroke-width="2"></path>
1021      </svg><cart-count class="header__cart-count header__cart-count--floating bubble-count">0</cart-count>
1022          </a>
1023        </div></div>
1024    </div></div>
1025</store-header><cart-notification global hidden class="cart-notification "></cart-notification><mobile-navigation append-body id="mobile-menu-drawer" class="drawer drawer--from-left">
1026  <span class="drawer__overlay"></span>
1027
1028  <div class="drawer__header drawer__header--shadowed">
1029    <button type="button" class="drawer__close-button drawer__close-button--block tap-area" data-action="close" title="Close"><svg focusable="false" width="14" height="14" class="icon icon--close   " viewBox="0 0 14 14">
1030        <path d="M13 13L1 1M13 1L1 13" stroke="currentColor" stroke-width="2" fill="none"></path>
1031      </svg></button>
1032  </div>
1033
1034  <div class="drawer__content">
1035    <ul class="mobile-nav list--unstyled" role="list"><li class="mobile-nav__item" data-level="1"><button is="toggle-button" class="mobile-nav__link heading h6" aria-controls="mobile-menu-1" aria-expanded="false">Shop<span class="animated-plus"></span>
1036            </button>
1037
1038            <collapsible-content id="mobile-menu-1" class="collapsible"><ul class="mobile-nav list--unstyled" role="list"><li class="mobile-nav__item" data-level="2"><a href="/products/the-alinker" class="mobile-nav__link">The Alinker</a></li><li class="mobile-nav__item" data-level="2"><a href="/products/the-alinker-rent-to-own" class="mobile-nav__link">Rent to Own</a></li><li class="mobile-nav__item" data-level="2"><a href="/products/gently-used-alinker-series" class="mobile-nav__link">Gently Used Alinker</a></li><li class="mobile-nav__item" data-level="2"><a href="/collections/replacement-parts" class="mobile-nav__link">Replacement Parts</a></li><li class="mobile-nav__item" data-level="2"><a href="/products/alinker-rear-wheel" class="mobile-nav__link">Rear Wheel</a></li></ul><div class="mobile-nav__images-wrapper mobile-nav__images-wrapper--tight hide-scrollbar">
1039                  <div class="mobile-nav__images-scroller"><a href="/products/the-alinker" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="500" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_0010_anna_500x.jpg?v=1741369380" srcset="//thealinker.ca/cdn/shop/files/img_0010_anna_270x.jpg?v=1741369380 270w, //thealinker.ca/cdn/shop/files/img_0010_anna_500x.jpg?v=1741369380 500w"><p class="mobile-nav__image-heading heading heading--xsmall">The Alinker</p></a><a href="/products/the-alinker-rent-to-own" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="496" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_placeholder_0003_Layer_2_500x.jpg?v=1677784281" srcset="//thealinker.ca/cdn/shop/files/img_placeholder_0003_Layer_2_270x.jpg?v=1677784281 270w, //thealinker.ca/cdn/shop/files/img_placeholder_0003_Layer_2_500x.jpg?v=1677784281 500w"><p class="mobile-nav__image-heading heading heading--xsmall">Rent to own</p></a><a href="/products/gently-used-alinker" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="496" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_placeholder_0005_Backgroun
1039d_500x.jpg?v=1677784318" srcset="//thealinker.ca/cdn/shop/files/img_placeholder_0005_Background_270x.jpg?v=1677784318 270w, //thealinker.ca/cdn/shop/files/img_placeholder_0005_Background_500x.jpg?v=1677784318 500w"><p class="mobile-nav__image-heading heading heading--xsmall">Gently Used</p></a></div>
1040                </div></collapsible-content></li><li class="mobile-nav__item" data-level="1"><button is="toggle-button" class="mobile-nav__link heading h6" aria-controls="mobile-menu-2" aria-expanded="false">Learn More<span class="animated-plus"></span>
1041            </button>
1042
1043            <collapsible-content id="mobile-menu-2" class="collapsible"><ul class="mobile-nav list--unstyled" role="list"><li class="mobile-nav__item" data-level="2"><a href="/pages/crowdfund-alinker-family" class="mobile-nav__link">Crowdfund</a></li><li class="mobile-nav__item" data-level="2"><a href="/pages/faq" class="mobile-nav__link">FAQ</a></li><li class="mobile-nav__item" data-level="2"><a href="/pages/how-it-works" class="mobile-nav__link">How it works</a></li><li class="mobile-nav__item" data-level="2"><a href="/pages/warranty" class="mobile-nav__link">Warranty + Refund</a></li></ul><div class="mobile-nav__images-wrapper mobile-nav__images-wrapper--tight hide-scrollbar">
1044                  <div class="mobile-nav__images-scroller"><a href="/pages/crowdfund-alinker-family" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="496" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_placeholder_0000_Layer_5_500x.jpg?v=1677784389" srcset="//thealinker.ca/cdn/shop/files/img_placeholder_0000_Layer_5_270x.jpg?v=1677784389 270w, //thealinker.ca/cdn/shop/files/img_placeholder_0000_Layer_5_500x.jpg?v=1677784389 500w"><p class="mobile-nav__image-heading heading heading--xsmall">Crowdfund</p></a><a href="/pages/faq" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="496" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_placeholder_0002_Layer_3_500x.jpg?v=1677784389" srcset="//thealinker.ca/cdn/shop/files/img_placeholder_0002_Layer_3_270x.jpg?v=1677784389 270w, //thealinker.ca/cdn/shop/files/img_placeholder_0002_Layer_3_500x.jpg?v=1677784389 500w"><p class="mobile-nav__image-heading heading heading--xsmall">FAQ</p></a><a href="/pages/how-it-works" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="390" width="390" alt="" src="//thealinker.ca/cdn/shop/files/img_390px_0005_Layer_6_390x_jpg_390x.webp?v=1677784426" srcset="//thealinker.ca/cdn/shop/files/img_390px_0005_Layer_6_390x_jpg_270x.webp?v=1677784426 270w, //thealinker.ca/cdn/shop/files/img_390px_0005_Layer_6_390x_jpg_390x.webp?v=1677784426 390w"><p class="mobile-nav__image-heading heading heading--xsmall">How it Works</p></a><a href="/pages/limited-warranty" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="480" width="480" alt="" src="//thealinker.ca/cdn/shop/files/3_-_Back_in_charge_480x_jpg_480x.webp?v=1677781930" srcset="//thealinker.ca/cdn/shop/files/3_-_Back_in_charge_480x_jpg_270x.webp?v=1677781930 270w, //thealinker.ca/cdn/shop/files/3_-_Back_in_charge_480x_jpg_480x.webp?v=1677781930 480w"><p class="mobile-nav__image-heading heading heading--xsmall">Warranty + Refund</p></a></div>
1045                </div></collapsible-content></li><li class="mobile-nav__item" data-level="1"><button is="toggle-button" class="mobile-nav__link heading h6" aria-controls="mobile-menu-3" aria-expanded="false">About<span class="animated-plus"></span>
1046            </button>
1047
1048            <collapsible-content id="mobile-menu-3" class="collapsible"><ul class="mobile-nav list--unstyled" role="list"><li class="mobile-nav__item" data-level="2"><a href="/pages/about" class="mobile-nav__link">About Us</a></li><li class="mobile-nav__item" data-level="2"><a href="/pages/contact-us" class="mobile-nav__link">Contact Us</a></li><li class="mobile-nav__item" data-level="2"><a href="/pages/international-distribution-partners" class="mobile-nav__link">International Distribution</a></li></ul><div class="mobile-nav__images-wrapper mobile-nav__images-wrapper--tight hide-scrollbar">
1049                  <div class="mobile-nav__images-scroller"><a href="/pages/about" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="480" width="480" alt="" src="//thealinker.ca/cdn/shop/files/Barbara_on_Alinker_1024_480x_JPG_480x.webp?v=1677784464" srcset="//thealinker.ca/cdn/shop/files/Barbara_on_Alinker_1024_480x_JPG_270x.webp?v=1677784464 270w, //thealinker.ca/cdn/shop/files/Barbara_on_Alinker_1024_480x_JPG_480x.webp?v=1677784464 480w"><p class="mobile-nav__image-heading heading heading--xsmall">About Us</p></a><a href="/pages/contact-us" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="390" width="390" alt="" src="//thealinker.ca/cdn/shop/files/img_390px_0007_Layer_4_390x_jpg_390x.webp?v=1677784473" srcset="//thealinker.ca/cdn/shop/files/img_390px_0007_Layer_4_390x_jpg_270x.webp?v=1677784473 270w, //thealinker.ca/cdn/shop/files/img_390px_0007_Layer_4_390x_jpg_390x.webp?v=1677784473 390w"><p class="mobile-nav__image-heading heading heading--xsmall">Contact Us</p></a><a href="/pages/international-distribution-partners" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="480" width="480" alt="" src="//thealinker.ca/cdn/shop/files/2_-_Go_beyond_480x_jpg_480x.webp?v=1677781930" srcset="//thealinker.ca/cdn/shop/files/2_-_Go_beyond_480x_jpg_270x.webp?v=1677781930 270w, //thealinker.ca/cdn/shop/files/2_-_Go_beyond_480x_jpg_480x.webp?v=1677781930 480w"><p class="mobile-nav__image-heading heading heading--xsmall">International Distribution</p></a></div>
1050                </div></collapsible-content></li><li class="mobile-nav__item" data-level="1"><button is="toggle-button" class="mobile-nav__link heading h6" aria-controls="mobile-menu-4" aria-expanded="false">Community<span class="animated-plus"></span>
1051            </button>
1052
1053            <collapsible-content id="mobile-menu-4" class="collapsible"><ul class="mobile-nav list--unstyled" role="list"><li class="mobile-nav__item" data-level="2"><a href="/blogs/all" class="mobile-nav__link">The Blog</a></li><li class="mobile-nav__item" data-level="2"><a href="/pages/testimonials" class="mobile-nav__link">Testimonials</a></li><li class="mobile-nav__item" data-level="2"><a href="/pages/newsletter-archive" class="mobile-nav__link">Newsletter Archive</a></li></ul><div class="mobile-nav__images-wrapper mobile-nav__images-wrapper--tight hide-scrollbar">
1054                  <div class="mobile-nav__images-scroller"><a href="/blogs/all" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="496" width="500" alt="" src="//thealinker.ca/cdn/shop/files/img_placeholder_0004_Layer_1_500x.jpg?v=1677784523" srcset="//thealinker.ca/cdn/shop/files/img_placeholder_0004_Layer_1_270x.jpg?v=1677784523 270w, //thealinker.ca/cdn/shop/files/img_placeholder_0004_Layer_1_500x.jpg?v=1677784523 500w"><p class="mobile-nav__image-heading heading heading--xsmall">Alinker Blog</p></a><a href="/pages/testimonials" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="480" width="480" alt="" src="//thealinker.ca/cdn/shop/files/1_-_Be_active_480x_jpg_480x.webp?v=1677781930" srcset="//thealinker.ca/cdn/shop/files/1_-_Be_active_480x_jpg_270x.webp?v=1677781930 270w, //thealinker.ca/cdn/shop/files/1_-_Be_active_480x_jpg_480x.webp?v=1677781930 480w"><p class="mobile-nav__image-heading heading heading--xsmall">Testimonials</p></a><a href="/pages/newsletter-archive" class="mobile-nav__image-push"><img class="mobile-nav__image" loading="lazy" sizes="270px" height="480" width="480" alt="" src="//thealinker.ca/cdn/shop/files/6_-_Overcome_480x_jpg_480x.webp?v=1677781930" srcset="//thealinker.ca/cdn/shop/files/6_-_Overcome_480x_jpg_270x.webp?v=1677781930 270w, //thealinker.ca/cdn/shop/files/6_-_Overcome_480x_jpg_480x.webp?v=1677781930 480w"><p class="mobile-nav__image-heading heading heading--xsmall">Newsletter Archive</p></a></div>
1055                </div></collapsible-content></li><li class="mobile-nav__item" data-level="1"><a href="/pages/ways-to-buy" class="mobile-nav__link heading h6">Order Now</a></li></ul>
1056  </div><div class="drawer__footer drawer__footer--tight drawer__footer--bordered">
1057      <div class="mobile-nav__footer"><a class="icon-text" href="https://thealinker.ca/customer_authentication/redirect?locale=en&region_country=CA"><svg focusable="false" width="18" height="17" class="icon icon--header-customer   " viewBox="0 0 18 17">
1058        <circle cx="9" cy="5" r="4" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round"></circle>
1059        <path d="M1 17v0a4 4 0 014-4h8a4 4 0 014 4v0" fill="none" stroke="currentColor" stroke-width="2"></path>
1060      </svg>Account</a><form method="post" action="/localization" id="header-sidebar-localization-form" accept-charset="UTF-8" class="header__cross-border" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/search" /><div class="popover-container">
1061                <input type="hidden" name="locale_code" value="en">
1062                <span class="visually-hidden">Language</span>
1063
1064                <button type="button" is="toggle-button" class="popover-button text--xsmall tap-area" aria-expanded="false" aria-controls="header-sidebar-localization-form-locale">English<svg focusable="false" width="9" height="6" class="icon icon--chevron icon--inline  " viewBox="0 0 12 8">
1065        <path fill="none" d="M1 1l5 5 5-5" stroke="currentColor" stroke-width="2"></path>
1066      </svg></button>
1067
1068                <popover-content id="header-sidebar-localization-form-locale" class="popover popover--top popover--small">
1069                  <span class="popover__overlay"></span>
1070
1071                  <header class="popover__header">
1072                    <span class="popover__title heading h6">Language</span>
1073
1074                    <button type="button" class="popover__close-button tap-area tap-area--large" data-action="close" title="Close"><svg focusable="false" width="14" height="14" class="icon icon--close   " viewBox="0 0 14 14">
1075        <path d="M13 13L1 1M13 1L1 13" stroke="currentColor" stroke-width="2" fill="none"></path>
1076      </svg></button>
1077                  </header>
1078
1079                  <div class="popover__content">
1080                    <div class="popover__choice-list"><button type="submit" name="locale_code" value="en" class="popover__choice-item">
1081                          <span class="popover__choice-label" aria-current="true">English</span>
1082                        </button><button type="submit" name="locale_code" value="fr" class="popover__choice-item">
1083                          <span class="popover__choice-label" >Français</span>
1084                        </button></div>
1085                  </div>
1086                </popover-content>
1087              </div></form></div>
1088    </div></mobile-navigation><predictive-search-drawer append-body reverse-breakpoint="screen and (min-width: 1200px)" id="search-drawer" initial-focus-selector="#search-drawer [name='q']" class="predictive-search drawer drawer--large drawer--from-left">
1089  <span class="drawer__overlay"></span>
1090
1091  <header class="drawer__header">
1092    <form id="predictive-search-form" action="/search" method="get" class="predictive-search__form"><svg focusable="false" width="18" height="18" class="icon icon--header-search   " viewBox="0 0 18 18">
1093        <path d="M12.336 12.336c2.634-2.635 2.682-6.859.106-9.435-2.576-2.576-6.8-2.528-9.435.106C.373 5.642.325 9.866 2.901 12.442c2.576 2.576 6.8 2.528 9.435-.106zm0 0L17 17" fill="none" stroke="currentColor" stroke-width="2"></path>
1094      </svg><input type="hidden" name="type" value="product">
1095      <input type="hidden" name="options[prefix]" value="last">
1096      <input type="hidden" form="predictive-search-form" name="options[unavailable_products]" value="last">
1097      <input class="predictive-search__input" type="text" name="q" autocomplete="off" autocorrect="off" aria-label="Search" placeholder="What are you looking for?">
1098    </form>
1099
1100    <button type="button" class="drawer__close-button tap-area" data-action="close" title="Close"><svg focusable="false" width="14" height="14" class="icon icon--close   " viewBox="0 0 14 14">
1101        <path d="M13 13L1 1M13 1L1 13" stroke="currentColor" stroke-width="2" fill="none"></path>
1102      </svg></button>
1103  </header>
1104
1105  <div class="drawer__content">
1106    <div class="predictive-search__content-wrapper">
1107      <div hidden class="predictive-search__loading-state">
1108        <div class="spinner"><svg focusable="false" width="50" height="50" class="icon icon--spinner   " viewBox="25 25 50 50">
1109        <circle cx="50" cy="50" r="20" fill="none" stroke="#50485b" stroke-width="4"></circle>
1110      </svg></div>
1111      </div>
1112
1113      <div hidden class="predictive-search__results" aria-live="polite"></div></div>
1114  </div>
1115
1116  <footer hidden class="drawer__footer drawer__footer--no-top-padding">
1117    <button type="submit" form="predictive-search-form" class="button button--primary button--full">View all results</button>
1118  </footer>
1119</predictive-search-drawer>
1119<script>
1120  (() => {
1121    const headerElement = document.getElementById('shopify-section-header'),
1122      headerHeight = headerElement.clientHeight,
1123      headerHeightWithoutBottomNav = headerElement.querySelector('.header__wrapper').clientHeight;
1124
1125    document.documentElement.style.setProperty('--header-height', headerHeight + 'px');
1126    document.documentElement.style.setProperty('--header-height-without-bottom-nav', headerHeightWithoutBottomNav + 'px');
1127  })();
1128</script>
1128
1129
1130<script type="application/ld+json">
1131  {
1132    "@context": "https://schema.org",
1133    "@type": "Organization",
1134    "name": "The Alinker Inventions Ltd.",
1135    
1136      
1137      "logo": "https:\/\/thealinker.ca\/cdn\/shop\/files\/checkout_logo_5_280x_png_280x.webp?v=1677781700",
1138    
1139    "url": "https:\/\/thealinker.ca"
1140  }
1141</script>
1141
1142
1143</div><div id="main" role="main" class="anchor"><div id="mobile-facet-toolbar" class="mobile-toolbar  hidden-lap-and-up">
1144          <button is="toggle-button" class="mobile-toolbar__item mobile-toolbar__item--filters " aria-expanded="false" aria-controls="facet-filters" style="display: none"><svg focusable="false" width="16" height="16" class="icon icon--filters   " viewBox="0 0 16 16">
1145        <path d="M0 4h16M0 12h16" fill="none" stroke="currentColor" stroke-width=""></path>
1146        <circle cx="5" cy="4" r="2" fill="rgb(var(--background))" stroke="currentColor" stroke-width="2"></circle>
1147        <circle cx="11" cy="12" r="2" fill="rgb(var(--background))" stroke="currentColor" stroke-width="2"></circle>
1148      </svg><span class="mobile-toolbar__item-label">Filters</span>
1149          </button>
1150
1151          <button is="toggle-button" class="mobile-toolbar__item mobile-toolbar__item--sort" aria-expanded="false" aria-controls="sort-by-popover" style="display: none">
1152            <span class="mobile-toolbar__item-label">Sort by</span><svg focusable="false" width="12" height="8" class="icon icon--chevron   " viewBox="0 0 12 8">
1153        <path fill="none" d="M1 1l5 5 5-5" stroke="currentColor" stroke-width="2"></path>
1154      </svg></button>
1155        </div><div id="shopify-section-template--14816535445581__main" class="shopify-section shopify-section--main-search"><style>
1156  #shopify-section-template--14816535445581__main {
1157    --section-products-per-row: 2;
1158  }
1159
1160  @media screen and (min-width: 741px) {
1161    #shopify-section-template--14816535445581__main {
1162      --section-products-per-row: 3;
1163    }
1164  }@media screen and (min-width: 1400px) {
1165      #shopify-section-template--14816535445581__main {
1166        --section-products-per-row: 4;
1167      }
1168    }/*
1169    IMPLEMENTATION NOTE: due to design requirements, the mobile toolbar (with filters and sort by) had to be moved to the
1170    layout file. However as section settings cannot be accessed outside the section itself, we simply hide them in CSS.
1171   */@media screen and (max-width: 999px) {
1172      :root {
1173        --anchor-offset: 60px;
1174      }
1175    }</style>
1176
1177<section><div class="container">
1178      <div class="empty-state">
1179        <h1 class="heading h2">Search</h1>
1180
1181        <form class="main-search__form" action="/search" method="get">
1182          <input type="hidden" name="type" value="product">
1183          <input type="hidden" name="options[prefix]" value="last">
1184          <input type="hidden" name="options[unavailable_products]" value="last">
1185
1186          <button class="main-search__submit tap-area" type="submit"><svg focusable="false" width="18" height="18" class="icon icon--header-search   " viewBox="0 0 18 18">
1187        <path d="M12.336 12.336c2.634-2.635 2.682-6.859.106-9.435-2.576-2.576-6.8-2.528-9.435.106C.373 5.642.325 9.866 2.901 12.442c2.576 2.576 6.8 2.528 9.435-.106zm0 0L17 17" fill="none" stroke="currentColor" stroke-width="2"></path>
1188      </svg></button>
1189          <input class="main-search__input input__field" type="text" name="q" autocomplete="off" autocorrect="off" aria-label="Search" placeholder="What are you looking for?">
1190        </form>
1191      </div>
1192    </div></section>
1193
1194</div>
1195<div id="shopify-section-static-text-with-icons" class="shopify-section shopify-section--text-with-icons"></div><div id="shopify-section-static-newsletter" class="shopify-section shopify-section--newsletter"><style>
1196    #shopify-section-static-newsletter {--heading-color: 80, 72, 91;
1197      --text-color: 80, 72, 91;
1198      --primary-button-background: 255, 192, 0;
1199      --primary-button-text-color: 80, 72, 91;
1200      --section-block-background: 255, 255, 255;
1201    }
1202  </style>
1203
1204  <section class="section section--flush">
1205    <image-with-text-block reveal-on-scroll class="image-with-text-block image-with-text-block--medium image-with-text-block--cover">
1206      <div class="image-with-text-block__image-wrapper"><img class="image-with-text-block__image" reveal loading="lazy" sizes="(max-width: 999px) 100vw, 72vw" height="1573" width="2806" alt="" src="//thealinker.ca/cdn/shop/files/img_alinker_yellow_3_2806x.jpg?v=1677784695" srcset="//thealinker.ca/cdn/shop/files/img_alinker_yellow_3_600x.jpg?v=1677784695 600w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_700x.jpg?v=1677784695 700w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_800x.jpg?v=1677784695 800w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_1000x.jpg?v=1677784695 1000w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_1200x.jpg?v=1677784695 1200w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_1400x.jpg?v=1677784695 1400w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_1600x.jpg?v=1677784695 1600w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_1800x.jpg?v=1677784695 1800w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_2000x.jpg?v=1677784695 2000w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_2200x.jpg?v=1677784695 2200w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_2400x.jpg?v=1677784695 2400w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_2600x.jpg?v=1677784695 2600w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_2800x.jpg?v=1677784695 2800w, //thealinker.ca/cdn/shop/files/img_alinker_yellow_3_2806x.jpg?v=1677784695 2806w"></div>
1207
1208      <div class="container container--flush"><div reveal class="image-with-text-block__content image-with-text-block__content--tight content-box content-box--medium content-box--text-center content-box--center text-container"><h2 class="heading heading--medium">Join the Alinker Community!</h2><p>Sign up now to receive updates, special offers, access to events, guest speakers, and more!</p><form method="post" action="/contact#newsletter-static-newsletter" id="newsletter-static-newsletter" accept-charset="UTF-8" class="form newsletter__form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="✓" /><input type="hidden" name="contact[tags]" value="newsletter">
1209              <input type="hidden" name="contact[context]" value="newsletter-static-newsletter">
1210
1211              <div class="input-row">
1212                <div class="input">
1213                  <input type="email" id="newsletter[static-newsletter][contact][email]" name="contact[email]" class="input__field" required>
1214                  <label for="newsletter[static-newsletter][contact][email]" class="input__label">Your e-mail</label>
1215                </div>
1216
1217                <div class="input">
1218                  <button type="submit" is="loader-button" class="button button--primary">Subscribe</button>
1219                </div>
1220              </div></form><p class="text-center font-14 mt-2"><a href="/pages/newsletter-archive" target="_blank">Newsletter Archive</a></p>
1221        </div>
1222      </div>
1223    </image-with-text-block>
1224  </section></div></div><div id="shopify-section-footer" class="shopify-section shopify-section--footer"><style>
1225  #shopify-section-footer .footer {--background: 80, 72, 91;
1226    --heading-color: 255, 255, 255;
1227    --text-color: 255, 255, 255;
1228    --border-color: 106, 99, 116;
1229  }
1230</style>
1231
1232<footer class="footer ">
1233  <div class="container">
1234    <div class="footer__inner">
1235      <div class="footer__item-list"><div class="footer__item footer__item--image is-first" ><img style="width: 150px" loading="lazy" sizes="150px" class="footer__image" height="113" width="300" alt="" src="//thealinker.ca/cdn/shop/files/logo_alinker_rev_300x_png_300x.webp?v=1677784115" srcset="//thealinker.ca/cdn/shop/files/logo_alinker_rev_300x_png_100x.webp?v=1677784115 100w, //thealinker.ca/cdn/shop/files/logo_alinker_rev_300x_png_200x.webp?v=1677784115 200w, //thealinker.ca/cdn/shop/files/logo_alinker_rev_300x_png_300x.webp?v=1677784115 300w"></div><div class="footer__item footer__item--links " ><p class="footer__item-title heading heading--small">Footer 1</p>
1236
1237                  <div class="footer__item-content">
1238                    <ul class="linklist list--unstyled" role="list"><li class="linklist__item">
1239                          <a href="/pages/about" class="link--faded">About</a>
1240                        </li><li class="linklist__item">
1241                          <a href="/pages/testimonials" class="link--faded">Testimonials</a>
1242                        </li><li class="linklist__item">
1243                          <a href="/pages/register-your-alinker" class="link--faded">Register Your Alinker</a>
1244                        </li><li class="linklist__item">
1245                          <a href="/pages/product-tutorials" class="link--faded">How-to Videos</a>
1246                        </li><li class="linklist__item">
1247                          <a href="/blogs/all" class="link--faded">Blog</a>
1248                        </li><li class="linklist__item">
1249                          <a href="/pages/faq" class="link--faded">FAQ's</a>
1250                        </li></ul>
1251                  </div></div><div class="footer__item footer__item--links " ><p class="footer__item-title heading heading--small">Footer 2</p>
1252
1253                  <div class="footer__item-content">
1254                    <ul class="linklist list--unstyled" role="list"><li class="linklist__item">
1255                          <a href="/pages/crowdfund-alinker-family" class="link--faded">Crowdfund</a>
1256                        </li><li class="linklist__item">
1257                          <a href="/pages/product-tutorials" class="link--faded">User Manual</a>
1258                        </li><li class="linklist__item">
1259                          <a href="/pages/warranty" class="link--faded">Warranty</a>
1260                        </li><li class="linklist__item">
1261                          <a href="/pages/refund-policy" class="link--faded">Refund Policy</a>
1262                        </li><li class="linklist__item">
1263                          <a href="/pages/privacy-policy" class="link--faded">Privacy Policy</a>
1264                        </li></ul>
1265                  </div></div><div class="footer__item footer__item--social-media " ><p class="footer__item-title heading heading--small">Follow</p><div class="footer__item-content"><ul class="social-media social-media--no-radius list--unstyled" role="list">
1266    <li class="social-media__item social-media__item--facebook">
1267      <a href="https://www.facebook.com/thealinkerUSA/" target="_blank" rel="noopener" class="social-media__link" aria-label="Follow us on Facebook"><svg focusable="false" width="9" height="17" class="icon icon--facebook   " viewBox="0 0 9 17">
1268        <path fill-rule="evenodd" clip-rule="evenodd" d="M2.486 16.2084L2.486 8.81845H0L0 5.93845L2.486 5.93845L2.486 3.81845C2.38483 2.79982 2.73793 1.78841 3.45107 1.05407C4.16421 0.319722 5.16485 -0.0628415 6.186 0.00844868C6.9284 0.00408689 7.67039 0.0441585 8.408 0.128449V2.69845L6.883 2.69845C6.4898 2.61523 6.08104 2.73438 5.79414 3.01585C5.50724 3.29732 5.3803 3.70373 5.456 4.09845L5.456 5.93845H8.308L7.936 8.81845H5.46L5.46 16.2084H2.486Z" fill="currentColor"></path>
1269      </svg></a>
1270    </li><li class="social-media__item social-media__item--twitter">
1271      <a href="https://twitter.com/TheAlinker" target="_blank" rel="noopener" class="social-media__link" aria-label="Follow us on Twitter"><svg focusable="false" width="20" height="16" class="icon icon--twitter   " viewBox="0 0 20 16">
1272        <path fill-rule="evenodd" clip-rule="evenodd" d="M12.845 2.13398C14.0997 2.11363 14.7676 2.53229 15.4054 3.06445C15.9468 3.02216 16.6505 2.74528 17.065 2.55232C17.1993 2.48493 17.3337 2.41786 17.468 2.35046C17.2312 2.93602 16.9103 3.39474 16.417 3.74251C16.3074 3.81976 16.1987 3.92434 16.0613 3.97362C16.0613 3.97584 16.0613 3.97838 16.0613 3.98061C16.7643 3.97394 17.3441 3.6837 17.8947 3.52603C17.8947 3.52856 17.8947 3.5311 17.8947 3.53365C17.6055 3.95454 17.214 4.38147 16.7963 4.6876C16.6277 4.8103 16.4591 4.93301 16.2905 5.05571C16.2997 5.73696 16.2795 6.38704 16.1404 6.95989C15.3314 10.2888 13.1878 12.5491 9.7945 13.517C8.5761 13.8648 6.60702 14.0075 5.21102 13.6903C4.51872 13.5329 3.89334 13.3552 3.30644 13.1203C2.98052 12.9896 2.67854 12.8485 2.38972 12.6876C2.29496 12.6346 2.2001 12.5818 2.10522 12.5287C2.42018 12.5376 2.78846 12.6168 3.14052 12.5649C3.45896 12.5179 3.77128 12.53 4.06514 12.4712C4.79794 12.324 5.4486 12.1294 6.00916 11.829C6.2809 11.6834 6.69324 11.5124 6.88634 11.3026C6.52248 11.3083 6.19256 11.2311 5.9223 11.144C4.87436 10.8051 4.26436 10.
12721824 3.86752 9.2468C4.1851 9.27827 5.09982 9.35394 5.31368 9.18894C4.91398 9.16891 4.52956 8.95688 4.25478 8.7992C3.41184 8.31634 2.72438 7.50634 2.72954 6.26021C2.84022 6.30821 2.9509 6.35653 3.06148 6.40453C3.27324 6.48622 3.48848 6.52978 3.74112 6.57778C3.8478 6.59781 4.06114 6.65534 4.18362 6.6137C4.17836 6.6137 4.17308 6.6137 4.16782 6.6137C4.00476 6.43982 3.73902 6.32411 3.57512 6.1375C3.03438 5.52206 2.52758 4.57507 2.84812 3.44686C2.9294 3.16077 3.05842 2.90805 3.19586 2.67502C3.20114 2.67757 3.2064 2.67979 3.21168 2.68234C3.2746 2.80282 3.415 2.89152 3.50408 2.99229C3.78024 3.30573 4.1209 3.5877 4.46812 3.83629C5.65108 4.68347 6.71642 5.20386 8.42738 5.58946C8.86134 5.68706 9.36308 5.76176 9.88146 5.76238C9.73578 5.37424 9.78258 4.7461 9.89726 4.37035C10.1856 3.42557 10.8119 2.74402 11.7307 2.37907C11.9504 2.29197 12.1941 2.22838 12.4498 2.17722C12.5815 2.16291 12.7133 2.14861 12.845 2.13398Z" fill="currentColor"></path>
1273      </svg></a>
1274    </li><li class="social-media__item social-media__item--instagram">
1275      <a href="https://www.instagram.com/the_alinker_world/" target="_blank" rel="noopener" class="social-media__link" aria-label="Follow us on Instagram"><svg focusable="false" width="16" height="16" class="icon icon--instagram   " viewBox="0 0 16 16">
1276        <path fill-rule="evenodd" clip-rule="evenodd" d="M8 0C5.827 0 5.555.01 4.702.048 3.85.087 3.269.222 2.76.42a3.921 3.921 0 00-1.417.923c-.445.444-.719.89-.923 1.417-.198.509-.333 1.09-.372 1.942C.01 5.555 0 5.827 0 8s.01 2.445.048 3.298c.039.852.174 1.433.372 1.942.204.526.478.973.923 1.417.444.445.89.719 1.417.923.509.198 1.09.333 1.942.372C5.555 15.99 5.827 16 8 16s2.445-.01 3.298-.048c.852-.039 1.433-.174 1.942-.372a3.922 3.922 0 001.417-.923c.445-.444.719-.89.923-1.417.198-.509.333-1.09.372-1.942C15.99 10.445 16 10.173 16 8s-.01-2.445-.048-3.298c-.039-.852-.174-1.433-.372-1.942a3.922 3.922 0 00-.923-1.417A3.921 3.921 0 0013.24.42c-.509-.198-1.09-.333-1.942-.372C10.445.01 10.173 0 8 0zm0 1.441c2.136 0 2.39.009 3.233.047.78.036 1.203.166 1.485.276.374.145.64.318.92.598.28.28.453.546.598.92.11.282.24.705.276 1.485.038.844.047 1.097.047 3.233s-.009 2.39-.047 3.233c-.036.78-.166 1.203-.276 1.485-.145.374-.318.64-.598.92-.28.28-.546.453-.92.598-.282.11-.705.24-1.485.276-.844.038-1.097.047-3.233.047s-2.39-.009-3.233-.047c-.78-.036-1.203-.166-1.485-.276a2.479 2.479 0 01-.92-.598 2.478 2.478 0 01-.598-.92c-.11-.282-.24-.705-.276-1.485-.038-.844-.047-1.097-.047-3.233s.009-2.39.047-3.233c.036-.78.166-1.203.276-1.485.145-.374.318-.64.598-.92.28-.28.546-.453.92-.598.282-.11.705-.24 1.485-.276.844-.038 1.097-.047 3.233-.047zm0 9.226a2.667 2.667 0 110-5.334 2.667 2.667 0 010 5.334zm0-6.775a4.108 4.108 0 100 8.216 4.108 4.108 0 000-8.216zm5.23-.162a.96.96 0 11-1.92 0 .96.96 0 011.92 0z" fill="currentColor"></path>
1277      </svg></a>
1278    </li><li class="social-media__item social-media__item--pinterest">
1279      <a href="https://www.pinterest.com/thealinker0198/" target="_blank" rel="noopener" class="social-media__link" aria-label="Follow us on Pinterest"><svg focusable="false" width="12" height="16" class="icon icon--pinterest   " viewBox="0 0 12 16">
1280        <path fill-rule="evenodd" clip-rule="evenodd" d="M5.8042 0.00123531C8.79537 -0.0442356 10.6685 1.16769 11.5498 3.29299C11.8407 3.99433 12.1516 5.28439 11.9181 6.35474C11.825 6.78208 11.7985 7.22812 11.6726 7.63086C11.4163 8.4496 11.0829 9.17441 10.6413 9.79945C10.0418 10.6486 9.13196 11.2212 7.98951 11.5091C6.97899 11.7637 6.04959 11.3826 5.50954 10.9732C5.33747 10.843 5.10674 10.6728 5.04304 10.4377C5.03488 10.4377 5.0267 10.4377 5.01853 10.4377C4.97972 10.8669 4.81532 11.3224 4.69924 11.7135C4.53858 12.2545 4.50733 12.8146 4.3064 13.3208C4.08349 13.8828 3.81274 14.3978 3.52072 14.8776C3.36739 15.1292 2.94427 15.9904 2.63675 16C2.60311 15.9354 2.58964 15.9105 2.58761 15.796C2.48858 15.6383 2.55757 15.3724 2.51393 15.1578C2.44604 14.8236 2.39317 14.2217 2.46491 13.8824C2.46491 13.7038 2.46491 13.5248 2.46491 13.3465C2.54397 12.9786 2.54085 12.6015 2.63675 12.2494C2.84537 11.4824 2.96145 10.6699 3.17692 9.87611C3.38398 9.11352 3.57396 8.27939 3.74172 7.50321C3.77957 7.32789 3.56652 6.82389 3.52072 6.63572C3.37628 6.04186 3.48624 5.21874 3.66805 4.77269C3.89698 4.21111 4.56717 3.3535 5.43589 3.57359C6.13407 3.75039 6.57846 4.50528 6.34437 5.46192C6.09862 6.46589 5.7798 7.3653 5.5587 8.37035C5.50173 8.62933 5.59968 8.90442 5.65687 9.05958C5.86357 9.61934 6.49037 10.163 7.32652 9.95278C8.59396 9.63365 9.15431 8.48627 9.53645 7.24791C9.63981 6.91302 9.62743 6.59647 9.70831 6.22709C9.87894 5.44763 9.8
12800648 4.28411 9.56098 3.67556C9.16753 2.70023 8.43329 2.07518 7.42471 1.73624C7.1465 1.68526 6.86819 1.63427 6.58988 1.58329C6.12397 1.47655 5.23532 1.63685 4.92023 1.73624C3.51171 2.18156 2.63952 2.92544 2.09658 4.26247C1.91177 4.71767 1.81046 5.17911 1.77741 5.81884C1.76913 5.8955 1.76094 5.97217 1.75278 6.04883C1.86153 6.62068 1.87259 6.99959 2.09658 7.42657C2.20715 7.63711 2.46971 7.8029 2.51393 8.06444C2.54001 8.2185 2.42705 8.45105 2.39125 8.57467C2.33705 8.76137 2.35676 8.97522 2.26844 9.13625C2.10873 9.42678 1.67383 9.20852 1.48275 9.08491C0.489307 8.44373 -0.329526 6.5895 0.132284 4.79837C0.20342 4.5218 0.206915 4.28118 0.304126 4.03285C0.906661 2.49554 1.80565 1.55101 3.10325 0.741098C3.58947 0.437749 4.24511 0.287354 4.84657 0.128885C5.16574 0.0863481 5.48503 0.0437917 5.8042 0.00123531Z" fill="currentColor"></path>
1281      </svg></a>
1282    </li><li class="social-media__item social-media__item--youtube">
1283      <a href="https://www.youtube.com/channel/UC3q2xq_IW56xUXmOKCrIlSg" target="_blank" rel="noopener" class="social-media__link" aria-label="Follow us on YouTube"><svg fill="none" focusable="false" width="18" height="13" class="icon icon--youtube   " viewBox="0 0 18 13">
1284        <path fill-rule="evenodd" clip-rule="evenodd" d="M16.0325 0.369454C16.807 0.572743 17.4168 1.17173 17.6238 1.9324C18 3.31101 18 6.1875 18 6.1875C18 6.1875 18 9.06389 17.6238 10.4427C17.4168 11.2033 16.807 11.8023 16.0325 12.0056C14.6288 12.375 9 12.375 9 12.375C9 12.375 3.37122 12.375 1.96752 12.0056C1.19311 11.8023 0.583159 11.2033 0.376159 10.4427C0 9.06389 0 6.1875 0 6.1875C0 6.1875 0 3.31101 0.376159 1.9324C0.583159 1.17173 1.19311 0.572743 1.96752 0.369454C3.37122 0 9 0 9 0C9 0 14.6288 0 16.0325 0.369454ZM11.8636 6.1876L7.1591 8.79913V3.57588L11.8636 6.1876Z" fill="currentColor"></path>
1285      </svg></a>
1286    </li>
1287  </ul></div></div></div>
1288
1289      <div class="footer__aside"><span class="footer__copyright text--xsmall text--subdued">The Alinker Inventions Ltd. <span class="square-separator square-separator--block square-separator--subdued"></span><img src="https://cdn.shopify.com/s/files/1/1464/0582/files/sheEO_9aa75265-4c78-4480-abc3-0eb6b1d9b653.webp?v=1669827400" alt="Sheeo" style="height:90px; width:auto" loading="lazy"/><img src="https://cdn.shopify.com/s/files/1/1464/0582/files/b-certified_f1823065-bfa0-45cf-9eda-ea8a9d334412.webp?v=1669827399" alt="b-certified corporation"  style="height:90px; width:auto" loading="lazy"/></span></div>
1290    </div>
1291  </div>
1292</footer></div>
1293  
1294<!-- langify-v2-scripts-begin -->
1295
1296
1297<script>
1298  var langify = langify || {};
1299
1300
1301  /**
1302  * 
1303  * 
1304  * @class LyHelper
1305  */
1306  class LyHelper {
1307    constructor() {
1308      return {
1309        ajax: function(params) { return LyHelper.ajax(params); },
1310        isIE: function() { return LyHelper.isIE(); },
1311        extractImageObject: function(val) { return LyHelper.extractImageObject(val); },
1312        getCurrentLanguage: function() { return LyHelper.getCurrentLanguage(); },
1313        getCookie: function(name) { return LyHelper.getCookie(name); },
1314        setCookie: function(name, value, days) { return LyHelper.setCookie(name, value, days); },
1315        getVersion: function() { return LyHelper.getVersion(); },
1316        isOutOfViewport: function(elem) { return LyHelper.isOutOfViewport(elem); },
1317        isDomainFeatureEnabled: function() { return LyHelper.isDomainFeatureEnabled(); },
1318        getVal: function(str) { return LyHelper.getVal(str); },
1319        inIframe: function() { return LyHelper.inIframe(); },
1320        shopifyAPI: function() { return LyHelper.shopifyAPI(); },
1321        loadScript: function(url, callback) { return LyHelper.loadScript(url, callback); },
1322        localizationRedirect: function(type, code, additionalFields, additionalParams, domain) { return LyHelper.localizationRedirect(type, code, additionalFields, additionalParams, domain); },
1323        changeCurrency: function(code) { return LyHelper.changeCurrency(code); },
1324        log: function(title, data, type) { return LyHelper.log(title, data, type); },
1325      }
1326    }
1327    static ajax(params) {
1328      var data = params.data;
1329      fetch(params.url, {
1330        method: params.method,
1331        headers: {
1332          'Content-Type': 'application/json',
1333        },
1334        body: (data && params.method === 'POST') ? JSON.stringify(data) : null,
1335      })
1336      .then(response => response.json())
1337      .then(data => {
1338        params.success(data);
1339      })
1340      .catch((error) => {
1341        console.error('Error:', error);
1342      });
1343    }
1344    static isIE() {
1345      var ua = navigator.userAgent;
1346      var is_ie = ua.indexOf("MSIE ") > -1 || ua.indexOf("Trident/") > -1;
1347      return is_ie;
1348    }
1349    static extractImageObject(val) {
1350      if(!val || val == '') return false;
1351      var val = val;
1352
1353      // Handle src-sets
1354      if(val.search(/([0-9]+w?h?x?,)/gi) > -1) {
1355        val = val.split(/([0-9]+w?h?x?,)/gi)[0];
1356      }
1357
1358      var hostBegin = val.indexOf('//') ? val.indexOf('//') : 0;
1359      var hostEnd = val.lastIndexOf('/') + 1;
1360      var host = val.substring(hostBegin, hostEnd);      
1361      var afterHost = val.substring(hostEnd, val.length);
1362
1363      var url = val;
1364      var file = ''; 
1365      var name = ''; 
1366      var type = '';
1367      afterHost = afterHost.substring(0, (afterHost.indexOf("#") == -1) ? afterHost.length : afterHost.indexOf("#"));
1368      afterHost = afterHost.substring(0, (afterHost.indexOf("?") == -1) ? afterHost.length : afterHost.indexOf("?"));
1369      name = afterHost.replace(/(_[0-9]+x[0-9]*|_{width}x|_{size})?(_crop_(top|center|bottom|left|right))?(@[0-9]*x)?(\.progressive)?\.(png\.jpg|jpe?g|png|gif|webp)/gi, "");
1370
1371      if(afterHost.search(/(\.png\.jpg|\.jpg\.jpg)/gi) > -1) {
1372        type = afterHost.substring(afterHost.search(/(\.png\.jpg|\.jpg\.jpg)/gi)+1, afterHost.length);
1373      } else {
1374        type = afterHost.substring(afterHost.lastIndexOf('.')+1, afterHost.length);
1375      }
1376      
1377      file = afterHost.replace(/(_[0-9]+x[0-9]*|_{width}x|_{size})?(_crop_(top|center|bottom|left|right))?(@[0-9]*x)?(\.progressive)?\.(png\.jpg|jpe?g|png|gif|webp)/gi, '.'+type);
1378
1379      return {
1380        host: host,
1381        name: name,
1382        type: type,
1383        file: file
1384      }
1385    }
1386    static getCurrentLanguage() {
1387      return window.langify.locale.iso_code;
1388    }
1389    static setLanguage(code) {
1390      
1391    }
1392    static getCookie(name) {
1393      var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
1394      if(v) return v[2];
1395      else return null;
1396    }
1397    static setCookie(name, value, days) {
1398      var d = new Date;
1399      d.setTime(d.getTime() + 24*60*60*1000*days);
1400      document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString();
1401    }
1402    static getVersion() {
1403      return 2;
1404    }
1405    static isOutOfViewport (elem) {
1406      var bounding = elem.getBoundingClientRect();
1407      var out = {};
1408      out.top = bounding.top < 0;
1409      out.left = bounding.left < 0;
1410      out.bottom = Math.ceil(bounding.bottom) >= (window.innerHeight || document.documentElement.clientHeight);
1411      out.right = bounding.right > (window.innerWidth || document.documentElement.clientWidth);
1412      out.any = out.top || out.left || out.bottom || out.right;
1413      out.inViewport = bounding.x > 0 && bounding.y > 0;
1414      return out;
1415    }
1416    static isDomainFeatureEnabled() {
1417      return window.langify.locale.domain_feature_enabled;
1418    }
1419    static getVal(str) {
1420      var v = window.location.search.match(new RegExp('(?:[?&]'+str+'=)([^&]+)'));
1421      return v ? v[1] : null;
1422    }
1423    static inIframe() {
1424      try {
1425        return window.self !== window.top;
1426      } catch (e) {
1427        return true;
1428      }
1429    }
1430    static shopifyAPI() {
1431      var root_url = window.langify.locale.root_url != '/' ? window.langify.locale.root_url : '';
1432
1433      return {
1434        attributeToString: function(attribute) {
1435          if((typeof attribute) !== 'string') {
1436            attribute += '';
1437            if(attribute === 'undefined') {attribute = '';}
1438          }
1439          return attribute.trim();
1440        },
1441        getCart: function(callback) {
1442          LyHelper.ajax({
1443            method: 'GET',
1444            url: root_url+'/cart.js',
1445            success: function (cart, textStatus) {
1446              if((typeof callback) === 'function') {
1447                callback(cart);
1448              }
1449            }
1450          });
1451        },
1452        updateCartNote: function(note, callback) {
1453          var params = {
1454            method: 'POST',
1455            url: root_url+'/cart/update.js',
1456            data: 'note=' + this.attributeToString(note),
1457            dataType: 'json',
1458            success: function(cart) {if((typeof callback) === 'function') {callback(cart);}},
1459            error: this.onError
1460          };
1461          LyHelper.ajax(params);
1462        },
1463        updateCartAttributes: function(attributes, callback) {
1464          var params = {
1465            method: 'POST',
1466            url: root_url+'/cart/update.js',
1467            data: {"attributes": attributes},
1468            dataType: 'json',
1469            success: function(cart) {
1470              if((typeof callback) === 'function') {
1471                callback(cart);
1472              }
1473            },
1474            error: this.onError
1475          };
1476          LyHelper.ajax(params);
1477        },
1478        onError: function(XMLHttpRequest, textStatus) {
1479
1480        }      
1481      }
1482    }
1483    static loadScript(url, callback) {
1484      var script = document.createElement('script');
1485      script.type = 'text/javascript';
1486      if(script.readyState) {
1487        script.onreadystatechange = function () {
1488          if(script.readyState == 'loaded' || script.readyState == 'complete') {
1489            script.onreadystatechange = null;
1490            callback();
1491          }
1492        };
1493      } else {
1494        script.onload = function () {
1495          callback();
1496        };
1497      }
1498      script.src = url;
1499      document.getElementsByTagName('head')[0].appendChild(script);
1500    }
1501    static localizationRedirect(type, code, additionalFields, additionalParams, domain) {
1502      if(type !== 'country_code' && type !== 'language_code') { 
1503        return false; 
1504      }
1505      if(!additionalParams) {
1506        var additionalParams = '';
1507      }
1508      if(domain) {
1509        window.location.href = domain;
1510        return true;
1511      }
1512      var params = [
1513        {
1514          name: type,
1515          value: code
1516        },
1517        {
1518          name: 'return_to',
1519          value: window.location.pathname + window.location.search + additionalParams + window.location.hash
1520        },
1521        {
1522          name: 'form_type',
1523          value: 'localization'
1524        },
1525        {
1526          name: '_method',
1527          value: 'put'
1528        }
1529      ];
1530      if(additionalFields) {
1531        for(var i=0; i<additionalFields.length; i++) {
1532          params.push(additionalFields[i]);
1533        }
1534      }
1535      const form = document.createElement('form');
1536      form.method = 'POST';
1537      form.action = '/localization';
1538      params.forEach(function(param) {
1539        const field = document.createElement('input');
1540        field.type = 'hidden';
1541        field.name = param['name'];
1542        field.value = param['value'];
1543        form.appendChild(field);
1544      });
1545      document.body.appendChild(form);
1546      form.submit();
1547    }
1548    static changeCurrency(code) {
1549      const params = [
1550        {
1551          name: 'currency_code',
1552          value: code
1553        },
1554        {
1555          name: 'return_to',
1556          value: window.location.pathname + window.location.search + window.location.hash
1557        },
1558        {
1559          name: 'form_type',
1560          value: 'localization'
1561        },
1562        {
1563          name: '_method',
1564          value: 'put'
1565        }
1566      ];
1567      const form = document.createElement('form');
1568      form.method = 'POST';
1569      form.action = '/localization';
1570      params.forEach(function(param) {
1571        const field = document.createElement('input');
1572        field.type = 'hidden';
1573        field.name = param['name'];
1574        field.value = param['value'];
1575        form.appendChild(field);
1576      });
1577      document.body.appendChild(form);
1578      form.submit();
1579    }
1580    static log(title, data, type) {
1581      if(langify.settings.debug) {
1582        if(!data) {
1583          var data = '';
1584        }
1585        
1586        var css = 'color: green; font-weight: bold;';
1587        if(type === 'error') {
1588          css = 'color: red; font-weight: bold;';
1589        }
1590
1591        console.log(`%c ${title}: \n`, css, data);
1592      }
1593    }
1594  };
1595
1596
1597  /**
1598  *
1599  *
1600  * @class TranslationObserver
1601  */
1602  class TranslationObserver {
1603    constructor() {
1604      LyHelper.log('TranslationObserver instantiation')
1605    }
1606
1607    init() {
1608      if(langify.settings.observe && !LyHelper.isIE()) {
1609        var langifyObserver = this.langifyObserverCore();
1610        langifyObserver.init();
1611        
1612        // HOTFIX: translation observer sometimes refuses to trigger on page load_
1613        langifyObserver.triggerCustomContents();
1614
1615        langify.api = {
1616          observer: {
1617            start: langifyObserver.init,
1618            stop: langifyObserver.stopObserver,
1619            trigger: langifyObserver.triggerCustomContents
1620          }
1621        };
1622      }
1623
1624      return this;
1625    }
1626
1627    langifyObserverCore() {
1628      var observedNodes = [];
1629      var intersectionObs = null;
1630      var mutationCount = 0;
1631      var mutationObs = null;
1632      var mutationObsConfig = {
1633        characterData: true,
1634        characterDataOldValue: true,
1635        attributes: true,
1636        attributeOldValue: true,
1637        childList: true,
1638        subtree: true,
1639      };
1640      var customContents_html = {};
1641      var customContents_text = {};
1642      var customContents_attr = {};
1643    
1644      function init() {
1645        if(langify.settings.observe) {
1646          spreadCustomContents();
1647          if (window.MutationObserver) {
1648            if (langify.settings.lazyload && window.IntersectionObserver) {
1649              startIntersectionObserver();
1650            } else {
1651              startMutationObserver(null);
1652            }
1653          } else {
1654            startMutationEvents();
1655          }
1656        }
1657      }
1658    
1659    
1660      // Intersection Observer
1661      function startIntersectionObserver() {
1662        intersectionObs = new IntersectionObserver(callbackIntersectionChange);
1663        var elementNodes = document.getElementsByClassName('shopify-section');
1664        Array.prototype.slice.call(elementNodes).forEach(function(node) {
1665          intersectionObs.observe(node);
1666        });
1667      }
1668    
1669      function callbackIntersectionChange(intersections) {
1670        intersections.forEach(function(intersection) {
1671          var target = intersection.target;
1672          var targetIsIntersecting = Boolean(target.getAttribute('ly-is-intersecting') === "true" ? true : false);
1673    
1674          if(typeof targetIsIntersecting == 'undefined' || targetIsIntersecting == null) {
1675            target.setAttribute('ly-is-intersecting', intersection.isIntersecting);
1676            targetIsIntersecting = intersection.isIntersecting;
1677          }
1678          
1679          // On Screen
1680          if(targetIsIntersecting == false && intersection.isIntersecting == true) {
1681            if(!target.getAttribute('ly-is-observing')) {
1682              startMutationObserver(target);
1683              intersectionObs.unobserve(target);
1684    
1685              // As the mutation observer didn't see the "add" of the elememts, trigger the initial translation manually
1686              var elementNodes = getNodesUnder(target, 'SHOW_ELEMENT');
1687              var textNodes = getNodesUnder(target, 'SHOW_TEXT');
1688              var nodes = elementNodes.concat(textNodes);
1689              nodes.forEach(function(node) {
1690                translate(node, 'mutation -> childList');
1691              });
1692            }
1693          } 
1694          // Off Screen
1695          //else if(targetIsIntersecting == true && intersection.isIntersecting == false) {
1696          //  stopMutationObserver(target);
1697          //}
1698          target.setAttribute('ly-is-intersecting', intersection.isIntersecting);
1699        });
1700      }
1701    
1702    
1703      // Mutation Observer
1704      function startMutationObserver(observerTarget) {
1705        if (!observerTarget) {
1706          var target = document.documentElement || document.body; // main window
1707        } else {
1708          if (observerTarget.nodeName  === 'IFRAME') {
1709            try { var target = observerTarget.contentDocument || observerTarget.contentWindow.document; }
1710            catch { return false; }
1711          } else {
1712            var target = observerTarget;
1713          }
1714        }
1715        mutationObs = new MutationObserver(callbackDomChange);
1716        mutationObs.observe(target, mutationObsConfig);
1717        observedNodes.push(target);
1718        try { target.setAttribute('ly-is-observing', 'true'); } catch(e) {}
1719      }
1720    
1721      function stopMutationObserver(target) {
1722        if(observedNodes.indexOf(target) > -1) {
1723          observedNodes.splice(observedNodes.indexOf(target), 1);
1724        }
1725        var mutations = mutationObs.takeRecords();
1726        mutationObs.disconnect();
1727        observedNodes.forEach(node => {
1728          mutationObs.observe(node, mutationObsConfig);
1729        });
1730        try { target.removeAttribute('ly-is-observing'); } catch(e) {}
1731      }
1732    
1733    
1734      function callbackDomChange(mutations, mutationObs) {
1735        for (var i = 0, length = mutations.length; i < length; i++) {
1736          var mutation = mutations[i];
1737          var target = mutation.target;
1738    
1739          // Links-Hook
1740          if (mutation.type === 'attributes' && (mutation.attributeName === 'href' || mutation.attributeName === 'action')) {
1741            var target = mutation.target;
1742            translateLink(target.getAttribute(mutation.attributeName), target);
1743          }
1744          // Images-Hook
1745          else if (mutation.type === 'attributes' && (mutation.attributeName === 'src' || mutation.attributeName === 'data-src' || mutation.attributeName === 'srcset' || mutation.attributeName === 'data-srcset')) {
1746            translateImage(target, mutation.attributeName);
1747          }
1748          else if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
1749            translateCssImage(target);
1750          }
1751          // Subtree Events
1752          else if (mutation.type === 'childList') {
1753            // Added Nodes
1754            if(mutation.addedNodes.length > 0) {
1755              var elementNodes = getNodesUnder(mutation.target, 'SHOW_ELEMENT');
1756              var textNodes = getNodesUnder(mutation.target, 'SHOW_TEXT');
1757              var nodes = elementNodes.concat(textNodes);
1758              nodes.forEach(function(node) {
1759                translate(node, 'mutation -> childList');
1760              });
1761            }
1762          }
1763          // CharacterData Events
1764          else if (mutation.type === 'characterData') {
1765            var target = mutation.target;
1766            translate(target, 'mutation -> characterData');
1767          }
1768        }
1769      }
1770    
1771    
1772      function translate(node, info) {
1773        if((node.nodeType === 1 && node.hasAttribute('data-ly-locked')) || (node.nodeType === 3 && node.parentNode && node.parentNode.hasAttribute('data-ly-locked'))) {
1774          return;
1775        }
1776        // CC-Hook
1777        if (node.nodeName  !== 'SCRIPT' && node.nodeName  !== 'STYLE') {
1778          if (node.nodeType === 3) {
1779            translateTextNode(node, info);
1780          }
1781          translateNodeAttrs(node);
1782        }
1783        // Links-Hook
1784        if (node.nodeName  === 'A' || node.nodeName  === 'FORM') {
1785          if(node.hasAttribute('href')) var attrName = 'href';
1786          else var attrName = 'action';
1787          var url = node.getAttribute(attrName);
1788          translateLink(url, node);
1789        }
1790        // Images-Hook
1791        if (node.nodeName  === 'IMG' || node.nodeName  === 'SOURCE') {
1792          translateImage(node, ['src', 'data-src', 'srcset', 'data-srcset']);
1793        }
1794        if (node.attributes && node.getAttribute('style')) {
1795          translateCssImage(node);
1796        }
1797        // Iframe Observation
1798        if (node.nodeName  === 'IFRAME') {
1799          // Todo: handle srcdoc iframe content observing
1800          if (node.getAttribute('ly-is-observing') == null && node.getAttribute('src') == null && !node.hasAttribute('srcdoc')) {
1801            node.setAttribute('ly-is-observing', 'true');
1802            startMutationObserver(node);
1803          }
1804        }
1805      }
1806    
1807      function translateNodeAttrs(node) {
1808        if (node.attributes && node.getAttribute('placeholder')) {
1809          var src = node.getAttribute('placeholder').trim().replace(/(\r\n|\n|\r)/gim,"").replace(/\s+/g," ").toLowerCase();
1810          if(customContents_text[src] && node.getAttribute('placeholder') !== customContents_text[src]) {
1811            node.setAttribute('placeholder', customContents_text[src]);
1812          }
1813        }
1814      }
1815    
1816    
1817      function translateTextNode(node, info) {
1818        if(langify.settings.observeCustomContents === false || !node.textContent || node.textContent.trim().length === 0) {
1819          return;
1820        }
1821        var oldSrc = node.textContent.trim().replace(/(\r\n|\n|\r)/gim,"").replace(/\s+/g," ").toLowerCase();
1822        var src = node.textContent.trim().replace(/(\r\n|\n|\r)/gim," ").replace(/\s+/g," ").toLowerCase();
1823        if(customContents_text[oldSrc]) {
1824          src = oldSrc;
1825        }
1826        if(customContents_text[src] && node.textContent !== customContents_text[src]) {
1827          var newContent = node.textContent.replace(node.textContent.trim(), customContents_text[src]);
1828          if (newContent != node.textContent) {
1829            if(!node.parentNode.hasAttribute('data-ly-mutation-count') || parseInt(node.parentNode.getAttribute('data-ly-mutation-count')) < langify.settings.maxMutations) {
1830              var count = node.parentNode.hasAttribute('data-ly-mutation-count') ? parseInt(node.parentNode.getAttribute('data-ly-mutation-count')) : 0;
1831              node.parentNode.setAttribute('data-ly-mutation-count', count+1);
1832              node.textContent = newContent;
1833    
1834              mutationCount = mutationCount + 1;
1835              LyHelper.log('REPLACED (TEXT)', {
1836                  oldValue: src,
1837                  newValue: customContents_text[src],
1838                  mutationCount,
1839                }, 'success'
1840              );
1841            
1842              var event = new CustomEvent('langify.observer.aftertranslatetext', { 
1843                bubbles: true,
1844                detail: {
1845                  target: node,
1846                  original: src,
1847                  translation: customContents_text[src]
1848                }
1849              });
1850              node.dispatchEvent(event);
1851            }
1852          }
1853        }
1854      }
1855    
1856      function translateLink(url, node) {
1857        if(langify.settings.observeLinks === false || isLocalizationForm(node) || node.hasAttribute('data-ly-locked') || !url || (url.indexOf('mailto:') !== -1 || url.indexOf('javascript:') !== -1 || url.indexOf('tel:') !== -1 || url.indexOf('file:') !== -1 || url.indexOf('ftp:') !== -1 || url.indexOf('sms:') !== -1 || url.indexOf('market:') !== -1 || url.indexOf('fax:') !== -1 || url.indexOf('callto:') !== -1 || url.indexOf('ts3server:') !== -1)) {
1858          return;
1859        }
1860        var isLocalized = (
1861          url.indexOf('/'+ langify.locale.iso_code +'/') === 0 || url === '/'+ langify.locale.iso_code || 
1862          url.indexOf('/'+ langify.locale.iso_code.toLowerCase() +'/') === 0 || url === '/'+ langify.locale.iso_code.toLowerCase() ||          
1863          url.indexOf('/'+ langify.locale.iso_code.toLowerCase().substring(0,2) +'/') === 0 || url === '/'+ langify.locale.iso_code.toLowerCase().substring(0,2) ||
1864          url.indexOf(langify.locale.root_url + '/') === 0 || url === langify.locale.root_url || 
1865          url.indexOf(langify.locale.shop_url + langify.locale.root_url) === 0 || url === langify.locale.shop_url + langify.locale.root_url
1866        );
1867        var cleanUrl = url.replace(langify.locale.shop_url, '');
1868        var re = new RegExp(`\/\\b${langify.locale.iso_code.replace('-', '\-')}\\b\/`, 'gi');
1869        var link = cleanUrl.replace(re, '/');
1870        var isUrlAbsolute = (link.indexOf('://') > 0 || link.indexOf('//') === 0);
1871        var blacklist = ['#', '/'+ langify.locale.iso_code +'#'].concat(langify.settings.linksBlacklist);
1872        var isUrlBlacklisted = blacklist.find(x => url.indexOf(x) === 0);
1873        if(!isLocalized && !isUrlAbsolute && !isUrlBlacklisted && langify.locale.root_url != '/') {
1874          if(node.hasAttribute('href')) var attrName = 'href'; else var attrName = 'action';
1875          if(link === '/' || link == langify.locale.root_url) link = '';
1876          var newLink = langify.locale.root_url + link;
1877          var timeStamp = Math.floor(Date.now());
1878          if(!node.hasAttribute('data-ly-processed') || timeStamp > parseInt(node.getAttribute('data-ly-processed')) + langify.settings.timeout) {
1879            node.setAttribute('data-ly-processed', timeStamp);
1880            node.setAttribute(attrName, newLink);
1881            if(node.hasAttribute('data-'+attrName)) node.setAttribute('data-'+attrName, newLink);
1882    
1883            mutationCount = mutationCount + 1;
1884            LyHelper.log('REPLACED (LINK)', {
1885                attrName,
1886                oldValue: url,
1887                newValue: newLink,
1888                mutationCount,
1889              }, 'success'
1890            );
1891            
1892            var event = new CustomEvent('langify.observer.aftertranslatelink', { 
1893              bubbles: true,
1894              detail: {
1895                target: node,
1896                attribute: attrName,
1897                original: url,
1898                translation: newLink
1899              }
1900            });
1901            node.dispatchEvent(event);
1902          }
1903        }
1904      }
1905    
1906      function translateImage(node, attr) {
1907        if(langify.settings.observeImages === false || node.hasAttribute('data-ly-locked') || Object.keys(customContents_image).length === 0) {
1908          return
1909        }
1910        var attrs = [];
1911        if(typeof attr === 'string') attrs.push(attr);
1912        else if(typeof attr === 'object') attrs = attr;
1913        var timeStamp = Math.floor(Date.now());
1914        if(!node.hasAttribute('data-ly-processed') || timeStamp > parseInt(node.getAttribute('data-ly-processed')) + langify.settings.timeout) {
1915          node.setAttribute('data-ly-processed', timeStamp);
1916          attrs.forEach(function(attr) {
1917            if(node.hasAttribute(attr)) {
1918              var imgObject = LyHelper.extractImageObject(node.getAttribute(attr));
1919              var imgKey = imgObject ? imgObject.file.toLowerCase() : '';
1920    
1921              if(customContents_image[imgKey]) {
1922    
1923                // Replace
1924                var oldValue = node.getAttribute(attr);
1925                var translation = node.getAttribute(attr);
1926                translation = translation.replace(new RegExp(imgObject.host, 'g'), customContents_image[imgKey].host);
1927                translation = translation.replace(new RegExp(imgObject.name, 'g'), customContents_image[imgKey].name);
1928                translation = translation.replace(new RegExp(imgObject.type, 'g'), customContents_image[imgKey].type);
1929    
1930                // China Hook
1931                if(node.getAttribute(attr).indexOf('cdn.shopifycdn.net') >= 0) {
1932                  translation = translation.replace(new RegExp('cdn.shopify.com', 'g'), 'cdn.shopifycdn.net'); 
1933                }
1934    
1935                if(node.getAttribute(attr) != translation) {
1936                  node.setAttribute(attr, translation);
1937    
1938                  mutationCount = mutationCount + 1;
1939                  LyHelper.log('REPLACED (IMAGE)', {
1940                    attrName: attr,
1941                    oldValue: oldValue,
1942                    newValue: translation,
1943                    mutationCount,
1944                  }, 'success');
1945            
1946                  var event = new CustomEvent('langify.observer.aftertranslateimage', { 
1947                    bubbles: true,
1948                    detail: {
1949                      target: node,
1950                      attribute: attr,
1951                      original: oldValue,
1952                      translation: translation
1953                    }
1954                  });
1955                  node.dispatchEvent(event);
1956                }
1957              }
1958            }
1959          });
1960        }
1961      }
1962    
1963      function translateCssImage(node) {
1964        if(langify.settings.observeImages === false || node.hasAttribute('data-ly-locked') || Object.keys(customContents_image).length === 0 || !node.getAttribute('style')) {
1965          return
1966        }
1967    
1968        var imgMatches = node.getAttribute('style').match(/url\(("|')?(.*)("|')?\)/gi);
1969        if(imgMatches !== null) {
1970          var imgSource = imgMatches[0].replace(/url\(("|')?|("|')?\)/, '');
1971          var imgObject = LyHelper.extractImageObject(imgSource);
1972          var imgKey = imgObject ? imgObject.file.toLowerCase() : '';
1973          var attr = 'style';
1974    
1975          if(customContents_image[imgKey]) {
1976    
1977            // Replace
1978            var translation = node.getAttribute(attr);
1979            translation = translation.replace(new RegExp(imgObject.host, 'g'), customContents_image[imgKey].host);
1980            translation = translation.replace(new RegExp(imgObject.name, 'g'), customContents_image[imgKey].name);
1981            translation = translation.replace(new RegExp(imgObject.type, 'g'), customContents_image[imgKey].type);
1982    
1983            // China Hook
1984            if(node.getAttribute(attr).indexOf('cdn.shopifycdn.net') >= 0) {
1985              translation = translation.replace(new RegExp('cdn.shopify.com', 'g'), 'cdn.shopifycdn.net'); 
1986            }
1987    
1988            if(node.getAttribute(attr) != translation) {
1989              var timeStamp = Math.floor(Date.now());
1990              if(!node.hasAttribute('data-ly-processed') || timeStamp > parseInt(node.getAttribute('data-ly-processed')) + langify.settings.timeout) {
1991                node.setAttribute('data-ly-processed', timeStamp);
1992                node.setAttribute(attr, translation);
1993                mutationCount = mutationCount + 1;
1994              }
1995            }
1996          }          
1997        }
1998      }
1999    
2000      function findAndLocalizeLinks(target, parent) {
2001        if(target.parentNode && parent) var allLinks = target.parentElement.querySelectorAll('[href],[action]');
2002        else var allLinks = target.querySelectorAll('[href],[action]');
2003        allLinks.forEach(link => {
2004          if(link.hasAttribute('href')) var attrName = 'href'; else var attrName = 'action';
2005          var url = link.getAttribute(attrName);
2006          translateLink(url, link);
2007        });
2008      }
2009      
2010      function isLocalizationForm(node) {
2011        if(node.querySelector('input[name="form_type"][value="localization"]')){
2012          return true;
2013        }
2014        return false;
2015      }
2016    
2017      function getNodesUnder(el, show){
2018        var n, a=[], walk=document.createTreeWalker(el, NodeFilter[show] , null, false);
2019        while(n=walk.nextNode()) a.push(n);
2020        return a;
2021      }
2022    
2023      function spreadCustomContents() {
2024        var getFileName = function(url) {
2025          if(!url || url == '') return;
2026          url = url.substring(0, (url.indexOf("#") == -1) ? url.length : url.indexOf("#"));
2027          url = url.substring(0, (url.indexOf("?") == -1) ? url.length : url.indexOf("?"));
2028          url = url.substring(url.lastIndexOf("/") + 1, url.length);
2029          url = url.replace(/(_[0-9]+x[0-9]*|_{width}x)?(_crop_(top|center|bottom|left|right))?(@[0-9]*x)?(\.progressive)?\.(jpe?g|png|gif|webp)/gi, "");
2030          return '/' + url;
2031        }
2032        Object.entries(customContents).forEach(function(entry) {
2033          //if(/<\/?[a-z][\s\S]*>/i.test(entry[0])) customContents_html[entry[0]] = entry[1];
2034          //else if(/(http(s?):)?([/|.|\w|\s|-])*\.(?:jpe?g|gif|png)/.test(entry[0])) customContents_image[getFileName(entry[0])] = getFileName(entry[1]);
2035          if(/(http(s?):)?([/|.|\w|\s|-])*\.(?:jpe?g|gif|png|webp)/.test(entry[0])) customContents_image[LyHelper.extractImageObject(entry[0]).file] = LyHelper.extractImageObject(entry[1]);
2036          else customContents_text[entry[0]] = entry[1];
2037        });
2038        LyHelper.log('CUSTOM CONTENTS:', {customContents, customContents_text, customContents_image}, 'info')
2039      }
2040    
2041      // Polyfill for old browsers
2042      function startMutationEvents() {
2043        var target = document.querySelector('body');
2044        target.addEventListener("DOMAttrModified", function (event) {
2045          if(event.attrName === 'href' || event.attrName === 'action') {
2046            if(event.prevValue != event.newValue) {
2047              translateLink(event.newValue, event.target);
2048            }
2049          }
2050        }, false);
2051        target.addEventListener("DOMSubtreeModified", function (event) {
2052          //findAndLocalizeLinks(event.target, false);
2053          //matchCustomContent(event.target);
2054        }, false);
2055      }
2056    
2057      function triggerCustomContents() {
2058        var rootnode = document.getElementsByTagName('body')[0]
2059        var walker = document.createTreeWalker(rootnode, NodeFilter.SHOW_ALL, null, false)
2060        
2061        while (walker.nextNode()) {
2062          //LyHelper.log(walker.currentNode.tagName)
2063          translate(walker.currentNode, null);
2064        }
2065      }
2066    
2067      function stopObserver() {
2068        mutationObs.takeRecords();
2069        mutationObs.disconnect();
2070      }
2071    
2072      //init();
2073      return {
2074        init: init,
2075        triggerCustomContents: triggerCustomContents,
2076        stopObserver: stopObserver,
2077      }
2078    };
2079  }
2080
2081
2082  /**
2083  *
2084  * 
2085  * @class Switcher
2086  */
2087  class Switcher {
2088    constructor(switcherSettings) {
2089      LyHelper.log('Switcher instantiation');
2090
2091      this.lyForceOff = location.search.split('ly-force-off=')[1];
2092      this.switcherElements = Array.prototype.slice.call(document.getElementsByClassName('ly-switcher-wrapper'));
2093    }
2094
2095    init() {
2096
2097      // Initial cart.attributes update
2098      LyHelper.shopifyAPI().getCart(function (cart) {
2099        var currentLanguage = langify.locale.iso_code;
2100        if(!cart.attributes.language || cart.attributes.language != currentLanguage) {
2101          LyHelper.shopifyAPI().updateCartAttributes({"language": currentLanguage}, function(data){});
2102        }
2103      });
2104
2105      if(langify.locale.languages.length === 1) {
2106        console.info(`%c LANGIFY INFO:\n`, 'font-weight: bold;', 'The language switcher is hidden! This can have one of the following reasons: \n * All additional languages are disabled in the "Langify -> Dashboard -> Languages" section. \n * If you are using different domains for your additional languages, ensure that "Cross Domain Links" are enabled inside the "Langify -> Dashboard -> Switcher Configurator -> Domains" section.');
2107        return false;
2108      }
2109
2110      this.setCustomPosition();
2111      this.initCustomDropdown();
2112      this.bindCountrySwitchers();
2113      this.bindCurrencySwitchers();
2114      this.bindLanguageSwitchers();
2115
2116      var event = new CustomEvent('langify.switcher.initialized', { 
2117        bubbles: true,
2118        detail: {}
2119      });
2120    }
2121
2122    initCustomDropdown() {
2123      // Custom Dropdown
2124      var root = this;
2125      var switcher = document.getElementsByClassName('ly-custom-dropdown-switcher');
2126      for(var a = 0; a < switcher.length; a++) {
2127        switcher[a].classList.toggle('ly-is-open');
2128        var isOut = LyHelper.isOutOfViewport(switcher[a]);
2129        if(isOut.bottom && isOut.inViewport) {
2130          switcher[a].classList.add('ly-is-dropup');
2131          var arrows = switcher[a].querySelectorAll('.ly-arrow');
2132          for(var b = 0; b < arrows.length; b++) {
2133            arrows[b].classList.add('ly-arrow-up');    
2134          }
2135        }
2136        switcher[a].classList.toggle('ly-is-open');
2137        switcher[a].onclick = function(event) {
2138          root.toggleSwitcherOpen(this);
2139        }
2140      }
2141
2142      document.addEventListener('click', function(event) {
2143        if(!event.target.closest('.ly-custom-dropdown-switcher')) {
2144          var openSwitchers = document.querySelectorAll('.ly-custom-dropdown-switcher.ly-is-open')
2145          for(var i = 0; i < openSwitchers.length; i++) {
2146            openSwitchers[i].classList.remove('ly-is-open');
2147          }
2148        }
2149      });
2150    }
2151    
2152    bindLanguageSwitchers() {
2153      var root = this;
2154      var links = document.getElementsByClassName('ly-languages-switcher-link');
2155      for(var l = 0; l < links.length; l++) {
2156        links[l].addEventListener('click', function(event) {
2157          event.preventDefault();
2158          if(LyHelper.isDomainFeatureEnabled() && this.getAttribute('href') !== '#') {
2159          	var domain = this.getAttribute('href');
2160          }
2161          LyHelper.setCookie('ly-lang-selected', this.getAttribute('data-language-code'), 365);
2162          LyHelper.localizationRedirect('language_code', this.getAttribute('data-language-code'), null, null, domain);
2163        });
2164      }
2165
2166      // Native select event handling
2167      var nativeLangifySelects = document.querySelectorAll('select.ly-languages-switcher');
2168      for(var i = 0; i < nativeLangifySelects.length; i++) {
2169        nativeLangifySelects[i].onchange = function() {
2170          event.preventDefault();
2171          if(LyHelper.isDomainFeatureEnabled() && this[this.selectedIndex].getAttribute('data-domain') !== '#') {
2172            var domain = this[this.selectedIndex].getAttribute('data-domain');
2173          }
2174          LyHelper.setCookie('ly-lang-selected', this[this.selectedIndex].getAttribute('data-language-code'), 365);
2175          LyHelper.localizationRedirect('language_code', this[this.selectedIndex].getAttribute('data-language-code'), null, null, domain);
2176        };
2177      }
2178    }
2179    
2180    bindCountrySwitchers() {
2181      var countrySelectSwitcher = document.querySelectorAll('select.ly-country-switcher');
2182      var countryCustomSwitcher = document.querySelectorAll('div.ly-country-switcher a');
2183      for(var i=0; i<countryCustomSwitcher.length; i++) {
2184        countryCustomSwitcher[i].addEventListener('click', function(e) {
2185          LyHelper.localizationRedirect('country_code', this.getAttribute('data-country-code'));
2186        });
2187      }
2188      for(var a=0; a<countrySelectSwitcher.length; a++) {
2189        countrySelectSwitcher[a].addEventListener('change', function(){
2190          LyHelper.localizationRedirect('country_code', this[this.selectedIndex].getAttribute('data-country-code'));
2191        });
2192      }  
2193    }
2194    
2195    bindCurrencySwitchers() {
2196      var currencySelectSwitcher = document.querySelectorAll('select.ly-currency-switcher');
2197      var currencyCustomSwitcher = document.querySelectorAll('div.ly-currency-switcher a');
2198      for(var i=0; i<currencyCustomSwitcher.length; i++) {
2199        currencyCustomSwitcher[i].addEventListener('click', function(e) {
2200          LyHelper.changeCurrency(this.getAttribute('data-currency-code'));
2201        });
2202      }
2203      for(var a=0; a<currencySelectSwitcher.length; a++) {
2204        currencySelectSwitcher[a].addEventListener('change', function(){
2205          LyHelper.changeCurrency(this[this.selectedIndex].getAttribute('data-currency-code'));
2206        });
2207      }  
2208    }
2209
2210    setCustomPosition() {
2211      for(var i = 0; i < this.switcherElements.length; i++) {
2212        if(this.lyForceOff !== 'true') {
2213          if(langify.locale.languages.length <= 1) {
2214            this.switcherElements[i].querySelector('.ly-languages-switcher').classList.add('ly-hide');
2215          }
2216          this.switcherElements[i].classList.remove('ly-hide');
2217        }
2218        if(this.switcherElements[i].classList.contains('ly-custom') && (document.getElementById('ly-custom-'+this.switcherElements[i].getAttribute('data-breakpoint')) || document.getElementsByClassName('ly-custom-'+this.switcherElements[i].getAttribute('data-breakpoint')).length )) {
2219          var targets = Array.from(document.getElementsByClassName('ly-custom-'+this.switcherElements[i].getAttribute('data-breakpoint')));
2220          var target = document.getElementById('ly-custom-'+this.switcherElements[i].getAttribute('data-breakpoint'));
2221          if(target) targets.push(target);
2222          for(var c = 0; c < targets.length; c++) {
2223            var clone = this.switcherElements[i].cloneNode(true);
2224            targets[c].innerHTML = clone.outerHTML;
2225          }
2226          this.switcherElements[i].classList.add('ly-hide');
2227        }
2228      }
2229    }
2230
2231    toggleSwitcherOpen(e) {
2232      var target = e;
2233      if(!target.classList.contains('ly-is-open')) {
2234        var openSwitchers = document.querySelectorAll('.ly-custom-dropdown-switcher.ly-is-open')
2235        for(var i = 0; i < openSwitchers.length; i++) {
2236          openSwitchers[i].classList.remove('ly-is-open');
2237        }
2238
2239        target.getElementsByClassName('ly-custom-dropdown-current')[0].setAttribute('aria-expanded', 'true');
2240      } else {
2241        target.getElementsByClassName('ly-custom-dropdown-current')[0].setAttribute('aria-expanded', 'false');
2242      }
2243      target.classList.toggle('ly-is-open');
2244      var isOut = LyHelper.isOutOfViewport(target);
2245      if(isOut.bottom) {
2246        target.classList.add('ly-is-dropup');
2247      }
2248    }
2249
2250    togglePopupOpen(e) {
2251      e.closest('.ly-popup-switcher').classList.toggle('ly-is-open');
2252    }
2253
2254    _getCountryCodeFromHreflang(language_code) {
2255      var hreflangTags = document.querySelectorAll('link[hreflang]');
2256      var languageDomains = {};
2257      var countryCode = false;
2258      for(var i = 0; i < hreflangTags.length; i++) {
2259        if(hreflangTags[i].getAttribute('hreflang').indexOf(language_code) === 0) {
2260          if(!languageDomains[hreflangTags[i].getAttribute('href')]) {
2261            languageDomains[hreflangTags[i].getAttribute('href')] = hreflangTags[i];
2262          }
2263        }
2264      }
2265      if(Object.keys(languageDomains).length > 0) {
2266        countryCode = Object.values(languageDomains)[0].getAttribute('hreflang');
2267        countryCode = countryCode.split('-');
2268        if(countryCode[1]) {
2269          countryCode = countryCode[1]
2270        } else {
2271          
2272        }
2273      }
2274      return countryCode;
2275    }
2276  }
2277
2278
2279  /**
2280  *
2281  *
2282  * @class LanguageDetection
2283  */
2284  class LanguageDetection {
2285
2286    constructor() {
2287      this.hreflangList = null;
2288      LyHelper.log('LanguageDetection instantiation');
2289    }
2290
2291    init() {
2292      if(LyHelper.inIframe()) return null;
2293      var currentLang = langify.locale.iso_code.toLowerCase();
2294      //var localizationData = this.getLocalizationData();
2295      this.hreflangList = this.getHreflangList();
2296
2297      var userLang = navigator.language || navigator.userLanguage;
2298      userLang = userLang.toLowerCase();
2299      var bot = /bot|google|baidu|bing|msn|duckduckbot|teoma|slurp|yandex|Chrome-Lighthouse/i.test(navigator.userAgent);
2300      var blockedRoutes = window.lyBlockedRoutesList || [];
2301      var blockedRoute = blockedRoutes.find(x => window.location.pathname.indexOf(x) === 0);
2302      var is404 = document.getElementsByClassName('template-404').length;
2303
2304      if(LyHelper.getVal('redirected') === 'true') {
2305        LyHelper.setCookie('ly-lang-selected', currentLang, 365);
2306        var _href = window.location.href;
2307        history.replaceState(null, '', _href.replace(/(\?|&)(redirected=true)/i, ''));
2308        return null;
2309      }
2310
2311      if(!is404 && !bot && !blockedRoute && LyHelper.getVal('ly-lang-detect') !== 'off') {
2312        if(userLang && !LyHelper.getCookie('ly-lang-selected')) {
2313          var hasMatch = this.matchHreflangList(userLang);
2314          if(currentLang !== this._hreflangToLanguageCode(hasMatch)) {
2315            if(hasMatch) {
2316              this.redirectMatched(userLang);
2317            } else if (!hasMatch && langify.settings.switcher.languageDetectionDefault) {
2318              // Redirect to default language
2319              this.redirectMatched(langify.settings.switcher.languageDetectionDefault);
2320            }
2321          }
2322        } else {
2323          if(LyHelper.getCookie('ly-lang-selected') && LyHelper.getCookie('ly-lang-selected') !== currentLang) {
2324            // Only save cookie when the domain feature is active
2325            if(LyHelper.isDomainFeatureEnabled()) {
2326              LyHelper.setCookie('ly-lang-selected', currentLang, 365);
2327            }
2328            this.redirectMatched(LyHelper.getCookie('ly-lang-selected'));
2329          }
2330        }
2331      }
2332      
2333      this._geolocationAppSupport();
2334    }
2335    redirectMatched(userLang) {
2336      var match = this.matchHreflangList(userLang);
2337      if(match) {
2338        this.redirectHref(match.href, match.lang);
2339      }
2340      return match;
2341    }
2342    matchHreflangList(userLang) {
2343      var matchedHreflang = false;
2344      var browserLang = userLang;
2345
2346      // Find candidates
2347      var candidates = this.hreflangList.filter(item => item.lang === browserLang);
2348      if(candidates.length === 0) {
2349        browserLang = userLang.toLowerCase();
2350        candidates = this.hreflangList.filter(item => item.lang.toLowerCase().indexOf(browserLang) === 0);
2351      }
2352      if(candidates.length === 0) {
2353        browserLang = userLang.toLowerCase().substring(0, 2);
2354        candidates = this.hreflangList.filter(item => item.lang.toLowerCase().indexOf(browserLang) === 0);
2355      }
2356
2357      // Handle candidates
2358      if(candidates.length === 1) {
2359        return({href: candidates[0].href, lang: browserLang});
2360      } 
2361      else if(candidates.length > 1) {
2362        var preferedCandidate = candidates.find(item => item.href.indexOf(window.location.host) >= 0)
2363        if(preferedCandidate) {
2364          return({href: preferedCandidate.href, lang: browserLang});
2365        } else {
2366          return({href: candidates[0].href, lang: browserLang});
2367        }
2368      } 
2369      
2370      return false;
2371    }
2372    redirectHref(href, userLang) {
2373      var queryString = window.location.search;
2374      var url = href.split('?')[0];
2375      if(queryString === '') {
2376        queryString = '?redirected=true';
2377      } else {
2378        queryString += '&redirected=true';
2379      }
2380      window.location.replace(url + queryString);
2381    }
2382    getHreflangList() {
2383      var hreflangTags = document.querySelectorAll('link[hreflang]');
2384      var hreflangList = [];
2385      var countryCode = false;
2386      // Cross Domain Links option
2387      if(LyHelper.isDomainFeatureEnabled()) {
2388        for(var i = 0; i < langify.locale.languages.length; i++) {
2389          hreflangList.push({
2390            href: 'https://' + langify.locale.languages[i].domain + window.location.pathname + window.location.search + window.location.hash,
2391            lang: langify.locale.languages[i].iso_code,
2392          });
2393        }
2394      }
2395      for(var i = 0; i < hreflangTags.length; i++) {
2396        var hreflang = hreflangTags[i].getAttribute('hreflang').toLowerCase();
2397        hreflang = hreflang.replace('zh-hans', 'zh-cn').replace('zh-hant', 'zh-tw'); // Chinese special cases
2398        hreflangList.push({
2399          href: hreflangTags[i].getAttribute('href'),
2400          lang: hreflang
2401        });
2402      }
2403      return hreflangList;
2404    }
2405    _langToHreflang(userLang) {
2406      var hreflang = '';
2407      this.hreflangList.map(function(item) {
2408        if(item.lang === userLang) {
2409          hreflang = userLang;
2410        }
2411      });
2412      if(hreflang === '') {
2413        this.hreflangList.map(function(item) {
2414          var browserLang = userLang.toLowerCase();
2415          if(item.lang.toLowerCase().indexOf(browserLang) === 0) {
2416            hreflang = browserLang;
2417          }
2418          else if(item.lang.toLowerCase().indexOf(browserLang.substring(0, 2)) === 0) {
2419            hreflang = browserLang.substring(0, 2);
2420          }
2421        });        
2422      }
2423      return hreflang || userLang;
2424    }
2425    _hreflangToLanguageCode(hreflangTag) {
2426      if(!hreflangTag || !hreflangTag.lang) return false;
2427	  var languageCode = false;
2428      langify.locale.languages.forEach(function(item) {
2429        if(item.iso_code.toLowerCase() === hreflangTag.lang.toLowerCase()) {
2430          languageCode = item.iso_code;
2431        }
2432      });
2433      if(!languageCode) {
2434        langify.locale.languages.forEach(function(item) {
2435          if(item.iso_code.toLowerCase() === hreflangTag.lang.substring(0, 2).toLowerCase()) {
2436            languageCode = item.iso_code;
2437          }
2438        });
2439      }
2440      return languageCode;
2441    }
2442    _geolocationAppSupport() {
2443      var target = document.querySelector('body');
2444      var config = { childList: true, subtree: true };
2445      var geolocationObserver = new MutationObserver(function(mutations) {
2446        mutations.forEach(function(mutation) {
2447          if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
2448            var target = mutation.target.getElementsByClassName('locale-bar__form');
2449            if(target[0]) {
2450              target[0].onsubmit = function() {
2451                var locale_code = target[0].elements['locale_code'].value;
2452                var selector = target[0].getElementsByClassName('locale-bar__selector');
2453                if(selector.length >= 1) {
2454                  locale_code = selector[0].options[selector[0].selectedIndex].value;
2455                }
2456                LyHelper.setCookie('ly-lang-selected', locale_code, 365);
2457              };
2458            }
2459            var selectors = mutation.target.getElementsByClassName('locale-selectors__selector');
2460            if(selectors.length > 0) {
2461              for(var selector of selectors) {
2462                if(selector.getAttribute('name') === 'locale_code') {
2463                  selector.onchange = function() {
2464                    var locale_code = selector.options[selector.selectedIndex].value;
2465                    LyHelper.setCookie('ly-lang-selected', locale_code, 365);
2466                  };        
2467                }
2468              }
2469            }
2470          }
2471        });
2472      });
2473      geolocationObserver.observe(target, config);
2474      setTimeout(function() {
2475        geolocationObserver.disconnect();
2476      }, 10000);
2477    }
2478  }
2479
2480
2481  /**
2482  *
2483  *
2484  * @class Recommendation
2485  */
2486  class Recommendation extends LanguageDetection {
2487    
2488    constructor() {
2489      super();
2490      LyHelper.log('Recommendation instantiation');
2491    }
2492
2493    init() {
2494      this.hreflangList = this.getHreflangList();
2495
2496      var userLang = navigator.language || navigator.userLanguage;
2497      userLang = userLang.toLowerCase();
2498
2499      var recommendation = this.matchHreflangList(userLang);
2500      var recommendationLanguageCode = this._hreflangToLanguageCode(recommendation);
2501      if(recommendationLanguageCode && recommendationLanguageCode !== langify.locale.iso_code && !LyHelper.getCookie('ly-lang-selected')) {
2502        this.recommended_language_code = recommendationLanguageCode;
2503        this.recommended_country_code = null;
2504        this.recommended_currency_code = null;
2505        this._translateStrings(recommendationLanguageCode);
2506        this._bindings();
2507      } else {
2508        return false;
2509      }
2510    }
2511
2512    _translateStrings(languageCode) {
2513      var recommendationElement = document.querySelectorAll('.ly-recommendation')[0];
2514      var strings = langify.settings.switcher.recommendation_strings[languageCode];
2515      var recommendationStr = 'Looks like your browser is set to [[language]]. Change the language?';
2516      var buttonStr = 'Change';
2517      var matchedLanguageCode = this._langToHreflang(languageCode).toLowerCase();
2518      var languageStr = langify.settings.switcher.languages.find(x => x.iso_code.toLowerCase() === matchedLanguageCode) ? langify.settings.switcher.languages.find(x => x.iso_code.toLowerCase() === matchedLanguageCode).name : languageCode.toUpperCase();
2519      if(strings) {
2520        recommendationStr = strings.recommendation ? strings.recommendation : recommendationStr;
2521        buttonStr = strings.button ? strings.button : buttonStr;
2522        languageStr = strings.language ? strings.language : languageStr;
2523      }
2524      var newCode = recommendationElement.innerHTML;
2525      newCode = newCode.replaceAll('[[recommendation]]', recommendationStr).replaceAll('[[button]]', buttonStr).replaceAll('[[language]]', languageStr);
2526      recommendationElement.innerHTML = newCode;     
2527    }
2528
2529    _bindings() {
2530      var _this = this;
2531      var lyForceOff = location.search.split('ly-force-off=')[1];
2532      var recommendationElement = document.querySelectorAll('.ly-recommendation')[0];
2533      var form = recommendationElement.querySelectorAll('.ly-recommendation-form')[0];
2534      var links = recommendationElement.getElementsByClassName('ly-custom-dropdown-list-element');
2535      var customDropdown = recommendationElement.querySelectorAll('.ly-custom-dropdown-switcher');
2536      var nativeSelects = recommendationElement.getElementsByClassName('ly-native-select');
2537
2538      form.addEventListener('submit', function(e) {
2539        e.preventDefault();
2540        
2541        if(_this.recommended_country_code || _this.recommended_currency_code) {
2542          // When a country or currency is involved, use old redirection
2543          var additionalFields = [];
2544          if(_this.recommended_country_code) {
2545            additionalFields.push({
2546              name: 'country_code',
2547              value: _this.recommended_country_code
2548            });
2549          }
2550          if(_this.recommended_currency_code) {
2551            additionalFields.push({
2552              name: 'currency_code',
2553              value: _this.recommended_currency_code
2554            });
2555          }
2556          LyHelper.setCookie('ly-lang-selected', _this.recommended_language_code, 365);
2557          LyHelper.localizationRedirect('language_code', _this.recommended_language_code, additionalFields);
2558        } else {
2559          //...or use new hreflang redirection
2560          _this.redirectMatched(_this.recommended_language_code);
2561        }
2562      });
2563      
2564      // Overwrite switchers
2565      for(var l = 0; l < links.length; l++) {
2566        links[l].addEventListener('click', function(event) {
2567          event.preventDefault();
2568          
2569          // When clicked from within a custom dropdown
2570          var parentCustomDropdown = event.currentTarget.closest('.ly-custom-dropdown-switcher');
2571          if(parentCustomDropdown) {
2572            _this._selectCustomDropdownEntry(parentCustomDropdown, this);
2573          } else {
2574            _this.recommended_language_code = this.getAttribute('data-language-code');
2575          }
2576        });
2577      }
2578
2579      for(var i = 0; i < nativeSelects.length; i++) {
2580        nativeSelects[i].onchange = _this._selectNativeDropdownEntry.bind(this);
2581        
2582        if(nativeSelects[i].classList.contains('ly-languages-switcher')) {
2583          nativeSelects[i].value = _this.recommended_language_code;
2584        }
2585      }
2586
2587      for(var i = 0; i < customDropdown.length; i++) {
2588        if(recommendationElement.className.indexOf('bottom') > -1) {
2589          customDropdown[i].classList.add('ly-is-dropup');       
2590        }
2591        
2592        if(customDropdown[i].classList.contains('ly-languages-switcher')) {
2593          _this._selectCustomDropdownEntry(customDropdown[i], customDropdown[i].querySelector('.ly-custom-dropdown-list a[data-language-code="'+ _this.recommended_language_code +'"]'));
2594        }
2595      } 
2596      if(!lyForceOff) {
2597        recommendationElement.classList.add('ly-is-open');
2598      }
2599    }
2600
2601    _selectNativeDropdownEntry(event) {
2602      event.preventDefault();
2603      var element = event.currentTarget;
2604      var _this = this;
2605
2606      if(element[element.selectedIndex].hasAttribute('data-language-code')) {
2607        _this.recommended_language_code = element[element.selectedIndex].getAttribute('data-language-code');
2608      }
2609      if(element[element.selectedIndex].hasAttribute('data-country-code')) {
2610        _this.recommended_country_code = element[element.selectedIndex].getAttribute('data-country-code');
2611      }
2612      if(element[element.selectedIndex].hasAttribute('data-currency-code')) {
2613        _this.recommended_currency_code = element[element.selectedIndex].getAttribute('data-currency-code');
2614      }
2615    }
2616
2617    _selectCustomDropdownEntry(element, entry) {
2618      if(!entry) return;
2619      var _this = this;
2620      var currentElem = element.querySelector('.ly-custom-dropdown-current');
2621      var currentIcon = currentElem.querySelector('.ly-icon');        
2622      var currentLabel = currentElem.querySelector('span');
2623      var valueToSelect = '';
2624
2625      if(entry.hasAttribute('data-language-code')) {
2626        _this.recommended_language_code = entry.getAttribute('data-language-code');
2627        valueToSelect = _this.recommended_language_code;
2628      }
2629      if(entry.hasAttribute('data-country-code')) {
2630        _this.recommended_country_code = entry.getAttribute('data-country-code');
2631        valueToSelect = _this.recommended_country_code;
2632      }
2633      if(entry.hasAttribute('data-currency-code')) {
2634        _this.recommended_currency_code = entry.getAttribute('data-currency-code');
2635        valueToSelect = _this.recommended_currency_code;
2636      }
2637      if(entry.hasAttribute('data-country-code') && entry.hasAttribute('data-currency-code')) {
2638        valueToSelect = _this.recommended_country_code + '-' + _this.recommended_currency_code;
2639      }
2640
2641      if(element.querySelector('.ly-custom-dropdown-list li.current')) {
2642        element.querySelector('.ly-custom-dropdown-list li.current').classList.remove('current');  
2643        element.querySelector('.ly-custom-dropdown-list li[key="'+ valueToSelect +'"]').classList.add('current');  
2644      }
2645      if(element.querySelector('.ly-custom-dropdown-list li.current span')) currentLabel.innerHTML = element.querySelector('.ly-custom-dropdown-list li.current span').innerHTML;
2646      if(element.querySelector('.ly-custom-dropdown-list li.current .ly-icon')) currentIcon.classList = element.querySelector('.ly-custom-dropdown-list li.current .ly-icon').classList;
2647    }
2648
2649    toggleOpen(e) {
2650      e.closest('.ly-recommendation').classList.toggle('ly-is-open');
2651      if(!e.closest('.ly-recommendation').classList.contains('ly-is-open')) {
2652        LyHelper.setCookie('ly-lang-selected', this.recommended_language_code, 365);
2653      }
2654    }
2655  }
2656
2657
2658  /**
2659  *
2660  *
2661  * @class Langify
2662  */
2663  class Langify {
2664    constructor(settings, locale) {
2665      LyHelper.log('Langify instantiation')
2666
2667      var translationObserver = new TranslationObserver().init();
2668
2669      langify.helper = new LyHelper();
2670      LyHelper.log(langify.helper);
2671
2672
2673      var lyForceOff = location.search.split('ly-force-off=')[1];
2674      if(lyForceOff === 'true') {
2675        document.getElementById('preview-bar-iframe').classList.add('ly-hide');
2676        return false;
2677      }
2678
2679      if(settings.theme && ((settings.theme.loadJquery && settings.theme.loadJquery === true) || typeof settings.theme.loadJquery === 'undefined')) {
2680        if(typeof jQuery === 'undefined') {
2681          LyHelper.loadScript('//cdn.jsdelivr.net/jquery/1.9.1/jquery.min.js', function() {});
2682        } 
2683      }
2684
2685      //document.addEventListener("DOMContentLoaded", function() {
2686        langify.switcher = new Switcher();
2687        langify.switcher.init();
2688
2689        if(settings.switcher) {
2690          if(settings.switcher.recommendation && settings.switcher.recommendation_enabled) {
2691            langify.recommendation = new Recommendation();
2692            langify.recommendation.init();
2693          } else {
2694            if(settings.switcher.languageDetection) {
2695              langify.languageDetection = new LanguageDetection();
2696              langify.languageDetection.init();
2697            }        
2698          }
2699        }
2700      //});
2701    }
2702  }
2703
2704  // Polyfills
2705  (function(){var t;null==window.MutationObserver&&(t=function(){function t(t){this.callBack=t}return t.prototype.observe=function(t,n){return this.element=t,this.interval=setInterval((e=this,function(){var t;if((t=e.element.innerHTML)!==e.oldHtml)return e.oldHtml=t,e.callBack.apply(null)}),200);var e},t.prototype.disconnect=function(){return window.clearInterval(this.interval)},t}(),window.MutationObserver=t)}).call(this);
2706  !function(){"use strict";if("object"==typeof window)if("IntersectionObserver"in window&&"IntersectionObserverEntry"in window&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)"isIntersecting"in window.IntersectionObserverEntry.prototype||Object.defineProperty(window.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}});else{var t=function(t){for(var e=window.document,o=i(e);o;)o=i(e=o.ownerDocument);return e}(),e=[],o=null,n=null;s.prototype.THROTTLE_TIMEOUT=100,s.prototype.POLL_INTERVAL=null,s.prototype.USE_MUTATION_OBSERVER=!0,s._setupCrossOriginUpdater=function(){return o||(o=function(t,o){n=t&&o?l(t,o):{top:0,bottom:0,left:0,right:0,width:0,height:0},e.forEach(function(t){t._checkForIntersections()})}),o},s._resetCrossOriginUpdater=function(){o=null,n=null},s.prototype.observe=function(t){if(!this._observationTargets.some(function(e){return e.element==t})){if(!t||1!=t.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:t,entry:null}),this._monitorIntersections(t.ownerDocument),this._checkForIntersections()}},s.prototype.unobserve=function(t){this._observationTargets=this._observationTargets.filter(function(e){return e.element!=t}),this._unmonitorIntersections(t.ownerDocument),0==this._observationTargets.length&&this._unregisterInstance()},s.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorAllIntersections(),this._unregisterInstance()},s.prototype.takeRecords=function(){var t=this._queuedEntries.slice();return this._queuedEntries=[],t},s.prototype._initThresholds=function(t){var e=t||[0];return Array.isArray(e)||(e=[e]),e.sort().filter(function(t,e,o){if("number"!=typeof t||isNaN(t)||t<0||t>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return t!==o[e-1]})},s.prototype._parseRootMargin=function(t){var e=(t||"0px").split(/\s+/).map(function(t){var e=/^(-?\d*\.?\d+)(px|%)$/.exec(t);if(!e)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(e[1]),unit:e[2]}});return e[1]=e[1]||e[0],e[2]=e[2]||e[0],e[3]=e[3]||e[1],e},s.prototype._monitorIntersections=function(e){var o=e.defaultView;if(o&&-1==this._monitoringDocuments.indexOf(e)){var n=this._checkForIntersections,r=null,s=null;this.POLL_INTERVAL?r=o.setInterval(n,this.POLL_INTERVAL):(h(o,"resize",n,!0),h(e,"scroll",n,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in o&&(s=new o.MutationObserver(n)).observe(e,{attributes:!0,childList:!0,characterData:!0,subtree:!0})),this._monitoringDocuments.push(e),this._monitoringUnsubscribes.push(function(){var t=e.defaultView;t&&(r&&t.clearInterval(r),c(t,"resize",n,!0)),c(e,"scroll",n,!0),s&&s.disconnect()});var u=this.root&&(this.root.ownerDocument||this.root)||t;if(e!=u){var a=i(e);a&&this._monitorIntersections(a.ownerDocument)}}},s.prototype._unmonitorIntersections=function(e){var o=this._monitoringDocuments.indexOf(e);if(-1!=o){var n=this.root&&(this.root.ownerDocument||this.root)||t;if(!this._observationTargets.some(function(t){var o=t.element.ownerDocument;if(o==e)return!0;for(;o&&o!=n;){var r=i(o);if((o=r&&r.ownerDocument)==e)return!0}return!1})){var r=this._monitoringUnsubscribes[o];if(this._monitoringDocuments.splice(o,1),this._monitoringUnsubscribes.splice(o,1),r(),e!=n){var s=i(e);s&&this._unmonitorIntersections(s.ownerDocument)}}}},s.prototype._unmonitorAllIntersections=function(){var t=this._monitoringUnsubscribes.slice(0);this._monitoringDocuments.length=0,this._monitoringUnsubscribes.length=0;for(var e=0;e<t.length;e++)t[e]()},s.prototype._checkForIntersections=function(){if(this.root||!o||n){var t=this._rootIsInDom(),e=t?this._getRootRect():{top:0,bottom:0,left:0,right:0,width:0,height:0};
2706this._observationTargets.forEach(function(n){var i=n.element,s=u(i),h=this._rootContainsTarget(i),c=n.entry,a=t&&h&&this._computeTargetAndRootIntersection(i,s,e),l=null;this._rootContainsTarget(i)?o&&!this.root||(l=e):l={top:0,bottom:0,left:0,right:0,width:0,height:0};var f=n.entry=new r({time:window.performance&&performance.now&&performance.now(),target:i,boundingClientRect:s,rootBounds:l,intersectionRect:a});c?t&&h?this._hasCrossedThreshold(c,f)&&this._queuedEntries.push(f):c&&c.isIntersecting&&this._queuedEntries.push(f):this._queuedEntries.push(f)},this),this._queuedEntries.length&&this._callback(this.takeRecords(),this)}},s.prototype._computeTargetAndRootIntersection=function(e,i,r){if("none"!=window.getComputedStyle(e).display){for(var s,h,c,a,f,d,g,m,v=i,_=p(e),b=!1;!b&&_;){var w=null,y=1==_.nodeType?window.getComputedStyle(_):{};if("none"==y.display)return null;if(_==this.root||9==_.nodeType)if(b=!0,_==this.root||_==t)o&&!this.root?!n||0==n.width&&0==n.height?(_=null,w=null,v=null):w=n:w=r;else{var I=p(_),E=I&&u(I),T=I&&this._computeTargetAndRootIntersection(I,E,r);E&&T?(_=I,w=l(E,T)):(_=null,v=null)}else{var R=_.ownerDocument;_!=R.body&&_!=R.documentElement&&"visible"!=y.overflow&&(w=u(_))}if(w&&(s=w,h=v,c=void 0,a=void 0,f=void 0,d=void 0,g=void 0,m=void 0,c=Math.max(s.top,h.top),a=Math.min(s.bottom,h.bottom),f=Math.max(s.left,h.left),d=Math.min(s.right,h.right),m=a-c,v=(g=d-f)>=0&&m>=0&&{top:c,bottom:a,left:f,right:d,width:g,height:m}||null),!v)break;_=_&&p(_)}return v}},s.prototype._getRootRect=function(){var e;if(this.root&&!d(this.root))e=u(this.root);else{var o=d(this.root)?this.root:t,n=o.documentElement,i=o.body;e={top:0,left:0,right:n.clientWidth||i.clientWidth,width:n.clientWidth||i.clientWidth,bottom:n.clientHeight||i.clientHeight,height:n.clientHeight||i.clientHeight}}return this._expandRectByRootMargin(e)},s.prototype._expandRectByRootMargin=function(t){var e=this._rootMarginValues.map(function(e,o){return"px"==e.unit?e.value:e.value*(o%2?t.width:t.height)/100}),o={top:t.top-e[0],right:t.right+e[1],bottom:t.bottom+e[2],left:t.left-e[3]};return o.width=o.right-o.left,o.height=o.bottom-o.top,o},s.prototype._hasCrossedThreshold=function(t,e){var o=t&&t.isIntersecting?t.intersectionRatio||0:-1,n=e.isIntersecting?e.intersectionRatio||0:-1;if(o!==n)for(var i=0;i<this.thresholds.length;i++){var r=this.thresholds[i];if(r==o||r==n||r<o!=r<n)return!0}},s.prototype._rootIsInDom=function(){return!this.root||f(t,this.root)},s.prototype._rootContainsTarget=function(e){var o=this.root&&(this.root.ownerDocument||this.root)||t;return f(o,e)&&(!this.root||o==e.ownerDocument)},s.prototype._registerInstance=function(){e.indexOf(this)<0&&e.push(this)},s.prototype._unregisterInstance=function(){var t=e.indexOf(this);-1!=t&&e.splice(t,1)},window.IntersectionObserver=s,window.IntersectionObserverEntry=r}function i(t){try{return t.defaultView&&t.defaultView.frameElement||null}catch(t){return null}}function r(t){this.time=t.time,this.target=t.target,this.rootBounds=a(t.rootBounds),this.boundingClientRect=a(t.boundingClientRect),this.intersectionRect=a(t.intersectionRect||{top:0,bottom:0,left:0,right:0,width:0,height:0}),this.isIntersecting=!!t.intersectionRect;var e=this.boundingClientRect,o=e.width*e.height,n=this.intersectionRect,i=n.width*n.height;this.intersectionRatio=o?Number((i/o).toFixed(4)):this.isIntersecting?1:0}function s(t,e){var o,n,i,r=e||{};if("function"!=typeof t)throw new Error("callback must be a function");if(r.root&&1!=r.root.nodeType&&9!=r.root.nodeType)throw new Error("root must be a Document or Element");this._checkForIntersections=(o=this._checkForIntersections.bind(this),n=this.THROTTLE_TIMEOUT,i=null,function(){i||(i=setTimeout(function(){o(),i=null},n))}),this._callback=t,this._observationTargets=[],this._queuedEntries=[],this._rootMarginValues=this._parseRootMargin(r.rootMargin),this.thresholds=this._initThresholds(r.threshold),this.root=r.root||null,this.rootMargin=this._rootMarginValues.map(function(t){return t.value+t.unit}).join(" "),this._monitoringDocuments=[],this._monitoringUnsubscribes=[]}function h(t,e,o,n){"function"==typeof t.addEventListener?t.addEventListener(e,o,n||!1):"function"==typeof t.attachEvent&&t.attachEvent("on"+e,o)}function c(t,e,o,n){"function"==typeof t.removeEventListener?t.removeEventListener(e,o,n||!1):"function"==typeof t.detatchEvent&&t.detatchEvent("on"+e,o)}function u(t){var e;try{e=t.getBoundingClientRect()}catch(t){}return e?(e.width&&e.height||(e={top:e.top,right:e.right,bottom:e.bottom,left:e.left,width:e.right-e.left,height:e.bottom-e.top}),e):{top:0,bottom:0,left:0,right:0,width:0,height:0}}function a(t){return!t||"x"in t?t:{top:t.top,y:t.top,bottom:t.bottom,left:t.left,x:t.left,right:t.right,width:t.width,height:t.height}}function l(t,e){var o=e.top-t.top,n=e.left-t.left;return{top:o,left:n,height:e.height,width:e.width,bottom:o+e.height,right:n+e.width}}function f(t,e){for(var o=e;o;){if(o==t)return!0;o=p(o)}return!1}function p(e){var o=e.parentNode;return 9==e.nodeType&&e!=t?i(e):(o&&o.assignedSlot&&(o=o.assignedSlot.parentNode),o&&11==o.nodeType&&o.host?o.host:o)}function d(t){return t&&9===t.nodeType}}();
2707  !function(){if("function"==typeof window.CustomEvent)return!1;window.CustomEvent=function(n,t){t=t||{bubbles:!1,cancelable:!1,detail:null};var e=document.createEvent("CustomEvent");return e.initCustomEvent(n,t.bubbles,t.cancelable,t.detail),e}}();
2708
2709  var langify = window.langify || {};
2710  var customContents = {};
2711  var customContents_image = {};
2712  var langifySettingsOverwrites = {};
2713  var defaultSettings = {
2714    debug: false,               // BOOL : Enable/disable console logs
2715    observe: true,              // BOOL : Enable/disable the entire mutation observer (off switch)
2716    observeLinks: false,
2717    observeImages: true,
2718    observeCustomContents: true,
2719    maxMutations: 5,
2720    timeout: 100,               // INT : Milliseconds to wait after a mutation, before the next mutation event will be allowed for the element
2721    linksBlacklist: [],
2722  };
2723
2724  if(langify.settings) { 
2725    langifySettingsOverwrites = Object.assign({}, langify.settings);
2726    langify.settings = Object.assign(defaultSettings, langify.settings); 
2727  } else { 
2728    langify.settings = defaultSettings; 
2729  }
2730
2731  langify.settings.theme = null;
2732  langify.settings.switcher = null;
2733
2734  langify.locale = langify.locale || {
2735    primary: true,
2736    iso_code: "en",
2737    root_url: "\/",
2738    language_id: "ly120330",
2739    shop_url: "https:\/\/thealinker.ca",
2740    domain_feature_enabled: null,
2741    languages: [{
2742        iso_code: "en",
2743        root_url: "\/",
2744        domain: null,
2745      },{
2746        iso_code: "fr",
2747        root_url: "\/fr",
2748        domain: null,
2749      },],};
2750
2751  // Disable link correction ALWAYS on languages with mapped domains
2752  
2753  if(langify.locale.root_url == '/') {
2754    langify.settings.observeLinks = false;
2755  }
2756
2757  window.addEventListener('DOMContentLoaded', function() {
2758    langify.helper = new LyHelper();
2759
2760    // Custom Contents Section
2761
2762    // Images Section
2763    
2764
2765
2766    var langifyInstance = new Langify(langify.settings, langify.locale);
2767  });
2768</script>
2768
2769<div data-breakpoint="" class="ly-switcher-wrapper ly-breakpoint-1 fixed bottom_right ly-hide" style="font-size: 14px; margin: 0px 0px; "><div aria-label="Selected language: English" aria-description="Language selector" data-dropup="false" onclick="langify.switcher.toggleSwitcherOpen(this)" class="ly-languages-switcher ly-custom-dropdown-switcher ly-bright-theme" style=" margin: 0px 0px;">
2770          <span role="button" aria-expanded="false" aria-controls="languagesSwitcherList-1" class="ly-custom-dropdown-current" style="background: #ffffff; color: #000000;  "><i class="ly-icon ly-flag-icon ly-flag-icon-en"></i><span class="ly-custom-dropdown-current-inner ly-custom-dropdown-current-inner-text">English</span>
2771<div class="ly-arrow ly-arrow-black stroke" style="vertical-align: middle; width: 14.0px; height: 14.0px;">
2772        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14.0 14.0" height="14.0px" width="14.0px" style="position: absolute;">
2773          <path d="M1 4.5 L7.0 10.5 L13.0 4.5" fill="transparent" stroke="#000000" stroke-width="1px"/>
2774        </svg>
2775      </div>
2776          </span>
2777          <ul id="languagesSwitcherList-1" role="list" class="ly-custom-dropdown-list ly-is-open ly-bright-theme" style="background: #ffffff; color: #000000; "><li key="fr"  style="color: #000000;  margin: 0px 0px;" tabindex="-1">
2778                  <a class="ly-custom-dropdown-list-element ly-languages-switcher-link ly-bright-theme" href="#" data-language-code="fr" data-ly-locked="true"><i class="ly-icon ly-flag-icon ly-flag-icon-fr"></i><span class="ly-custom-dropdown-list-element-right">French</span></a>
2779                </li><li key="en" class="current" style="color: #000000;  margin: 0px 0px;" tabindex="-1">
2780                  <a class="ly-custom-dropdown-list-element ly-languages-switcher-link ly-bright-theme current_lang" href="#" data-language-code="en" data-ly-locked="true"><i class="ly-icon ly-flag-icon ly-flag-icon-en"></i><span class="ly-custom-dropdown-list-element-right">English</span></a>
2781                </li></ul>
2782        </div></div>
2783<style>
2784    .ly-flag-icon-en { background-image: url('//thealinker.ca/cdn/shop/t/21/assets/ly-icon-e
2784n.svg?v=168749326791323067301698087541'); }
2785    .ly-flag-icon-fr { background-image: url('//thealinker.ca/cdn/shop/t/21/assets/ly-icon-fr.svg?v=49424167760593335881698087541'); }
2786
2787  .ly-switcher-wrapper {
2788    
2789  }
2790  .ly-switcher-wrapper.fixed {
2791    position: fixed;
2792    z-index: 1000;
2793  }
2794  .ly-switcher-wrapper.absolute {
2795    position: absolute;
2796    z-index: 1000;
2797  }
2798  .ly-switcher-wrapper.fixed.top_left,
2799  .ly-switcher-wrapper.absolute.top_left {
2800    top: 0;
2801    left: 0;
2802  }
2803  .ly-switcher-wrapper.fixed.top_right,
2804  .ly-switcher-wrapper.absolute.top_right {
2805    top: 0;
2806    right: 0;
2807  }
2808  .ly-switcher-wrapper.fixed.bottom_left,
2809  .ly-switcher-wrapper.absolute.bottom_left {
2810    bottom: 0;
2811    left: 0;
2812  }
2813  .ly-switcher-wrapper.fixed.bottom_right,
2814  .ly-switcher-wrapper.absolute.bottom_right {
2815    bottom: 0;
2816    right: 0;
2817  }
2818  .ly-switcher-wrapper .shopify-currency-form {
2819    display: inline-block;
2820  }
2821
2822
2823  .ly-currency-switcher {
2824    font-size: 1em;
2825  }
2826
2827  .ly-inner-text {
2828    margin: 0 0.2em;
2829    white-space: nowrap;
2830  }
2831
2832  .ly-flag-icon {
2833    background-size: contain;
2834    background-position: 50%;
2835    background-repeat: no-repeat;
2836    position: relative;
2837    display: inline-block;
2838    width: 1.33333333em;
2839    line-height: 1em;
2840  }
2841  .ly-flag-icon:before {
2842    content: '';
2843    display: inline-block;
2844  }
2845  .ly-flag-icon.ly-flag-squared {
2846    width: 1em;
2847  }
2848  .ly-flag-icon.ly-flag-rounded {
2849    width: 1em;
2850    border-radius: 50%;
2851  }
2852  .ly-languages-switcher {
2853    white-space: nowrap;
2854    list-style-type: none;
2855    display: flex;
2856    font-size: 1em;
2857  }
2858  .ly-languages-switcher-link {
2859    margin: 0 0.2em;
2860    cursor: pointer;
2861    white-space: nowrap;
2862    text-decoration: none;
2863    display: inline-block;
2864  }
2865  .ly-languages-switcher.ly-list {
2866    margin: 0;
2867    padding: 0;
2868    display: block;
2869  }
2870  .ly-languages-switcher.ly-native-select {
2871    
2872  }
2873  .ly-icon {
2874    margin: 0 0.2em;
2875  }
2876
2877  .ly-arrow {
2878    display: inline-block;
2879    position: relative;
2880    vertical-align: middle;
2881    direction: ltr !important;
2882    -webkit-transition: transform 0.25s;
2883    -moz-transition: transform 0.25s;
2884    transition: transform 0.25s;
2885    margin: 0 0.2em;
2886  }
2887  .ly-custom-dropdown-switcher.ly-is-open .ly-arrow {
2888    transform: rotate(180deg);
2889  }
2890  .ly-custom-dropdown-switcher.ly-arrow.ly-arrow-up {
2891    transform: rotate(180deg);
2892  }
2893  .ly-custom-dropdown-switcher.ly-is-open .ly-arrow.ly-arrow-up {
2894    transform: rotate(0deg);
2895  }
2896
2897  .ly-custom-dropdown-switcher {
2898    text-align: left;
2899    display: inline-block;
2900    position: relative;
2901    user-select: none;
2902    cursor: pointer;
2903  }
2904  .ly-custom-dropdown-current {
2905    display: block;
2906    vertical-align: middle;
2907  }
2908  .ly-custom-dropdown-current-inner {
2909    display: inline-block;
2910    vertical-align: middle;
2911  }
2912  .ly-custom-dropdown-current-inner-image {
2913    margin-right: 0.25em;
2914  }
2915  .ly-custom-dropdown-current-inner-text {
2916    margin: 0 0.2em;
2917  }
2918  .ly-custom-dropdown-list {
2919    display: none !important;
2920    list-style: none;
2921    position: absolute;
2922    left: 0;
2923    padding: inherit !important;
2924    padding: 0 !important;
2925    margin: 0;
2926    z-index: 99999;
2927    text-align: left;
2928    width: 100%;
2929    font-size: 1em;
2930  }
2931  .ly-custom-dropdown-list-element {
2932    color: inherit !important;
2933    display: block;
2934  }
2935  .ly-custom-dropdown-list > li {
2936    margin: 0 !important;
2937    display: block;
2938  }
2939  .ly-custom-dropdown-list-element-left {
2940    margin-right: 0.5em;
2941  }
2942  .ly-custom-dropdown-list-element-right {
2943    text-align: left;
2944  }
2945  .ly-custom-dropdown-list-element-left,
2946  .ly-custom-dropdown-list-element-right {
2947    vertical-align: middle;
2948  }
2949  .ly-custom-dropdown-switcher .ly-languages-switcher-link {
2950    margin: 0;
2951  }
2952  .ly-languages-switcher-dropdown {
2953    display: inline-block;
2954  }
2955  .ly-languages-links-switcher {
2956    display: inline-block;
2957  }
2958  .ly-languages-links-switcher > .ly-languages-link {
2959    /*margin-right: 0.5em;*/
2960    padding: inherit !important;
2961    color: inherit !important;
2962  }
2963  .ly-custom-dropdown-list-element {
2964    /*padding: inherit !important;*/
2965    text-decoration: none;
2966  }
2967  .ly-is-uppercase {
2968    text-transform: uppercase;
2969  }
2970  .ly-is-transparent.ly-links,
2971  .ly-is-transparent.ly-list,
2972  .ly-is-transparent.ly-currency-switcher,
2973  .ly-is-transparent.ly-custom-dropdown-switcher,
2974  .ly-is-transparent.ly-custom-dropdown-switcher .ly-custom-dropdown-list {
2975    background: transparent !important;
2976  }
2977  .ly-arrow-up {
2978    transform: rotateZ(180deg);
2979  }
2980
2981  .ly-custom-dropdown-switcher .ly-custom-dropdown-list li.current{
2982    display: none;
2983  }
2984  .ly-custom-dropdown-switcher.ly-is-open .ly-custom-dropdown-list {
2985    display: flex !important;
2986    min-width: 100%;
2987    width: 100%;
2988    flex-direction: column-reverse;
2989    right: 0;
2990    left: auto;
2991    overflow: auto;
2992    max-height: 350px;
2993    max-height: 50vh;
2994  }
2995
2996  .ly-is-dropup .ly-custom-dropdown-list {
2997    bottom: 100%;
2998  }
2999  .ly-hide {
3000    display: none !important;
3001  }
3002  body.ly-force-off #preview-bar-iframe,
3003  body.ly-force-off .ly-languages-switcher {
3004    display: none !important;
3005  }
3006
3007  .ly-close {
3008    position: absolute;
3009    opacity: 0.3;
3010    right: 0;
3011    top: 0;
3012    width: 3em;
3013    height: 3em;
3014    display: inline-block !important;
3015    background: rbga(0,0,0,0);
3016    padding: 1em;
3017  }
3018  .ly-close:hover {
3019    opacity: 1;
3020  }
3021  .ly-close .inner {
3022    transform: translateX(-50%);
3023    position: relative;
3024    width: 100%;
3025    height: 100%;
3026    display: inline-block;
3027  }
3028  .ly-close .inner:before, .ly-close .inner:after {
3029    position: absolute;
3030    left: 1em;
3031    content: ' ';
3032    height: 1em;
3033    width: 2px;
3034    background-color: #333;
3035  }
3036  .ly-close .inner:before {
3037    transform: rotate(45deg);
3038  }
3039  .ly-close .inner:after {
3040    transform: rotate(-45deg);
3041  }
3042
3043
3044
3045  .ly-popup-switcher {}
3046  .ly-popup-switcher .ly-popup-current {
3047    cursor: pointer;
3048    background: transparent;
3049  }
3050  .ly-popup-switcher .ly-popup-modal {
3051    position: fixed;
3052    z-index: 1000;
3053    top: 0;
3054    left: 0;
3055    width: 100%;
3056    height: 100%;
3057    display: none;
3058    justify-content: center; 
3059    align-items: center;
3060  }
3061  .ly-popup-switcher.ly-is-open .ly-popup-modal {
3062    display: flex;
3063  }
3064  .ly-popup-switcher .ly-popup-modal-backdrop {
3065    position: fixed;
3066    width: 100%;
3067    height: 100%;
3068    z-index: 0;
3069    top: 0;
3070    left: 0;
3071    background:rgba(0, 0, 0, 0.38);
3072    cursor: pointer;
3073  }
3074  .ly-popup-switcher .ly-popup-modal .ly-popup-modal-content {
3075    padding: 1em;
3076    position: absolute;
3077    z-index: 1000;
3078  }
3079  .ly-popup-switcher .ly-popup-modal .ly-popup-modal-content ul {
3080    padding: 0;
3081    margin: 12px 0 0 0;
3082    list-style: none;
3083    display: flex;
3084    flex-direction: column;
3085  }
3086  .ly-popup-switcher .ly-popup-modal .ly-popup-modal-content ul .ly-languages-switcher-link {
3087    margin: 0;
3088    border: solid 1px;
3089    padding: 1em;
3090    display: block;
3091    min-width: 225px;
3092    margin-top: 1em;
3093  }
3094  .ly-popup-switcher .ly-popup-modal .ly-popup-modal-content ul .ly-languages-switcher-link.current_lang {
3095    display: none;
3096  }
3097
3098
3099
3100  /* Recommendation */
3101  .ly-recommendation {
3102    display: none;
3103  }
3104  .ly-recommendation.ly-is-open {
3105    display: inline-block;
3106  }
3107  .ly-recommendation form {
3108    display: inline-block;
3109  }
3110  .ly-recommendation .ly-arrow,
3111  .ly-arrow.recommendation {
3112    display: none;
3113  }
3114  .ly-recommendation .ly-arrow.recommendation {
3115    display: inline-block;
3116  }
3117  .ly-recommendation .ly-switcher-wrapper {
3118    font-size: 1em !important;
3119  }
3120  .ly-recommendation .ly-popup-modal .ly-popup-switcher .ly-popup-modal .ly-popup-modal-backdrop {
3121    display: none;
3122  }
3123  .ly-recommendation-form button[type="submit"] {
3124    cursor: pointer;
3125  }
3126
3127  /* Recommendation Banner */
3128  .ly-recommendation .ly-banner {
3129    position: fixed;
3130    z-index: 100000;
3131    width: 100%;
3132  }
3133  .ly-recommendation .ly-banner .ly-banner-content {
3134    width: 100%;
3135    padding: 1em 30px 1em 1em;
3136    box-shadow: 0 0 20px rgba(0,0,0,.25);
3137  }
3138  .ly-recommendation .ly-banner.top {
3139    top: 0;
3140  }
3141  .ly-recommendation .ly-banner.bottom {
3142    bottom: 0;
3143  }
3144  .ly-recommendation .ly-banner .ly-banner-content .ly-switcher-wrapper {
3145    position: relative !important;
3146    margin: 0 !important;
3147    display: inline-block !important;
3148  }
3149  .ly-recommendation .ly-banner .ly-recommendation-form button[type="submit"] {
3150    margin-left: 10px;
3151  }
3152
3153
3154  /* Recommendation Popup */
3155  .ly-recommendation .ly-popup-modal {
3156    position: fixed;
3157    z-index: 10000;
3158  }
3159  .ly-recommendation .ly-popup-modal .ly-switcher-wrapper {
3160    position: relative !important;
3161    margin: 0 !important;
3162    display: inline-block !important;
3163  }
3164  .ly-recommendation .ly-popup-modal-backdrop {
3165    position: fixed;
3166    width: 100%;
3167    height: 100%;
3168    z-index: 1000;
3169    top: 0;
3170    left: 0;
3171    background:rgba(0, 0, 0, 0.38);
3172  }
3173  .ly-recommendation .ly-popup-modal .ly-popup-modal-content {
3174    padding: 1em 30px 1em 1em;
3175  }
3176  .ly-recommendation .ly-popup-modal .ly-popup-modal-content .ly-languages-switcher {
3177    position: relative !important;
3178    margin: 0 !important;
3179  }
3180  .ly-recommendation .ly-popup-modal .ly-popup-modal-content h3 {
3181    margin: 0 2em 1em 0;
3182    font-size: inherit;
3183    position: relative;
3184  }
3185  .ly-recommendation .ly-popup-modal.top_left { top: 0; left: 0; margin-right: 0 !important; margin-bottom: 0 !important; padding-right: 0 !important; padding-bottom: 0 !important;}
3186  .ly-recommendation .ly-popup-modal.top_center { top: 0; left: 50%; transform: translateX(-50%); margin-right: 0 !important; margin-bottom: 0 !important; margin-left: 0 !important; padding-right: 0 !important; padding-bottom: 0 !important; padding-left: 0 !important;}
3187  .ly-recommendation .ly-popup-modal.top_right { top: 0; right: 0; margin-left: 0 !important; margin-bottom: 0 !important; padding-left: 0 !important; padding-bottom: 0 !important; }
3188  .ly-recommendation .ly-popup-modal.center_center { top: 50%; left: 50%; transform: translateX(-50%) translateY(-50%); margin: 0 !important; padding: 0 !important; }
3189  .ly-recommendation .ly-popup-modal.bottom_left { bottom: 0; left: 0; margin-right: 0 !important; margin-top: 0 !important; padding-right: 0 !important; padding-top: 0 !important; }
3190  .ly-recommendation .ly-popup-modal.bottom_center { bottom: 0; left: 50%; transform: translateX(-50%); margin-right: 0 !important; margin-left: 0 !important; margin-top: 0 !important; padding-right: 0 !important; padding-left: 0 !important; padding-top: 0 !important; }
3191  .ly-recommendation .ly-popup-modal.bottom_right { bottom: 0; right: 0; margin-left: 0 !important; margin-top: 0 !important; padding-left: 0 !important; padding-top: 0 !important; }
3192
3193
3194
3195
3196
3197  
3198</style><!-- langify-v2-scripts-end -->
3199<!--Gorgias Chat Widget Start-->
3200<script id="gorgias-chat-widget-install-v3" 
3201    src="https://config.gorgias.chat/bundle-loader/01GYCCDPHT8BRGTAXTWQN47ASW?source=shopify1click">
3202</script>
vendor: 1 bytes, line 3202
3202
3203<script id="gorgias-chat-shopify-install">!function(_){_.SHOPIFY_PERMANENT_DOMAIN="alinker-ca.myshopify.com",_.SHOPIFY_CUSTOMER_ID="",_.SHOPIFY_CUSTOMER_EMAIL=""}(window||{});
3204</script>
3204
3205<!--Gorgias Chat Widget End-->
3206<div id="shopify-block-AeHhSMHRscDBnTDlvW__15885745614559378752" class="shopify-block shopify-app-block"><div id="accessibly-config" style="display:none">
3207    {"themeColor":"#ffc000","iconColor":"#ffc000","showLogo":true,"topBottomPosition":30,"rightLeftPosition":10,"iconSize":"extra-small","iconCustomSize":64,"position":"bottom-right"}
3208</div>
3209
3210
3211</div>
3211<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
3211
3212</body>
3213</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.