1<!doctype html> 2<html class="js" lang="en"> 3 <head> 4 <meta charset="utf-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width,initial-scale=1"> 7 <meta name="theme-color" content=""> 8 <link rel="canonical" href="https://wenonah.com/pages/store-locator"> 9 10 11 12<link rel="icon" type="image/png" href="//wenonah.com/cdn/shop/files/favicon.jpg?crop=center&height=32&v=1781110796&width=32"><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin><title> 13 Wenonah Canoe Dealers â Find a Store Near You 14</title> 15 16 17 <meta name="description" content="Find an authorized Wenonah Canoe dealer near you. Use our store locator to discover local retailers carrying Wenonah canoes and accessories."> 18 19 20 21 22<meta property="og:site_name" content="Wenonah Canoe"> 23<meta property="og:url" content="https://wenonah.com/pages/store-locator"> 24<meta property="og:title" content="Wenonah Canoe Dealers â Find a Store Near You"> 25<meta property="og:type" content="website"> 26<meta property="og:description" content="Find an authorized Wenonah Canoe dealer near you. Use our store locator to discover local retailers carrying Wenonah canoes and accessories."><meta property="og:image" content="http://wenonah.com/cdn/shop/files/WenonahAdminLogo.png?height=628&pad_color=ffffff&v=1748551425&width=1200"> 27 <meta property="og:image:secure_url" content="https://wenonah.com/cdn/shop/files/WenonahAdminLogo.png?height=628&pad_color=ffffff&v=1748551425&width=1200"> 28 <meta property="og:image:width" content="1200"> 29 <meta property="og:image:height" content="628"><meta name="twitter:card" content="summary_large_image"> 30<meta name="twitter:title" content="Wenonah Canoe Dealers â Find a Store Near You"> 31<meta name="twitter:description" content="Find an authorized Wenonah Canoe dealer near you. Use our store locator to discover local retailers carrying Wenonah canoes and accessories."> 32 33 34
34<script src="//wenonah.com/cdn/shop/t/2/assets/constants.js?v=132983761750457495441749921819" defer="defer"></script>
34 35
35<script src="//wenonah.com/cdn/shop/t/2/assets/pubsub.js?v=25310214064522200911749921820" defer="defer"></script>
35 36
36<script src="//wenonah.com/cdn/shop/t/2/assets/global.js?v=50682399300256351251774710950" defer="defer"></script>
36 37
37<script src="//wenonah.com/cdn/shop/t/2/assets/details-disclosure.js?v=13653116266235556501749921819" defer="defer"></script>
37 38
38<script src="//wenonah.com/cdn/shop/t/2/assets/details-modal.js?v=25581673532751508451749921819" defer="defer"></script>
38 39
39<script src="//wenonah.com/cdn/shop/t/2/assets/search-form.js?v=133129549252120666541749921820" defer="defer"></script>
39 40 41 <!-- Add Bootstrap --> 42
42<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" defer="defer"></script>
42 43
43<script type="text/javascript" src="https://code.jquery.com/ui/1.10.3/jquery-ui.js" defer="defer"></script>
43 44
44<script type="text/javascript" defer="defer" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
44 45 46 <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" defer="defer" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous" /> 47 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.min.css" defer="defer" />
47<script src="//wenonah.com/cdn/shop/t/2/assets/animations.js?v=88693664871331136111749921818" defer="defer"></script>
47<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
47<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/76832899308/digital_wallets/dialog"> 48<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
48<script async="async" src="/checkouts/internal/preloads.js?locale=en-US"></script>
vendor: 1 bytes, line 48
48
49<script id="shopify-features" type="application/json">{"accessToken":"ab965ea6b3e4f3217506184fe68f1224","betas":["rich-media-storefront-analytics"],"domain":"wenonah.com","predictiveSearch":true,"shopId":76832899308,"locale":"en"}</script>
vendor: 1 bytes, line 49
49
50<script>var Shopify = Shopify || {}; 51Shopify.shop = "2rswcr-15.myshopify.com"; 52Shopify.locale = "en"; 53Shopify.currency = {"active":"USD","rate":"1.0"}; 54Shopify.country = "US"; 55Shopify.theme = {"name":"Dawn","id":152829755628,"schema_name":"Dawn","schema_version":"15.3.0","theme_store_id":887,"role":"main"}; 56Shopify.theme.handle = "null"; 57Shopify.theme.style = {"id":null,"handle":null}; 58Shopify.cdnHost = "wenonah.com/cdn"; 59Shopify.routes = Shopify.routes || {}; 60Shopify.routes.root = "/"; 61Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 62Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 63Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 64Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 64
64
65<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 65
65
66<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 66
66
67<script> 68 window.Shopify = window.Shopify || {}; 69 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 70 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 71 window.Shopify.SignInWithShop.eligible = true; 72</script>
vendor: 1 bytes, line 72
72
73<script id="shop-js-analytics" type="application/json">{"pageType":"page"}</script>
vendor: 1 bytes, line 73
73
74<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 74
74
75<script type="module"> 76 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 77 78 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 79 80</script>
vendor: 1 bytes, line 80
80
81<script> 82 window.Shopify = window.Shopify || {}; 83 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 84 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"]}; 85</script>
vendor: 1 bytes, line 85
85
86<script id="__st">var __st={"a":76832899308,"offset":-18000,"reqid":"63f1af95-3a32-484f-ade3-ca4b58dd6bf8-1790865070","pageurl":"wenonah.com\/pages\/store-locator","s":"pages-134222971116","u":"b6615ea2f219","p":"page","rtyp":"page","rid":134222971116};</script>
vendor: 1 bytes, line 86
86
87<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 87
87
88<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 88
88
89<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//wenonah.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 89
89
90<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 = "//wenonah.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
90<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 90
90
91<script> 92 window.Shopify = window.Shopify || {}; 93 window.Shopify.MCP = window.Shopify.MCP || {}; 94 window.Shopify.MCP.enabled = true; 95 window.Shopify.MCP.shop = "2rswcr-15.myshopify.com"; 96 window.Shopify.MCP.mcpEndpoint = "https:\/\/wenonah.com\/api\/mcp"; 97 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"]}}]; 98</script>
vendor: 1 bytes, line 98
98
99<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("\/\/wenonah.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 100</script>
vendor: 1 bytes, line 100
100
101<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://wenonah.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 102</script>
vendor: 1 bytes, line 102
102
103<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 104 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); 105</script>
vendor: 1 bytes, line 105
105
106<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})}})); 107</script>
107 108<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://wenonah.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 109<style id="shopify-accelerated-checkout-cart"> 110 #shopify-buyer-consent { 111 margin-top: 1em; 112 display: inline-block; 113 width: 100%; 114} 115 116#shopify-buyer-consent.hidden { 117 display: none; 118} 119 120#shopify-subscription-policy-button { 121 background: none; 122 border: none; 123 padding: 0; 124 text-decoration: underline; 125 font-size: inherit; 126 cursor: pointer; 127} 128 129#shopify-subscription-policy-button::before { 130 box-shadow: none; 131} 132 133 </style>
134<script id="sections-script" data-sections="header" defer="defer" src="//wenonah.com/cdn/shop/t/2/compiled_assets/scripts.js?v=90487813905515327061749921840"></script>
vendor: 1 bytes, line 134
134
135<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
135 136 137 138 <style data-shopify> 139 @font-face { 140 font-family: Assistant; 141 font-weight: 400; 142 font-style: normal; 143 font-display: swap; 144 src: url("//wenonah.com/cdn/fonts/assistant/assistant_n4.9120912a469cad1cc292572851508ca49d12e768.woff2") format("woff2"), 145 url("//wenonah.com/cdn/fonts/assistant/assistant_n4.6e9875ce64e0fefcd3f4446b7ec9036b3ddd2985.woff") format("woff"); 146} 147 148 @font-face { 149 font-family: Assistant; 150 font-weight: 700; 151 font-style: normal; 152 font-display: swap; 153 src: url("//wenonah.com/cdn/fonts/assistant/assistant_n7.bf44452348ec8b8efa3aa3068825305886b1c83c.woff2") format("woff2"), 154 url("//wenonah.com/cdn/fonts/assistant/assistant_n7.0c887fee83f6b3bda822f1150b912c72da0f7b64.woff") format("woff"); 155} 156 157 158 159 @font-face { 160 font-family: Assistant; 161 font-weight: 400; 162 font-style: normal; 163 font-display: swap; 164 src: url("//wenonah.com/cdn/fonts/assistant/assistant_n4.9120912a469cad1cc292572851508ca49d12e768.woff2") format("woff2"), 165 url("//wenonah.com/cdn/fonts/assistant/assistant_n4.6e9875ce64e0fefcd3f4446b7ec9036b3ddd2985.woff") format("woff"); 166} 167 168 169 170 :root, 171 .color-scheme-1 { 172 --color-background: 255,255,255; 173 174 --gradient-background: #ffffff; 175 176 177 178 179 --color-foreground: 18,18,18; 180 --color-background-contrast: 191,191,191; 181 --color-shadow: 18,18,18; 182 --color-button: 18,18,18; 183 --color-button-text: 255,255,255; 184 --color-secondary-button: 255,255,255; 185 --color-secondary-button-text: 18,18,18; 186 --color-link: 18,18,18; 187 --color-badge-foreground: 18,18,18; 188 --color-badge-background: 255,255,255; 189 --color-badge-border: 18,18,18; 190 --payment-terms-background-color: rgb(255 255 255); 191 } 192 193 194 .color-scheme-2 { 195 --color-background: 243,243,243; 196 197 --gradient-background: #f3f3f3; 198 199 200 201 202 --color-foreground: 18,18,18; 203 --color-background-contrast: 179,179,179; 204 --color-shadow: 18,18,18; 205 --color-button: 18,18,18; 206 --color-button-text: 243,243,243; 207 --color-secondary-button: 243,243,243; 208 --color-secondary-button-text: 18,18,18; 209 --color-link: 18,18,18; 210 --color-badge-foreground: 18,18,18; 211 --color-badge-background: 243,243,243; 212 --color-badge-border: 18,18,18; 213 --payment-terms-background-color: rgb(243 243 243); 214 } 215 216 217 .color-scheme-3 { 218 --color-background: 36,40,51; 219 220 --gradient-background: #242833; 221 222 223 224 225 --color-foreground: 255,255,255; 226 --color-background-contrast: 47,52,66; 227 --color-shadow: 18,18,18; 228 --color-button: 255,255,255; 229 --color-button-text: 0,0,0; 230 --color-secondary-button: 36,40,51; 231 --color-secondary-button-text: 255,255,255; 232 --color-link: 255,255,255; 233 --color-badge-foreground: 255,255,255; 234 --color-badge-background: 36,40,51; 235 --color-badge-border: 255,255,255; 236 --payment-terms-background-color: rgb(36 40 51); 237 } 238 239 240 .color-scheme-4 { 241 --color-background: 18,18,18; 242 243 --gradient-background: #121212; 244 245 246 247 248 --color-foreground: 255,255,255; 249 --color-background-contrast: 146,146,146; 250 --color-shadow: 18,18,18; 251 --color-button: 255,255,255; 252 --color-button-text: 18,18,18; 253 --color-secondary-button: 18,18,18; 254 --color-secondary-button-text: 255,255,255; 255 --color-link: 255,255,255; 256 --color-badge-foreground: 255,255,255; 257 --color-badge-background: 18,18,18; 258 --color-badge-border: 255,255,255; 259 --payment-terms-background-color: rgb(18 18 18); 260 } 261 262 263 .color-scheme-5 { 264 --color-background: 51,79,180; 265 266 --gradient-background: #334fb4; 267 268 269 270 271 --color-foreground: 255,255,255; 272 --color-background-contrast: 23,35,81; 273 --color-shadow: 18,18,18; 274 --color-button: 255,255,255; 275 --color-button-text: 51,79,180; 276 --color-secondary-button: 51,79,180; 277 --color-secondary-button-text: 255,255,255; 278 --color-link: 255,255,255; 279 --color-badge-foreground: 255,255,255; 280 --color-badge-background: 51,79,180; 281 --color-badge-border: 255,255,255; 282 --payment-terms-background-color: rgb(51 79 180); 283 } 284 285 286 body, .color-scheme-1, .color-scheme-2, .color-scheme-3, .color-scheme-4, .color-scheme-5 { 287 color: rgba(var(--color-foreground), 0.75); 288 background-color: rgb(var(--color-background)); 289 } 290 291 :root { 292 --font-body-family: Assistant, sans-serif; 293 --font-body-style: normal; 294 --font-body-weight: 400; 295 --font-body-weight-bold: 700; 296 297 --font-heading-family: Assistant, sans-serif; 298 --font-heading-style: normal; 299 --font-heading-weight: 400; 300 301 --font-body-scale: 1.0; 302 --font-heading-scale: 1.0; 303 304 --media-padding: px; 305 --media-border-opacity: 0.05; 306 --media-border-width: 1px; 307 --media-radius: 0px;
308 --media-shadow-opacity: 0.0; 309 --media-shadow-horizontal-offset: 0px; 310 --media-shadow-vertical-offset: 4px; 311 --media-shadow-blur-radius: 5px; 312 --media-shadow-visible: 0; 313 314 --page-width: 120rem; 315 --page-width-margin: 0rem; 316 317 --product-card-image-padding: 0.0rem; 318 --product-card-corner-radius: 0.0rem; 319 --product-card-text-alignment: center; 320 --product-card-border-width: 0.0rem; 321 --product-card-border-opacity: 0.1; 322 --product-card-shadow-opacity: 0.0; 323 --product-card-shadow-visible: 0; 324 --product-card-shadow-horizontal-offset: 0.0rem; 325 --product-card-shadow-vertical-offset: 0.4rem; 326 --product-card-shadow-blur-radius: 0.5rem; 327 328 --collection-card-image-padding: 0.0rem; 329 --collection-card-corner-radius: 0.0rem; 330 --collection-card-text-alignment: left; 331 --collection-card-border-width: 0.0rem; 332 --collection-card-border-opacity: 0.1; 333 --collection-card-shadow-opacity: 0.0; 334 --collection-card-shadow-visible: 0; 335 --collection-card-shadow-horizontal-offset: 0.0rem; 336 --collection-card-shadow-vertical-offset: 0.4rem; 337 --collection-card-shadow-blur-radius: 0.5rem; 338 339 --blog-card-image-padding: 0.0rem; 340 --blog-card-corner-radius: 0.0rem; 341 --blog-card-text-alignment: left; 342 --blog-card-border-width: 0.0rem; 343 --blog-card-border-opacity: 0.1; 344 --blog-card-shadow-opacity: 0.0; 345 --blog-card-shadow-visible: 0; 346 --blog-card-shadow-horizontal-offset: 0.0rem; 347 --blog-card-shadow-vertical-offset: 0.4rem; 348 --blog-card-shadow-blur-radius: 0.5rem; 349 350 --badge-corner-radius: 4.0rem; 351 352 --popup-border-width: 1px; 353 --popup-border-opacity: 0.1; 354 --popup-corner-radius: 0px; 355 --popup-shadow-opacity: 0.05; 356 --popup-shadow-horizontal-offset: 0px; 357 --popup-shadow-vertical-offset: 4px; 358 --popup-shadow-blur-radius: 5px; 359 360 --drawer-border-width: 1px; 361 --drawer-border-opacity: 0.1; 362 --drawer-shadow-opacity: 0.0; 363 --drawer-shadow-horizontal-offset: 0px; 364 --drawer-shadow-vertical-offset: 4px; 365 --drawer-shadow-blur-radius: 5px; 366 367 --spacing-sections-desktop: 0px; 368 --spacing-sections-mobile: 0px; 369 370 --grid-desktop-vertical-spacing: 8px; 371 --grid-desktop-horizontal-spacing: 8px; 372 --grid-mobile-vertical-spacing: 4px; 373 --grid-mobile-horizontal-spacing: 4px; 374 375 --text-boxes-border-opacity: 0.1; 376 --text-boxes-border-width: 0px; 377 --text-boxes-radius: 0px; 378 --text-boxes-shadow-opacity: 0.0; 379 --text-boxes-shadow-visible: 0; 380 --text-boxes-shadow-horizontal-offset: 0px; 381 --text-boxes-shadow-vertical-offset: 4px; 382 --text-boxes-shadow-blur-radius: 5px; 383 384 --buttons-radius: 0px; 385 --buttons-radius-outset: 0px; 386 --buttons-border-width: 1px; 387 --buttons-border-opacity: 1.0; 388 --buttons-shadow-opacity: 0.0; 389 --buttons-shadow-visible: 0; 390 --buttons-shadow-horizontal-offset: 0px; 391 --buttons-shadow-vertical-offset: 4px; 392 --buttons-shadow-blur-radius: 5px; 393 --buttons-border-offset: 0px; 394 395 --inputs-radius: 0px; 396 --inputs-border-width: 1px; 397 --inputs-border-opacity: 0.55; 398 --inputs-shadow-opacity: 0.0; 399 --inputs-shadow-horizontal-offset: 0px; 400 --inputs-margin-offset: 0px; 401 --inputs-shadow-vertical-offset: 4px; 402 --inputs-shadow-blur-radius: 5px; 403 --inputs-radius-outset: 0px; 404 405 --variant-pills-radius: 40px; 406 --variant-pills-border-width: 1px; 407 --variant-pills-border-opacity: 0.55; 408 --variant-pills-shadow-opacity: 0.0; 409 --variant-pills-shadow-horizontal-offset: 0px; 410 --variant-pills-shadow-vertical-offset: 4px; 411 --variant-pills-shadow-blur-radius: 5px; 412 } 413 414 *, 415 *::before, 416 *::after { 417 box-sizing: inherit; 418 } 419 420 html { 421 box-sizing: border-box; 422 font-size: calc(var(--font-body-scale) * 62.5%); 423 height: 100%; 424 } 425 426 body { 427 display: grid; 428 grid-template-rows: auto auto 1fr auto; 429 grid-template-columns: 100%; 430 min-height: 100%; 431 margin: 0; 432 font-size: 1.5rem; 433 letter-spacing: 0.06rem; 434 line-height: calc(1 + 0.8 / var(--font-body-scale)); 435 font-family: var(--font-body-family); 436 font-style: var(--font-body-style); 437 font-weight: var(--font-body-weight); 438 } 439 440 @media screen and (min-width: 750px) { 441 body { 442 font-size: 1.6rem; 443 } 444 } 445 </style> 446 447 <link href="//wenonah.com/cdn/shop/t/2/assets/base.css?v=130319479982651025231785879298" rel="stylesheet" type="text/css" media="all" /> 448 <link rel="stylesheet" href="//wenonah.com/cdn/shop/t/2/assets/component-cart-items.css?v=123238115697927560811749921818" media="print" onload="this.media='all'"> 449 <link rel="preload" as="font" href="//wenonah.com/cdn/fonts/assistant/assistant_n4.9120912a469cad1cc292572851508ca49d12e768.woff2" type="font/woff2" crossorigin> 450 451 452 <link rel="preload" as="font" href="//wenonah.com/cdn/fonts/assistant/assistant_n4.9120912a469cad1cc292572851508ca49d12e768.woff2" type="font/woff2" crossorigin> 453 454<link 455 rel="stylesheet" 456 href="//wenonah.com/cdn/shop/t/2/assets/component-predictive-search.css?v=118923337488134913561749921819" 457 media="print" 458 onload="this.media='all'" 459 >
459<script> 460 if (Shopify.designMode) { 461 document.documentElement.classList.add('shopify-design-mode'); 462 } 463 </script>
463 464 <!-- BEGIN app block: shopify://apps/nabu-redirect-manager/blocks/script-block/1ec76215-4f32-4e94-950a-ce6073ea1b48 --> 465
466<script> 467 (function() { 468 const storageKeyMap = { 469 redirectChain: 'ADNABU_REDIRECT_CHAIN', 470 redirectLog: 'ADNABU_REDIRECT_LOG', 471 debugMode: 'ADNABU_REDIRECT_DEBUG_MODE', 472 sessionId: 'ADNABU_REDIRECT_MANAGER_SESSION_ID', 473 } 474 475 // Storage access can throw (Safari with site data blocked, sandboxed frames); 476 // an unguarded throw here would abort the whole script tag, geo runtime included. 477 // The area is passed by name because even reading window.localStorage throws in 478 // sandboxed frames â it must be dereferenced inside the try. 479 function safeStorageGet(area, key) { 480 try { 481 return window[area].getItem(key); 482 } catch (error) { 483 return null; 484 } 485 } 486 487 function safeStorageSet(area, key, value) { 488 try { 489 window[area].setItem(key, value); 490 return true; 491 } catch (error) { 492 return false; 493 } 494 } 495 496 function safeStorageRemove(area, key) { 497 try { 498 window[area].removeItem(key); 499 } catch (error) { 500 // Storage is blocked; there is nothing to remove 501 } 502 } 503 504 const redirectConfig = { 505 mappings: null, 506 apiEndpoint: "https://nabu-seo.adnabu.com/flux", 507 shopId: "2rswcr-15.myshopify.com", 508 debugMode: safeStorageGet('localStorage', storageKeyMap.debugMode) || false, 509 }; 510 511 // Utility functions 512 function log(message, data = null) { 513 if (redirectConfig.debugMode) { 514 console.log('[Nabu Redirect Manager]', message, data); 515 } 516 } 517 518 function generateUUID() { 519 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 520 var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); 521 return v.toString(16); 522 }); 523 } 524 525 // Session ID management functions 526 function getSessionId() { 527 let sessionId = safeStorageGet('sessionStorage', storageKeyMap.sessionId); 528 if (!sessionId) { 529 sessionId = generateUUID(); 530 safeStorageSet('sessionStorage', storageKeyMap.sessionId, sessionId); 531 log('New session ID generated', sessionId); 532 } 533 return sessionId; 534 } 535 536 function clearSessionId() { 537 safeStorageRemove('sessionStorage', storageKeyMap.sessionId); 538 log('Session ID cleared'); 539 } 540 541 function sendLogs(endpoint, logData) { 542 if (!endpoint || !logData) return; 543 544 // Use sendBeacon for better reliability, especially during page unload/redirect 545 if (navigator.sendBeacon) { 546 const blob = new Blob([JSON.stringify(logData)], { type: 'application/json' }); 547 const success = navigator.sendBeacon(endpoint, blob); 548 if (success) { 549 log('Log sent successfully via sendBeacon'); 550 safeStorageRemove('localStorage', storageKeyMap.redirectLog); 551 } else { 552 log('Failed to send log via sendBeacon'); 553 } 554 } else { 555 // Fallback to XMLHttpRequest for older browsers 556 var xhr = new XMLHttpRequest(); 557 xhr.open("POST", endpoint, true); 558 xhr.setRequestHeader("Content-Type", "application/json"); 559 xhr.onreadystatechange = function() { 560 if (xhr.readyState === 4) { 561 if (xhr.status === 200) { 562 log('Log sent successfully via XHR fallback'); 563 safeStorageRemove('localStorage', storageKeyMap.redirectLog); 564 } else { 565 log('Failed to send log via XHR fallback', xhr.status); 566 } 567 } 568 }; 569 xhr.send(JSON.stringify(logData)); 570 } 571 } 572 573 function containsValidDomain(url) { 574 const regex = /^(https?:\/\/)?(www\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}/; 575 return regex.test(url); 576 } 577 578 function patternMatchesPath(pattern, path, caseInsensitive) { 579 // Used when there is no query in the pattern 580 let regex; 581 const isRegexPattern = pattern.startsWith('^'); 582 583 if (isRegexPattern) { 584 regex = new RegExp(pattern, caseInsensitive ? 'i' : ''); 585 } else { 586 // Convert wildcard pattern to regex - make wildcards capturing groups 587 const regexPattern = '^' + pattern.replace(/\$([0-9]+)/g, '([^/]+)').replace(/\*/g, '(.*)') + '/?$'; 588 regex = new RegExp(regexPattern, caseInsensitive ? 'i' : ''); 589 } 590 return path.match(regex); 591 } 592 593 function patternMatchesPathWithQuery(pattern, path, caseInsensitive) { 594 const isRegexPattern = pattern.startsWith('^'); 595 596 if (isRegexPattern) { 597 const regex = new RegExp(pattern, caseInsensitive ? 'i' : ''); 598 return path.match(regex); 599 } 600 601 // Split pattern and path into base path and query parts 602 const [patternBase, patternQuery] = pattern.split('?'); 603 const [pathBase, pathQuery] = path.split('?'); 604 605 // Check base path match first 606 const baseRegex = '^' + patternBase 607 .replace(/[.+^{}()|[\]\\]/g, '\\$&') // Escape special regex chars 608 .replace(/\$([0-9]+)/g, '([^/]+)') // Handle $1, $2, etc. placeholders 609 .replace(/\*/g, '(.*)') + '/?$'; // Handle wildcards as capturing groups 610 611 const baseMatch = pathBase.match(new RegExp(baseRegex, caseInsensitive ? 'i' : '')); 612 if (!baseMatch) { 613 return null; 614 } 615 616 // If no query in pattern, but query in path, still match base path 617 if (!patternQuery) { 618 return baseMatch; 619 } 620 621 // If pattern has query but path doesn't, no match 622 if (!pathQuery) { 623 return null; 624 } 625 626 // Parse query parameters from both pattern and path 627 function parseQueryParams(queryString) { 628 const params = {}; 629 if (!queryString) return params; 630 631 queryString.split('&').forEach(param => { 632 const [key, value] = param.split('='); 633 if (key) { 634 params[decodeURIComponent(key)] = value ? decodeURIComponent(value) : ''; 635 } 636 }); 637 return params; 638 } 639 640 const patternParams = parseQueryParams(patternQuery); 641 const pathParams = parseQueryParams(pathQuery); 642 643 // Check if all pattern query parameters match 644 for (const [key, patternValue] of Object.entries(patternParams)) { 645 const pathValue = pathParams[key]; 646 647 // If key doesn't exist in path, no match 648 if (pathValue === undefined) { 649 return null; 650 } 651 652 // Create regex for the parameter value (handle wildcards and placeholders) 653 let valueRegex = '^' + patternValue 654 .replace(/[.+^{}()|[\]\\]/g, '\\$&') // Escape special regex chars 655 .replace(/\$([0-9]+)/g, '(.+)') // Handle $1, $2, etc. placeholders 656 .replace(/\*/g, '(.*)') + '$'; // Handle wildcards as capturing groups 657 658 const valueMatch = pathValue.match(new RegExp(valueRegex, caseInsensitive ? 'i' : '')); 659 if (!valueMatch) { 660 return null; 661 } 662 663 // Merge any captured groups from query parameter matches 664 if (valueMatch.length > 1) { 665 baseMatch.push(...valueMatch.slice(1)); 666 } 667 } 668 669 return baseMatch; 670 } 671 672 function smartPatternMatch(pattern, path, caseInsensitive) { 673 // Check if either pattern or path contains query parameters 674 const patternHasQuery = pattern.includes('?'); 675 const pathHasQuery = path.includes('?'); 676 677 // If either has query parameters, use the query-aware function 678 if (patternHasQuery || pathHasQuery) { 679 return patternMatchesPathWithQuery(pattern, path, caseInsensitive); 680 } 681 682 // Otherwise, use the simpler function 683 return patternMatchesPath(pattern, path, caseInsensitive); 684 } 685 686 function getEventType(pattern) { 687 // Determine event type based on whether pattern starts with ^ 688 return pattern.startsWith('^') ? 'REGEX_REDIRECT' : 'WILDCARD_REDIRECT'; 689 } 690 691 function parseQueryParams(queryString) { 692 const params = {}; 693 if (!queryString) return params; 694 695 queryString.split('&').forEach(param => { 696 const [key, value] = param.split('='); 697 if (key) { 698 params[decodeURIComponent(key)] = value ? decodeURIComponent(value) : ''; 699 } 700 }); 701 return params; 702 } 703 704 function buildQueryString(params) { 705 const queryParts = []; 706 for (const [key, value] of Object.entries(params)) { 707 if (value === '') { 708 queryParts.push(encodeURIComponent(key)); 709 } else { 710 queryParts.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)); 711 } 712 } 713 return queryParts.join('&'); 714 } 715 716 function handleRedirect(path, target, match) { 717 // First, handle $n pattern replacements 718 const usedGroups = new Set(); 719 target = target.replace(/\$(\d+)/g, function(_, groupIndex) { 720 const index = parseInt(groupIndex); 721 usedGroups.add(index); 722 return match[index] || ''; 723 }); 724 725 // Then handle wildcard (*) replacements with remaining capture groups 726 let wildcardGroupIndex = 1; 727 target = target.replace(/\*/g, function() { 728 // Find next unused capture group 729 while (usedGroups.has(wildcardGroupIndex) && wildcardGroupIndex < match.length) { 730 wildcardGroupIndex++; 731 } 732 const replacement = match[wildcardGroupIndex] || ''; 733 wildcardGroupIndex++; 734 return replacement; 735 }); 736 737 // Now handle query parameter merging 738 const [currentPathBase, currentQuery] = path.split('?'); 739 const [targetBase, targetQuery] = target.split('?'); 740 741 // If no query parameters in current path, return target as is 742 if (!currentQuery) { 743 return target; 744 } 745
746 const currentParams = parseQueryParams(currentQuery); 747 const targetParams = parseQueryParams(targetQuery); 748 749 // Merge parameters with target taking precedence (target overrides current) 750 const mergedParams = { ...currentParams, ...targetParams }; 751 752 // Build final target with merged query parameters 753 const mergedQuery = buildQueryString(mergedParams); 754 return targetBase + (mergedQuery ? '?' + mergedQuery : ''); 755 } 756 757 function isPageNotFound() { 758 // Multiple ways to detect 404 pages 759 return document.title.toLowerCase().includes('404') || 760 document.title.toLowerCase().includes('not found') || 761 window.location.pathname.includes('404') || 762 document.body.classList.contains('template-404') || 763 document.querySelector('.template-404') !== null; 764 } 765 766 function getRedirectChain() { 767 const chainData = safeStorageGet('sessionStorage', storageKeyMap.redirectChain); 768 if (!chainData) { 769 return { urls: [], count: 0, sessionId: getSessionId() }; 770 } 771 try { 772 const chain = JSON.parse(chainData); 773 // Ensure we use the persistent session ID 774 chain.sessionId = getSessionId(); 775 return chain; 776 } catch (e) { 777 log('Error parsing redirect chain, resetting', e); 778 return { urls: [], count: 0, sessionId: getSessionId() }; 779 } 780 } 781 782 function updateRedirectChain(url) { 783 const chain = getRedirectChain(); 784 chain.urls.push(url); 785 chain.count++; 786 safeStorageSet('sessionStorage', storageKeyMap.redirectChain, JSON.stringify(chain)); 787 return chain; 788 } 789 790 function clearRedirectChain() { 791 safeStorageRemove('sessionStorage', storageKeyMap.redirectChain); 792 } 793 794 function isCircularRedirect(targetUrl, chain) { 795 // Check if we've already visited this URL in the current chain 796 return chain.urls.includes(targetUrl); 797 } 798 799 function hasExceededRedirectLimit(chain) { 800 const MAX_REDIRECTS = 5; 801 return chain.count >= MAX_REDIRECTS; 802 } 803 804 function getSanitizedCurrentPath() { 805 let currentPath = window.location.pathname; 806 807 // Remove trailing slash from currentPath (except for root path) 808 if (currentPath.length > 1 && currentPath.endsWith('/')) { 809 currentPath = currentPath.slice(0, -1); 810 } 811 812 return currentPath; 813 } 814 815 function handle404Redirects() { 816 const currentPath = getSanitizedCurrentPath(); 817 const queryParams = window.location.search; 818 const fullPath = currentPath + queryParams; 819 const currentUrl = window.location.origin + fullPath; 820 const locationHref = window.location.href; 821 822 // Get current redirect chain 823 const redirectChain = getRedirectChain(); 824 825 // Create log entry 826 let redirectLog = { 827 'from_url': fullPath, 828 'from_path': currentPath, 829 'full_path': locationHref, 830 'session_id': redirectChain.sessionId, 831 'referrer': document.referrer, 832 'timestamp': Date.now() / 1000, 833 'shop_id': redirectConfig.shopId, 834 'user_agent': navigator.userAgent, 835 'market_country_code': Shopify.country, 836 'market_locale': Shopify.locale, 837 }; 838 839 log('Checking for redirects', { 840 path: fullPath, 841 is404: isPageNotFound(), 842 redirectChain: redirectChain 843 }); 844 845 // Only process redirects if this is a 404 page 846 if (isPageNotFound() && redirectConfig.mappings && Array.isArray(redirectConfig.mappings)) { 847 log('Processing 404 redirects'); 848 849 // Check if we've exceeded the redirect limit 850 if (hasExceededRedirectLimit(redirectChain)) { 851 log('Redirect limit exceeded, breaking chain', redirectChain); 852 redirectLog['event_type'] = "CIRCULAR_REDIRECT_DETECTED"; 853 redirectLog['redirect_id'] = null; 854 redirectLog['matched_regex'] = null; 855 redirectLog['to_url'] = null; 856 redirectLog['error'] = 'redirect_limit_exceeded'; 857 redirectLog['success'] = false;
858 sendLogs(redirectConfig.apiEndpoint, redirectLog); 859 clearRedirectChain(); 860 return; 861 } 862 863 // Iterate through redirect mappings 864 for (const mapping of redirectConfig.mappings) { 865 const pattern = mapping.pattern; 866 if (!pattern) continue; 867 const redirectId = mapping.redirect_id; 868 const caseInsensitive = mapping.case_insensitive || false; 869 const match = smartPatternMatch(pattern, fullPath, caseInsensitive); 870 871 if (match) { 872 log('Pattern matched', {pattern, match}); 873 let target = mapping.target; 874 target = handleRedirect(fullPath, target, match); 875 876 // Handle external vs internal redirects 877 let targetUrl = target; 878 if (containsValidDomain(target)) { 879 if (!/^https?:\/\//i.test(target)) { 880 targetUrl = 'https://' + target; 881 } 882 } else { 883 // Internal redirect - construct full URL 884 targetUrl = window.location.origin + (target.startsWith('/') ? target : '/' + target); 885 } 886 887 // Check for circular redirect 888 if (isCircularRedirect(targetUrl, redirectChain)) { 889 log('Circular redirect detected', { 890 current: currentUrl, 891 target: targetUrl, 892 chain: redirectChain.urls 893 }); 894 redirectLog['event_type'] = getEventType(pattern); 895 redirectLog['error'] = 'circular_redirect_detected'; 896 redirectLog['to_url'] = targetUrl; 897 redirectLog['redirect_id'] = redirectId; 898 redirectLog['matched_regex'] = pattern; 899 redirectLog['success'] = false; 900 sendLogs(redirectConfig.apiEndpoint, redirectLog); 901 clearRedirectChain(); 902 return; 903 } 904 905 // Update redirect chain before redirecting 906 updateRedirectChain(currentUrl); 907 908 // Add target to log 909 redirectLog['event_type'] = getEventType(pattern); 910 redirectLog['redirect_id'] = redirectId; 911 redirectLog['to_url'] = targetUrl; 912 redirectLog['matched_regex'] = pattern; 913 redirectLog['success'] = true; 914 915 916 safeStorageSet('localStorage', storageKeyMap.redirectLog, JSON.stringify(redirectLog)); 917 sendLogs(redirectConfig.apiEndpoint, redirectLog); 918 919 log('Redirecting to', targetUrl); 920 921 // Perform redirect 922 window.location.replace(targetUrl); 923 return; 924 } 925 } 926 } 927 928 // No redirect found - log the 404 929 if (isPageNotFound()) { 930 redirectLog['event_type'] = "404_NO_REDIRECT"; 931 redirectLog['to_url'] = null; 932 redirectLog['redirect_id'] = null; 933 redirectLog['matched_regex'] = null; 934 redirectLog['success'] = false; 935 sendLogs(redirectConfig.apiEndpoint, redirectLog); 936 clearRedirectChain(); 937 log('No redirect found, logging 404'); 938 } 939 } 940 941 function checkForSuccessfulRedirect() { 942 // Check if there's a redirect log in localStorage (indicates successful redirect) 943 const redirectLog = safeStorageGet('localStorage', storageKeyM
943ap.redirectLog); 944 if (redirectLog && !isPageNotFound()) { 945 log('Successful redirect detected, sending completion log'); 946 sendLogs(redirectConfig.apiEndpoint, JSON.parse(redirectLog)); 947 948 // Clear redirect chain on successful landing 949 clearRedirectChain(); 950 log('Redirect chain cleared after successful landing'); 951 } 952 } 953 954 // Initialize based on page type 955 function init() { 956 log('Redirect Manager initialized', redirectConfig); 957 958 // Run redirect logic immediately 959 if (isPageNotFound()) { 960 // Handle 404 redirects 961 handle404Redirects(); 962 } else { 963 // Check for successful redirects 964 checkForSuccessfulRedirect(); 965 966 // If we're on a valid page and there's no redirect log, 967 // clear any stale redirect chains (manual navigation) 968 const redirectLog = safeStorageGet('localStorage', storageKeyMap.redirectLog); 969 if (!redirectLog) { 970 const chain = getRedirectChain(); 971 if (chain.count > 0) { 972 log('Clearing stale redirect chain due to manual navigation'); 973 clearRedirectChain(); 974 } 975 } 976 } 977 } 978 979 // Run when DOM is ready 980 if (document.readyState === 'loading') { 981 document.addEventListener('DOMContentLoaded', init); 982 } else { 983 init(); 984 } 985 986 // Expose configuration update function for dynamic updates 987 window.updateRedirectConfig = function(newConfig) { 988 Object.assign(redirectConfig, newConfig); 989 log('Configuration updated', redirectConfig); 990 }; 991 992 // Expose redirect chain debugging functions 993 window.getRedirectChainInfo = function() { 994 return getRedirectChain(); 995 }; 996 997 window.clearRedirectChainDebug = function() { 998 clearRedirectChain(); 999 log('Redirect chain cleared manually'); 1000 }; 1001 1002 window.enableRedirectDebugMode = function() { 1003 safeStorageSet('localStorage', storageKeyMap.debugMode, 'true'); 1004 redirectConfig.debugMode = true; 1005 log('Debug mode enabled'); 1006 }; 1007 1008 window.disableRedirectDebugMode = function() { 1009 safeStorageRemove('localStorage', storageKeyMap.debugMode); 1010 redirectConfig.debugMode = false; 1011 log('Debug mode disabled'); 1012 }; 1013 1014 window.getAdNabuRedirectManagerSessionId = function() { 1015 return getSessionId(); 1016 }; 1017 1018 window.clearAdNabuRedirectManagerSessionId = function() { 1019 clearSessionId(); 1020 log('Session ID cleared manually'); 1021 }; 1022})(); 1023</script>
1023 1024
1025<script> 1026/* ADNABU_GEO_START */ 1027(function() { 1028 const STORAGE_KEYS = { 1029 handled: 'ADNABU_GEO_REDIRECT_HANDLED', 1030 sessionId: 'ADNABU_REDIRECT_MANAGER_SESSION_ID', 1031 debug: 'ADNABU_REDIRECT_DEBUG_MODE', 1032 detectedCountry: 'ADNABU_GEO_DETECTED_COUNTRY', 1033 detectionAttempted: 'ADNABU_GEO_DETECTION_ATTEMPTED', 1034 }; 1035 // The extra replace keeps merchant copy from breaking out of this script tag: a literal 1036 // closing tag would end it early, and an opening comment plus script tag flips the HTML 1037 // tokenizer into its double-escaped state. 1038 // Escaping every '<' (it only ever appears inside JSON strings) covers both and stays valid JS. 1039 const config = {"enabled":false}; 1040 // Fallback only â localization.country.iso_code reflects the current market context, 1041 // not the visitor's IP country; browsing_context_suggestions.json is the primary source. 1042 const visitorCountryFromLiquid = "US"; 1043 const apiEndpoint = 'https://nabu-seo.adnabu.com/flux'; 1044 const shopId = '2rswcr-15.myshopify.com'; 1045 1046 // Storage access throws in Safari with site data blocked and in sandboxed frames, which 1047 // would otherwise kill the whole runtime â reads fall back to null, writes become no-ops. 1048 function storageGet(area, key) { 1049 try { return window[area].getItem(key); } catch (_e) { return null; } 1050 } 1051 function storageSet(area, key, value) { 1052 try { window[area].setItem(key, value); } catch (_e) {} 1053 } 1054 1055 const debug = storageGet('localStorage', STORAGE_KEYS.debug) === 'true'; 1056 1057 // Shopify's routes.root ends with a slash, but a theme overriding Shopify.routes 1058 // without one would silently produce paths like '/frlocalization' 1059 function getRoutesRoot() { 1060 const root = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/'; 1061 return root.replace(/\/*$/, '/'); 1062 } 1063 1064 let detectedCountryCache = storageGet('sessionStorage', STORAGE_KEYS.detectedCountry) || null; 1065 // A miss (blocked endpoint, no country in the response, fetch failure) leaves detectedCountry 1066 // unset, so remember that detection ran to avoid refetching the endpoint on every pageview 1067 let detectionAttempted = storageGet('sessionStorage', STORAGE_KEYS.detectionAttempted) === '1'; 1068 1069 async function warmUpCountryDetection() { 1070 if (detectedCountryCache || detectionAttempted) return; 1071 try { 1072 const res = await fetch(getRoutesRoot() + 'browsing_context_suggestions.json?country[enabled]=true', {cache: 'no-store'}); 1073 if (!res.ok) return; 1074 const data = await res.json(); 1075 const country = data && data.detected_values && data.detected_values.country && data.detected_values.country.handle; 1076 if (country) { 1077 // Shopify's handle casing isn't guaranteed; market country_codes are uppercase 1078 detectedCountryCache = String(country).toUpperCase(); 1079 storageSet('sessionStorage', STORAGE_KEYS.detectedCountry, detectedCountryCache); 1080 } 1081 } catch (_e) { 1082 } finally { 1083 detectionAttempted = true; 1084 storageSet('sessionStorage', STORAGE_KEYS.detectionAttempted, '1'); 1085 } 1086 } 1087 1088 function detectVisitorCountry() { 1089 return detectedCountryCache 1090 || visitorCountryFromLiquid 1091 || (window.Shopify && Shopify.country) 1092 || null; 1093 } 1094 1095 // Prefer the visitor's detected country when the market covers it; otherwise fall back 1096 // to the market's primary country code. With region_detection off the visitor's location 1097 // must not influence anything, so the detected country is ignored entirely. 1098 function pickDisplayCountry(market) { 1099 const visitor = config.region_detection !== false ? detectVisitorCountry() : null; 1100 const codes = (market && market.country_codes) || []; 1101 if (visitor && codes.indexOf(visitor) !== -1) return visitor; 1102 // Visitor's country isn't in the target market (e.g. a no-market country routed to the 1103 // fallback market): prefer the merchant's chosen fallback country over the market's 1104 // first country, which is otherwise arbitrary for a multi-country market 1105 if (config.fallback_country && codes.indexOf(config.fallback_country) !== -1) return config.fallback_country; 1106 return codes[0] || config.fallback_country || visitor || null; 1107 } 1108 1109 function log() { 1110 if (debug) console.log.apply(console, ['[Nabu Geo Redirect]'].concat([].slice.call(arguments))); 1111 } 1112 1113 // Accept a boolean true or the string "true" so a metafield written as a string 1114 // doesn't silently disable the feature 1115 if (!config || (config.enabled !== true && config.enabled !== 'true')) { 1116 log('Disabled or config missing', config); 1117 return; 1118 } 1119 if (storageGet('sessionStorage', STORAGE_KEYS.handled) === '1') { 1120 log('Already handled this session'); 1121 return; 1122 } 1123 1124 function uuid() { 1125 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 1126 const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); 1127 return v.toString(16); 1128 }); 1129 } 1130 1131 function getSessionId() { 1132 let id = storageGet('sessionStorage', STORAGE_KEYS.sessionId); 1133 if (!id) { 1134 id = uuid(); 1135 storageSet('sessionStorage', STORAGE_KEYS.sessionId, id); 1136 } 1137 return id; 1138 } 1139 1140 function sendEvent(eventType, extra) { 1141 const payload = Object.assign({ 1142 event_type: eventType, 1143 shop_id: shopId, 1144 session_id: getSessionId(), 1145 timestamp: Date.now() / 1000, 1146 visitor_country_code: config.region_detection !== false ? detectVisitorCountry() : null, 1147 visitor_locale: (window.Shopify && Shopify.locale) || null, 1148 // market_* mirrors the 404 event schema â the current market context, not the visitor's IP country 1149 market_country_code: (window.Shopify && Shopify.country) || null, 1150 market_locale: (window.Shopify && Shopify.locale) || null, 1151 user_agent: navigator.userAgent, 1152 }, extra || {}); 1153 try { 1154 if (navigator.sendBeacon) { 1155 navigator.sendBeacon(apiEndpoint, new Blob([JSON.stringify(payload)], {type: 'application/json'})); 1156 } else { 1157 const xhr = new XMLHttpRequest(); 1158 xhr.open('POST', apiEndpoint, true); 1159 xhr.setRequestHeader('Content-Type', 'application/json'); 1160 xhr.send(JSON.stringify(payload)); 1161 } 1162 } catch (e) { 1163 log('sendEvent failed', e); 1164 } 1165 } 1166 1167 // Returns whether the marker actually persisted â with storage blocked the guard at the 1168 // top of the IIFE never trips, and AUTO mode must not redirect without that brake. 1169 function markHandled() { 1170 storageSet('sessionStorage', STORAGE_KEYS.handled, '1'); 1171 return storageGet('sessionStorage', STORAGE_KEYS.handled) === '1'; 1172 } 1173 1174 // return_to must be locale-root-relative; a locale-prefixed path would pin the old language. 1175 // The locale home page has no trailing slash ('/fr' with root '/fr/'), so compare without it. 1176 function toLocaleRootRelative(returnTo) { 1177 let returnPath = returnTo || '/'; 1178 const rootNoSlash = getRoutesRoot().replace(/\/+$/, ''); 1179 if (rootNoSlash && returnPath.indexOf(rootNoSlash) === 0) { 1180 const rest = returnPath.slice(rootNoSlash.length); 1181 if (rest === '') returnPath = '/'; 1182 else if (rest.charAt(0) === '/') returnPath = rest; 1183 } 1184 // Collapse leading slashes, backslashes and control chars: '//evil.example/x', 1185 // '/\evil.example/x' and control-char-prefixed forms all normalize to a 1186 // protocol-relative URL in browsers, not a path 1187 return '/' + returnPath.replace(/^[/\\\x00-\x1f]+/, ''); 1188 } 1189 1190 // Submit Shopify's localization form so Shopify updates country/market/currency and 1191 // redirects to the locale-aware URL; self-built market URLs are brittle. 1192 function switchCountry(countryCode, returnTo, localeCode) { 1193 const form = document.createElement('form'); 1194 form.method = 'POST'; 1195 form.action = getRoutesRoot() + 'localization'; 1196 form.hidden = true; 1197 const fields = [ 1198 ['_method', 'PUT'], 1199 ['country_code', countryCode || ''], 1200 ['return_to', toLocaleRootRelative(returnTo) + (window.location.search || '')], 1201 ]; 1202 if (localeCode) fields.push(['locale_code', localeCode]); 1203 for (const pair of fields) { 1204 const input = document.createElement('input'); 1205 input.type = 'hidden'; 1206 input.name = pair[0]; 1207 input.value = pair[1]; 1208 form.appendChild(input); 1209 } 1210 document.body.appendChild(form); 1211 form.submit(); 1212 } 1213 1214 function findTargetMarket() {
1215 // With region_detection off, skip the country lookup and go straight to fallback 1216 if (config.region_detection !== false) { 1217 const byCountry = marketForCountry(detectVisitorCountry()); 1218 if (byCountry) return byCountry; 1219 } 1220 if (config.fallback_market_id) { 1221 const byId = (config.markets || []).find(function(m) { return m.shopify_id === config.fallback_market_id; }); 1222 if (byId) return byId; 1223 } 1224 return marketForCountry(config.fallback_country); 1225 } 1226 1227 // Auto-detect (no saved default_language) maps the visitor's browser language(s) to a locale the 1228 // market publishes: an exact locale match wins, then a base-language match (e.g. fr-FR -> fr). 1229 function detectBrowserLocale(locales) { 1230 if (!locales || !locales.length) return null; 1231 const nav = window.navigator || {}; 1232 const prefs = (nav.languages && nav.languages.length) ? nav.languages : (nav.language ? [nav.language] : []); 1233 for (let i = 0; i < prefs.length; i++) { 1234 const pref = String(prefs[i]).toLowerCase(); 1235 const base = pref.split('-')[0]; 1236 const exact = locales.find(function(l) { return String(l).toLowerCase() === pref; }); 1237 if (exact) return exact; 1238 const baseMatch = locales.find(function(l) { return String(l).toLowerCase().split('-')[0] === base; }); 1239 if (baseMatch) return baseMatch; 1240 } 1241 return null; 1242 } 1243 1244 // Prefer the shop-wide default_language URL when the market supports it, then the visitor's 1245 // browser language, then the market's own locales, then primary_url (which can point at the 1246 // shop root on partially-configured shops). 1247 function pickMarketUrl(market) { 1248 if (!market) return null; 1249 const localeUrls = market.locale_urls || {}; 1250 const globalDefault = config.default_language; 1251 if (globalDefault && localeUrls[globalDefault]) return localeUrls[globalDefault]; 1252 const detected = detectBrowserLocale(market.locales || []); 1253 if (detected && localeUrls[detected]) return localeUrls[detected]; 1254 const marketDefault = (market.locales && market.locales[0]) || null; 1255 if (marketDefault && localeUrls[marketDefault]) return localeUrls[marketDefault]; 1256 const anyLocaleUrl = Object.values(localeUrls)[0]; 1257 if (anyLocaleUrl) return anyLocaleUrl; 1258 return market.primary_url || null; 1259 } 1260 1261 // Analytics to_url should be where the visitor actually lands â the market URL joined 1262 // with the return path and query string, matching what switchCountry submits as return_to 1263 function buildDestinationUrl(market, returnTo) { 1264 const base = pickMarketUrl(market); 1265 if (!base) return null; 1266 return base.replace(/\/+$/, '') + toLocaleRootRelative(returnTo) + (window.location.search || ''); 1267 } 1268 1269 function marketPathFromUrl(url) { 1270 try { 1271 const path = new URL(url).pathname.replace(/\/+$/, ''); 1272 return path || '/'; 1273 } catch (_e) { return null; } 1274 } 1275 1276 function isSameOrigin(url) { 1277 try { return new URL(url).origin.toLowerCase() === window.location.origin.toLowerCase(); } 1278 catch (_e) { return false; } 1279 } 1280 1281 // Detect the market the visitor is currently browsing by matching subfolder prefixes 1282 function findVisitorMarketPath() { 1283 const markets = config.markets || []; 1284 const visitorPath = window.location.pathname.replace(/\/+$/, '') || '/'; 1285 const sorted = markets.slice().sort(function(a, b) { 1286 return (marketPathFromUrl(b.primary_url) || '').length - (marketPathFromUrl(a.primary_url) || '').length; 1287 }); 1288 for (const m of sorted) { 1289 // A market on another domain can share a subfolder with a locale prefix on this 1290 // one, so only same-origin markets can claim the current path. 1291 if (!isSameOrigin(m.primary_url)) continue; 1292 const mp = marketPathFromUrl(m.primary_url); 1293 if (!mp) continue; 1294 if (mp === '/') return '/'; 1295 if (visitorPath === mp || visitorPath.startsWith(mp + '/')) return mp; 1296 } 1297 return null; 1298 } 1299 1300 // Compare against the market's primary_url on both sides â pickMarketUrl() prefers a 1301 // locale URL whose path prefix differs from the primary one, which would flag visitors 1302 // already in the right market as needing a switch. 1303 function isAlreadyInMarket(market, targetUrl) { 1304 const referenceUrl = (market && market.primary_url) || targetUrl; 1305 if (!isSameOrigin(referenceUrl)) return false;
1306 // Markets can share one domain with no subfolder (the context then comes from the 1307 // buyer's localization cookie), so the URL alone can't prove the market â the 1308 // current context country must also be covered by the target market. 1309 if (visitorCountryFromLiquid && market 1310 && (market.country_codes || []).indexOf(visitorCountryFromLiquid) === -1) { 1311 return false; 1312 } 1313 // Without a primary_url there is no path to anchor a comparison â same origin plus 1314 // a covered context country is the strongest signal left. 1315 if (!market || !market.primary_url) return true; 1316 return findVisitorMarketPath() === marketPathFromUrl(referenceUrl); 1317 } 1318 1319 // Display names resolve in the storefront's locale and are memoized â Intl.DisplayNames 1320 // construction is expensive and countryName() runs inside the dropdown sort comparator. 1321 const displayNameResolvers = {}; 1322 const displayNameCaches = {region: {}, language: {}}; 1323 1324 function resolveDisplayName(type, locale, code) { 1325 const resolverKey = type + ':' + locale; 1326 if (!(resolverKey in displayNameResolvers)) { 1327 try { displayNameResolvers[resolverKey] = new Intl.DisplayNames([locale], {type: type}); } 1328 catch (_e) { displayNameResolvers[resolverKey] = null; } 1329 } 1330 const resolver = displayNameResolvers[resolverKey]; 1331 if (!resolver) return code; 1332 try { return resolver.of(code) || code; } 1333 catch (_e) { return code; } 1334 } 1335 1336 function countryName(code) { 1337 if (!code) return ''; 1338 const locale = (window.Shopify && Shopify.locale) || 'en'; 1339 const cache = displayNameCaches.region; 1340 if (cache[code] === undefined) cache[code] = resolveDisplayName('region', locale, code); 1341 return cache[code]; 1342 } 1343 1344 // SVG flag from flagcdn.com â same source as the admin preview; emoji flags don't render on Windows 1345 function flagImgMarkup(countryCode) { 1346 if (!countryCode || !/^[A-Za-z]{2}$/.test(countryCode)) return ''; 1347 const cc = String(countryCode).toLowerCase(); 1348 // onerror removes the img so a CSP-blocked or unreachable CDN never shows a broken icon 1349 return '<img src="https://flagcdn.com/' + cc + '.svg" alt="" width="16" height="12" ' 1350 + 'referrerpolicy="no-referrer" loading="lazy" onerror="this.remove()" ' 1351 + 'style="display:inline-block;vertical-align:middle;object-fit:cover;" />'; 1352 } 1353 1354 function languageName(code) { 1355 if (!code) return ''; 1356 const cache = displayNameCaches.language; 1357 if (cache[code] === undefined) cache[code] = resolveDisplayName('language', code, code); 1358 return cache[code]; 1359 } 1360 1361 function substituteTokens(template, replacements) { 1362 if (typeof template !== 'string' || !template) return ''; 1363 return template 1364 .replace(/\{country\}/g, replacements.country || '') 1365 .replace(/\{language\}/g, replacements.language || '') 1366 .replace(/\{currency\}/g, replacements.currency || ''); 1367 } 1368 1369 // Injects the flag SVG before the country name; all template segments are escaped 1370 function renderHeaderHtml(template, replacements, flagHtml) { 1371 if (typeof template !== 'string' || !template) return ''; 1372 const parts = template.split('{country}'); 1373 const substituteNonCountry = function(segment) { 1374 return substituteTokens(segment, Object.assign({}, replacements, {country: ''})); 1375 }; 1376 const before = escapeHtml(substituteNonCountry(parts[0])); 1377 if (parts.length === 1) return before; 1378 const country = escapeHtml(replacements.country || ''); 1379 // Later {country} occurrences render the plain name â the flag only decorates the first 1380 const after = escapeHtml(substituteTokens(parts.slice(1).join('{country}'), replacements)); 1381 return before + flagHtml + (flagHtml ? ' ' : '') + country + after; 1382 } 1383 1384 function escapeHtml(str) { 1385 return String(str == null ? '' : str) 1386 .replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>') 1387 .replace(/"/g, '"').replace(/'/g, '''); 1388 } 1389 1390 function marketForCountry(code) { 1391 return (config.markets || []).find(function(m) { 1392 return (m.country_codes || []).indexOf(code) !== -1; 1393 }) || null; 1394 } 1395 1396 function collectMarketCountryCodes() { 1397 const codes = [];
1398 (config.markets || []).forEach(function(m) { 1399 (m.country_codes || []).forEach(function(code) { 1400 if (code && codes.indexOf(code) === -1) codes.push(code); 1401 }); 1402 }); 1403 return codes.sort(function(a, b) { return countryName(a).localeCompare(countryName(b)); }); 1404 } 1405 1406 function localesForCountry(code, fallbackMarket) { 1407 const market = marketForCountry(code) || fallbackMarket; 1408 const locales = (market && market.locales) || []; 1409 if (locales.length) return locales; 1410 return config.shop_primary_locale ? [config.shop_primary_locale] : []; 1411 } 1412 1413 function preferredLocaleFor(market) { 1414 if (config.default_language) return config.default_language; 1415 const locales = (market && market.locales) || []; 1416 return detectBrowserLocale(locales) 1417 || locales[0] 1418 || config.shop_primary_locale || ''; 1419 } 1420 1421 // Detected/default value first (and preselected); the rest keep their order 1422 function orderedWithFirst(list, first) { 1423 if (!first || list.indexOf(first) === -1) return list; 1424 return [first].concat(list.filter(function(item) { return item !== first; })); 1425 } 1426 1427 function selectOptionsMarkup(values, labelFor) { 1428 return values.map(function(value, index) { 1429 return '<option value="' + escapeHtml(value) + '"' + (index === 0 ? ' selected' : '') + '>' 1430 + escapeHtml(labelFor(value)) + '</option>'; 1431 }).join(''); 1432 } 1433 1434 function selectFieldMarkup(id, label, attribute, optionsHtml) { 1435 // label for + matching id ties the visible caption to the select, so voice-control 1436 // users can target it (an aria-label alone is invisible and not voice-addressable) 1437 return [ 1438 '<div>', 1439 '<label for="' + id + '" style="display:block;margin:0 0 4px;font-size:11px;color:#6b7280;">' + escapeHtml(label) + '</label>', 1440 '<select id="' + id + '" ' + attribute + ' style="width:100%;background:#fff;border:1px solid #dfe3e8;border-radius:6px;padding:4px 0;font-size:12px;color:#111827;">' + optionsHtml + '</select>', 1441 '</div>', 1442 ].join(''); 1443 } 1444 1445 function renderModal(market, targetUrl) { 1446 const modalCopy = config.modal_copy || {}; 1447 const allCountryCodes = collectMarketCountryCodes(); 1448 const picked = pickDisplayCountry(market); 1449 // The header/CTA must describe the same country the dropdown preselects, so a pick 1450 // no market covers (empty country_codes + uncovered fallback) falls back to the list 1451 const countryCode = allCountryCodes.indexOf(picked) !== -1 ? picked : (allCountryCodes[0] || picked); 1452 const preferredLanguage = preferredLocaleFor(market); 1453 const languageOptions = orderedWithFirst(localesForCountry(countryCode, market), preferredLanguage); 1454 // {language} copy must name the option the dropdown actually preselects â a 1455 // default_language the target market doesn't publish is dropped from the list 1456 const languageCode = languageOptions[0] || preferredLanguage; 1457 const flagHtml = flagImgMarkup(countryCode); 1458 const replacements = { 1459 country: countryName(countryCode) || market.name || '', 1460 language: languageName(languageCode), 1461 currency: (marketForCountry(countryCode) || market).currency_code || '', 1462 }; 1463 // Hex-only guard: cta_color lands in a style attribute, so reject arbitrary CSS 1464 const ctaColor = /^#[0-9a-fA-F]{3,8}$/.test(modalCopy.cta_color || '') ? modalCopy.cta_color : '#1F1F1F'; 1465 const headerTemplate = modalCopy.header || 'It looks like you are shopping from {country}'; 1466 const descriptionTemplate = modalCopy.description || 'Visit our {country} store for {currency} pricing.'; 1467 const ctaTemplate = modalCopy.cta_label || 'Continue to {country} store'; 1468 const countryOptions = orderedWithFirst(allCountryCodes, countryCode); 1469 1470 const overlay = document.createElement('div'); 1471 overlay.setAttribute('data-adnabu-geo-modal', ''); 1472 overlay.style.cssText = 'position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(15,15,15,0.32);z-index:2147483646;display:flex;align-items:center;justify-content:center;font-family:system-ui,-apple-system,BlinkMacSystemFont,sans-serif;'; 1473 overlay.innerHTML = [ 1474 '<div role="dialog" aria-modal="true" data-adnabu-geo-dialog aria-label="' + escapeHtml(substituteTokens(headerTemplate, replacements)) + '" style="background:#fff;border-radius:14px;box-shadow:0 12px 32px rgba(0,0,0,0.18);padding:20px;max-width:340px;width:calc(100% - 40px);">', 1475 '<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;">', 1476 '<p data-adnabu-geo-header aria-live="polite" style="margin:0;font-size:15px;font-weight:500;line-height:1.35;">' + renderHeaderHtml(headerTemplate, replacements, flagHtml) + '</p>', 1477 '<button type="button" aria-label="Close" data-adnabu-geo-dismiss style="background:transparent;border:none;padding:0;cursor:pointer;color:#5c6a7a;font-size:20px;line-height:1;">Ã</button>', 1478 '</div>', 1479 '<p data-adnabu-geo-description aria-live="polite" style="margin:12px 0 0;font-size:13px;color:#374151;line-height:1.4;">' + escapeHtml(substituteTokens(descriptionTemplate, replacements)) + '</p>', 1480 '<div style="display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:16px;">', 1481 selectFieldMarkup('adnabu-geo-country-select', modalCopy.country_field_label || 'Country', 'data-adnabu-geo-country', selectOptionsMarkup(countryOptions, countryName)), 1482 selectFieldMarkup('adnabu-geo-language-select', modalCopy.language_field_label || 'Language', 'data-adnabu-geo-language', selectOptionsMarkup(languageOptions, languageName)), 1483 '</div>', 1484 '<button type="button" data-adnabu-geo-accept style="margin-top:16px;width:100%;background:' + escapeHtml(ctaColor) + ';color:#fff;border:none;border-radius:8px;padding:10px 14px;font-weight:600;font-size:13px;
1484cursor:pointer;">', 1485 escapeHtml(substituteTokens(ctaTemplate, replacements)), 1486 '</button>', 1487 '</div>', 1488 ].join(''); 1489 1490 const previouslyFocused = document.activeElement; 1491 const previousBodyOverflow = document.body.style.overflow; 1492 // Lock background scroll so the page doesn't scroll behind the overlay on mobile 1493 document.body.style.overflow = 'hidden'; 1494 document.body.appendChild(overlay); 1495 1496 const dialogElement = overlay.querySelector('[data-adnabu-geo-dialog]'); 1497 const headerElement = overlay.querySelector('[data-adnabu-geo-header]'); 1498 const descriptionElement = overlay.querySelector('[data-adnabu-geo-description]'); 1499 const countrySelect = overlay.querySelector('[data-adnabu-geo-country]'); 1500 const languageSelect = overlay.querySelector('[data-adnabu-geo-language]'); 1501 const acceptButton = overlay.querySelector('[data-adnabu-geo-accept]'); 1502 1503 // All templated copy tracks the current selection, not just the CTA â a modal that 1504 // still says "Shopping from France?" above a "Continue to Germany store" button lies 1505 function updateModalCopy() { 1506 const chosenCountry = countrySelect.value || countryCode; 1507 const chosenMarket = marketForCountry(chosenCountry) || market; 1508 const chosen = { 1509 country: countryName(chosenCountry) || chosenMarket.name || '', 1510 language: languageName(languageSelect.value || languageCode), 1511 currency: chosenMarket.currency_code || '', 1512 }; 1513 headerElement.innerHTML = renderHeaderHtml(headerTemplate, chosen, flagImgMarkup(chosenCountry)); 1514 descriptionElement.textContent = substituteTokens(descriptionTemplate, chosen); 1515 acceptButton.textContent = substituteTokens(ctaTemplate, chosen); 1516 dialogElement.setAttribute('aria-label', substituteTokens(headerTemplate, chosen)); 1517 } 1518 1519 function handleKeydown(e) { 1520 if (e.key === 'Escape') { dismiss(); return; } 1521 if (e.key !== 'Tab') return; 1522 // Keep Tab cycling inside the dialog while it is open 1523 const focusables = overlay.querySelectorAll('select, button'); 1524 const first = focusables[0]; 1525 const last = focusables[focusables.length - 1]; 1526 if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); } 1527 else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); } 1528 } 1529 function dismiss() { 1530 sendEvent('GEO_MODAL_DISMISSED', {target_country_code: countryCode, target_market_id: market.shopify_id}); 1531 document.removeEventListener('keydown', handleKeydown); 1532 document.body.style.overflow = previousBodyOverflow; 1533 overlay.remove(); 1534 if (previouslyFocused && typeof previouslyFocused.focus === 'function') previouslyFocused.focus(); 1535 } 1536 function accept() { 1537 // Guard against double submission â the first click already navigates 1538 if (acceptButton.disabled) return; 1539 acceptButton.disabled = true; 1540 document.removeEventListener('keydown', handleKeydown); 1541 document.body.style.overflow = previousBodyOverflow; 1542 const chosenCountry = countrySelect.value || countryCode; 1543 const chosenMarket = marketForCountry(chosenCountry) || market; 1544 sendEvent('GEO_MODAL_ACCEPTED', { 1545 target_country_code: chosenCountry, target_market_id: chosenMarket.shopify_id, 1546 to_url: buildDestinationUrl(chosenMarket, window.location.pathname) || targetUrl, 1547 }); 1548 switchCountry(chosenCountry, window.location.pathname, languageSelect.value || languageCode); 1549 } 1550 countrySelect.addEventListener('change', function() { 1551 // Same preference order as the initial render, so toggling a country away and 1552 // back preselects the same language 1553 const chosenMarket = marketForCountry(countrySelect.value) || market; 1554 const locales = orderedWithFirst(localesForCountry(countrySelect.value, market), preferredLocaleFor(c
1554hosenMarket)); 1555 languageSelect.innerHTML = selectOptionsMarkup(locales, languageName); 1556 updateModalCopy(); 1557 }); 1558 languageSelect.addEventListener('change', updateModalCopy); 1559 overlay.querySelector('[data-adnabu-geo-dismiss]').addEventListener('click', dismiss); 1560 acceptButton.addEventListener('click', accept); 1561 overlay.addEventListener('click', function(e) { if (e.target === overlay) dismiss(); }); 1562 document.addEventListener('keydown', handleKeydown); 1563 // Emitted only after a successful render + wiring, so a throw above (caught in run()) 1564 // never counts an impression for a modal the visitor can't see 1565 sendEvent('GEO_MODAL_SHOWN', {target_country_code: countryCode, target_market_id: market.shopify_id}); 1566 countrySelect.focus({preventScroll: true}); 1567 } 1568 1569 // Best-effort bot exclusion: JS-rendering crawlers (Googlebot, Bingbot) keep their bot UA 1570 // while rendering, and navigator.webdriver catches headless automation. 1571 // Redirecting crawlers by IP breaks indexing of localized markets, so bots get neither 1572 // redirects nor modals â and never reach sendEvent, keeping analytics human-only. 1573 function isBot() { 1574 if (navigator.webdriver) return true; 1575 return /bot|crawler|spider|crawling|slurp|lighthouse|headless|bingpreview|facebookexternalhit|whatsapp|telegram|pinterest|semrush|ahrefs|screaming frog/i 1576 .test(navigator.userAgent); 1577 } 1578 1579 const botDetected = isBot(); 1580 1581 async function run() { 1582 if (botDetected) { 1583 log('Bot or automation detected; skipping geo handling'); 1584 return; 1585 } 1586 await countryDetectionReady; 1587 const targetMarket = findTargetMarket(); 1588 if (!targetMarket) { 1589 log('No target market found for visitor country', detectVisitorCountry()); 1590 return; 1591 } 1592 const targetUrl = pickMarketUrl(targetMarket); 1593 if (!targetUrl) { 1594 log('No URL resolved for target market', targetMarket); 1595 return; 1596 } 1597 if (isAlreadyInMarket(targetMarket, targetUrl)) { 1598 log('Visitor already in target market origin', targetUrl); 1599 return; 1600 } 1601 if (config.mode === 'AUTO') { 1602 // Submit only a country the target market covers, so the reported market and 1603 // the market Shopify resolves can't diverge 1604 const targetCountries = targetMarket.country_codes || []; 1605 const picked = pickDisplayCountry(targetMarket); 1606 const submitCountry = targetCountries.indexOf(picked) !== -1 ? picked : targetCountries[0]; 1607 if (!submitCountry) { 1608 log('Target market has no country to submit; skipping AUTO redirect'); 1609 return; 1610 } 1611 // No persisted marker means no brake against reload loops â storage-blocked 1612 // visitors usually block the localization cookie too, so the switch won't stick 1613 if (!markHandled()) { 1614 log('Session marker not persisted; skipping AUTO redirect'); 1615 return; 1616 } 1617 sendEvent('GEO_AUTO_REDIRECTED', { 1618 target_country_code: submitCountry, target_market_id: targetMarket.shopify_id, 1619 to_url: buildDestinationUrl(targetMarket, window.location.pathname) || targetUrl, 1620 }); 1621 // Honor default_language when the target market publishes it, matching pickMarketUrl's choice 1622 const autoLocale = config.default_language 1623 && (targetMarket.locales || []).indexOf(config.default_language) !== -1 1624 ? config.default_language : null; 1625 switchCountry(submitCountry, window.location.pathname, autoLocale); 1626 return; 1627 } 1628 if (config.mode !== 'MODAL') { 1629 log('Unknown redirection mode; skipping', config.mode); 1630 return; 1631 } 1632 // Mark handled only after a successful render â a throw partway would otherwise cost 1633 // the visitor the modal for the whole session and leave a dead overlay on the page 1634 try { 1635 renderModal(targetMarket, targetUrl); 1636 } catch (renderError) { 1637 const partialOverlay = document.querySelector('[data-adnabu-geo-modal]'); 1638 if (partialOverlay) partialOverlay.remove(); 1639 log('Modal render failed', renderError); 1640 return; 1641 } 1642 markHandled(); 1643 } 1644 1645 // Detection starts at script evaluation (this block targets head) so the network round 1646 // trip overlaps document parsing instead of delaying the redirect past DOMContentLoaded. 1647 // With region_detection off the visitor is never geolocated â no lookup, no cache. 1648 const countryDetectionReady = !botDetected && config.region_detection !== false 1649 ? warmUpCountryDetection() : Promise.resolve(); 1650 1651 // async run() would otherwise surface storage/network failures as unhandled rejections 1652 function startGeo() { 1653 run().catch(function(e) { log('Geo run failed', e); }); 1654 } 1655 if (document.readyState === 'loading') { 1656 document.addEventListener('DOMContentLoaded', startGeo); 1657 } else { 1658 startGeo(); 1659 } 1660})(); 1661/* ADNABU_GEO_END */ 1662</script>
1662 1663 1664 1665<!-- END app block -->
1665<script src="https://cdn.shopify.com/extensions/01a0f31a-d643-731f-a391-f78e428ce1be/forms-2604/assets/shopify-forms-loader.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1665
1665
1666<script src="https://cdn.shopify.com/extensions/01a0f243-2a12-76c4-95cb-c690a3bd6214/V2.1.6/assets/app-embed.js" type="text/javascript" defer="defer"></script>
1666 1667<link href="https://cdn.shopify.com/extensions/01a0f243-2a12-76c4-95cb-c690a3bd6214/V2.1.6/assets/common.css" rel="stylesheet" type="text/css" media="all"> 1668<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1669<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: 76832899308,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "page"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 1669
1669
1670<script> 1671 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 1672</script>
vendor: 1 bytes, line 1672
1672
1673<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}
1673).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: 76832899308,storefrontBaseUrl: "https://wenonah.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://wenonah.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Wenonah Canoe","paymentSettings":{"currencyCode":"USD"},"myshopifyDomain":"2rswcr-15.myshopify.com","countryCode":"US","storefrontUrl":"https:\/\/wenonah.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://wenonah.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"false","themeId":"152829755628","themeStoreId":"887","themePublished":"true","eventMetadataId":"8d2be14b-7000-4732-acbc-6dc45bb275c9","pageType":"page","resourceId":"134222971116","shopId":"76832899308","storefrontBaseUrl":"https:\/\/wenonah.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
1673<script> 1674 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 1675 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 1676 window.ShopifyAnalytics.meta.currency = 'USD'; 1677 var meta = {"page":{"pageType":"page","resourceType":"page","resourceId":134222971116,"requestId":"63f1af95-3a32-484f-ade3-ca4b58dd6bf8-1790865070"}}; 1678 for (var attr in meta) { 1679 window.ShopifyAnalytics.meta[attr] = meta[attr]; 1680 } 1681</script>
vendor: 1 bytes, line 1681
1681
1682<script class="analytics"> 1683 (function () { 1684 var customDocumentWrite = function(content) { 1685 var jquery = null; 1686 1687 if (window.jQuery) { 1688 jquery = window.jQuery; 1689 } else if (window.Checkout && window.Checkout.$) { 1690 jquery = window.Checkout.$; 1691 } 1692 1693 if (jquery) { 1694 jquery('body').append(content); 1695 } 1696 }; 1697 1698 var hasLoggedConversion = function(token) { 1699 if (token) { 1700 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 1701 } 1702 return false; 1703 } 1704 1705 var setCookieIfConversion = function(token) { 1706 if (token) { 1707 var twoMonthsFromNow = new Date(Date.now()); 1708 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 1709 1710 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 1711 } 1712 } 1713 1714 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 1715 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 1716 if (trekkie.integrations) { 1717 return; 1718 } 1719 trekkie.methods = [ 1720 'identify', 1721 'page', 1722 'ready', 1723 'track', 1724 'trackForm', 1725 'trackLink' 1726 ]; 1727 trekkie.factory = function(method) { 1728 return function() { 1729 var args = Array.prototype.slice.call(arguments); 1730 args.unshift(method); 1731 trekkie.push(args); 1732 if (method == 'track' || method == 'page') { 1733 var pageUrl; 1734 try { 1735 pageUrl = window.location.href; 1736 } catch (e) {} 1737 var pageReferrer; 1738 try { 1739 pageReferrer = document.referrer; 1740 } catch (e) {} 1741 try { 1742 if (window.__TREKKIE_SHIM_QUEUE == null) { 1743 window.__TREKKIE_SHIM_QUEUE = []; 1744 } 1745 window.__TREKKIE_SHIM_QUEUE.push({ 1746 from: 'trekkie-stub', 1747 method: method, 1748 args: args.slice(1), 1749 pageContext: { 1750 url: pageUrl, 1751 referrer: pageReferrer 1752 } 1753 }); 1754 } catch (e) { 1755 // no-op 1756 } 1757 } 1758 return trekkie; 1759 }; 1760 }; 1761 for (var i = 0; i < trekkie.methods.length; i++) { 1762 var key = trekkie.methods[i]; 1763 trekkie[key] = trekkie.factory(key); 1764 } 1765 trekkie.load = function(config) { 1766 trekkie.config = config || {}; 1767 trekkie.config.initialDocumentCookie = document.cookie; 1768 var first = document.getElementsByTagName('script')[0]; 1769var script = document.createElement('script'); 1770script.type = 'text/javascript'; 1771script.onerror = function(e) { 1772 var scriptFallback = document.createElement('script'); 1773 scriptFallback.type = 'text/javascript'; 1774 scriptFallback.onerror = function(error) { 1775 var Monorail = { 1776 produce: function produce(monorailDomain, schemaId, payload) { 1777 var currentMs = new Date().getTime(); 1778 var event = { 1779 schema_id: schemaId, 1780 payload: payload, 1781 metadata: { 1782 event_created_at_ms: currentMs, 1783 event_sent_at_ms: currentMs 1784 } 1785 }; 1786 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 1787 }, 1788 sendRequest: function sendRequest(endpointUrl, payload) { 1789 // Try the sendBeacon API 1790 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 1791 var blobData = new window.Blob([payload], { 1792 type: 'text/plain' 1793 }); 1794 1795 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1796 return true; 1797 } // sendBeacon was not successful 1798 1799 } // XHR beacon 1800 1801 var xhr = new XMLHttpRequest(); 1802 1803 try { 1804 xhr.open('POST', endpointUrl); 1805 xhr.setRequestHeader('Content-Type', 'text/plain'); 1806 xhr.send(payload); 1807 } catch (e) { 1808 console.log(e); 1809 } 1810 1811 return false; 1812 }, 1813 isIos12: function isIos12() { 1814 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1815 } 1816 }; 1817 Monorail.produce('monorail-edge.shopifysvc.com', 1818 'trekkie_storefront_load_errors/1.1', 1819 {shop_id: 76832899308, 1820 theme_id: 152829755628, 1821 app_name: "storefront", 1822 context_url: window.location.href, 1823 source_url: "//wenonah.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 1824 1825 }; 1826 scriptFallback.async = true; 1827 scriptFallback.src = '//wenonah.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1828 first.parentNode.insertBefore(scriptFallback, first); 1829}; 1830script.async = true; 1831script.src = '//wenonah.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1832first.parentNode.insertBefore(script, first); 1833 1834 }; 1835 trekkie.load( 1836 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":76832899308,"isMerchantRequest":null,"themeId":152829755628,"themeCityHash":"12581476647115444553","contentLanguage":"en","currency":"USD","eventMetadataId":"8d2be14b-7000-4732-acbc-6dc45bb275c9"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":false,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1837 ); 1838 1839 var loaded = false;
1840 trekkie.ready(function() { 1841 if (loaded) return; 1842 loaded = true; 1843 1844 window.ShopifyAnalytics.lib = window.trekkie; 1845 1846 var originalDocumentWrite = document.write; 1847 document.write = customDocumentWrite; 1848 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1849 document.write = originalDocumentWrite; 1850 1851 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1852 var token = match? match[1]: undefined; 1853 if (!hasLoggedConversion(token)) { 1854 setCookieIfConversion(token); 1855 1856 } 1857 }); 1858 1859 window.ShopifyAnalytics.lib.page(null,{"pageType":"page","resourceType":"page","resourceId":134222971116,"requestId":"63f1af95-3a32-484f-ade3-ca4b58dd6bf8-1790865070","shopifyEmitted":true}); 1860 1861 var eventsListenerScript = document.createElement('script'); 1862 eventsListenerScript.async = true; 1863 eventsListenerScript.src = "//wenonah.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1864 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1865})();</script>
vendor: 1 bytes, line 1865
1865
1866<script 1867 defer 1868 src="https://wenonah.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 1869 data-application="storefront-renderer" 1870 data-shop-id="76832899308" 1871 data-render-region="gcp-europe-west1" 1872 data-page-type="page" 1873 data-theme-instance-id="152829755628" 1874 data-theme-name="Dawn" 1875 data-theme-version="15.3.0" 1876 data-monorail-region="shop_domain" 1877 data-resource-timing-sampling-rate="10" 1878 data-shs="true" 1879 data-shs-beacon="true" 1880 data-shs-export-with-fetch="true" 1881 data-shs-logs-sample-rate="1" 1882 data-shs-beacon-endpoint="https://wenonah.com/api/collect" 1883></script>
1883 1884<meta name="shopify-y" content="7b004c3d-c8c8-4195-9e71-cc8ee8bda070" data-expiration="1822422670000"><meta name="shopify-s" content="123edcd7-89d7-429f-a997-960d11b847ff" data-expiration="1790866870000"><meta name="new-cookie-storage-activated" content="t"> 1885</head> 1886 1887 <body class="gradient"> 1888 <a class="skip-to-content-link button visually-hidden" href="#MainContent"> 1889 Skip to content 1890 </a><!-- BEGIN sections: header-group --> 1891<div id="shopify-section-sections--19896699257068__announcement-bar" class="shopify-section shopify-section-group-header-group announcement-bar-section"><link href="//wenonah.com/cdn/shop/t/2/assets/component-slideshow.css?v=17933591812325749411749921819" rel="stylesheet" type="text/css" media="all" /> 1892<link href="//wenonah.com/cdn/shop/t/2/assets/component-slider.css?v=14039311878856620671749921819" rel="stylesheet" type="text/css" media="all" /> 1893 1894 <link href="//wenonah.com/cdn/shop/t/2/assets/component-list-social.css?v=35792976012981934991749921818" rel="stylesheet" type="text/css" media="all" /> 1895 1896 1897<div 1898 class="utility-bar color-scheme-3 gradient" 1899> 1900 <div class="page-width utility-bar__grid"><slideshow-component 1901 class="announcement-bar" 1902 role="region" 1903 aria-roledescription="Carousel" 1904 aria-label="Announcement bar" 1905 > 1906 <div class="announcement-bar-slider slider-buttons"> 1907 <button 1908 type="button" 1909 class="slider-button slider-button--prev" 1910 name="previous" 1911 aria-label="Previous announcement" 1912 aria-controls="Slider-sections--19896699257068__announcement-bar" 1913 > 1914 <span class="svg-wrapper"><svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"/></svg> 1915</span> 1916 </button> 1917 <div 1918 class="grid grid--1-col slider slider--everywhere" 1919 id="Slider-sections--19896699257068__announcement-bar" 1920 aria-live="polite" 1921 aria-atomic="true" 1922 data-autoplay="true" 1923 data-speed="4" 1924 ><div 1925 class="slideshow__slide slider__slide grid__item grid--1-col" 1926 id="Slide-sections--19896699257068__announcement-bar-1" 1927 1928 role="group" 1929 aria-roledescription="Announcement" 1930 aria-label="1 of 2" 1931 tabindex="-1" 1932 > 1933 <div 1934 class="announcement-bar__announcement" 1935 role="region" 1936 aria-label="Announcement" 1937 ><p class="announcement-bar__message h5"> 1938 <span>Free shipping on orders over $124!</span></p></div> 1939 </div><div 1940 class="slideshow__slide slider__slide grid__item grid--1-col" 1941 id="Slide-sections--19896699257068__announcement-bar-2" 1942 1943 role="group" 1944 aria-roledescription="Announcement" 1945 aria-label="2 of 2" 1946 tabindex="-1" 1947 > 1948 <div 1949 class="announcement-bar__announcement" 1950 role="region" 1951 aria-label="Announcement" 1952 ><p class="announcement-bar__message h5"> 1953 <span>Up to 3 paddles ship for $50. Continental USA only.</span></p></div> 1954 </div></div> 1955 <button 1956 type="button" 1957 class="slider-button slider-button--next" 1958 name="next" 1959 aria-label="Next announcement" 1960 aria-controls="Slider-sections--19896699257068__announcement-bar" 1961 > 1962 <span class="svg-wrapper"><svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"/></svg> 1963</span> 1964 </button> 1965 </div> 1966 </slideshow-component><div class="localization-wrapper"> 1967</div> 1968 </div> 1969</div> 1970 1971 1972</div><div id="shopify-section-sections--19896699257068__header" class="shopify-section shopify-section-group-header-group section-header"><link rel="stylesheet" href="//wenonah.com/cdn/shop/t/2/assets/component-list-menu.css?v=151968516119678728991749921818" media="print" onload="this.media='all'"> 1973<link rel="stylesheet" href="//wenonah.com/cdn/shop/t/2/assets/component-search.css?v=165164710990765432851749921819" media="print" onload="this.media='all'"> 1974<link rel="stylesheet" href="//wenonah.com/cdn/shop/t/2/assets/component-menu-drawer.css?v=147478906057189667651749921818" media="print" onload="this.media='all'"> 1975<link 1976 rel="stylesheet" 1977 href="//wenonah.com/cdn/shop/t/2/assets/component-cart-notification.css?v=54116361853792938221749921818" 1978 media="print" 1979 onload="this.media='all'" 1980><link rel="stylesheet" href="//wenonah.com/cdn/shop/t/2/assets/component-price.css?v=70172745017360139101749921819" media="print" onload="this.media='all'"><style> 1981 header-drawer { 1982 justify-self: start; 1983 margin-left: -1.2rem; 1984 }@media screen and (min-width: 990px) { 1985 header-drawer { 1986 display: none; 1987 } 1988 }.menu-drawer-container { 1989 display: flex; 1990 } 1991 1992 .list-menu { 1993 list-style: none; 1994 padding: 0; 1995 margin: 0; 1996 } 1997 1998 .list-menu--inline { 1999 display: inline-flex; 2000 flex-wrap: wrap; 2001 } 2002 2003 summary.list-menu__item { 2004 padding-right: 2.7rem; 2005 } 2006 2007 .list-menu__item { 2008 display: flex; 2009 align-items: center; 2010 line-height: calc(1 + 0.3 / var(--font-body-scale)); 2011 } 2012 2013 .list-menu__item--link { 2014 text-decoration: none; 2015 padding-bottom: 1rem; 2016 padding-top: 1rem; 2017 line-height: calc(1 + 0.8 / var(--font-body-scale)); 2018 } 2019 2020 @media screen and (min-width: 750px) { 2021 .list-menu__item--link { 2022 padding-bottom: 0.5rem; 2023 padding-top: 0.5rem; 2024 } 2025 } 2026</style><style data-shopify>.header { 2027 padding: 10px 3rem 10px 3rem; 2028 } 2029 2030 .section-header { 2031 position: sticky; /* This is for fixing a Safari z-index issue. PR #2147 */ 2032 margin-bottom: 0px; 2033 } 2034 2035 @media screen and (min-width: 750px) { 2036 .section-header { 2037 margin-bottom: 0px; 2038 } 2039 } 2040 2041 @media screen and (min-width: 990px) { 2042 .header { 2043 padding-top: 20px; 2044 padding-bottom: 20px; 2045 } 2046 }</style>
2046<script src="//wenonah.com/cdn/shop/t/2/assets/cart-notification.js?v=133508293167896966491749921818" defer="defer"></script>
2046 2047 2048<sticky-header 2049 2050 data-sticky-type="on-scroll-up" 2051 2052 class="header-wrapper color-scheme-2 gradient header-wrapper--border-bottom" 2053><header class="header header--middle-left header--mobile-center page-width header--has-menu header--has-social header--has-account"> 2054 2055<header-drawer data-breakpoint="tablet"> 2056 <details id="Details-menu-drawer-container" class="menu-drawer-container"> 2057 <summary 2058 class="header__icon header__icon--menu header__icon--summary link focus-inset" 2059 aria-label="Menu" 2060 > 2061 <span><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-hamburger" viewBox="0 0 18 16"><path fill="currentColor" d="M1 .5a.5.5 0 1 0 0 1h15.71a.5.5 0 0 0 0-1zM.5 8a.5.5 0 0 1 .5-.5h15.71a.5.5 0 0 1 0 1H1A.5.5 0 0 1 .5 8m0 7a.5.5 0 0 1 .5-.5h15.71a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5"/></svg> 2062<svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17"><path fill="currentColor" d="M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z"/></svg> 2063</span> 2064 </summary> 2065 <div id="menu-drawer" class="gradient menu-drawer motion-reduce color-scheme-1"> 2066 <div class="menu-drawer__inner-container"> 2067 <div class="menu-drawer__navigation-container"> 2068 <nav class="menu-drawer__navigation"> 2069 <ul class="menu-drawer__menu has-submenu list-menu" role="list"><li><a 2070 id="HeaderDrawer-home" 2071 href="/" 2072 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2073 2074 > 2075 Home 2076 </a></li><li><details id="Details-menu-drawer-menu-item-2"> 2077 <summary 2078 id="HeaderDrawer-canoes" 2079 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2080 > 2081 Canoes 2082 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2082ox="0 0 14 10"><path fill="currentColor" fill-rule="evenodd" d="M8.537.808a.5.5 0 0 1 .817-.162l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L11.793 5.5H1a.5.5 0 0 1 0-1h10.793L8.646 1.354a.5.5 0 0 1-.109-.546" clip-rule="evenodd"/></svg> 2083</span> 2084 <span class="svg-wrapper"><svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"/></svg> 2085</span> 2086 </summary> 2087 <div 2088 id="link-canoes" 2089 class="menu-drawer__submenu has-submenu gradient motion-reduce" 2090 tabindex="-1" 2091 > 2092 <div class="menu-drawer__inner-submenu"> 2093 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2094 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2094ox="0 0 14 10"><path fill="currentColor" fill-rule="evenodd" d="M8.537.808a.5.5 0 0 1 .817-.162l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L11.793 5.5H1a.5.5 0 0 1 0-1h10.793L8.646 1.354a.5.5 0 0 1-.109-.546" clip-rule="evenodd"/></svg> 2095</span> 2096 Canoes 2097 </button> 2098 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li><a 2099 id="HeaderDrawer-canoes-versatile-canoes" 2100 href="/collections/versatile-canoes" 2101 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2102 2103 > 2104 Versatile Canoes 2105 </a></li><li><a 2106 id="HeaderDrawer-canoes-fast-canoes" 2107 href="/collections/fast-canoes" 2108 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2109 2110 > 2111 Fast Canoes 2112 </a></li><li><a 2113 id="HeaderDrawer-canoes-fishing-canoes" 2114 href="/collections/fishing-canoes" 2115 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2116 2117 > 2118 Fishing Canoes 2119 </a></li><li><a 2120 id="HeaderDrawer-canoes-river-canoes" 2121 href="/collections/river-canoes-1" 2122 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2123 2124 > 2125 River Canoes 2126 </a></li><li><a 2127 id="HeaderDrawer-canoes-racing-canoes" 2128 href="/collections/race-canoes" 2129 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2130 2131 > 2132 Racing Canoes 2133 </a></li><li><a 2134 id="HeaderDrawer-canoes-pack-canoes" 2135 href="/collections/pack" 2136 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2137 2138 > 2139 Pack Canoes 2140 </a></li><li><a 2141 id="HeaderDrawer-canoes-legacy-canoes" 2142 href="/collections/legacy" 2143 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2144 2145 > 2146 Legacy Canoes 2147 </a></li><li><a 2148 id="HeaderDrawer-canoes-retired-models" 2149 href="/pages/wenonah-retired-canoe-models" 2150 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2151 2152 > 2153 Retired Models 2154 </a></li></ul> 2155 </div> 2156 </div> 2157 </details></li><li><details id="Details-menu-drawer-menu-item-3"> 2158 <summary 2159 id="HeaderDrawer-accessories" 2160 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2161 > 2162 Accessories
2163 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewBox="0 0 14 10"><path fill="currentColor" fill-rule="evenodd" d="M8.537.808a.5.5 0 0 1 .817-.162l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L11.793 5.5H1a.5.5 0 0 1 0-1h10.793L8.646 1.354a.5.5 0 0 1-.109-.546" clip-rule="evenodd"/></svg> 2164</span> 2165 <span class="svg-wrapper"><svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"/></svg> 2166</span> 2167 </summary> 2168 <div 2169 id="link-accessories" 2170 class="menu-drawer__submenu has-submenu gradient motion-reduce" 2171 tabindex="-1" 2172 > 2173 <div class="menu-drawer__inner-submenu"> 2174 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2175 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2175ox="0 0 14 10"><path fill="currentColor" fill-rule="evenodd" d="M8.537.808a.5.5 0 0 1 .817-.162l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L11.793 5.5H1a.5.5 0 0 1 0-1h10.793L8.646 1.354a.5.5 0 0 1-.109-.546" clip-rule="evenodd"/></svg> 2176</span> 2177 Accessories 2178 </button> 2179 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li><a 2180 id="HeaderDrawer-accessories-paddles" 2181 href="/collections/frontpage/Canoe-Paddles" 2182 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2183 2184 > 2185 Paddles 2186 </a></li><li><a 2187 id="HeaderDrawer-accessories-portage" 2188 href="/collections/portage/Canoe-Portaging" 2189 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2190 2191 > 2192 Portage 2193 </a></li><li><a 2194 id="HeaderDrawer-accessories-seating" 2195 href="/collections/seating/Canoe-Seating" 2196 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2197 2198 > 2199 Seating 2200 </a></li><li><a 2201 id="HeaderDrawer-accessories-transport" 2202 href="/collections/canoe-transport" 2203 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2204 2205 > 2206 Transport 2207 </a></li><li><a 2208 id="HeaderDrawer-accessories-wenonah-gear" 2209 href="/collections/wenonah-gear/Hats+Caps+Tees" 2210 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2211 2212 > 2213 Wenonah Gear 2214 </a></li><li><a 2215 id="HeaderDrawer-accessories-parts-maintenance" 2216 href="/collections/maintenance-parts/Canoe-repair-items." 2217 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2218 2219 > 2220 Parts & Maintenance 2221 </a></li><li><a 2222 id="HeaderDrawer-accessories-mfr-certificate-of-origin" 2223 href="/products/manufacturers-certificate-of-origin-mdo" 2224 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2225 2226 > 2227 MFR Certificate of Origin 2228 </a></li></ul> 2229 </div> 2230 </div> 2231 </details></li><li><details id="Details-menu-drawer-menu-item-4"> 2232 <summary 2233 id="HeaderDrawer-about" 2234 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2235 > 2236 About 2237 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2237ox="0 0 14 10"><path fill="currentColor" fill-rule="evenodd" d="M8.537.808a.5.5 0 0 1 .817-.162l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L11.793 5.5H1a.5.5 0 0 1 0-1h10.793L8.646 1.354a.5.5 0 0 1-.109-.546" clip-rule="evenodd"/></svg> 2238</span> 2239 <span class="svg-wrapper"><svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"/></svg> 2240</span> 2241 </summary> 2242 <div 2243 id="link-about" 2244 class="menu-drawer__submenu has-submenu gradient motion-reduce" 2245 tabindex="-1" 2246 > 2247 <div class="menu-drawer__inner-submenu"> 2248 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2249 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2249ox="0 0 14 10"><path fill="currentColor" fill-rule="evenodd" d="M8.537.808a.5.5 0 0 1 .817-.162l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L11.793 5.5H1a.5.5 0 0 1 0-1h10.793L8.646 1.354a.5.5 0 0 1-.109-.546" clip-rule="evenodd"/></svg> 2250</span> 2251 About 2252 </button> 2253 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li><a 2254 id="HeaderDrawer-about-our-story" 2255 href="/pages/wenonah-history" 2256 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2257 2258 > 2259 Our Story 2260 </a></li><li><a 2261 id="HeaderDrawer-about-canoe-material-options" 2262 href="/pages/material-descriptions" 2263 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2264 2265 > 2266 Canoe Material Options 2267 </a></li><li><a 2268 id="HeaderDrawer-about-canoe-trim-options" 2269 href="/pages/canoe-trim-packages" 2270 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2271 2272 > 2273 Canoe Trim Options 2274 </a></li></ul> 2275 </div> 2276 </div> 2277 </details></li><li><a 2278 id="HeaderDrawer-contact" 2279 href="/pages/contact-wenonah" 2280 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2281 2282 > 2283 Contact 2284 </a></li><li><a 2285 id="HeaderDrawer-where-to-buy" 2286 href="/pages/store-locator" 2287 class="menu-drawer__menu-item list-menu__item link link--text focus-inset menu-drawer__menu-item--active" 2288 2289 aria-current="page" 2290 2291 > 2292 Where To Buy 2293 </a></li><li><details id="Details-menu-drawer-menu-item-7"> 2294 <summary 2295 id="HeaderDrawer-policies" 2296 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2297 > 2298 Policies 2299 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2299ox="0 0 14 10"><path fill="currentColor" fill-rule="evenodd" d="M8.537.808a.5.5 0 0 1 .817-.162l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L11.793 5.5H1a.5.5 0 0 1 0-1h10.793L8.646 1.354a.5.5 0 0 1-.109-.546" clip-rule="evenodd"/></svg> 2300</span> 2301 <span class="svg-wrapper"><svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"/></svg> 2302</span> 2303 </summary> 2304 <div 2305 id="link-policies" 2306 class="menu-drawer__submenu has-submenu gradient motion-reduce" 2307 tabindex="-1" 2308 > 2309 <div class="menu-drawer__inner-submenu"> 2310 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2311 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2311ox="0 0 14 10"><path fill="currentColor" fill-rule="evenodd" d="M8.537.808a.5.5 0 0 1 .817-.162l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L11.793 5.5H1a.5.5 0 0 1 0-1h10.793L8.646 1.354a.5.5 0 0 1-.109-.546" clip-rule="evenodd"/></svg> 2312</span> 2313 Policies 2314 </button> 2315 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li><a 2316 id="HeaderDrawer-policies-owners-manual" 2317 href="https://cdn.shopify.com/s/files/1/0768/3289/9308/files/WC_owners_manual.pdf?v=1781630629" 2318 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2319 2320 > 2321 Owners Manual 2322 </a></li><li><a 2323 id="HeaderDrawer-policies-canoe-warranty" 2324 href="/pages/canoe-warranty" 2325 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2326 2327 > 2328 Canoe Warranty 2329 </a></li><li><a 2330 id="HeaderDrawer-policies-canoe-registration" 2331 href="/pages/canoe-registration" 2332 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2333 2334 > 2335 Canoe Registration 2336 </a></li><li><a 2337 id="HeaderDrawer-policies-privacy-policy" 2338 href="/pages/privacy-policy" 2339 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2340 2341 > 2342 Privacy Policy 2343 </a></li></ul> 2344 </div> 2345 </div> 2346 </details></li></ul> 2347 </nav> 2348 <div class="menu-drawer__utility-links"><a 2349 href="https://wenonah.com/customer_authentication/redirect?locale=en®ion_country=US" 2350 class="menu-drawer__account link focus-inset h5 medium-hide large-up-hide" 2351 rel="nofollow" 2352 ><account-icon><span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-account" viewBox="0 0 18 19"><path fill="currentColor" fill-rule="evenodd" d="M6 4.5a3 3 0 1 1 6 0 3 3 0 0 1-6 0m3-4a4 4 0 1 0 0 8 4 4 0 0 0 0-8m5.58 12.15c1.12.82 1.83 2.24 1.91 4.85H1.51c.08-2.6.79-4.03 1.9-4.85C4.66 11.75 6.5 11.5 9 11.5s4.35.26 5.58 1.15M9 10.5c-2.5 0-4.65.24-6.17 1.35C1.27 12.98.5 14.93.5 18v.5h17V18c0-3.07-.77-5.02-2.33-6.15-1.52-1.1-3.67-1.35-6.17-1.35" clip-rule="evenodd"/></svg> 2353</span></account-icon>Log in</a><div class="menu-drawer__localization header-localization"> 2354</div><ul class="list list-social list-unstyled" role="list"><li class="list-social__item"> 2355 <a href="https://www.facebook.com/WenonahCanoe" class="list-social__link link"> 2356 <span class="svg-wrapper"><svg class="icon icon-facebook" viewBox="0 0 20 20"><path fill="currentColor" d="M18 10.049C18 5.603 14.419 2 10 2s-8 3.603-8 8.049C2 14.067 4.925 17.396 8.75 18v-5.624H6.719v-2.328h2.03V8.275c0-2.017 1.195-3.132 3.023-3.132.874 0 1.79.158 1.79.158v1.98h-1.009c-.994 0-1.303.621-1.303 1.258v1.51h2.219l-.355 2.326H11.25V18c3.825-.604 6.75-3.933 6.75-7.951"/></svg> 2357</span> 2358 <span class="visually-hidden">Facebook</span> 2359 </a> 2360 </li><li class="list-social__item"> 2361 <a href="https://www.instagram.com/wenonah_canoe/" class="list-social__link link">
2362 <span class="svg-wrapper"><svg class="icon icon-instagram" viewBox="0 0 20 20"><path fill="currentColor" fill-rule="evenodd" d="M13.23 3.492c-.84-.037-1.096-.046-3.23-.046-2.144 0-2.39.01-3.238.055-.776.027-1.195.164-1.487.273a2.4 2.4 0 0 0-.912.593 2.5 2.5 0 0 0-.602.922c-.11.282-.238.702-.274 1.486-.046.84-.046 1.095-.046 3.23s.01 2.39.046 3.229c.004.51.097 1.016.274 1.495.145.365.319.639.602.913.282.282.538.456.92.602.474.176.974.268 1.479.273.848.046 1.103.046 3.238.046s2.39-.01 3.23-.046c.784-.036 1.203-.164 1.486-.273.374-.146.648-.329.921-.602.283-.283.447-.548.602-.922.177-.476.27-.979.274-1.486.037-.84.046-1.095.046-3.23s-.01-2.39-.055-3.229c-.027-.784-.164-1.204-.274-1.495a2.4 2.4 0 0 0-.593-.913 2.6 2.6 0 0 0-.92-.602c-.284-.11-.703-.237-1.488-.273ZM6.697 2.05c.857-.036 1.131-.045 3.302-.045a63 63 0 0 1 3.302.045c.664.014 1.321.14 1.943.374a4 4 0 0 1 1.414.922c.41.397.728.88.93 1.414.23.622.354 1.279.365 1.942C18 7.56 18 7.824 18 10.005c0 2.17-.01 2.444-.046 3.292-.036.858-.173 1.442-.374 1.943-.2.53-.474.976-.92 1.423a3.9 3.9 0 0 1-1.415.922c-.51.191-1.095.337-1.943.374-.857.036-1.122.045-3.302.045-2.171 0-2.445-.009-3.302-.055-.849-.027-1.432-.164-1.943-.364a4.15 4.15 0 0 1-1.414-.922 4.1 4.1 0 0 1-.93-1.423c-.183-.51-.329-1.085-.365-1.943C2.009 12.45 2 12.167 2 10.004c0-2.161 0-2.435.055-3.302.027-.848.164-1.432.365-1.942a4.4 4.4 0 0 1 .92-1.414 4.2 4.2 0 0 1 1.415-.93c.51-.183 1.094-.33 1.943-.366Zm.427 4.806a4.105 4.105 0 1 1 5.805 5.805 4.105 4.105 0 0 1-5.805-5.805m1.882 5.371a2.668 2.668 0 1 0 2.042-4.93 2.668 2.668 0 0 0-2.042 4.93m5.922-5.942a.958.958 0 1 1-1.355-1.355.958.958 0 0 1 1.355 1.355" clip-rule="evenodd"/></svg> 2363</span> 2364 <span class="visually-hidden">Instagram</span> 2365 </a> 2366 </li><li class="list-social__item"> 2367 <a href="https://www.youtube.com/channel/UCCk62YkJ6aQA62KAgH0PPrQ?view_as=subscriber" class="list-social__link link"> 2368 <span class="svg-wrapper"><svg class="icon icon-youtube" viewBox="0 0 20 20"><path fill="currentColor" d="M18.16 5.87c.34 1.309.34 4.08.34 4.08s0 2.771-.34 4.08a2.13 2.13 0 0 1-1.53 1.53c-1.309.34-6.63.34-6.63.34s-5.321 0-6.63-.34a2.13 2.13 0 0 1-1.53-1.53c-.34-1.309-.34-4.08-.34-4.08s0-2.771.34-4.08a2.17 2.17 0 0 1 1.53-1.53C4.679 4 10 4 10 4s5.321 0 6.63.34a2.17 2.17 0 0 1 1.53 1.53M8.3 12.5l4.42-2.55L8.3 7.4z"/></svg> 2369</span> 2370 <span class="visually-hidden">YouTube</span> 2371 </a> 2372 </li></ul> 2373 </div> 2374 </div> 2375 </div> 2376 </div> 2377 </details> 2378</header-drawer> 2379<a href="/" class="header__heading-link link link--text focus-inset"><div class="header__heading-logo-wrapper"> 2380 2381 <img src="//wenonah.com/cdn/shop/files/WenonahAdminLogo.png?v=1748551425&width=600" alt="Wenonah Canoe" srcset="//wenonah.com/cdn/shop/files/WenonahAdminLogo.png?v=1748551425&width=240 240w, //wenonah.com/cdn/shop/files/WenonahAdminLogo.png?v=1748551425&width=360 360w, //wenonah.com/cdn/shop/files/WenonahAdminLogo.png?v=1748551425&width=480 480w" width="240" height="45.0" loading="eager" class="header__heading-logo motion-reduce" sizes="(max-width: 480px) 50vw, 240px"> 2382 </div></a> 2383 2384<nav class="header__inline-menu"> 2385 <ul class="list-menu list-menu--inline" role="list"><li><a 2386 id="HeaderMenu-home" 2387 href="/" 2388 class="header__menu-item list-menu__item link link--text focus-inset" 2389 2390 > 2391 <span 2392 >Home</span> 2393 </a></li><li><header-menu> 2394 <details id="Details-HeaderMenu-2"> 2395 <summary 2396 id="HeaderMenu-canoes" 2397 class="header__menu-item list-menu__item link focus-inset" 2398 > 2399 <span 2400 >Canoes</span><svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"/></svg> 2401</summary> 2402<ul 2403 id="HeaderMenu-MenuList-2" 2404 class="header__submenu list-menu list-menu--disclosure color-scheme-1 gradient caption-large motion-reduce global-settings-popup" 2405 role="list" 2406 tabindex="-1" 2407><li><a 2408 id="HeaderMenu-canoes-versatile-canoes" 2409 href="/collections/versatile-canoes" 2410 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2411 2412 > 2413 Versatile Canoes 2414 </a></li><li><a 2415 id="HeaderMenu-canoes-fast-canoes" 2416 href="/collections/fast-canoes" 2417 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2418 2419 > 2420 Fast Canoes 2421 </a></li><li><a 2422 id="HeaderMenu-canoes-fishing-canoes" 2423 href="/collections/fishing-canoes" 2424 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2425 2426 > 2427 Fishing Canoes 2428 </a></li><li><a 2429 id="HeaderMenu-canoes-river-canoes" 2430 href="/collections/river-canoes-1" 2431 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2432 2433 > 2434 River Canoes 2435 </a></li><li><a 2436 id="HeaderMenu-canoes-racing-canoes" 2437 href="/collections/race-canoes" 2438 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2439 2440 > 2441 Racing Canoes 2442 </a></li><li><a 2443 id="HeaderMenu-canoes-pack-canoes" 2444 href="/collections/pack" 2445 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2446 2447 > 2448 Pack Canoes 2449 </a></li><li><a 2450 id="HeaderMenu-canoes-legacy-canoes" 2451 href="/collections/legacy" 2452 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2453 2454 > 2455 Legacy Canoes 2456 </a></li><li><a 2457 id="HeaderMenu-canoes-retired-models" 2458 href="/pages/wenonah-retired-canoe-models" 2459 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2460 2461 > 2462 Retired Models 2463 </a></li></ul> 2464 </details> 2465 </header-menu></li><li><header-menu> 2466 <details id="Details-HeaderMenu-3"> 2467 <summary 2468 id="HeaderMenu-accessories" 2469 class="header__menu-item list-menu__item link focus-inset" 2470 >
2471 <span 2472 >Accessories</span><svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"/></svg> 2473</summary> 2474<ul 2475 id="HeaderMenu-MenuList-3" 2476 class="header__submenu list-menu list-menu--disclosure color-scheme-1 gradient caption-large motion-reduce global-settings-popup" 2477 role="list" 2478 tabindex="-1" 2479><li><a 2480 id="HeaderMenu-accessories-paddles" 2481 href="/collections/frontpage/Canoe-Paddles" 2482 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2483 2484 > 2485 Paddles 2486 </a></li><li><a 2487 id="HeaderMenu-accessories-portage" 2488 href="/collections/portage/Canoe-Portaging" 2489 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2490 2491 > 2492 Portage 2493 </a></li><li><a 2494 id="HeaderMenu-accessories-seating" 2495 href="/collections/seating/Canoe-Seating" 2496 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2497 2498 > 2499 Seating 2500 </a></li><li><a 2501 id="HeaderMenu-accessories-transport" 2502 href="/collections/canoe-transport" 2503 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2504 2505 > 2506 Transport 2507 </a></li><li><a 2508 id="HeaderMenu-accessories-wenonah-gear" 2509 href="/collections/wenonah-gear/Hats+Caps+Tees" 2510 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2511 2512 > 2513 Wenonah Gear 2514 </a></li><li><a 2515 id="HeaderMenu-accessories-parts-maintenance" 2516 href="/collections/maintenance-parts/Canoe-repair-items." 2517 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2518 2519 > 2520 Parts & Maintenance 2521 </a></li><li><a 2522 id="HeaderMenu-accessories-mfr-certificate-of-origin" 2523 href="/products/manufacturers-certificate-of-origin-mdo" 2524 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2525 2526 > 2527 MFR Certificate of Origin 2528 </a></li></ul> 2529 </details> 2530 </header-menu></li><li><header-menu> 2531 <details id="Details-HeaderMenu-4"> 2532 <summary 2533 id="HeaderMenu-about" 2534 class="header__menu-item list-menu__item link focus-inset" 2535 > 2536 <span 2537 >About</span><svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"/></svg> 2538</summary> 2539<ul 2540 id="HeaderMenu-MenuList-4" 2541 class="header__submenu list-menu list-menu--disclosure color-scheme-1 gradient caption-large motion-reduce global-settings-popup" 2542 role="list" 2543 tabindex="-1" 2544><li><a 2545 id="HeaderMenu-about-our-story" 2546 href="/pages/wenonah-history" 2547 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2548 2549 > 2550 Our Story 2551 </a></li><li><a 2552 id="HeaderMenu-about-canoe-material-options" 2553 href="/pages/material-descriptions" 2554 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2555 2556 > 2557 Canoe Material Options 2558 </a></li><li><a 2559 id="HeaderMenu-about-canoe-trim-options" 2560 href="/pages/canoe-trim-packages" 2561 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2562 2563 > 2564 Canoe Trim Options 2565 </a></li></ul> 2566 </details> 2567 </header-menu></li><li><a 2568 id="HeaderMenu-contact" 2569 href="/pages/contact-wenonah" 2570 class="header__menu-item list-menu__item link link--text focus-inset" 2571 2572 >
2573 <span 2574 >Contact</span> 2575 </a></li><li><a 2576 id="HeaderMenu-where-to-buy" 2577 href="/pages/store-locator" 2578 class="header__menu-item list-menu__item link link--text focus-inset" 2579 2580 aria-current="page" 2581 2582 > 2583 <span 2584 class="header__active-menu-item" 2585 2586 >Where To Buy</span> 2587 </a></li><li><header-menu> 2588 <details id="Details-HeaderMenu-7"> 2589 <summary 2590 id="HeaderMenu-policies" 2591 class="header__menu-item list-menu__item link focus-inset" 2592 > 2593 <span 2594 >Policies</span><svg class="icon icon-caret" viewBox="0 0 10 6"><path fill="currentColor" fill-rule="evenodd" d="M9.354.646a.5.5 0 0 0-.708 0L5 4.293 1.354.646a.5.5 0 0 0-.708.708l4 4a.5.5 0 0 0 .708 0l4-4a.5.5 0 0 0 0-.708" clip-rule="evenodd"/></svg> 2595</summary> 2596<ul 2597 id="HeaderMenu-MenuList-7" 2598 class="header__submenu list-menu list-menu--disclosure color-scheme-1 gradient caption-large motion-reduce global-settings-popup" 2599 role="list" 2600 tabindex="-1" 2601><li><a 2602 id="HeaderMenu-policies-owners-manual" 2603 href="https://cdn.shopify.com/s/files/1/0768/3289/9308/files/WC_owners_manual.pdf?v=1781630629" 2604 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2605 2606 > 2607 Owners Manual 2608 </a></li><li><a 2609 id="HeaderMenu-policies-canoe-warranty" 2610 href="/pages/canoe-warranty" 2611 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2612 2613 > 2614 Canoe Warranty 2615 </a></li><li><a 2616 id="HeaderMenu-policies-canoe-registration" 2617 href="/pages/canoe-registration" 2618 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2619 2620 > 2621 Canoe Registration 2622 </a></li><li><a 2623 id="HeaderMenu-policies-privacy-policy" 2624 href="/pages/privacy-policy" 2625 class="header__menu-item list-menu__item link link--text focus-inset caption-large" 2626 2627 > 2628 Privacy Policy 2629 </a></li></ul> 2630 </details> 2631 </header-menu></li></ul> 2632</nav> 2633 2634<div class="header__icons header__icons--localization header-localization"> 2635 <div class="desktop-localization-wrapper"> 2636</div> 2637 2638 2639<details-modal class="header__search"> 2640 <details> 2641 <summary 2642 class="header__icon header__icon--search header__icon--summary link focus-inset modal__toggle" 2643 aria-haspopup="dialog" 2644 aria-label="Search" 2645 > 2646 <span> 2647 <span class="svg-wrapper"><svg fill="none" class="icon icon-search" viewBox="0 0 18 19"><path fill="currentColor" fill-rule="evenodd" d="M11.03 11.68A5.784 5.784 0 1 1 2.85 3.5a5.784 5.784 0 0 1 8.18 8.18m.26 1.12a6.78 6.78 0 1 1 .72-.7l5.4 5.4a.5.5 0 1 1-.71.7z" clip-rule="evenodd"/></svg> 2648</span> 2649 <span class="svg-wrapper header__icon-close"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17"><path fill="currentColor" d="M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z"/></svg> 2650</span> 2651 </span> 2652 </summary> 2653 <div 2654 class="search-modal modal__content gradient" 2655 role="dialog" 2656 aria-modal="true" 2657 aria-label="Search" 2658 > 2659 <div class="modal-overlay"></div> 2660 <div 2661 class="search-modal__content search-modal__content-bottom" 2662 tabindex="-1" 2663 ><predictive-search class="search-modal__form" data-loading-text="Loading..."><form action="/search" method="get" role="search" class="search search-modal__form"> 2664 <div class="field"> 2665 <input 2666 class="search__input field__input" 2667 id="Search-In-Modal" 2668 type="search" 2669 name="q" 2670 value="" 2671 placeholder="Search"role="combobox" 2672 aria-expanded="false" 2673 aria-owns="predictive-search-results" 2674 aria-controls="predictive-search-results" 2675 aria-haspopup="listbox"
2676 aria-autocomplete="list" 2677 autocorrect="off" 2678 autocomplete="off" 2679 autocapitalize="off" 2680 spellcheck="false"> 2681 <label class="field__label" for="Search-In-Modal">Search</label> 2682 <input type="hidden" name="options[prefix]" value="last"> 2683 <button 2684 type="reset" 2685 class="reset__button field__button hidden" 2686 aria-label="Clear search term" 2687 > 2688 <span class="svg-wrapper"><svg fill="none" stroke="currentColor" class="icon icon-close" viewBox="0 0 18 18"><circle cx="9" cy="9" r="8.5" stroke-opacity=".2"/><path stroke-linecap="round" stroke-linejoin="round" d="M11.83 11.83 6.172 6.17M6.229 11.885l5.544-5.77"/></svg> 2689</span> 2690 </button> 2691 <button class="search__button field__button" aria-label="Search"> 2692 <span class="svg-wrapper"><svg fill="none" class="icon icon-search" viewBox="0 0 18 19"><path fill="currentColor" fill-rule="evenodd" d="M11.03 11.68A5.784 5.784 0 1 1 2.85 3.5a5.784 5.784 0 0 1 8.18 8.18m.26 1.12a6.78 6.78 0 1 1 .72-.7l5.4 5.4a.5.5 0 1 1-.71.7z" clip-rule="evenodd"/></svg> 2693</span> 2694 </button> 2695 </div><div class="predictive-search predictive-search--header" tabindex="-1" data-predictive-search> 2696 2697<div class="predictive-search__loading-state"> 2698 <svg xmlns="http://www.w3.org/2000/svg" class="spinner" viewBox="0 0 66 66"><circle stroke-width="6" cx="33" cy="33" r="30" fill="none" class="path"/></svg> 2699 2700</div> 2701</div> 2702 2703 <span class="predictive-search-status visually-hidden" role="status" aria-hidden="true"></span></form></predictive-search><button 2704 type="button" 2705 class="search-modal__close-button modal__close-button link link--text focus-inset" 2706 aria-label="Close" 2707 > 2708 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17"><path fill="currentColor" d="M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z"/></svg> 2709</span> 2710 </button> 2711 </div> 2712 </div> 2713 </details> 2714</details-modal> 2715 2716<a href="https://wenonah.com/customer_authentication/redirect?locale=en®ion_country=US" class="header__icon header__icon--account link focus-inset small-hide" rel="nofollow"> 2717 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-account" viewBox="0 0 18 19"><path fill="currentColor" fill-rule="evenodd" d="M6 4.5a3 3 0 1 1 6 0 3 3 0 0 1-6 0m3-4a4 4 0 1 0 0 8 4 4 0 0 0 0-8m5.58 12.15c1.12.82 1.83 2.24 1.91 4.85H1.51c.08-2.6.79-4.03 1.9-4.85C4.66 11.75 6.5 11.5 9 11.5s4.35.26 5.58 1.15M9 10.5c-2.5 0-4.65.24-6.17 1.35C1.27 12.98.5 14.93.5 18v.5h17V18c0-3.07-.77-5.02-2.33-6.15-1.52-1.1-3.67-1.35-6.17-1.35" clip-rule="evenodd"/></svg> 2718</span> 2719 <span class="visually-hidden">Log in</span> 2720 </a><a href="/cart" class="header__icon header__icon--cart link focus-inset" id="cart-icon-bubble"> 2721 2722 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart-empty" viewBox="0 0 40 40"><path fill="currentColor" fill-rule="evenodd" d="M15.75 11.8h-3.16l-.77 11.6a5 5 0 0 0 4.99 5.34h7.38a5 5 0 0 0 4.99-5.33L28.4 11.8zm0 1h-2.22l-.71 10.67a4 4 0 0 0 3.99 4.27h7.38a4 4 0 0 0 4-4.27l-.72-10.67h-2.22v.63a4.75 4.75 0 1 1-9.5 0zm8.5 0h-7.5v.63a3.75 3.75 0 1 0 7.5 0z"/></svg> 2723</span> 2724 2725 <span class="visually-hidden">Cart</span></a> 2726 </div> 2727 </header> 2728</sticky-header> 2729 2730<cart-notification> 2731 <div class="cart-notification-wrapper page-width"> 2732 <div 2733 id="cart-notification" 2734 class="cart-notification focus-inset color-scheme-2 gradient" 2735 aria-modal="true" 2736 aria-label="Item added to your cart" 2737 role="dialog" 2738 tabindex="-1" 2739 > 2740 <div class="cart-notification__header"> 2741 <h2 class="cart-notification__heading caption-large text-body"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-checkmark" viewBox="0 0 12 9">
2741<path fill="currentColor" fill-rule="evenodd" d="M11.35.643a.5.5 0 0 1 .006.707l-6.77 6.886a.5.5 0 0 1-.719-.006L.638 4.845a.5.5 0 1 1 .724-.69l2.872 3.011 6.41-6.517a.5.5 0 0 1 .707-.006z" clip-rule="evenodd"/></svg> 2742Item added to your cart 2743 </h2> 2744 <button 2745 type="button" 2746 class="cart-notification__close modal__close-button link link--text focus-inset" 2747 aria-label="Close" 2748 > 2749 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17"><path fill="currentColor" d="M.865 15.978a.5.5 0 0 0 .707.707l7.433-7.431 7.579 7.282a.501.501 0 0 0 .846-.37.5.5 0 0 0-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 1 0-.707-.708L8.991 7.853 1.413.573a.5.5 0 1 0-.693.72l7.563 7.268z"/></svg> 2750</span> 2751 </button> 2752 </div> 2753 <div id="cart-notification-product" class="cart-notification-product"></div> 2754 <div class="cart-notification__links"> 2755 <a 2756 href="/cart" 2757 id="cart-notification-button" 2758 class="button button--secondary button--full-width" 2759 >View cart</a> 2760 2761 <form action="/cart" method="post" id="cart-notification-form"> 2762 <button class="button button--primary button--full-width" name="checkout"> 2763 Check out 2764 </button> 2765 </form> 2766 2767 2768 <button type="button" class="link button-label">Continue shopping</button> 2769 </div> 2770 </div> 2771 </div> 2772</cart-notification> 2773<style data-shopify> 2774 .cart-notification { 2775 display: none; 2776 } 2777</style> 2778 2779
2780<script type="application/ld+json"> 2781 { 2782 "@context": "http://schema.org", 2783 "@type": "Organization", 2784 "name": "Wenonah Canoe", 2785 2786 "logo": "https:\/\/wenonah.com\/cdn\/shop\/files\/WenonahAdminLogo.png?v=1748551425\u0026width=500", 2787 2788 "sameAs": [ 2789 "", 2790 "https:\/\/www.facebook.com\/WenonahCanoe", 2791 "", 2792 "https:\/\/www.instagram.com\/wenonah_canoe\/", 2793 "", 2794 "", 2795 "", 2796 "https:\/\/www.youtube.com\/channel\/UCCk62YkJ6aQA62KAgH0PPrQ?view_as=subscriber", 2797 "" 2798 ], 2799 "url": "https:\/\/wenonah.com\/pages\/store-locator" 2800 } 2801</script>
2801 2802</div> 2803<!-- END sections: header-group --> 2804 2805 <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1"> 2806 <section id="shopify-section-template--19896698011884__main" class="shopify-section section"><link href="//wenonah.com/cdn/shop/t/2/assets/section-main-page.css?v=848677459125201531749921820" rel="stylesheet" type="text/css" media="all" /> 2807<style data-shopify>.section-template--19896698011884__main-padding { 2808 padding-top: 21px; 2809 padding-bottom: 21px; 2810 } 2811 2812 @media screen and (min-width: 750px) { 2813 .section-template--19896698011884__main-padding { 2814 padding-top: 28px; 2815 padding-bottom: 28px; 2816 } 2817 }</style><div class="page-width page-width--narrow section-template--19896698011884__main-padding"> 2818 <h1 class="main-page-title page-title h0 scroll-trigger animate--fade-in"> 2819 Store Locator 2820 </h1> 2821 <div class="rte scroll-trigger animate--slide-in"> 2822 <!-- Start Stockist.co widget --> 2823<stockist-store-locator data-stockist-widget-tag="map_g3y598z3"> 2824 Loading store locator from <a href="https://stockist.co">Stockist store locator</a>... 2825</stockist-store-locator>
2826<script async src="https://stockist.co/embed/v1/widget.min.js"></script>
2826 2827<!-- End Stockist.co widget --> 2828 </div> 2829</div> 2830 2831 2832</section><section id="shopify-section-template--19896698011884__178526450171925d75" class="shopify-section section"><div class="page-width scroll-trigger animate--slide-in"></div> 2833 2834 2835</section><section id="shopify-section-template--19896698011884__1785264535fc6767c6" class="shopify-section section"><div class="page-width scroll-trigger animate--slide-in"><div id="shopify-block-AVExPczkwK3dOamlXc__forms_inline_ahktpH" class="shopify-block shopify-app-block"><div 2836 id='AVExPczkwK3dOamlXc__forms_inline_ahktpH' 2837 data-form-root='true' 2838 data-forms-id='forms-root-1090509' 2839 data-forms-text-color='#202020' 2840 data-forms-button-background-color='#202020' 2841 data-forms-button-label-color='#ffffff' 2842 data-forms-links-color='#1878b9' 2843 data-forms-errors-color='#e02229' 2844 data-forms-text-alignment='center' 2845 data-forms-alignment='center' 2846 data-forms-padding-top='0' 2847 data-forms-padding-right='0' 2848 data-forms-padding-bottom='24' 2849 data-forms-padding-left='0' 2850></div> 2851
2852<script> 2853 window['ShopifyForms'] = { 2854 ...window['ShopifyForms'], 2855 currentPageType: "page" 2856 }; 2857</script>
2857 2858 2859 2860</div> 2861</div> 2862 2863 2864</section><section id="shopify-section-template--19896698011884__178529632530bde427" class="shopify-section section"><div class="page-width scroll-trigger animate--slide-in"><div id="shopify-block-AMTVOYmF2U1lVa085W__forms_inline_xTdHcn" class="shopify-block shopify-app-block"><div 2865 id='AMTVOYmF2U1lVa085W__forms_inline_xTdHcn' 2866 data-form-root='true' 2867 data-forms-id='forms-root-1090509' 2868 data-forms-text-color='#202020' 2869 data-forms-button-background-color='#202020' 2870 data-forms-button-label-color='#FFFFFF' 2871 data-forms-links-color='#1878B9' 2872 data-forms-errors-color='#E02229' 2873 data-forms-text-alignment='center' 2874 data-forms-alignment='center' 2875 data-forms-padding-top='0' 2876 data-forms-padding-right='0' 2877 data-forms-padding-bottom='24' 2878 data-forms-padding-left='0' 2879></div> 2880
2881<script> 2882 window['ShopifyForms'] = { 2883 ...window['ShopifyForms'], 2884 currentPageType: "page" 2885 }; 2886</script>
2886 2887 2888 2889</div> 2890</div> 2891 2892 2893</section> 2894 </main> 2895 2896 <!-- BEGIN sections: footer-group --> 2897<div id="shopify-section-sections--19896699191532__footer" class="shopify-section shopify-section-group-footer-group"> 2898<link href="//wenonah.com/cdn/shop/t/2/assets/section-footer.css?v=60318643098753476351749921820" rel="stylesheet" type="text/css" media="all" /> 2899<link href="//wenonah.com/cdn/shop/t/2/assets/component-newsletter.css?v=4727253280200485261749921818" rel="stylesheet" type="text/css" media="all" /> 2900<link href="//wenonah.com/cdn/shop/t/2/assets/component-list-menu.css?v=151968516119678728991749921818" rel="stylesheet" type="text/css" media="all" /> 2901<link href="//wenonah.com/cdn/shop/t/2/assets/component-list-payment.css?v=69253961410771838501749921818" rel="stylesheet" type="text/css" media="all" /> 2902<link href="//wenonah.com/cdn/shop/t/2/assets/component-list-social.css?v=35792976012981934991749921818" rel="stylesheet" type="text/css" media="all" /> 2903<style data-shopify>.footer { 2904 margin-top: 0px; 2905 } 2906 2907 .section-sections--19896699191532__footer-padding { 2908 padding-top: 27px; 2909 padding-bottom: 27px; 2910 } 2911 2912 @media screen and (min-width: 750px) { 2913 .footer { 2914 margin-top: 0px; 2915 } 2916 2917 .section-sections--19896699191532__footer-padding { 2918 padding-top: 36px; 2919 padding-bottom: 36px; 2920 } 2921 }</style><footer class="footer color-scheme-1 gradient section-sections--19896699191532__footer-padding"><div class="footer__content-top page-width"><div 2922 class="footer-block--newsletter scroll-trigger animate--slide-in" 2923 2924 data-cascade 2925 2926 ><div class="footer-block__newsletter"><h2 class="footer-block__heading inline-richtext">Subscribe to our emails</h2><form method="post" action="/contact#ContactFooter" id="ContactFooter" accept-charset="UTF-8" class="footer__newsletter newsletter-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="contact[tags]" value="newsletter"> 2927 <div class="newsletter-form__field-wrapper"> 2928 <div class="field"> 2929 <input 2930 id="NewsletterForm--sections--19896699191532__footer" 2931 type="email" 2932 name="contact[email]" 2933 class="field__input" 2934 value="" 2935 aria-required="true" 2936 autocorrect="off" 2937 autocapitalize="off" 2938 autocomplete="email" 2939 2940 placeholder="Email" 2941 required 2942 > 2943 <label class="field__label" for="NewsletterForm--sections--19896699191532__footer"> 2944 Email 2945 </label> 2946 <button 2947 type="submit" 2948 class="newsletter-form__button field__button" 2949 name="commit" 2950 id="Subscribe" 2951 aria-label="Subscribe" 2952 > 2953 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2953ox="0 0 14 10"><path fill="currentColor" fill-rule="evenodd" d="M8.537.808a.5.5 0 0 1 .817-.162l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 1 1-.708-.708L11.793 5.5H1a.5.5 0 0 1 0-1h10.793L8.646 1.354a.5.5 0 0 1-.109-.546" clip-rule="evenodd"/></svg> 2954</span> 2955 </button> 2956 </div></div></form></div> 2957 2958<ul class="list-unstyled list-social footer__list-social" role="list"><li class="list-social__item"> 2959 <a href="https://www.facebook.com/WenonahCanoe" class="link list-social__link" target="_blank"> 2960 <span class="svg-wrapper"><svg class="icon icon-facebook" viewBox="0 0 20 20"><path fill="currentColor" d="M18 10.049C18 5.603 14.419 2 10 2s-8 3.603-8 8.049C2 14.067 4.925 17.396 8.75 18v-5.624H6.719v-2.328h2.03V8.275c0-2.017 1.195-3.132 3.023-3.132.874 0 1.79.158 1.79.158v1.98h-1.009c-.994 0-1.303.621-1.303 1.258v1.51h2.219l-.355 2.326H11.25V18c3.825-.604 6.75-3.933 6.75-7.951"/></svg> 2961</span> 2962 <span class="visually-hidden">Facebook</span> 2963 </a> 2964 </li><li class="list-social__item"> 2965 <a href="https://www.instagram.com/wenonah_canoe/" class="link list-social__link" target="_blank"> 2966 <span class="svg-wrapper"><svg class="icon icon-instagram" viewBox="0 0 20 20"><path fill="currentColor" fill-rule="evenodd" d="M13.23 3.492c-.84-.037-1.096-.046-3.23-.046-2.144 0-2.39.01-3.238.055-.776.027-1.195.164-1.487.273a2.4 2.4 0 0 0-.912.593 2.5 2.5 0 0 0-.602.922c-.11.282-.238.702-.274 1.486-.046.84-.046 1.095-.046 3.23s.01 2.39.046 3.229c.004.51.097 1.016.274 1.495.145.365.319.639.602.913.282.282.538.456.92.602.474.176.974.268 1.479.273.848.046 1.103.046 3.238.046s2.39-.01 3.23-.046c.784-.036 1.203-.164 1.486-.273.374-.146.648-.329.921-.602.283-.283.447-.548.602-.922.177-.476.27-.979.274-1.486.037-.84.046-1.095.046-3.23s-.01-2.39-.055-3.229c-.027-.784-.164-1.204-.274-1.495a2.4 2.4 0 0 0-.593-.913 2.6 2.6 0 0 0-.92-.602c-.284-.11-.703-.237-1.488-.273ZM6.697 2.05c.857-.036 1.131-.045 3.302-.045a63 63 0 0 1 3.302.045c.664.014 1.321.14 1.943.374a4 4 0 0 1 1.414.922c.41.397.728.88.93 1.414.23.622.354 1.279.365 1.942C18 7.56 18 7.824 18 10.005c0 2.17-.01 2.444-.046 3.292-.036.858-.173 1.442-.374 1.943-.2.53-.474.976-.92 1.423a3.9 3.9 0 0 1-1.415.922c-.51.191-1.095.337-1.943.374-.857.036-1.122.045-3.302.045-2.171 0-2.445-.009-3.302-.055-.849-.027-1.432-.164-1.943-.364a4.15 4.15 0 0 1-1.414-.922 4.1 4.1 0 0 1-.93-1.423c-.183-.51-.329-1.085-.365-1.943C2.009 12.45 2 12.167 2 10.004c0-2.161 0-2.435.055-3.302.027-.848.164-1.432.365-1.942a4.4 4.4 0 0 1 .92-1.414 4.2 4.2 0 0 1 1.415-.93c.51-.183 1.094-.33 1.943-.366Zm.427 4.806a4.105 4.105 0 1 1 5.805 5.805 4.105 4.105 0 0 1-5.805-5.805m1.882 5.371a2.668 2.668 0 1 0 2.042-4.93 2.668 2.668 0 0 0-2.042 4.93m5.922-5.942a.958.958 0 1 1-1.355-1.355.958.958 0 0 1 1.355 1.355" clip-rule="evenodd"/></svg> 2967</span> 2968 <span class="visually-hidden">Instagram</span> 2969 </a> 2970 </li><li class="list-social__item"> 2971 <a href="https://www.youtube.com/channel/UCCk62YkJ6aQA62KAgH0PPrQ?view_as=subscriber" class="link list-social__link" target="_blank"> 2972 <span class="svg-wrapper"><svg class="icon icon-youtube" viewBox="0 0 20 20"><path fill="currentColor" d="M18.16 5.87c.34 1.309.34 4.08.34 4.08s0 2.771-.34 4.08a2.13 2.13 0 0 1-1.53 1.53c-1.309.34-6.63.34-6.63.34s-5.321 0-6.63-.34a2.13 2.13 0 0 1-1.53-1.53c-.34-1.309-.34-4.08-.34-4.08s0-2.771.34-4.08a2.17 2.17 0 0 1 1.53-1.53C4.679 4 10 4 10 4s5.321 0 6.63.34a2.17 2.17 0 0 1 1.53 1.53M8.3 12.5l4.42-2.55L8.3 7.4z"/></svg> 2973</span> 2974 <span class="visually-hidden">YouTube</span> 2975 </a> 2976 </li></ul> 2977</div> 2978 </div><div 2979 class="footer__content-bottom scroll-trigger animate--slide-in" 2980 2981 data-cascade 2982 2983 > 2984 <div class="footer__content-bottom-wrapper page-width"> 2985 <div class="footer__column footer__localization isolate"></div> 2986 <div class="footer__column footer__column--info"><div class="footer__payment"> 2987 <span class="visually-hidden">Payment methods</span> 2988 <ul class="list list-payment" role="list"><li class="list-payment__item"> 2989 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-american_express"><title id="pi-american_express">American Express</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#0071CE" style="fill:#0071CE;fill:color(display-p3 0.0000 0.4431 0.8078);fill-opacity:1;"/>
2989<path d="M3 0.5H35C36.3348 0.5 37.5 1.58692 37.5 3V21C37.5 22.4239 36.4239 23.5 35 23.5H3C1.66524 23.5 0.5 22.4131 0.5 21V3C0.5 1.57614 1.57614 0.5 3 0.5Z" stroke="black" stroke-opacity="0.07" style="stroke:black;stroke-opacity:0.07;"/><path d="M25.8662 6.33203V3H31L31.8662 5.5332L32.7334 3H37V14.2002H36.7998L34.8672 16.2656L36.7998 18.3594H37V21.2666H33.5996L31.9336 19.3994L30.2002 21.2666H19.4668V12.666H16L20.2666 3H24.4004L25.8662 6.33203ZM20.5996 20.2656H27V18.5322H22.666V17.3994H26.8662V15.666H22.666V14.5322H27V12.7988H20.5996V20.2656ZM30.5332 16.5322L27 20.2656H29.5996L31.8662 17.8662L34.0664 20.2656H36.7324L33.1992 16.4658L36.7324 12.7988H34.1328L31.8662 15.1992L29.7324 12.7988H27L30.5332 16.5322ZM17.666 11.7324H19.9326L20.5332 10.1992H23.999L24.666 11.7324H26.999L23.666 4.19922H20.999L17.666 11.7324ZM33.5996 4.19922L31.9326 8.86621L30.1992 4.19922H27V11.666H29.0664V6.39941L31 11.666H32.7998L34.7324 6.39941V11.666H36.7324V4.13281L33.5996 4.19922ZM23.2656 8.46582H21.2656L22.2656 5.99902L23.2656 8.46582Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 2990 2991 </li><li class="list-payment__item"> 2992 <svg class="icon icon--full-color" version="1.1" xmlns="http://www.w3.org/2000/svg" role="img" x="0" y="0" width="38" height="24" viewBox="0 0 165.521 105.965" xml:space="preserve" aria-labelledby="pi-apple_pay"><title id="pi-apple_pay">Apple Pay</title><path fill="#000" d="M150.698 0H14.823c-.566 0-1.133 0-1.698.003-.477.004-.953.009-1.43.022-1.039.028-2.087.09-3.113.274a10.51 10.51 0 0 0-2.958.975 9.932 9.932 0 0 0-4.35 4.35 10.463 10.463 0 0 0-.975 2.96C.113 9.611.052 10.658.024 11.696a70.22 70.22 0 0 0-.022 1.43C0 13.69 0 14.256 0 14.823v76.318c0 .567 0 1.132.002 1.699.003.476.009.953.022 1.43.028 1.036.09 2.084.275 3.11a10.46 10.46 0 0 0 .974 2.96 9.897 9.897 0 0 0 1.83 2.52 9.874 9.874 0 0 0 2.52 1.83c.947.483 1.917.79 2.96.977 1.025.183 2.073.245 3.112.273.477.011.953.017 1.43.02.565.004 1.132.004 1.698.004h135.875c.565 0 1.132 0 1.697-.004.476-.002.952-.009 1.431-.02 1.037-.028 2.085-.09 3.113-.273a10.478 10.478 0 0 0 2.958-.977 9.955 9.955 0 0 0 4.35-4.35c.483-.947.789-1.917.974-2.96.186-1.026.246-2.074.274-3.11.013-.477.02-.954.022-1.43.004-.567.004-1.132.004-1.699V14.824c0-.567 0-1.133-.004-1.699a63.067 63.067 0 0 0-.022-1.429c-.028-1.038-.088-2.085-.274-3.112a10.4 10.4 0 0 0-.974-2.96 9.94 9.94 0 0 0-4.35-4.35A10.52 10.52 0 0 0 156.939.3c-1.028-.185-2.076-.246-3.113-.274a71.417 71.417 0 0 0-1.431-.022C151.83 0 151.263 0 150.698 0z" /><path fill="#FFF" d="M150.698 3.532l1.672.003c.452.003.905.008 1.36.02.793.022 1.719.065 2.583.22.75.135 1.38.34 1.984.648a6.392 6.392 0 0 1 2.804 2.807c.306.6.51 1.226.645 1.983.154.854.197 1.783.218 2.58.013.45.019.9.02 1.36.005.557.005 1.113.005 1.671v76.318c0 .558 0 1.114-.004 1.682-.002.45-.008.9-.02 1.35-.022.796-.065 1.725-.221 2.589a6.855 6.855 0 0 1-.645 1.975 6.397 6.397 0 0 1-2.808 2.807c-.6.306-1.228.511-1.971.645-.881.157-1.847.2-2.574.22-.457.01-.912.017-1.379.019-.555.004-1.113.004-1.669.004H14.801c-.55 0-1.1 0-1.66-.004a74.993 74.993 0 0 1-1.35-.018c-.744-.02-1.71-.064-2.584-.22a6.938 6.938 0 0 1-1.986-.65 6.337 6.337 0 0 1-1.622-1.18 6.355 6.355 0 0 1-1.178-1.623 6.935 6.935 0 0 1-.646-1.985c-.156-.863-.2-1.788-.22-2.578a66.088 66.088 0 0 1-.02-1.355l-.003-1.327V14.474l.002-1.325a66.7 66.7 0 0 1 .02-1.357c.022-.792.065-1.717.222-2.587a6.924 6.924 0 0 1 .646-1.981c.304-.598.7-1.144 1.18-1.623a6.386 6.386 0 0 1 1.624-1.18 6.96 6.96 0 0 1 1.98-.646c.865-.155 1.792-.198 2.586-.22.452-.012.905-.017 1.354-.02l1.677-.003h135.875" /><g><g><path fill="#000" d="M43.508 35.77c1.404-1.755 2.356-4.112 2.105-6.52-2.054.102-4.56 1.355-6.012 3.112-1.303 1.504-2.456 3.959-2.156 6.266 2.306.2 4.61-1.152 6.063-2.858" /><path fill="#000" d="M45.587 39.079c-3.35-.2-6.196 1.9-7.795 1.9-1.6 0-4.049-1.8-6.698-1.751-3.447.05-6.645 2-8.395 5.1-3.598 6.2-.95 15.4 2.55 20.45 1.699 2.5 3.747 5.25 6.445 5.151 2.55-.1 3.549-1.65 6.647-1.65 3.097 0 3.997 1.65 6.696 1.6 2.798-.05 4.548-2.5 6.247-5 1.95-2.85 2.747-5.6 2.797-5.75-.05-.05-5.396-2.101-5.446-8.251-.05-5.15 4.198-7.6 4.398-7.751-2.399-3.548-6.147-3.948-7.447-4.048" /></g><g><path fill="#000" d="M78.973 32.11c7.278 0 12.347 5.017 12.347 12.321 0 7.33-5.173 12.373-12.529 12.373h-8.058V69.62h-5.822V32.11h14.062zm-8.24 19.807h6.68c5.07 0 7.954-2.729 7.954-7.46 0-4.73-2.885-7.434-7.928-7.434h-6.706v14.894z" />
2992<path fill="#000" d="M92.764 61.847c0-4.809 3.665-7.564 10.423-7.98l7.252-.442v-2.08c0-3.04-2.001-4.704-5.562-4.704-2.938 0-5.07 1.507-5.51 3.82h-5.252c.157-4.86 4.731-8.395 10.918-8.395 6.654 0 10.995 3.483 10.995 8.89v18.663h-5.38v-4.497h-.13c-1.534 2.937-4.914 4.782-8.579 4.782-5.406 0-9.175-3.222-9.175-8.057zm17.675-2.417v-2.106l-6.472.416c-3.64.234-5.536 1.585-5.536 3.95 0 2.288 1.975 3.77 5.068 3.77 3.95 0 6.94-2.522 6.94-6.03z" /><path fill="#000" d="M120.975 79.652v-4.496c.364.051 1.247.103 1.715.103 2.573 0 4.029-1.09 4.913-3.899l.52-1.663-9.852-27.293h6.082l6.863 22.146h.13l6.862-22.146h5.927l-10.216 28.67c-2.34 6.577-5.017 8.735-10.683 8.735-.442 0-1.872-.052-2.261-.157z" /></g></g></svg> 2993 2994 </li><li class="list-payment__item"> 2995 <svg class="icon icon--full-color" viewBox="0 0 38 24" width="38" height="24" role="img" aria-labelledby="pi-discover" fill="none" xmlns="http://www.w3.org/2000/svg"><title id="pi-discover">Discover</title><path fill="#000" opacity=".07" d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32z" fill="#fff"/><path d="M3.57 7.16H2v5.5h1.57c.83 0 1.43-.2 1.96-.63.63-.52 1-1.3 1-2.11-.01-1.63-1.22-2.76-2.96-2.76zm1.26 4.14c-.34.3-.77.44-1.47.44h-.29V8.1h.29c.69 0 1.11.12 1.47.44.37.33.59.84.59 1.37 0 .53-.22 1.06-.59 1.39zm2.19-4.14h1.07v5.5H7.02v-5.5zm3.69 2.11c-.64-.24-.83-.4-.83-.69 0-.35.34-.61.8-.61.32 0 .59.13.86.45l.56-.73c-.46-.4-1.01-.61-1.62-.61-.97 0-1.72.68-1.72 1.58 0 .76.35 1.15 1.35 1.51.42.15.63.25.74.31.21.14.32.34.32.57 0 .45-.35.78-.83.78-.51 0-.92-.26-1.17-.73l-.69.67c.49.73 1.09 1.05 1.9 1.05 1.11 0 1.9-.74 1.9-1.81.02-.89-.35-1.29-1.57-1.74zm1.92.65c0 1.62 1.27 2.87 2.9 2.87.46 0 .86-.09 1.34-.32v-1.26c-.43.43-.81.6-1.29.6-1.08 0-1.85-.78-1.85-1.9 0-1.06.79-1.89 1.8-1.89.51 0 .9.18 1.34.62V7.38c-.47-.24-.86-.34-1.32-.34-1.61 0-2.92 1.28-2.92 2.88zm12.76.94l-1.47-3.7h-1.17l2.33 5.64h.58l2.37-5.64h-1.16l-1.48 3.7zm3.13 1.8h3.04v-.93h-1.97v-1.48h1.9v-.93h-1.9V8.1h1.97v-.94h-3.04v5.5zm7.29-3.87c0-1.03-.71-1.62-1.95-1.62h-1.59v5.5h1.07v-2.21h.14l1.48 2.21h1.32l-1.73-2.32c.81-.17 1.26-.72 1.26-1.56zm-2.16.91h-.31V8.03h.33c.67 0 1.03.28 1.03.82 0 .55-.36.85-1.05.85z" fill="#231F20"/><path d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint0_linear)"/><path opacity=".65" d="M20.16 12.86a2.931 2.931 0 100-5.862 2.931 2.931 0 000 5.862z" fill="url(#pi-paint1_linear)"/><path d="M36.57 7.506c0-.1-.07-.15-.18-.15h-.16v.48h.12v-.19l.14.19h.14l-.16-.2c.06-.01.1-.06.1-.13zm-.2.07h-.02v-.13h.02c.06 0 .09.02.09.06 0 .05-.03.07-.09.07z" fill="#231F20"/><path d="M36.41 7.176c-.23 0-.42.19-.42.42 0 .23.19.42.42.42.23 0 .42-.19.42-.42 0-.23-.19-.42-.42-.42zm0 .77c-.18 0-.34-.15-.34-.35 0-.19.15-.35.34-.35.18 0 .33.16.33.35 0 .19-.15.35-.33.35z" fill="#231F20"/><path d="M37 12.984S27.09 19.873 8.976 23h26.023a2 2 0 002-1.984l.024-3.02L37 12.985z" fill="#F48120"/><defs><linearGradient id="pi-paint0_linear" x1="21.657" y1="12.275" x2="19.632" y2="9.104" gradientUnits="userSpaceOnUse"><stop stop-color="#F89F20"/><stop offset=".25" stop-color="#F79A20"/><stop offset=".533" stop-color="#F68D20"/><stop offset=".62" stop-color="#F58720"/><stop offset=".723" stop-color="#F48120"/><stop offset="1" stop-color="#F37521"/></linearGradient><linearGradient id="pi-paint1_linear" x1="21.338" y1="12.232" x2="18.378" y2="6.446" gradientUnits="userSpaceOnUse"><stop stop-color="#F58720"/><stop offset=".359" stop-color="#E16F27"/><stop offset=".703" stop-color="#D4602C"/><stop offset=".982" stop-color="#D05B2E"/></linearGradient></defs></svg> 2996 </li><li class="list-payment__item"> 2997 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" aria-labelledby="pi-google_pay"><title id="pi-google_pay">Google Pay</title><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF"/><path d="M18.093 11.976v3.2h-1.018v-7.9h2.691a2.447 2.447 0 0 1 1.747.692 2.28 2.28 0 0 1 .11 3.224l-.11.116c-.47.447-1.098.69-1.747.674l-1.673-.006zm0-3.732v2.788h1.698c.377.012.741-.135 1.005-.404a1.391 1.391 0 0 0-1.005-2.354l-1.698-.03zm6.484 1.348c.65-.03 1.286.188 1.778.613.445.43.682 1.03.65 1.649v3.334h-.969v-.766h-.049a1.93 1.93 0 0 1-1.673.931 2.17 2.17 0 0 1-1.496-.533 1.667 1.667 0 0 1-.613-1.324 1.606 1.606 0 0 1 .613-1.336 2.746 2.746 0 0 1 1.698-.515c.517-.02 1.03.093 1.49.331v-.208a1.134 1.134 0 0 0-.417-.901 1.416 1.416 0 0 0-.98-.368 1.545 1.545 0 0 0-1.319.717l-.895-.564a2.488 2.488 0 0 1 2.182-1.
299706zM23.29 13.52a.79.79 0 0 0 .337.662c.223.176.5.269.785.263.429-.001.84-.17 1.146-.472.305-.286.478-.685.478-1.103a2.047 2.047 0 0 0-1.324-.374 1.716 1.716 0 0 0-1.03.294.883.883 0 0 0-.392.73zm9.286-3.75l-3.39 7.79h-1.048l1.281-2.728-2.224-5.062h1.103l1.612 3.885 1.569-3.885h1.097z" fill="#5F6368"/><path d="M13.986 11.284c0-.308-.024-.616-.073-.92h-4.29v1.747h2.451a2.096 2.096 0 0 1-.9 1.373v1.134h1.464a4.433 4.433 0 0 0 1.348-3.334z" fill="#4285F4"/><path d="M9.629 15.721a4.352 4.352 0 0 0 3.01-1.097l-1.466-1.14a2.752 2.752 0 0 1-4.094-1.44H5.577v1.17a4.53 4.53 0 0 0 4.052 2.507z" fill="#34A853"/><path d="M7.079 12.05a2.709 2.709 0 0 1 0-1.735v-1.17H5.577a4.505 4.505 0 0 0 0 4.075l1.502-1.17z" fill="#FBBC04"/><path d="M9.629 8.44a2.452 2.452 0 0 1 1.74.68l1.3-1.293a4.37 4.37 0 0 0-3.065-1.183 4.53 4.53 0 0 0-4.027 2.5l1.502 1.171a2.715 2.715 0 0 1 2.55-1.875z" fill="#EA4335"/></svg> 2998 2999 </li><li class="list-payment__item"> 3000 <svg class="icon icon--full-color" width="38" height="24" role="img" aria-labelledby="pi-jcb" viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg"><title id="pi-jcb">JCB</title><g fill="none" fill-rule="evenodd"><g fill-rule="nonzero"><path d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z" fill="#000" opacity=".07"/><path d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32" fill="#FFF"/></g><path d="M11.5 5H15v11.5a2.5 2.5 0 0 1-2.5 2.5H9V7.5A2.5 2.5 0 0 1 11.5 5z" fill="#006EBC"/><path d="M18.5 5H22v11.5a2.5 2.5 0 0 1-2.5 2.5H16V7.5A2.5 2.5 0 0 1 18.5 5z" fill="#F00036"/><path d="M25.5 5H29v11.5a2.5 2.5 0 0 1-2.5 2.5H23V7.5A2.5 2.5 0 0 1 25.5 5z" fill="#2AB419"/>
3000<path d="M10.755 14.5c-1.06 0-2.122-.304-2.656-.987l.78-.676c.068 1.133 3.545 1.24 3.545-.19V9.5h1.802v3.147c0 .728-.574 1.322-1.573 1.632-.466.144-1.365.221-1.898.221zm8.116 0c-.674 0-1.388-.107-1.965-.366-.948-.425-1.312-1.206-1.3-2.199.012-1.014.436-1.782 1.468-2.165 1.319-.49 3.343-.261 3.926.27v.972c-.572-.521-1.958-.898-2.919-.46-.494.226-.737.917-.744 1.448-.006.56.245 1.252.744 1.497.953.467 2.39.04 2.919-.441v1.01c-.358.255-1.253.434-2.129.434zm8.679-2.587c.37-.235.582-.567.582-1.005 0-.438-.116-.687-.348-.939-.206-.207-.58-.469-1.238-.469H23v5h3.546c.696 0 1.097-.23 1.315-.415.283-.25.426-.53.426-.96 0-.431-.155-.908-.737-1.212zm-1.906-.281h-1.428v-1.444h1.495c.956 0 .944 1.444-.067 1.444zm.288 2.157h-1.716v-1.513h1.716c.986 0 1.083 1.513 0 1.513z" fill="#FFF" fill-rule="nonzero"/></g></svg> 3001 </li><li class="list-payment__item"> 3002 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-master"><title id="pi-master">Mastercard</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#1C1C1C" style="fill:#1C1C1C;fill:color(display-p3 0.1098 0.1098 0.1098);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#232323" style="fill:#232323;fill:color(display-p3 0.1373 0.1373 0.1373);fill-opacity:1;"/><path d="M14.6364 19.2727C18.8538 19.2727 22.2727 15.8538 22.2727 11.6364C22.2727 7.41892 18.8538 4 14.6364 4C10.4189 4 7 7.41892 7 11.6364C7 15.8538 10.4189 19.2727 14.6364 19.2727Z" fill="#EB001B" style="fill:#EB001B;fill:color(display-p3 0.9216 0.0000 0.1059);fill-opacity:1;"/><path d="M23.3637 19.2727C27.5811 19.2727 31 15.8538 31 11.6364C31 7.41892 27.5811 4 23.3637 4C19.1462 4 15.7273 7.41892 15.7273 11.6364C15.7273 15.8538 19.1462 19.2727 23.3637 19.2727Z" fill="#F79E1B" style="fill:#F79E1B;fill:color(display-p3 0.9686 0.6196 0.1059);fill-opacity:1;"/><path d="M22.2727 11.6362C22.2727 9.01797 20.9637 6.72706 19 5.41797C17.0364 6.83615 15.7273 9.12706 15.7273 11.6362C15.7273 14.1452 17.0364 16.5452 19 17.8543C20.9637 16.5452 22.2727 14.2543 22.2727 11.6362Z" fill="#FF5F00" style="fill:#FF5F00;fill:color(display-p3 1.0000 0.3725 0.0000);fill-opacity:1;"/></svg> 3003 3004 </li><li class="list-payment__item"> 3005 <svg class="icon icon--full-color" viewBox="-36 25 38 24" xmlns="http://www.w3.org/2000/svg" width="38" height="24" role="img" aria-labelledby="pi-unionpay"><title id="pi-unionpay">Union Pay</title><path fill="#005B9A" d="M-36 46.8v.7-.7zM-18.3 25v24h-7.2c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h1.4zm12.6 0c-1.3 0-2.9 1-3.2 2.3l-4.5 19.4c-.3 1.3.5 2.3 1.8 2.3h-4.9V25h10.8z"/><path fill="#E9292D" d="M-19.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3h-8.9c-.8 0-1.5-.6-1.5-1.4v-21c0-.8.7-1.6 1.5-1.6h14.7z"/><path fill="#0E73B9" d="M-5.7 25c-1.3 0-2.9 1.1-3.2 2.3l-4.4 19.4c-.3 1.3.5 2.3 1.8 2.3H-26h.5c-1.3 0-2.1-1-1.8-2.3l4.4-19.4c.3-1.3 1.9-2.3 3.2-2.3h14z"/><path fill="#059DA4" d="M2 26.6v21c0 .8-.6 1.4-1.5 1.4h-12.1c-1.3 0-2.1-1.1-1.8-2.3l4.5-19.4C-8.6 26-7 25-5.7 25H.5c.9 0 1.5.7 1.5 1.6z"/><path fill="#fff" d="M-21.122 38.645h.14c.14 0 .28-.07.28-.14l.42-.63h1.19l-.21.35h1.4l-.21.63h-1.68c-.21.28-.42.42-.7.42h-.84l.21-.63m-.21.91h3.01l-.21.7h-1.19l-.21.7h1.19l-.21.7h-1.19l-.28 1.05c-.07.14 0 .28.28.21h.98l-.21.7h-1.89c-.35 0-.49-.21-.35-.63l.35-1.33h-.77l.21-.7h.77l.21-.7h-.7l.21-.7zm4.83-1.75v.42s.56-.42 1.12-.42h1.96l-.77 2.66c-.07.28-.35.49-.77.49h-2.24l-.49 1.89c0 .07 0 .14.14.14h.42l-.14.56h-1.12c-.42 0-.56-.14-.49-.35l1.47-5.39h.91zm1.68.77h-1.75l-.21.7s.28-.21.77-.21h1.05l.14-.49zm-.63 1.68c.14 0 .21 0 .21-.14l.14-.35h-1.75l-.14.56 1.54-.07zm-1.19.84h.98v.42h.28c.14 0 .21-.07.21-.14l.07-.28h.84l-.14.49c-.07.35-.35.49-.77.56h-.56v.77c0 .14.07.21.35.21h.49l-.14.56h-1.19c-.35 0-.49-.14-.49-.49l.07-2.1zm4.2-2.45l.21-.84h1.19l-.07.28s.56-.28 1.05-.28h1.47l-.21.84h-.21l-1.12 3.85
3005h.21l-.21.77h-.21l-.07.35h-1.19l.07-.35h-2.17l.21-.77h.21l1.12-3.85h-.28m1.26 0l-.28 1.05s.49-.21.91-.28c.07-.35.21-.77.21-.77h-.84zm-.49 1.54l-.28 1.12s.56-.28.98-.28c.14-.42.21-.77.21-.77l-.91-.07zm.21 2.31l.21-.77h-.84l-.21.77h.84zm2.87-4.69h1.12l.07.42c0 .07.07.14.21.14h.21l-.21.7h-.77c-.28 0-.49-.07-.49-.35l-.14-.91zm-.35 1.47h3.57l-.21.77h-1.19l-.21.7h1.12l-.21.77h-1.26l-.28.42h.63l.14.84c0 .07.07.14.21.14h.21l-.21.7h-.7c-.35 0-.56-.07-.56-.35l-.14-.77-.56.84c-.14.21-.35.35-.63.35h-1.05l.21-.7h.35c.14 0 .21-.07.35-.21l.84-1.26h-1.05l.21-.77h1.19l.21-.7h-1.19l.21-.77zm-19.74-5.04c-.14.7-.42 1.19-.91 1.54-.49.35-1.12.56-1.89.56-.7 0-1.26-.21-1.54-.56-.21-.28-.35-.56-.35-.98 0-.14 0-.35.07-.56l.84-3.92h1.19l-.77 3.92v.28c0 .21.07.35.14.49.14.21.35.28.7.28s.7-.07.91-.28c.21-.21.42-.42.49-.77l.77-3.92h1.19l-.84 3.92m1.12-1.54h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35.14.21.21.49.14.91l-.49 2.38h-.91l.42-2.17c.07-.28.07-.49 0-.56-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.63-3.57m9.8 0h.84l-.07.49.14-.14c.28-.28.63-.42 1.05-.42.35 0 .63.14.77.35s.21.49.14.91l-.49 2.38h-.91l.42-2.24c.07-.21 0-.42-.07-.49-.07-.14-.21-.14-.35-.14-.21 0-.42.07-.56.21-.14.14-.28.35-.28.63l-.42 2.03h-.91l.7-3.57m-5.81 0h.98l-.77 3.5h-.98l.77-3.5m.35-1.33h.98l-.21.84h-.98l.21-.84zm1.4 4.55c-.21-.21-.35-.56-.35-.98v-.21c0-.07 0-.21.07-.28.14-.56.35-1.05.7-1.33.35-.35.84-.49 1.33-.49.42 0 .77.14 1.05.35.21.21.35.56.35.98v.21c0 .07 0 .21-.07.28-.14.56-.35.98-.7 1.33-.35.35-.84.49-1.33.49-.35 0-.7-.14-1.05-.35m1.89-.7c.14-.21.28-.49.35-.84v-.35c0-.21-.07-.35-.14-.49a.635.635 0 0 0-.49-.21c-.28 0-.49.07-.63.28-.14.21-.28.49-.35.84v.28c0 .21.07.35.14.49.14.14.28.21.49.21.28.07.42 0 .63-.21m6.51-4.69h2.52c.49 0 .84.14 1.12.35.28.21.35.56.35.91v.28c0 .07 0 .21-.07.28-.07.49-.35.98-.7 1.26-.42.35-.84.49-1.4.49h-1.4l-.42 2.03h-1.19l1.19-5.6m.56 2.59h1.12c.28 0 .49-.07.7-.21.14-.14.28-.35.35-.63v-.28c0-.21-.07-.35-.21-.42-.14-.07-.35-.14-.7-.14h-.91l-.35 1.68zm8.68 3.71c-.35.77-.7 1.26-.91 1.47-.21.21-.63.7-1.61.7l.07-.63c.84-.28 1.26-1.4 1.54-1.96l-.28-3.78h1.19l.07 2.38.91-2.31h1.05l-2.03 4.13m-2.94-3.85l-.42.28c-.42-.35-.84-.56-1.54-.21-.98.49-1.89 4.13.91 2.94l.14.21h1.12l.7-3.29-.91.07m-.56 1.82c-.21.56-.56.84-.91.77-.28-.14-.35-.63-.21-1.19.21-.56.56-.84.91-.77.28.14.35.63.21 1.19"/></svg> 3006 </li><li class="list-payment__item"> 3007 <svg class="icon icon--full-color" xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 38 24" width="38" height="24" fill="none" aria-labelledby="pi-visa"><title id="pi-visa">Visa</title><rect x=".5" y=".5" width="37" height="23" rx="2.5" stroke="#000" stroke-opacity=".07" fill="none"/><path d="M35 0H3C1.3 0 0 1.3 0 3V21C0 22.7 1.4 24 3 24H35C36.7 24 38 22.7 38 21V3C38 1.3 36.6 0 35 0Z" fill="#142FBD" style="fill:#142FBD;fill:color(display-p3 0.0784 0.1843 0.7412);fill-opacity:1;"/><path d="M35 1C36.1 1 37 1.9 37 3V21C37 22.1 36.1 23 35 23H3C1.9 23 1 22.1 1 21V3C1 1.9 1.9 1 3 1H35Z" fill="#1532CB" style="fill:#1532CB;fill:color(display-p3 0.0824 0.1961 0.7961);fill-opacity:1;"/><path d="M29.5944 10.2167H29.2778C28.8556 11.2722 28.5389 11.8 28.2222 13.3833H30.2278C29.9111 11.8 29.9111 11.0611 29.5944 10.2167V10.2167ZM32.6556 16.4444H30.8611C30.7556 16.4444 30.7556 16.4444 30.65 16.3389L30.4389 15.3889L30.3333 15.1778H27.8C27.6944 15.1778 27.5889 15.1778 27.5889 15.3889L27.2722 16.3389C27.2722 16.4444 27.1667 16.4444 27.1667 16.4444H24.95L25.1611 15.9167L28.2222 8.73889C28.2222 8.21111 28.5389 8 29.0667 8H30.65C30.7556 8 30.8611 8 30.8611 8.21111L32.3389 15.0722C32.4444 15.4944 32.55 15.8111 32.55 16.2333C32.6556 16.3389 32.6556 16.3389 32.6556 16.4444V16.4444ZM18.5111 16.1278L18.9333 14.2278C19.0389 14.2278 19.1444 14.3333 19.1444 14.3333C19.8833 14.65 20.6222 14.8611 21.3611 14.7556C21.5722 14.7556 21.8889 14.65 22.1 14.5444C22.6278 14.3333 22.6278 13.8056 22.2056 13.3833C21.9944 13.1722 21.6778 13.0667 21.3611 12.8556C20.9389 12.6444 20.5167 12.4333 20.2 12.1167C18.9333 11.0611 19.3556 9.58333 20.0944 8.84444C20.7278 8.42222 21.0444 8 21.8889 8C23.1556 8 24.5278 8 25.1611 8.21111H25.2667C25.1611 8.84444 25.0556 9.37222 24.8444 10.0056C24.3167 9.79444 23.7889 9.58333 23.2611 9.58333C22.9444 9.58333 22.6278 9.58333 22.3111 9.68889C22.1 9.68889 21.9944 9.79444 21.8889 9.9C21.6778 10.1111 21.6778 10.4278 21.8889 10.6389L22.4167 11.0611C22.8389 11.2722 23.2611 11.4833 23.5778 11.6944C24.1056 12.0111 24.6333 12.5389 24.7389 13.1722C24.95 14.1222 24.6333 14.9667 23.7889 15.6C23.2611 16.0222 23.05 16.2333 22.3111 16.2333C20.8333 16.2333 19.6722 16.3389 18.7222 16.0222C18.6167 16.2333 18.6167 16.2333 18.5111 16.1278V16.1278ZM14.8167 16.4444C14.9222 15.7056 14.9222 15.7056 15.0278 15.3889C15.5556 13.0667 16.0833 10.6389 16.5056 8.31667C16.6111 8.10556 16.6111 8 16.8222 8H18.7222C18.5111 9.26667 18.3 10.2167 17.9833 11.3778C17.6667 12.9611 17.35 14.5444 16.9278 16.1278C16.9278 16.3389 16.8222 16.3389 16.6111 16.3389L14.8167 16.4444ZM5 8.21111C5 8.10556 5.21111 8 5.31667 8H8.90556C9.43333 8 9.85556 8.31667 9.96111 8.84444L10.9111 13.4889C10.9111 13.5944 10.9111 13.5944 11.0167 13.7C11.0167 13.5944 11.1222 13.5944 11.1222 13.5944L13.3389 8.21111C13.2333 8.10556 13.3389 8 13.4444 8H15.6611C15.6611 8.10556 15.6611 8.10556 15.5556 8.21111L12.2833 15.9167C12.1778 16.1278 12.1778
300716.2333 12.0722 16.3389C11.9667 16.4444 11.7556 16.3389 11.5444 16.3389H9.96111C9.85556 16.3389 9.75 16.3389 9.75 16.1278L8.06111 9.58333C7.85 9.37222 7.53333 9.05556 7.11111 8.95C6.47778 8.63333 5.31667 8.42222 5.10556 8.42222L5 8.21111Z" fill="white" style="fill:white;fill-opacity:1;"/></svg> 3008 3009 </li></ul> 3010 </div></div> 3011 </div> 3012 <div class="footer__content-bottom-wrapper page-width"> 3013 <div class="footer__copyright caption"> 3014 <small class="copyright__content" 3015 >© 2026, <a href="/" title="">Wenonah Canoe</a></small> 3016 <small class="copyright__content"><a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&utm_medium=shopify&utm_source=onlinestore">Powered by Shopify</a></small><ul class="policies list-unstyled"><li> 3017 <small class="copyright__content" 3018 ><a href="/policies/privacy-policy">Privacy policy</a></small 3019 > 3020 </li></ul></div> 3021 </div> 3022 </div> 3023</footer> 3024 3025 3026</div> 3027<!-- END sections: footer-group --> 3028 3029 <ul hidden> 3030 <li id="a11y-refresh-page-message">Choosing a selection results in a full page refresh.</li> 3031 <li id="a11y-new-window-message">Opens in a new window.</li> 3032 </ul> 3033 3034
3034<script> 3035 window.shopUrl = 'https://wenonah.com'; 3036 window.routes = { 3037 cart_add_url: '/cart/add', 3038 cart_change_url: '/cart/change', 3039 cart_update_url: '/cart/update', 3040 cart_url: '/cart', 3041 predictive_search_url: '/search/suggest', 3042 }; 3043 3044 window.cartStrings = { 3045 error: `There was an error while updating your cart. Please try again.`, 3046 quantityError: `You can only add [quantity] of this item to your cart.`, 3047 }; 3048 3049 window.variantStrings = { 3050 addToCart: `Add to cart`, 3051 soldOut: `Unavailable`, 3052 unavailable: `Unavailable`, 3053 unavailable_with_option: `[value] - Unavailable`, 3054 }; 3055 3056 window.quickOrderListStrings = { 3057 itemsAdded: `[quantity] items added`, 3058 itemAdded: `[quantity] item added`, 3059 itemsRemoved: `[quantity] items removed`, 3060 itemRemoved: `[quantity] item removed`, 3061 viewCart: `View cart`, 3062 each: `[money]/ea`, 3063 min_error: `This item has a minimum of [min]`, 3064 max_error: `This item has a maximum of [max]`, 3065 step_error: `You can only add this item in increments of [step]`, 3066 }; 3067 3068 window.accessibilityStrings = { 3069 imageAvailable: `Image [index] is now available in gallery view`, 3070 shareSuccess: `Link copied to clipboard`, 3071 pauseSlideshow: `Pause slideshow`, 3072 playSlideshow: `Play slideshow`, 3073 recipientFormExpanded: `Gift card recipient form expanded`, 3074 recipientFormCollapsed: `Gift card recipient form collapsed`, 3075 countrySelectorSearchCount: `[count] countries/regions found`, 3076 }; 3077 </script>
3077<script src="//wenonah.com/cdn/shop/t/2/assets/predictive-search.js?v=57209189334897115771749921820" defer="defer"></script>
3077<style> .product-form__input legend {font-size: 1em; font-weight: bold;} </style> 3078<div id="shopify-block-AZFd6aGFnS21FS1hVa__13768625480086291342" class="shopify-block shopify-app-block">
3078<script> 3079 window['ShopifyForms'] = { 3080 ...window['ShopifyForms'], 3081 currentPageType: "page" 3082 }; 3083</script>
3083 3084 3085 3086</div><div id="shopify-block-ATU1SSkI0OWVtalBYQ__2497517740430320072" class="shopify-block shopify-app-block"> 3087 3088 3089 3090 3091 3092<link rel='stylesheet' href='https://cdn.shopify.com/extensions/01a0f243-2a12-76c4-95cb-c690a3bd6214/V2.1.6/assets/multi-select.css'> 3093 3094 3095 3096<style> 3097 /* empty customizations */ 3098</style> 3099 3100<style id="ef__hide-addon-field-styles"> 3101 /* empty customizations */ 3102</style> 3103 3104<div 3105 id='product-options-ho4ed2r6cwo-embed' 3106 class='ef__product-option-root' 3107 style='display: none;' 3108 3109 data-product-base-price='' 3110 data-product-compare-at-price='' 3111 data-variant-ids='' 3112 data-money-format='${{amount}}' 3113 data-shop-currency='USD' 3114> 3115 <form> 3116 3117 </form> 3118 3119 3120 <p class='ef__option-total-price ef__options-addon-total' role='status'> 3121 3122 3123 3124 3125 Total add-ons: <span class="ef__options-addon-total-amount ef__addon-amount"></span> 3126 </p> 3127 3128 3129</div> 3130 3131
3132<script 3133 type='application/json' 3134 id='ef__product-option-rules' 3135 3136 3137> 3138 [] 3139</script>
3139 3140 3141 3142 3143 3144 3145
3145<script type='application/json' id='ef__product-variant-data'> 3146 { 3147 "options": null, 3148 "variants": [] 3149 } 3150 </script>
3150 3151 3152 3153
3154<script type='application/json' id='ef__product-option-customizations'> 3155 3156 {"appEmbedPlacementSelector":"","cartLineSelector":"","quantityAndRemoveButtonSelector":"","cartLineItemDetailsSelector":"","regularPriceItemSelector":"","compareAtPriceItemSelector":"","isGetPricesOnStorefront":true,"dropdownPlaceholder":"Choose %option-title%","fileUploadButtonText":"Choose file","dragAndDropText":"or drop files to upload","uploadLoadingText":"Uploading...","fileTypeErrorText":"Only %file-types% files allowed.","fileSizeErrorText":"File needs to be smaller than %max-file-size%.","fileUploadErrorText":"Failed to upload file: %reason%","requiredOptionErrorText":"\"%option-title%\" is required.","minimumSelectionErrorText":"\"%option-title%\" requires at least %min-selection-limit% selections.","maximumSelectionErrorText":"\"%option-title%\" allows only %max-selection-limit% selections.","mimumCharacterErrorText":"\"%option-title%\" requires at least %min-char-limit% characters.","isMatchAddonQuantity":false,"isBuyNowIntegrationDisabled":false,"isOptionValueUniqueRequired":false,"isEnableRemoveAddonFromCart":false,"isEnableOpenAddonProductPage":false,"isChangeBaseProductPriceDisabled":false,"isShowTotalPrice":true,"storefrontFooterText":"Total add-ons:","isShowBranding":true} 3157 3158</script>
3158 3159 3160<div class="easyflow-script-origin" data-origin="app-embed"></div> 3161 3162 3163 3164 3165
3166<script src='https://cdn.shopify.com/extensions/01a0f243-2a12-76c4-95cb-c690a3bd6214/V2.1.6/assets/multi-select.min.js' defer></script>
3166 3167 3168
3169<script src='https://cdn.shopify.com/extensions/01a0f243-2a12-76c4-95cb-c690a3bd6214/V2.1.6/assets/public.js'></script>
3169 3170 3171
3172<script src='https://cdn.shopify.com/extensions/01a0f243-2a12-76c4-95cb-c690a3bd6214/V2.1.6/assets/common.js' defer data-origin="app-embed"></script>
3172 3173 3174<div id="easyflow-common-js-url" data-common-url="https://cdn.shopify.com/extensions/01a0f243-2a12-76c4-95cb-c690a3bd6214/V2.1.6/assets/common.js"></div> 3175<div id="easyflow-cart-info" data-cart-type="notification" data-cart-url="/cart"></div> 3176<div class="easyflow-script-origin" data-origin="app-embed"></div> 3177</div>
3177<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
3177 3178</body> 3179</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.