1<!doctype html> 2<html class="js" lang="en"> 3 <head> 4 5 <meta charset="utf-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="viewport" content="width=device-width,initial-scale=1"> 8 <meta name="theme-color" content=""> 9 <link rel="canonical" href="https://fittes.ca/"><link rel="icon" type="image/png" href="//fittes.ca/cdn/shop/files/Untitled_design_66_bf3f4547-dabc-4382-8809-1783186b20ca.png?crop=center&height=32&v=1743054514&width=32"><link rel="preconnect" href="https://fonts.shopifycdn.com" crossorigin><!-- google fonts --> 10 <link rel="preconnect" href="https://fonts.googleapis.com"> 11 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 12 <link href="https://fonts.googleapis.com/css2?family=Outfit:[email protected]&display=swap" rel="stylesheet"> 13 14 <title> 15 Fittes - Finishes that steal the show 16 – Fittes ð</title> 17 18 19 <meta name="description" content="Custom air covers and air registers that are compatible with any surface - wood, laminate, tile, mosaic, carpet, vinyl, MDF, drywall, etc. Upgrade your home with a sleek, minimalist vent that compliments your interior design. It can be installed on your floor, wall, ceiling, and HVAC air vents."> 20 21 22 23 24<meta property="og:site_name" content="Fittes ð"> 25<meta property="og:url" content="https://fittes.ca/"> 26<meta property="og:title" content="Fittes - Finishes that steal the show"> 27<meta property="og:type" content="website"> 28<meta property="og:description" content="Custom air covers and air registers that are compatible with any surface - wood, laminate, tile, mosaic, carpet, vinyl, MDF, drywall, etc. Upgrade your home with a sleek, minimalist vent that compliments your interior design. It can be installed on your floor, wall, ceiling, and HVAC air vents."><meta property="og:image" content="http://fittes.ca/cdn/shop/files/Social_preview.jpg?v=1691585101"> 29 <meta property="og:image:secure_url" content="https://fittes.ca/cdn/shop/files/Social_preview.jpg?v=1691585101"> 30 <meta property="og:image:width" content="1200"> 31 <meta property="og:image:height" content="628"><meta name="twitter:site" content="@https://x.com/fittesco"><meta name="twitter:card" content="summary_large_image"> 32<meta name="twitter:title" content="Fittes - Finishes that steal the show"> 33<meta name="twitter:description" content="Custom air covers and air registers that are compatible with any surface - wood, laminate, tile, mosaic, carpet, vinyl, MDF, drywall, etc. Upgrade your home with a sleek, minimalist vent that compliments your interior design. It can be installed on your floor, wall, ceiling, and HVAC air vents."> 34 35 36
36<script src="//fittes.ca/cdn/shop/t/139/assets/constants.js?v=132983761750457495441788881638" defer="defer"></script>
36 37
37<script src="//fittes.ca/cdn/shop/t/139/assets/pubsub.js?v=158357773527763999511788881704" defer="defer"></script>
37 38
38<script src="//fittes.ca/cdn/shop/t/139/assets/global.js?v=95941489438249734891788881649" defer="defer"></script>
38 39
39<script src="//fittes.ca/cdn/shop/t/139/assets/details-disclosure.js?v=13653116266235556501788881640" defer="defer"></script>
39 40
40<script src="//fittes.ca/cdn/shop/t/139/assets/details-modal.js?v=25581673532751508451788881640" defer="defer"></script>
40 41
41<script src="//fittes.ca/cdn/shop/t/139/assets/search-form.js?v=133129549252120666541788881709" defer="defer"></script>
41<script src="//fittes.ca/cdn/shop/t/139/assets/animations.js?v=88693664871331136111788881615" defer="defer"></script>
41<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
41<meta name="google-site-verification" content="g425LGg5__l3mU4HrRHAQtY5qIZYIJ8cOyQa5DQDApA"> 42<meta name="google-site-verification" content="Vz04zHhQvq6G78-m63fET8QKUIiLUr1Ayyz5fL1y9tc"> 43<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/11712102462/digital_wallets/dialog"> 44<link rel="ucp" href="/.well-known/ucp" version="2026-08-25">
44<script async="async" src="/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=9404604"></script>
44 45<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
46<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-US&default_configuration_id=9404604&shop_id=11712102462" crossorigin="anonymous"></script>
vendor: 1 bytes, line 46
46
47<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":11712102462,"countryCode":"CA","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/11712102462","merchantName":"Fittes ð","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","interac","jcb"],"total":{"type":"pending","label":"Fittes ð","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 47
47
48<script id="shopify-features" type="application/json">{"accessToken":"d69aecbcb36f59df6603ef7001897eaa","betas":["rich-media-storefront-analytics"],"domain":"fittes.ca","predictiveSearch":true,"shopId":11712102462,"locale":"en"}</script>
vendor: 1 bytes, line 48
48
49<script>var Shopify = Shopify || {}; 50Shopify.shop = "ariavent.myshopify.com"; 51Shopify.locale = "en"; 52Shopify.currency = {"active":"USD","rate":"0.7154025"}; 53Shopify.country = "US"; 54Shopify.theme = {"name":"Copy of LIVE - v2.1.7 (a9886e3) HREFLANG - bread","id":193544421746,"schema_name":"Dawn","schema_version":"15.2.0","theme_store_id":null,"role":"main"}; 55Shopify.theme.handle = "null"; 56Shopify.theme.style = {"id":null,"handle":null}; 57Shopify.cdnHost = "fittes.ca/cdn"; 58Shopify.routes = Shopify.routes || {}; 59Shopify.routes.root = "/"; 60Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 61Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 62Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 63Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 63
63
64<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 64
64
65<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 65
65
66<script> 67 window.ShopifyPay = window.ShopifyPay || {}; 68 window.ShopifyPay.apiHost = "shop.app\/pay"; 69 window.ShopifyPay.redirectState = null; 70</script>
vendor: 1 bytes, line 70
70
71<script> 72 window.Shopify = window.Shopify || {}; 73 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 74 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 75 window.Shopify.SignInWithShop.eligible = true; 76</script>
vendor: 1 bytes, line 76
76
77<script id="shop-js-analytics" type="application/json">{"pageType":"index"}</script>
vendor: 1 bytes, line 77
77
78<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 78
78
79<script type="module"> 80 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 81 82 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 83 84</script>
vendor: 1 bytes, line 84
84
85<script> 86 window.Shopify = window.Shopify || {}; 87 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 88 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"]}; 89</script>
vendor: 1 bytes, line 89
89
90<script>(function() { 91 var isLoaded = false; 92 function asyncLoad() { 93 if (isLoaded) return; 94 isLoaded = true; 95 var urls = ["https:\/\/size-charts-relentless.herokuapp.com\/js\/size-charts-relentless.js?shop=ariavent.myshopify.com","https:\/\/orderstatus.w3apps.co\/js\/orderlookup.js?shop=ariavent.myshopify.com","\/\/cdn.shopify.com\/proxy\/9b767a25daa82ae5d3d32e55e5bc5819484c73b45058b8e4898e1943df1f9fc0\/apps.bazaarvoice.com\/deployments\/fittes\/main_site\/production\/en_CA\/bv.js?shop=ariavent.myshopify.com\u0026sp-cache-control=cHVibGljLCBtYXgtYWdlPTkwMA","https:\/\/config.gorgias.chat\/bundle-loader\/01H35QTQ362ZWWYP36R7VWQ0Z6?source=shopify1click\u0026shop=ariavent.myshopify.com","https:\/\/media.9gtb.com\/loader.js?g_cvt_id=9cf86c91-d35b-4f48-880c-3370e6d15cc8\u0026shop=ariavent.myshopify.com"]; 96 for (var i = 0; i < urls.length; i++) { 97 var s = document.createElement('script'); 98 s.type = 'text/javascript'; 99 s.async = true; 100 s.src = urls[i]; 101 var x = document.getElementsByTagName('script')[0]; 102 x.parentNode.insertBefore(s, x); 103 } 104 }; 105 if(window.attachEvent) { 106 window.attachEvent('onload', asyncLoad); 107 } else { 108 window.addEventListener('load', asyncLoad, false); 109 } 110})();</script>
vendor: 1 bytes, line 110
110
111<script id="__st">var __st={"a":11712102462,"offset":-14400,"reqid":"49b0a359-863b-4d4d-b87f-7d89adca0920-1791450973","pageurl":"fittes.ca\/","u":"445a5bf5669f","p":"home"};</script>
vendor: 1 bytes, line 111
111
112<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 112
112
113<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 113
113
114<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//fittes.ca/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 114
114
115<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 = "//fittes.ca/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
115<script crossorigin="anonymous" defer="defer" src="//fittes.ca/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-f0e26bdf.js?v=20250812"></script>
vendor: 1 bytes, line 115
115
116<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 116
116
117<script> 118 window.Shopify = window.Shopify || {}; 119 window.Shopify.MCP = window.Shopify.MCP || {}; 120 window.Shopify.MCP.enabled = true; 121 window.Shopify.MCP.shop = "ariavent.myshopify.com"; 122 window.Shopify.MCP.mcpEndpoint = "https:\/\/fittes.ca\/api\/mcp"; 123 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?\"\nSet policy_types to also get the store's written policies (full text and URL).\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."},"policy_types":{"type":"array","items":{"type":"string","enum":["refund","shipping","privacy","terms_of_service","terms_of_sale","subscription","legal_notice","contact"]},"description":"Policy kinds to fetch, chosen from the user's question â e.g. [\"refund\"] for returns\/exchanges\/damaged items, [\"contact\"] for phone\/hours\/address. Include every kind the question touches. Omit it to get only FAQ answers."}},"required":["query"]}}]; 124</script>
vendor: 1 bytes, line 124
124
125<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("\/\/fittes.ca\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 126</script>
vendor: 1 bytes, line 126
126
127<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://fittes.ca/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 128</script>
vendor: 1 bytes, line 128
128
129<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 130 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); 131</script>
vendor: 1 bytes, line 131
131
132<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})}})); 133</script>
133 134<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://fittes.ca/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 135<style id="shopify-accelerated-checkout-cart"> 136 #shopify-buyer-consent { 137 margin-top: 1em; 138 display: inline-block; 139 width: 100%; 140} 141 142#shopify-buyer-consent.hidden { 143 display: none; 144} 145 146#shopify-subscription-policy-button { 147 background: none; 148 border: none; 149 padding: 0; 150 text-decoration: underline; 151 font-size: inherit; 152 cursor: pointer; 153} 154 155#shopify-subscription-policy-button::before { 156 box-shadow: none; 157} 158 159 </style>
160<script id="sections-script" data-sections="header" defer="defer" src="//fittes.ca/cdn/shop/t/139/compiled_assets/scripts.js?v=41181609318752002771790705481"></script>
vendor: 1 bytes, line 160
160
161<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
161 162 163 164 <style data-shopify> 165 @font-face { 166 font-family: Lora; 167 font-weight: 400; 168 font-style: normal; 169 font-display: swap; 170 src: url("//fittes.ca/cdn/fonts/lora/lora_n4.9a60cb39eff3bfbc472bac5b3c5c4d7c878f0a8d.woff2") format("woff2"), 171 url("//fittes.ca/cdn/fonts/lora/lora_n4.4d935d2630ceaf34d2e494106075f8d9f1257d25.woff") format("woff"); 172} 173 174 @font-face { 175 font-family: Lora; 176 font-weight: 700; 177 font-style: normal; 178 font-display: swap; 179 src: url("//fittes.ca/cdn/fonts/lora/lora_n7.58a834e7e54c895806b2ffc982e4a00af29b1b9c.woff2") format("woff2"), 180 url("//fittes.ca/cdn/fonts/lora/lora_n7.05fdf76140ca6e72e48561caf7f9893c487c3f1b.woff") format("woff"); 181} 182 183 @font-face { 184 font-family: Lora; 185 font-weight: 400; 186 font-style: italic; 187 font-display: swap; 188 src: url("//fittes.ca/cdn/fonts/lora/lora_i4.a5059b22bd0a7547da84d66d2f523d17d17325d3.woff2") format("woff2"), 189 url("//fittes.ca/cdn/fonts/lora/lora_i4.cb2d2ab46128fa7f84060d5f92cf3f49dc8181bd.woff") format("woff"); 190} 191 192 @font-face { 193 font-family: Lora; 194 font-weight: 700; 195 font-style: italic; 196 font-display: swap; 197 src: url("//fittes.ca/cdn/fonts/lora/lora_i7.1bf76118f47019e7581a865f0f538b8ea5900419.woff2") format("woff2"), 198 url("//fittes.ca/cdn/fonts/lora/lora_i7.1a7c7f083405ec98e57d8033d38caa748580f7ff.woff") format("woff"); 199} 200 201 @font-face { 202 font-family: Lora; 203 font-weight: 400; 204 font-style: normal; 205 font-display: swap; 206 src: url("//fittes.ca/cdn/fonts/lora/lora_n4.9a60cb39eff3bfbc472bac5b3c5c4d7c878f0a8d.woff2") format("woff2"), 207 url("//fittes.ca/cdn/fonts/lora/lora_n4.4d935d2630ceaf34d2e494106075f8d9f1257d25.woff") format("woff"); 208} 209 210 211 212 :root, 213 .color-scheme-1 { 214 --color-background: 255,255,255; 215 216 --gradient-background: #ffffff; 217 218 219 220 221 --color-foreground: 18,18,18; 222 --color-background-contrast: 191,191,191; 223 --color-shadow: 18,18,18; 224 --color-button: 18,18,18; 225 --color-button-text: 255,255,255; 226 --color-secondary-button: 255,255,255; 227 --color-secondary-button-text: 18,18,18; 228 --color-link: 18,18,18; 229 --color-badge-foreground: 18,18,18; 230 --color-badge-background: 255,255,255; 231 --color-badge-border: 18,18,18; 232 --payment-terms-background-color: rgb(255 255 255); 233 } 234 235 236 .color-scheme-2 { 237 --color-background: 243,243,243; 238 239 --gradient-background: #f3f3f3; 240 241 242 243 244 --color-foreground: 18,18,18; 245 --color-background-contrast: 179,179,179; 246 --color-shadow: 18,18,18; 247 --color-button: 18,18,18; 248 --color-button-text: 243,243,243; 249 --color-secondary-button: 243,243,243; 250 --color-secondary-button-text: 18,18,18; 251 --color-link: 18,18,18; 252 --color-badge-foreground: 18,18,18; 253 --color-badge-background: 243,243,243; 254 --color-badge-border: 18,18,18; 255 --payment-terms-background-color: rgb(243 243 243); 256 } 257 258 259 .color-scheme-3 { 260 --color-background: 36,40,51; 261 262 --gradient-background: #242833; 263 264 265 266 267 --color-foreground: 255,255,255; 268 --color-background-contrast: 47,52,66; 269 --color-shadow: 18,18,18; 270 --color-button: 255,255,255; 271 --color-button-text: 0,0,0; 272 --color-secondary-button: 36,40,51; 273 --color-secondary-button-text: 255,255,255; 274 --color-link: 255,255,255; 275 --color-badge-foreground: 255,255,255; 276 --color-badge-background: 36,40,51; 277 --color-badge-border: 255,255,255; 278 --payment-terms-background-color: rgb(36 40 51); 279 } 280 281 282 .color-scheme-4 { 283 --color-background: 18,18,18; 284 285 --gradient-background: #121212; 286 287 288 289 290 --color-foreground: 255,255,255; 291 --color-background-contrast: 146,146,146; 292 --color-shadow: 18,18,18; 293 --color-button: 255,255,255; 294 --color-button-text: 18,18,18; 295 --color-secondary-button: 18,18,18; 296 --color-secondary-button-text: 255,255,255; 297 --color-link: 255,255,255; 298 --color-badge-foreground: 255,255,255; 299 --color-badge-background: 18,18,18; 300 --color-badge-border: 255,255,255; 301 --payment-terms-background-color: rgb(18 18 18); 302 } 303 304 305 .color-scheme-5 { 306 --color-background: 51,79,180; 307 308 --gradient-background: #334fb4; 309 310 311 312 313 --color-foreground: 255,255,255; 314 --color-background-contrast: 23,35,81; 315 --color-shadow: 18,18,18; 316 --color-button: 255,255,255; 317 --color-button-text: 51,79,180; 318 --color-secondary-button: 51,79,180; 319 --color-secondary-button-text: 255,255,255; 320 --color-link: 255,255,255; 321 --color-badge-foreground: 255,255,255; 322 --color-badge-background: 51,79,180; 323 --color-badge-border: 255,255,255; 324 --payment-terms-background-color: rgb(51 79 180); 325 } 326 327 328 .color-scheme-48d3c504-3bc8-46b7-9ac3-5e0470b53020 { 329 --color-background: 231,60,62; 330 331 --gradient-background: #e73c3e; 332 333 334 335 336 --color-foreground: 241,241,241; 337 --color-background-contrast: 146,18,19; 338 --color-shadow: 18,18,18; 339 --color-button: 18,18,18; 340 --color-button-text: 255,255,255; 341 --color-secondary-button: 231,60,62; 342 --color-secondary-button-text: 18,18,18; 343 --color-link: 18,18,18; 344 --color-badge-foreground: 241,241,241; 345 --color-badge-background: 231,60,62; 346 --color-badge-border: 241,241,241; 347 --payment-terms-background-color: rgb(231 60 62); 348 } 349 350 351 .color-scheme-e5df3eb7-2625-4b40-9b83-91290756be10 { 352 --color-background: 255,255,255; 353 354 --gradient-background: #ffffff; 355 356 357 358 359 --color-foreground: 18,18,18; 360 --color-background-contrast: 191,191,191; 361 --color-shadow: 18,18,18; 362 --color-button: 231,60,62; 363 --color-button-text: 255,255,255; 364 --color-secondary-button: 255,255,255; 365 --color-secondary-button-text: 231,60,62; 366 --color-link: 231,60,62; 367 --color-badge-foreground: 18,18,18; 368 --color-badge-background: 255,255,255; 369 --color-badge-border: 18,18,18; 370 --payment-terms-background-color: rgb(255 255 255); 371 } 372 373 374 .color-scheme-1a1339f7-dbc7-4c1d-b3d5-fb5a708abfed { 375 --color-background: 241,241,241; 376 377 --gradient-background: #f1f1f1; 378 379 380 381 382 --color-foreground: 18,18,18; 383 --color-background-contrast: 177,177,177; 384 --color-shadow: 18,18,18; 385 --color-button: 18,18,18; 386 --color-button-text: 255,255,255; 387 --color-secondary-button: 241,241,241; 388 --color-secondary-button-text: 18,18,18; 389 --color-link: 18,18,18; 390 --color-badge-foreground: 18,18,18; 391 --color-badge-background: 241,241,241; 392 --color-badge-border: 18,18,18; 393 --payment-terms-background-color: rgb(241 241 241); 394 } 395 396 397 .color-scheme-83cdface-5b2f-46b1-bddc-12365d0b1711 { 398 --color-background: 0,0,0; 399 400 --gradient-background: rgba(0,0,0,0); 401 402 403 404 405 --color-foreground: 255,255,255; 406 --color-background-contrast: 128,128,128; 407 --color-shadow: 18,18,18; 408 --color-button: 18,18,18; 409 --color-button-text: 255,255,255; 410 --color-secondary-button: 0,0,0; 411 --color-secondary-button-text: 18,18,18; 412 --color-link: 18,18,18; 413 --color-badge-foreground: 255,255,255; 414 --color-badge-background: 0,0,0; 415 --color-badge-border: 255,255,255; 416 --payment-terms-background-color: rgb(0 0 0); 417 } 418 419 420 .color-scheme-167327ae-4270-4faa-8603-ddf627456d65 { 421 --color-background: 255,255,255; 422 423 --gradient-background: #ffffff; 424 425 426 427 428 --color-foreground: 255,255,255; 429 --color-background-contrast: 191,191,191; 430 --color-shadow: 31,31,31; 431 --color-button: 241,241,241; 432 --color-button-text: 31,31,31; 433 --color-secondary-button: 255,255,255; 434 --color-secondary-button-text: 31,31,31; 435 --color-link: 31,31,31; 436 --color-badge-foreground: 255,255,255; 437 --color-badge-background: 255,255,255; 438 --color-badge-border: 255,255,255; 439 --payment-terms-background-color: rgb(255 255 255); 440 } 441 442 443 .color-scheme-921a8ae3-d913-4542-95d6-05caa8a08806 { 444 --color-background: 255,255,255; 445 446 --gradient-background: #ffffff; 447 448 449 450 451 --color-foreground: 18,18,18; 452 --color-background-contrast: 191,191,191; 453 --color-shadow: 18,18,18; 454 --color-button: 18,18,18; 455 --color-button-text: 255,255,255; 456 --color-secondary-button: 255,255,255; 457 --color-secondary-button-text: 18,18,18; 458 --color-link: 18,18,18; 459 --color-badge-foreground: 18,18,18; 460 --color-badge-background: 255,255,255; 461 --color-badge-border: 18,18,18; 462 --payment-terms-background-color: rgb(255 255 255); 463 } 464 465 466 .color-scheme-9b7681bc-fbb6-4cc9-9480-9f1838881232 { 467 --color-background: 255,255,255; 468 469 --gradient-background: #ffffff; 470 471 472 473 474 --color-foreground: 18,18,18; 475 --color-background-contrast: 191,191,191; 476 --color-shadow: 18,18,18; 477 --color-button: 231,60,62; 478 --color-button-text: 255,255,255; 479 --color-secondary-button: 255,255,255; 480 --color-secondary-button-text: 231,60,62; 481 --color-link: 231,60,62; 482 --color-badge-foreground: 18,18,18; 483 --color-badge-background: 255,255,255; 484 --color-badge-border: 18,18,18; 485 --payment-terms-background-color: rgb(255 255 255); 486 } 487 488 489 .color-scheme-e0268525-0fbe-43b3-a398-0e7940ddb112 { 490 --color-background: 0,0,0; 491 492 --gradient-background: rgba(0,0,0,0); 493 494 495 496 497 --color-foreground: 255,255,255; 498 --color-background-contrast: 128,128,128; 499 --color-shadow: 18,18,18; 500 --color-button: 231,60,62; 501 --color-button-text: 255,255,255; 502 --color-secondary-button: 0,0,0; 503 --color-secondary-button-text: 231,60,62; 504 --color-link: 231,60,62; 505 --color-badge-foreground: 255,255,255; 506 --color-badge-background: 0,0,0; 507 --color-badge-border: 255,255,255; 508 --payment-terms-background-color: rgb(0 0 0); 509 } 510 511 512 .color-scheme-6a78ef8d-1d91-48a0-9209-c3a4f3707bce { 513 --color-background: 231,60,62; 514 515 --gradient-background: #e73c3e; 516 517 518 519 520 --color-foreground: 255,255,255; 521 --color-background-contrast: 146,18,19; 522 --color-shadow: 18,18,18; 523 --color-button: 255,255,255; 524 --color-button-text: 231,60,62; 525 --color-secondary-button: 231,60,62; 526 --color-secondary-button-text: 255,255,255; 527 --color-link: 255,255,255; 528 --color-badge-foreground: 255,255,255; 529 --color-badge-background: 231,60,62; 530 --color-badge-border: 255,255,255; 531 --payment-terms-background-color: rgb(231 60 62); 532 } 533 534 535 .color-scheme-e63a4c68-3a2b-4402-9c64-ccfb820cb664 { 536 --color-background: 217,217,217; 537 538 --gradient-background: #d9d9d9; 539 540 541 542 543 --color-foreground: 77,77,77; 544 --color-background-contrast: 153,153,153; 545 --color-shadow: 18,18,18; 546 --color-button: 231,60,62; 547 --color-button-text: 255,255,255; 548 --color-secondary-button: 217,217,217; 549 --color-secondary-button-text: 18,18,18; 550 --color-link: 18,18,18; 551 --color-badge-foreground: 77,77,77; 552 --color-badge-background: 217,217,217; 553 --color-badge-border: 77,77,77; 554 --payment-terms-background-color: rgb(217 217 217); 555 } 556 557 558 .color-scheme-92bb1434-fdc0-4c32-b455-d1dff085020f { 559 --color-background: 217,217,217; 560 561 --gradient-background: #d9d9d9; 562 563 564 565 566 --color-foreground: 0,0,0; 567 --color-background-contrast: 153,153,153; 568 --color-shadow: 18,18,18; 569 --color-button: 18,18,18; 570 --color-button-text: 255,255,255; 571 --color-secondary-button: 217,217,217; 572 --color-secondary-button-text: 18,18,18; 573 --color-link: 18,18,18; 574 --color-badge-foreground: 0,0,0; 575 --color-badge-background: 217,217,217; 576 --color-badge-border: 0,0,0; 577 --payment-terms-background-color: rgb(217 217 217); 578 } 579 580 581 .color-scheme-6cebfd37-0a80-4085-aef4-6b55c0836836 { 582 --color-background: 255,255,255; 583 584 --gradient-background: #ffffff; 585 586 587 588 589 --color-foreground: 112,115,120; 590 --color-background-contrast: 191,191,191; 591 --color-shadow: 18,18,18; 592 --color-button: 231,60,62; 593 --color-button-text: 255,255,255; 594 --color-secondary-button: 255,255,255; 595 --color-secondary-button-text: 18,18,18; 596 --color-link: 18,18,18; 597 --color-badge-foreground: 112,115,120; 598 --color-badge-background: 255,255,255; 599 --color-badge-border: 112,115,120; 600 --payment-terms-background-color: rgb(255 255 255); 601 } 602 603 604 .color-scheme-43d3085d-7ffc-4175-af3c-de84be6285ba { 605 --color-background: 255,255,255; 606 607 --gradient-background: #ffffff; 608 609 610 611 612 --color-foreground: 0,0,0; 613 --color-background-contrast: 191,191,191; 614 --color-shadow: 18,18,18; 615 --color-button: 155,67,67; 616 --color-button-text: 255,255,255; 617 --color-secondary-button: 255,255,255; 618 --color-secondary-button-text: 0,0,0; 619 --color-link: 0,0,0; 620 --color-badge-foreground: 0,0,0; 621 --color-badge-background: 255,255,255; 622 --color-badge-border: 0,0,0; 623 --payment-terms-background-color: rgb(255 255 255); 624 } 625 626 627 .color-scheme-4cb5091f-cedd-4ab0-93cf-7a054dee4192 { 628 --color-background: 239,241,237; 629 630 --gradient-background: #eff1ed; 631 632 633 634 635 --color-foreground: 231,60,62; 636 --color-background-contrast: 175,185,165; 637 --color-shadow: 18,18,18; 638 --color-button: 18,18,18; 639 --color-button-text: 255,255,255; 640 --color-secondary-button: 239,241,237; 641 --color-secondary-button-text: 18,18,18; 642 --color-link: 18,18,18; 643 --color-badge-foreground: 231,60,62; 644 --color-badge-background: 239,241,237; 645 --color-badge-border: 231,60,62; 646 --payment-terms-background-color: rgb(239 241 237); 647 } 648 649 650 .color-scheme-f8b5c3ef-6679-475c-a953-09ce657a87fe { 651 --color-background: 255,255,255; 652 653 --gradient-background: #ffffff; 654 655 656 657 658 --color-foreground: 31,31,31; 659 --color-background-contrast: 191,191,191; 660 --color-shadow: 18,18,18; 661 --color-button: 231,60,62; 662 --color-button-text: 255,255,255; 663 --color-secondary-button: 255,255,255; 664 --color-secondary-button-text: 18,18,18; 665 --color-link: 18,18,18; 666 --color-badge-foreground: 31,31,31; 667 --color-badge-background: 255,255,255; 668 --color-badge-border: 31,31,31; 669 --payment-terms-background-color: rgb(255 255 255); 670 } 671 672 673 .color-scheme-3b025c2b-ccda-4dce-91d6-eac335d8fcde { 674 --color-background: 255,255,255; 675 676 --gradient-background: #ffffff; 677 678 679 680 681 --color-foreground: 18,18,18; 682 --color-background-contrast: 191,191,191; 683 --color-shadow: 18,18,18; 684 --color-button: 215,5,5; 685 --color-button-text: 255,255,255; 686 --color-secondary-button: 255,255,255; 687 --color-secondary-button-text: 18,18,18; 688 --color-link: 18,18,18; 689 --color-badge-foregroun
689d: 18,18,18; 690 --color-badge-background: 255,255,255; 691 --color-badge-border: 18,18,18; 692 --payment-terms-background-color: rgb(255 255 255); 693 } 694 695 696 body, .color-scheme-1, .color-scheme-2, .color-scheme-3, .color-scheme-4, .color-scheme-5, .color-scheme-48d3c504-3bc8-46b7-9ac3-5e0470b53020, .color-scheme-e5df3eb7-2625-4b40-9b83-91290756be10, .color-scheme-1a1339f7-dbc7-4c1d-b3d5-fb5a708abfed, .color-scheme-83cdface-5b2f-46b1-bddc-12365d0b1711, .color-scheme-167327ae-4270-4faa-8603-ddf627456d65, .color-scheme-921a8ae3-d913-4542-95d6-05caa8a08806, .color-scheme-9b7681bc-fbb6-4cc9-9480-9f1838881232, .color-scheme-e0268525-0fbe-43b3-a398-0e7940ddb112, .color-scheme-6a78ef8d-1d91-48a0-9209-c3a4f3707bce, .color-scheme-e63a4c68-3a2b-4402-9c64-ccfb820cb664, .color-scheme-92bb1434-fdc0-4c32-b455-d1dff085020f, .color-scheme-6cebfd37-0a80-4085-aef4-6b55c0836836, .color-scheme-43d3085d-7ffc-4175-af3c-de84be6285ba, .color-scheme-4cb5091f-cedd-4ab0-93cf-7a054dee4192, .color-scheme-f8b5c3ef-6679-475c-a953-09ce657a87fe, .color-scheme-3b025c2b-ccda-4dce-91d6-eac335d8fcde { 697 color: rgba(var(--color-foreground)); 698 background-color: rgb(var(--color-background)); 699 } 700 701 :root { 702 --font-body-family: "Outfit", sans-serif; 703 --font-body-style: normal; 704 --font-body-weight: 400; 705 --font-body-weight-bold: 700; 706 707 --font-heading-family: "Outfit", sans-serif; 708 --font-heading-style: normal; 709 --font-heading-weight: 400; 710 711 --font-body-scale: 1.0; 712 --font-heading-scale: 1.0; 713 714 --media-padding: px; 715 --media-border-opacity: 0.05; 716 --media-border-width: 1px; 717 --media-radius: 0px; 718 --media-shadow-opacity: 0.0; 719 --media-shadow-horizontal-offset: 0px; 720 --media-shadow-vertical-offset: 4px; 721 --media-shadow-blur-radius: 5px; 722 --media-shadow-visible: 0; 723 724 --page-width: 140rem; 725 --page-width-margin: 0rem; 726 727 --product-card-image-padding: 0.0rem; 728 --product-card-corner-radius: 0.0rem; 729 --product-card-text-alignment: left; 730 --product-card-border-width: 0.0rem; 731 --product-card-border-opacity: 0.1; 732 --product-card-shadow-opacity: 0.0; 733 --product-card-shadow-visible: 0; 734 --product-card-shadow-horizontal-offset: 0.0rem; 735 --product-card-shadow-vertical-offset: 0.4rem; 736 --product-card-shadow-blur-radius: 0.5rem; 737 738 --collection-card-image-padding: 0.0rem; 739 --collection-card-corner-radius: 0.0rem; 740 --collection-card-text-alignment: left; 741 --collection-card-border-width: 0.0rem; 742 --collection-card-border-opacity: 0.1; 743 --collection-card-shadow-opacity: 0.0; 744 --collection-card-shadow-visible: 0; 745 --collection-card-shadow-horizontal-offset: 0.0rem; 746 --collection-card-shadow-vertical-offset: 0.4rem; 747 --collection-card-shadow-blur-radius: 0.5rem; 748 749 --blog-card-image-padding: 0.0rem; 750 --blog-card-corner-radius: 0.0rem; 751 --blog-card-text-alignment: left; 752 --blog-card-border-width: 0.0rem; 753 --blog-card-border-opacity: 0.1; 754 --blog-card-shadow-opacity: 0.0; 755 --blog-card-shadow-visible: 0; 756 --blog-card-shadow-horizontal-offset: 0.0rem; 757 --blog-card-shadow-vertical-offset: 0.4rem; 758 --blog-card-shadow-blur-radius: 0.5rem; 759 760 --badge-corner-radius: 0.0rem; 761 762 --popup-border-width: 1px; 763 --popup-border-opacity: 0.1; 764 --popup-corner-radius: 0px; 765 --popup-shadow-opacity: 0.05; 766 --popup-shadow-horizontal-offset: 0px; 767 --popup-shadow-vertical-offset: 4px; 768 --popup-shadow-blur-radius: 5px; 769 770 --drawer-border-width: 1px; 771 --drawer-border-opacity: 0.1; 772 --drawer-shadow-opacity: 0.0; 773 --drawer-shadow-horizontal-offset: 0px; 774 --drawer-shadow-vertical-offset: 4px; 775 --drawer-shadow-blur-radius: 5px; 776 777 --spacing-sections-desktop: 0px; 778 --spacing-sections-mobile: 0px; 779 780 --grid-desktop-vertical-spacing: 28px; 781 --grid-desktop-horizontal-spacing: 36px; 782 --grid-mobile-vertical-spacing: 14px; 783 --grid-mobile-horizontal-spacing: 18px; 784 785 --text-boxes-border-opacity: 0.1; 786 --text-boxes-border-width: 0px; 787 --text-boxes-radius: 0px; 788 --text-boxes-shadow-opacity: 0.0; 789 --text-boxes-shadow-visible: 0; 790 --text-boxes-shadow-horizontal-offset: 0px; 791 --text-boxes-shadow-vertical-offset: 4px; 792 --text-boxes-shadow-blur-radius: 5px; 793 794 --buttons-radius: 8px; 795 --buttons-radius-outset: 9px; 796 --buttons-border-width: 1px; 797 --buttons-border-opacity: 1.0; 798 --buttons-shadow-opacity: 0.0; 799 --buttons-shadow-visible: 0; 800 --buttons-shadow-horizontal-offset: 0px; 801 --buttons-shadow-vertical-offset: 4px; 802 --buttons-shadow-blur-radius: 5px; 803 --buttons-border-offset: 0.3px; 804 805 --inputs-radius: 4px; 806 --inputs-border-width: 1px; 807 --inputs-border-opacity: 0.25; 808 --inputs-shadow-opacity: 0.0; 809 --inputs-shadow-horizontal-offset: 0px; 810 --inputs-margin-offset: 0px; 811 --inputs-shadow-vertical-offset: 4px; 812 --inputs-shadow-blur-radius: 5px; 813 --inputs-radius-outset: 5px; 814 815 --variant-pills-radius: 4px; 816 --variant-pills-border-width: 1px; 817 --variant-pills-border-opacity: 0.25; 818 --variant-pills-shadow-opacity: 0.0; 819 --variant-pills-shadow-horizontal-offset: 0px; 820 --variant-pills-shadow-vertical-offset: 4px; 821 --variant-pills-shadow-blur-radius: 5px; 822 } 823 824 *, 825 *::before, 826 *::after { 827 box-sizing: inherit; 828 } 829 830 html { 831 box-sizing: border-box; 832 font-size: calc(var(--font-body-scale) * 62.5%); 833 height: 100%; 834 } 835 836 body { 837 display: grid; 838 grid-template-rows: auto auto 1fr auto; 839 grid-template-columns: 100%; 840 min-height: 100%; 841 margin: 0; 842 font-size: 1.2rem; 843 letter-spacing: 0rem; 844 line-height: calc(1 + 0.8 / var(--font-body-scale)); 845 font-family: var(--font-body-family); 846 font-style: var(--font-body-style); 847 font-weight: var(--font-body-weight); 848 } 849 850 @media screen and (min-width: 750px) { 851 body { 852 font-size: 1.4rem; 853 } 854 } 855 </style> 856 857 <style>example-counter input[name=counter]{border-radius:.8rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity, 1));padding:.8rem}body,html{overflow-x:hidden;scroll-behavior:smooth;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}</style> 858 859 <link href="//fittes.ca/cdn/shop/t/139/assets/base.css?v=62514489241200430511788881616" rel="stylesheet" type="text/css" media="all" /> 860 <link rel="stylesheet" href="//fittes.ca/cdn/shop/t/139/assets/component-cart-items.css?v=123238115697927560811788881621" media="print" onload="this.media='all'"><link href="//fittes.ca/cdn/shop/t/139/assets/component-cart-drawer.css?v=85066701549514430691788881621" rel="stylesheet" type="text/css" media="all" /> 861 <link href="//fittes.ca/cdn/shop/t/139/assets/component-cart.css?v=164708765130180853531788881622" rel="stylesheet" type="text/css" media="all" /> 862 <link href="//fittes.ca/cdn/shop/t/139/assets/component-totals.css?v=15906652033866631521788881637" rel="stylesheet" type="text/css" media="all" /> 863 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 864 <link href="//fittes.ca/cdn/shop/t/139/assets/component-discounts.css?v=152760482443307489271788881624" rel="stylesheet" type="text/css" media="all" /> 865 866 <link rel="preload" as="font" href="//fittes.ca/cdn/fonts/lora/lora_n4.9a60cb39eff3bfbc472bac5b3c5c4d7c878f0a8d.woff2" type="font/woff2" crossorigin> 867 868 869 <link rel="preload" as="font" href="//fittes.ca/cdn/fonts/lora/lora_n4.9a60cb39eff3bfbc472bac5b3c5c4d7c878f0a8d.woff2" type="font/woff2" crossorigin> 870 871<link href="//fittes.ca/cdn/shop/t/139/assets/component-localization-form.css?v=170315343355214948141788881628" rel="stylesheet" type="text/css" media="all" /> 872
872<script src="//fittes.ca/cdn/shop/t/139/assets/localization-form.js?v=144176611646395275351788881696" defer="defer"></script>
872<link 873 rel="stylesheet" 874 href="//fittes.ca/cdn/shop/t/139/assets/component-predictive-search.css?v=118923337488134913561788881631" 875 media="print" 876 onload="this.media='all'" 877 >
877<script> 878 if (Shopify.designMode) { 879 document.documentElement.classList.add('shopify-design-mode') 880 } 881 </script>
881 882 883
884<script src="//fittes.ca/cdn/shop/t/139/assets/entry-theme.js?v=150731255203964217101788881647" type="module" defer></script>
884<link href="//fittes.ca/cdn/shop/t/139/assets/entry-theme.css?v=153571818334877101091788881647" rel="stylesheet" type="text/css" media="all" />
884<script> 885 window.__GLOBAL__ ||= { 886 currencyCode: "CAD", 887 moneyFormat: "${{amount}}", 888 shopifyCdn: "//fittes.ca/cdn/shop/t/139/assets/dump.png?v=24844".split('dump.png').shift(), 889 fileCdn: "//fittes.ca/cdn/shop/files/dump.png?v=24844".split('dump.png').shift(), 890 sentryDsn: null, 891 customApiBaseUrl: null, 892 } 893</script>
893 894 895 896
896<script src="//fittes.ca/cdn/shop/t/139/assets/swiper-bundle.min.js?v=87330480114418983271788881720" defer="defer"></script>
896<link rel="alternate" hreflang="en-CA" href="https://fittes.ca/" /> 897 <link rel="alternate" hreflang="en-US" href="https://fittes.com/" /> 898 <link rel="alternate" hreflang="en" href="https://fittes.com/" /> 899 <link rel="alternate" hreflang="x-default" href="https://fittes.com/" /> 900 901 <!-- BEGIN app block: shopify://apps/consentmo-gdpr/blocks/gdpr_cookie_consent/4fbe573f-a377-4fea-9801-3ee0858cae41 --> 902<link rel="preconnect" href="https://app.consentmo.com" crossorigin data-csm-preconnect="app"> 903<link rel="dns-prefetch" href="https://workers.consentmo.com" data-csm-preconnect="workers"> 904<link rel="dns-prefetch" href="https://storage.consentmo.com" data-csm-preconnect="storage"> 905<link rel="preconnect" href="https://cdn.consentmo.com" crossorigin data-csm-preconnect="cdn"><link rel="prefetch" href="https://cdn.shopify.com/extensions/01a11aba-aafa-7dea-b236-635273518339/gdpr-backpack-916/assets/layout-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="banner"> 906 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a11aba-aafa-7dea-b236-635273518339/gdpr-backpack-916/assets/layout-cookie-dialog.consentmo.js" crossorigin data-csm-layout-prefetch="dialog"> 907 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a11aba-aafa-7dea-b236-635273518339/gdpr-backpack-916/assets/layout-cookie-box.consentmo.js" crossorigin data-csm-layout-prefetch="box"> 908 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a11aba-aafa-7dea-b236-635273518339/gdpr-backpack-916/assets/layout-cookie-smart-banner.consentmo.js" crossorigin data-csm-layout-prefetch="smart"> 909 <link rel="prefetch" href="https://cdn.shopify.com/extensions/01a11aba-aafa-7dea-b236-635273518339/gdpr-backpack-916/assets/layout-mobile-cookie-bar.consentmo.js" crossorigin data-csm-layout-prefetch="mobile">
909<script> 910(function () { 911 try { 912 document.documentElement.classList.add('csm-cookie-embed'); 913 } catch (e) {} 914})(); 915</script>
915<script data-consentmo-data-src-bootstrap> 916(function () { 917 'use strict'; 918 if (window.__consentmoDataSrcBootstrapInit) return; 919 window.__consentmoDataSrcBootstrapInit = true; 920 921 var DATA_SRC_SELECTOR = [ 922 'script[data-src*="consentmo_cookie_consent"]', 923 'script[data-src*="gdpr_cookie_consent.min"]', 924 'script[data-src*="gdrp_cookie_consent_unlimited"]' 925 ].join(','); 926 927 function activateConsentmoDataSrcScripts() { 928 if (!window.Shopify || !window.Shopify.shop) return; 929 document.querySelectorAll(DATA_SRC_SELECTOR).forEach(function (scriptEl) { 930 // getAttribute: src="" must not count as "already has src" (.src === page URL). 931 if (scriptEl.getAttribute('src')) return; 932 var url = scriptEl.getAttribute('data-src'); 933 if (!url) return; 934 if (scriptEl.getAttribute('type') === 'text/plain') { 935 scriptEl.removeAttribute('type'); 936 } 937 scriptEl.src = url; 938 }); 939 } 940 function scheduleActivation() { 941 activateConsentmoDataSrcScripts(); 942 // Retry on next task so other DCL handlers (lazy-loaders) can finish setting Shopify.shop / data-src first. 943 setTimeout(activateConsentmoDataSrcScripts, 0); 944 } 945 if (document.readyState === 'loading') { 946 document.addEventListener('DOMContentLoaded', scheduleActivation, { once: true }); 947 } else { 948 scheduleActivation(); 949 } 950})(); 951</script>
951 952 953 954<!-- END app block --><!-- BEGIN app block: shopify://apps/geo-pro-geolocation/blocks/geopro/16fc5313-7aee-4e90-ac95-f50fc7c8b657 --><!-- This snippet is used to load Geo:Pro data on the storefront --> 955<meta class='geo-ip' content='eyJwYXJhbWV0ZXJzIjp7InJlZGlyZWN0X3RleHQiOiJJdCBzZWVtcyB5b3UmIzM5cmUgaW4gJUNPVU5UUlklLiBSZWRpcmVjdCB0byBvdXIgJVNUT1JFTkFNRSU/IiwieWVzIjoiWWVzLCBwbGVhc2UiLCJubyI6Ik5vLCB0aGFua3MiLCJwb3B1cF9kZWxheSI6IjAiLCJwZXJtYW5lbnQtcmVkaXJlY3QiOjAsImJhY2tncm91bmQtY29sb3IiOiJmZmZmZmYiLCJ0ZXh0LWNvbG9yIjoiMDAwMDAwIiwieWVzLWJhY2tncm91bmQtY29sb3IiOiIwMDAwMDAiLCJ5ZXMtdGV4dC1jb2xvciI6ImZmZmZmZiIsIm5vLWJhY2tncm91bmQtY29sb3IiOiJjMmMyYzIiLCJuby10ZXh0LWNvbG9yIjoiZmZmZmZmIiwibGF5b3V0LXNlbGVjdG9yIjoicG9wdXAifSwicnVsZXNMaXN0IjpbeyJjb3VudHJpZXMiOiJVbml0ZWQgU3RhdGVzIiwiZXhjZXB0aW9ucyI6IiIsImlwIjoiIiwic3RvcmVfbmFtZSI6IlVTIFN0b3JlIiwiaXBfZXhjZXB0aW9ucyI6IiIsImxpbmsiOiJodHRwczpcL1wvZml0dGVzLmNvbVwvIiwiZG9tYWluX3JlZGlyZWN0IjoiMCJ9XX0='> 956<!-- This snippet initializes the plugin -->
957<script async data-geopro-shop="ariavent.myshopify.com" data-geopro-design-mode="false" data-geopro-tracking-env="production"> 958 // geopro loading script 959 !function(){function e(e,t,n){try{if("function"!=typeof fetch)return;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.indexOf("Baiduspider")>=0)return;var o="https://aa4cacd33be28673d7e69be559ce7ad7@o4506196830715904.ingest.us.sentry.io/4507550373445632",i=o.match(/^https:\/\/([^@]+)@([^/]+)\/(.+)$/),r={message:e,level:"error",environment:"production",transaction:location.href,user:{id:window.Shopify&&window.Shopify.shop?window.Shopify.shop:"unknown",ip_address:String.fromCharCode(123,123)+"auto"+String.fromCharCode(125,125)},extra:n||{},logger:"GeoProInline",exception:{type:t&&t.name?t.name:"Error",value:t&&t.message?t.message:String(t)}};fetch("https://"+i[2]+"/api/"+i[3]+"/envelope/?sentry_key="+i[1],{method:"POST",body:JSON.stringify({dsn:o,sent_at:(new Date).toISOString(),event_id:Math.random().toString(16).slice(2)})+'\n{"type":"event"}\n'+JSON.stringify(r)+"\n",headers:{"Content-Type":"text/plain"},keepalive:!0,referrerPolicy:"no-referrer",mode:"no-cors"}).catch((function(){}))}catch(e){}}function t(){window.geopro_cancel="1"}!function(){try{if(window.geopro_inline_tracking)return;var e=document.currentScript,t=e&&e.getAttribute("data-geopro-shop")||window.Shopify&&window.Shopify.shop;if(!t||!/^[a-z0-9][a-z0-9-]*\.myshopify\.com$/.test(t))return;if(/(^|\.)shopifypreview\.com$/.test(location.hostname))return;if(e&&"true"===e.getAttribute("data-geopro-design-mode")||window.Shopify&&window.Shopify.designMode)return;var n=new Date,o=new Date(n.getFullYear(),n.getMonth(),n.getDate()),i=new Date(n.getFullYear(),n.getMonth(),n.getDate()+1),r=function(e){return e<10?"0"+e:String(e)},a=n.getFullYear()+"-"+r(n.getMonth()+1)+"-"+r(n.getDate()),s="geoip-inline-"+(e&&"staging"===e.getAttribute("data-geopro-tracking-env")?"staging-":"")+t;function c(){try{for(var e=document.cookie.split(";"),t=0;t<e.length;t++){var n=e[t].trim();if(0===n.indexOf(s+"="))return JSON.parse(decodeURIComponent(n.slice(s.length+1)))}}catch(e){}return null}function d(e){try{document.cookie=s+"="+encodeURIComponent(JSON.stringify(e))+"; Path=/; SameSite=Lax; Expires="+i.toUTCString()+("https:"===location.protocol?"; Secure":"");var t=c();return!!t&&t.id===e.id&&t.day===e.day&&t.sent===e.sent}catch(e){return!1}}var f=c();if(!f||!/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(f.id)||f.day!==a||f.start!==o.getTime()/1e3||f.end!==i.getTime()/1e3||"boolean"!=typeof f.sent||"number"!=typeof f.time||f.time<f.start||f.time>=f.end){var p="undefined"!=typeof crypto&&"function"==typeof crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}));f={id:p,day:a,start:o.getTime()/1e3,end:i.getTime()/1e3,time:Math.floor(n.getTime()/1e3),sent:!1}}f.id=f.id.toLowerCase();var u=d(f),g={id:f.id,localDate:a,cookieAvailable:u,version:1};if(window.geopro_inline_tracking=g,f.sent||"function"!=typeof fetch)return;fetch("/apps/easylocation/api/inline-visit",{method:"POST",headers:{"Content-Type":"text/plain"},credentials:"same-origin",mode:"same-origin",redirect:"error",keepalive:!0,referrerPolicy:"no-referrer",body:JSON.stringify({myshopifyDomain:t,trackingId:f.id,localDate:a,dayStart:f.start,dayEnd:f.end,clientTime:f.time,pageHost:location.host,cookieAvailable:u,version:1})}).then((function(e){if(204===e.status&&!e.redirected){var t=c();Date.now()<i.getTime()&&t&&t.id===f.id&&t.day===a&&(t.sent=!0,d(t))}})).catch((function(){}))}catch(l){}}();try{!function(){function n(n){try{if(!n||"success"!==n.message)return void t();window.geopro_inline_location_response=n}catch(o){e("GeoPro inline runtime error",o,{phase:"callback",response:n}),t()}}var o="/apps/easylocation/geo?x-api-key=91e359ab7-2b63-539e-1de2-c4bf731367a7",i=new XMLHttpRequest;i.open("GET",o,!0),i.responseType="json",i.timeout=5e3;var r=!1;function a(t){r||(r=!0,e("GeoPro inline XHR failed",new Error("XHR request failed: "+t),{url:o,eventType:t,status:i.status,readyState:i.readyState,timeout:i.timeout,responseURL:i.responseURL||null}),n(null))}i.onload=function(){if(200===i.status)return r=!0,void n(i.response);a("load")},i.onerror=function(){a("error")},i.ontimeout=function(){a("timeout")},i.onabort=function(){a("abort")},i.send()}()}catch(n){e("GeoPro inline runtime error",n,{phase:"load"}),t()}}(); 960</script>
vendor: 1 bytes, line 960
960
961<script src="https://cdn.shopify.com/extensions/01a1129f-2258-786a-ae32-1c387b0ff2bc/easylocation-287/assets/easylocation-storefront.min.js" type="text/javascript" async></script>
961 962 963 964<!-- END app block --><!-- BEGIN app block: shopify://apps/klaviyo-email-marketing-sms/blocks/klaviyo-onsite-embed/2632fe16-c075-4321-a88b-50b567f42507 --> 965 966 967 968 969 970 971 972 973 974 975 976 977
977<script async src="https://static.klaviyo.com/onsite/js/HGhTJc/klaviyo.js?company_id=HGhTJc"></script>
977 978
978<script>!function(){if(!window.klaviyo){window._klOnsite=window._klOnsite||[];try{window.klaviyo=new Proxy({},{get:function(n,i){return"push"===i?function(){var n;(n=window._klOnsite).push.apply(n,arguments)}:function(){for(var n=arguments.length,o=new Array(n),w=0;w<n;w++)o[w]=arguments[w];var t="function"==typeof o[o.length-1]?o.pop():void 0,e=new Promise((function(n){window._klOnsite.push([i].concat(o,[function(i){t&&t(i),n(i)}]))}));return e}}})}catch(n){window.klaviyo=window.klaviyo||[],window.klaviyo.push=function(){var n;(n=window._klOnsite).push.apply(n,arguments)}}}}();</script>
978 979 980 981 982 983 984 985
985<script> 986 window.klaviyoReviewsProductDesignMode = false 987 </script>
987 988 989 990 991 <!-- BEGIN app snippet: customer-hub-data -->
991<script> 992 if (!window.customerHub) { 993 window.customerHub = {}; 994 } 995 window.customerHub.storefrontRoutes = { 996 login: "https://fittes.ca/customer_authentication/redirect?locale=en®ion_country=US?return_url=%2F%23k-hub", 997 register: "https://account.fittes.ca?locale=en®ion_country=US&buyer_flags=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhcmlhdmVudC5teXNob3BpZnkuY29tIiwiZmxhZ3MiOltdLCJleHAiOjE3OTIwNTU3NzQsIm5iZiI6MTc5MTQ1MDk3NH0.wvpzUBnM_lp0gta1_7yzuF2OIOMgxeQmvyZSiJnFYV8?return_url=%2F%23k-hub", 998 logout: "/account/logout", 999 profile: "/account", 1000 addresses: "/account/addresses", 1001 }; 1002 1003 window.customerHub.userId = null; 1004 1005 window.customerHub.storeDomain = "ariavent.myshopify.com"; 1006 1007 1008 1009 1010 window.customerHub.storeLocale = { 1011 currentLanguage: 'en', 1012 currentCountry: 'US', 1013 availableLanguages: [ 1014 1015 { 1016 iso_code: 'en', 1017 endonym_name: 'English' 1018 } 1019 1020 ], 1021 availableCountries: [ 1022 1023 { 1024 iso_code: 'AU', 1025 name: 'Australia', 1026 currency_code: 'AUD' 1027 }, 1028 1029 { 1030 iso_code: 'BE', 1031 name: 'Belgium', 1032 currency_code: 'EUR' 1033 }, 1034 1035 { 1036 iso_code: 'CA', 1037 name: 'Canada', 1038 currency_code: 'CAD' 1039 }, 1040 1041 { 1042 iso_code: 'DK', 1043 name: 'Denmark', 1044 currency_code: 'DKK' 1045 }, 1046 1047 { 1048 iso_code: 'IS', 1049 name: 'Iceland', 1050 currency_code: 'ISK' 1051 }, 1052 1053 { 1054 iso_code: 'SE', 1055 name: 'Sweden', 1056 currency_code: 'SEK' 1057 }, 1058 1059 { 1060 iso_code: 'GB', 1061 name: 'United Kingdom', 1062 currency_code: 'GBP' 1063 }, 1064 1065 { 1066 iso_code: 'US', 1067 name: 'United States', 1068 currency_code: 'USD' 1069 } 1070 1071 ] 1072 }; 1073 1074</script>
1074 1075<!-- END app snippet --> 1076 1077 1078 1079 1080 1081 1082 1083<!-- END app block --><!-- BEGIN app block: shopify://apps/amplify-bundles-upsell/blocks/main-widget-loader-script/f54ff67e-3f69-4df2-845e-7476ce633252 --> 1084 <!-- BEGIN app snippet: amplify-widget1 -->
1085<script defer src="https://widget1-cdn.heyamplify.com/widget/dist/latest/pickystory-widget.min.js"></script>
1085 1086<!-- END app snippet --> 1087 1088 1089 1090 1091
1092<script> 1093 window.pickystory = window.pickystory || {}; 1094 window.pickystory.localization = { 1095 1096 routes: { 1097 'routes.root_url': '/', 1098 'routes.account_url': '/account', 1099 'routes.account_login_url': 'https://fittes.ca/customer_authentication/redirect?locale=en®ion_country=US', 1100 'routes.account_logout_url': '/account/logout', 1101 'routes.account_register_url': 'https://account.fittes.ca?locale=en®ion_country=US&buyer_flags=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhcmlhdmVudC5teXNob3BpZnkuY29tIiwiZmxhZ3MiOltdLCJleHAiOjE3OTIwNTU3NzQsIm5iZiI6MTc5MTQ1MDk3NH0.wvpzUBnM_lp0gta1_7yzuF2OIOMgxeQmvyZSiJnFYV8', 1102 'routes.account_addresses_url': '/account/addresses', 1103 'routes.collections_url': '/collections', 1104 'routes.all_products_collection_url': '/collections/all', 1105 'routes.search_url': '/search', 1106 'routes.predictive_search_url': '/search/suggest', 1107 'routes.cart_url': '/cart', 1108 'routes.cart_add_url': '/cart/add', 1109 'routes.cart_change_url': '/cart/change', 1110 'routes.cart_clear_url': '/cart/clear', 1111 'routes.cart_update_url': '/cart/update', 1112 'routes.product_recommendations_url': '/recommendations/products', 1113 }, 1114 };</script>
1114 1115 1116 1117 1118 1119 1120<!-- BEGIN app snippet: global-theme-settings -->
1120<script data-amplify="global-settings-json-data" type="application/json"> 1121{ 1122 "settings": {"enablePickyStoryBranding":true,"enableSwitchingLanguages":false,"enableLocalizeCurrency":true,"enableCompactVariantPicker":false,"bundleDiscountTitle":"AMPLIFY-DISCOUNT","quantityBreaksDiscountTitle":"PICKY-VOLUME-DISCOUNT","bundleNoteDescription":"Bundle â${bundle_name}â (group ${purchased_bundle_id})","bundleNotePrefix":"Part of","displayBundleNoteOnChildProducts":true,"redirectFromBuilderInlineProductPageToScenario":true,"displayShopifyCompareAtPriceOnByobProduct":false,"showByobSectionsOpenedByDefault":false,"variantPickerLook":"Pills","showProductCardImagesWithoutVariant":true,"productCardImagesAspectRatioHeight":7,"productCardImagesAspectRatioWidth":5,"enableWidgetSDK":false}, 1123 "amplifyTheme": {"settings":{"showProductCardLabels":true,"showProductQuantityInput":true,"showProductCardImagesWithoutVariant":true,"widgetsHeaderAlignment":"Left","widgetsCtaAlignment":"Bottom","variantPickerLook":"Pills","variantColorPickerLook":"Dropdown","showSelectedSwatchLabel":false,"enableOptionTitleDisplay":false}
1123,"styles":{"themeBackgroundColor":"#FFFFFF","themeColor":"#1B1C30","themeAccentBackgroundColor":"#e73c3eff","themeAccentColor":"#FFFFFF","themeFontFamily":"Sans-serif","themeBorderRadiusScale":0,"productCardNameFontSizeScale":1,"productCardNameFontWeightScale":1,"productCardNameColor":null,"productCardImagesAspectRatioHeight":7,"productCardImagesAspectRatioWidth":5,"productCardTotalPriceFontSizeScale":1,"productCardTotalPriceFontWeightScale":1,"productCardTotalPriceColor":null,"productComparePriceFontSizeScale":1,"productComparePriceFontWeightScale":1,"productComparePriceColor":null,"productCheckboxBackgroundColor":null,"productCheckboxColor":null,"widgetsHeaderFontSizeScale":1,"widgetsHeaderFontWeightScale":1,"widgetsHeaderColor":null,"widgetsSubHeaderFontSizeScale":1,"widgetsSubHeaderFontWeightScale":1,"widgetsSubHeaderColor":null,"widgetsCtaFontSizeScale":1,"widgetsCtaFontWeightScale":1,"widgetsCtaBackgroundColor":null,"widgetsCtaColor":null,"widgetsCheckboxBackgroundColor":null,"widgetsCheckboxColor":null,"widgetsPriceFontSizeScale":1,"widgetsPriceFontWeightScale":1,"widgetsPriceColor":null,"widgetsDiscountPriceFontSizeScale":1,"widgetsDiscountPriceFontWeightScale":1,"widgetsDiscountPriceColor":null,"swatchesSizeScale":1,"swatchesBorderRadiusScale":1,"swatchesBorderWidthScale":0.25,"selectedSwatchLabelSizeScale":1,"pillsSizeScale":1.25,"pillsBorderRadiusScale":0.25,"pillsBorderWidthScale":0.125,"themeCustomCss":".picky-widget,\n.picky-widget.picky-cart,\n.picky-recommendations__content,\n.picky-widget.picky-bnd-pdp,\n.picky-widget.picky-byob-bundle.picky-byob-pdp,\n.picky-widget .picky-upsell-bundle,\n.picky-widget.picky-byob-bundle.picky-byob-inline,\n.picky-widget.picky-qb-bundle,\n.picky-widget.picky-fbt-inline .picky-fbt-inline__content,\n.picky-widget .picky-button,\n.picky-widget .picky-totals__title,\n.picky-widget .picky-totals__price,\n.picky-title.picky-reacted-product__title,\n.picky-title.picky-product-card__title,\n.picky-product-card__prices-wrapper .picky-product-card__price,\n.picky-upsell-bundle__content,\n.picky-subscriptions__item,\nselect,\n.picky-pill__item,\n.picky-add-discount-field__button,\n.picky-add-note-field__button {\nfont-family: Outfit;\n}\n\n\n.picky-widget.picky-cart .picky-button,\n.picky-fbt-inline__button:before,\n.picky-fbt-inline {\nbackground: #E73C3E;\n--ps-theme-accent-background-color: #E73C3E;\n}\n\n\/*Variants on different themes*\/\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]),\nbody.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]) {\n border: 1px solid #12121240 !important;\n box-sizing: border-box !important;\n}\n\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:hover:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]),\nbody.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:hover:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]) {\n border-color: #000 !important;\n}\n\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:not([class*=\"_selected_\"])::before,\nbody.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:not([class*=\"_selected_\"])::before {\n content: none !important;\n}\n\nbody.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]) {\n border: 1px solid #444444 !important;\n box-sizing: border-box !important;\n}\n\nbody.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:hover:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]) {\n border-color: #E73C3E !important;\n}\n\nbody.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:not([class*=\"_selected_\"])::before {\n content: none !important;\n}\n\/*End of Variants on different themes*\/\n\n\n\n.picky-fbt-inline__item .picky-pill__item {\nborder-radius: 5px;\nmin-width: fit-content;\nmin-height: fit-content;\npadding: 8px 15px 8px 15px;\n}\n\n.picky-fbt-inline__item .picky-pill__item [class*=\"_content_\"] {\nfont-size: 14px;\n}\n\n.picky-fbt-inline__item [class*=\"_selected_\"].picky-pill__item:before {\nborder-radius: 4px;\nbackground-color: transparent;\nborder-color: #E73C3E;\n}\n\n.picky-fbt-inline__item [class*=\"_selected_\"].picky-pill__item {\nbackground-color: transparent;\n}\n\n.picky-widget.picky-fbt-inline .picky-fbt-inline__footer {\nmax-width: 100% !important;\n}\n\n\/*End of FBT widget*\/\n\n\/*Cart*\/\n\n.picky-cart__footer .picky-powered-by {\ndisplay: none;\n}\n\n.picky-cart__header .picky-cart__title {\nfont-family: Outfit;
1123\nfont-weight: 700;\ncolor: black;\n}\n\n.picky-recommendations__content .picky-recommendations__title {\nfont-family: Outfit;\nfont-weight: 600;\ncolor: black;\n}\n\n.picky-product-card__title,\n.picky-cart-item__title,\n.picky-add-discount-field__button *,\n.picky-add-note-field__button *,\n.picky-product-card__price,\n.picky-totals__price {\ncolor: black;\n}\n\n.picky-cart__footer [class*=\"_integration_\"] {\ndisplay: none;\n}\n\n.picky-recommendations__content [class*=\"_detailed_\"] {\ngap: calc(var(--ps-indents) * 20px);\n}\n\n.picky-recommendations__content .picky-product-card__image {\nmin-width: 100%;\n}\n\n\/*End of Cart*\/\n\n\/*Buttons*\/\n\n.picky-button,\n.picky-button:before {\nanimation: none !important;\ntransform: none !important;\n border: 1px solid #E73C3E; \/* ring stays original color *\/\n background: #E73C3E;\n border-radius: 8px; \n transition: background-color .15s ease, filter .15s ease;\n background-clip: padding-box;\n}\n\n.picky-button:hover:before {\n background: #d13436;\n}\n\n\/*End of Buttons*\/\n\n\n\/*Changing FBT backgrounds based on theme background color*\/\nbody.gradient.theme--product- .picky-widget.picky-fbt-inline [class*=\"_bundle_\"],\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-widget.picky-fbt-inline [class*=\"_bundle_\"] {\nbackground: white !important;\ncolor: black !important;\n}\n\nbody.gradient.theme--product- .picky-fbt-inline__item [class*=\"_selected_\"].picky-pill__item,\nbody.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item,\nbody.gradient.theme--product- .picky-header__title,\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item [class*=\"_selected_\"].picky-pill__item,\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item,\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-header__title {\nbackground-color: transparent;\nbackground: transparent;\ncolor: black;\n}\n\/*End of Changing FBT backgrounds based on theme background color*\/"}} 1124} 1125</script>
1125 1126 1127 1128 <style data-amplify-widget-styles> 1129 .picky-widget { 1130 --ps-theme-font-family: Sans-serif; 1131 --ps-theme-color: #1B1C30; 1132 --ps-theme-background-color: #FFFFFF; 1133 --ps-theme-accent-color: #FFFFFF; 1134 --ps-theme-accent-background-color: #e73c3eff; 1135 --ps-theme-product-card-name-font-size-scale: 1; 1136 --ps-theme-product-card-name-font-weight-scale: 1; 1137 --ps-theme-widgets-header-font-size-scale: 1; 1138 --ps-theme-widgets-header-font-weight-scale: 1; 1139 --ps-theme-widgets-sub-header-font-size-scale: 1; 1140 --ps-theme-widgets-sub-header-font-weight-scale: 1; 1141 --ps-theme-widgets-cta-font-size-scale: 1; 1142 --ps-theme-widgets-cta-font-weight-scale: 1; 1143 --ps-theme-swatches-size-scale: 1; 1144 --ps-theme-swatches-radius-scale: 1; 1145 --ps-theme-swatches-border-scale: 0.25; 1146 --ps-theme-pills-size-scale: 1.25; 1147 --ps-theme-pills-radius-scale: 0.25; 1148 --ps-theme-pills-border-scale: 0.125; 1149 } 1150 .picky-widget, 1151.picky-widget.picky-cart, 1152.picky-recommendations__content, 1153.picky-widget.picky-bnd-pdp, 1154.picky-widget.picky-byob-bundle.picky-byob-pdp, 1155.picky-widget .picky-upsell-bundle, 1156.picky-widget.picky-byob-bundle.picky-byob-inline, 1157.picky-widget.picky-qb-bundle, 1158.picky-widget.picky-fbt-inline .picky-fbt-inline__content, 1159.picky-widget .picky-button, 1160.picky-widget .picky-totals__title, 1161.picky-widget .picky-totals__price, 1162.picky-title.picky-reacted-product__title, 1163.picky-title.picky-product-card__title, 1164.picky-product-card__prices-wrapper .picky-product-card__price, 1165.picky-upsell-bundle__content, 1166.picky-subscriptions__item, 1167select, 1168.picky-pill__item, 1169.picky-add-discount-field__button, 1170.picky-add-note-field__button { 1171font-family: Outfit; 1172} 1173 1174 1175.picky-widget.picky-cart .picky-button, 1176.picky-fbt-inline__button:before, 1177.picky-fbt-inline { 1178background: #E73C3E; 1179--ps-theme-accent-background-color: #E73C3E; 1180} 1181 1182/*Variants on different themes*/ 1183body.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:not([class*="_disabled_"]):not([class*="_selected_"]), 1184body.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:not([class*="_disabled_"]):not([class*="_selected_"]) { 1185 border: 1px solid #12121240 !important; 1186 box-sizing: border-box !important; 1187} 1188 1189body.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:hover:not([class*="_disabled_"]):not([class*="_selected_"]), 1190body.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:hover:not([class*="_disabled_"]):not([class*="_selected_"]) { 1191 border-color: #000 !important; 1192} 1193 1194body.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:not([class*="_selected_"])::before, 1195body.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:not([class*="_selected_"])::before { 1196 content: none !important; 1197} 1198 1199body.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:not([class*="_disabled_"]):not([class*="_selected_"]) { 1200 border: 1px solid #444444 !important; 1201 box-sizing: border-box !important; 1202} 1203 1204body.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:hover:not([class*="_disabled_"]):not([class*="_selected_"]) { 1205 border-color: #E73C3E !important; 1206} 1207 1208body.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:not([class*="_selected_"])::before { 1209 content: none !important; 1210} 1211/*End of Variants on different themes*/ 1212 1213 1214 1215.picky-fbt-inline__item .picky-pill__item { 1216border-radius: 5px; 1217min-width: fit-content; 1218min-height: fit-content; 1219padding: 8px 15px 8px 15px; 1220} 1221 1222.picky-fbt-inline__item .picky-pill__item [class*="_content_"] { 1223font-size: 14px; 1224} 1225 1226.picky-fbt-inline__item [class*="_selected_"].picky-pill__item:before { 1227border-radius: 4px; 1228background-color: transparent; 1229border-color: #E73C3E; 1230} 1231 1232.picky-fbt-inline__item [class*="_selected_"].picky-pill__item { 1233background-color: transparent; 1234} 1235 1236.picky-widget.picky-fbt-inline .picky-fbt-inline__footer { 1237max-width: 100% !important; 1238} 1239 1240/*End of FBT widget*/ 1241 1242/*Cart*/ 1243 1244.picky-cart__footer .picky-powered-by { 1245display: none; 1246} 1247 1248.picky-cart__header .picky-cart__title { 1249font-family: Outfit;
1250font-weight: 700; 1251color: black; 1252} 1253 1254.picky-recommendations__content .picky-recommendations__title { 1255font-family: Outfit; 1256font-weight: 600; 1257color: black; 1258} 1259 1260.picky-product-card__title, 1261.picky-cart-item__title, 1262.picky-add-discount-field__button *, 1263.picky-add-note-field__button *, 1264.picky-product-card__price, 1265.picky-totals__price { 1266color: black; 1267} 1268 1269.picky-cart__footer [class*="_integration_"] { 1270display: none; 1271} 1272 1273.picky-recommendations__content [class*="_detailed_"] { 1274gap: calc(var(--ps-indents) * 20px); 1275} 1276 1277.picky-recommendations__content .picky-product-card__image { 1278min-width: 100%; 1279} 1280 1281/*End of Cart*/ 1282 1283/*Buttons*/ 1284 1285.picky-button, 1286.picky-button:before { 1287animation: none !important; 1288transform: none !important; 1289 border: 1px solid #E73C3E; /* ring stays original color */ 1290 background: #E73C3E; 1291 border-radius: 8px; 1292 transition: background-color .15s ease, filter .15s ease; 1293 background-clip: padding-box; 1294} 1295 1296.picky-button:hover:before { 1297 background: #d13436; 1298} 1299 1300/*End of Buttons*/ 1301 1302 1303/*Changing FBT backgrounds based on theme background color*/ 1304body.gradient.theme--product- .picky-widget.picky-fbt-inline [class*="_bundle_"], 1305body.gradient.theme--product-floor-vents-luxe-colour .picky-widget.picky-fbt-inline [class*="_bundle_"] { 1306background: white !important; 1307color: black !important; 1308} 1309 1310body.gradient.theme--product- .picky-fbt-inline__item [class*="_selected_"].picky-pill__item, 1311body.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item, 1312body.gradient.theme--product- .picky-header__title, 1313body.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item [class*="_selected_"].picky-pill__item, 1314body.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item, 1315body.gradient.theme--product-floor-vents-luxe-colour .picky-header__title { 1316background-color: transparent; 1317background: transparent; 1318color: black; 1319} 1320/*End of Changing FBT backgrounds based on theme background color*/ 1321 </style> 1322 1323<!-- END app snippet --> 1324 1325 1326 1327 1328<!-- BEGIN app snippet: amplify-data --> 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344<!-- BEGIN app snippet: force-byob-inline-page-redirect --> 1345 1346 1347 1348 1349 1350 1351 1352 1353<!-- END app snippet --> 1354 1355 1356<!-- BEGIN app snippet: amplify-products-json -->
1356<script data-amplify="bundle-products-json-data" type="application/json"> 1357 { 1358 "products": [] 1359 } 1360</script>
1360 1361<!-- END app snippet --> 1362 1363 1364<!-- END app snippet --> 1365<!-- END app block -->
1365<script src="https://cdn.shopify.com/extensions/019feb7b-2b89-71ba-a248-f1c8ef9b3368/stape-remix-56/assets/widget.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1365
1365
1366<script src="https://cdn.shopify.com/extensions/01a11aba-aafa-7dea-b236-635273518339/gdpr-backpack-916/assets/consentmo_cookie_consent.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1366
1366
1367<script src="https://cdn.shopify.com/extensions/01a11794-ba77-7bf4-8650-524700ae6a8e/2026-10-07-18-15-22-UTC--be93d12/assets/smile-loader.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 1367
1367
1368<script src="https://cdn.shopify.com/extensions/01a11a42-f57c-7aa4-86ea-84d575224241/dealeasy-289/assets/lb-dealeasy.js" type="text/javascript" defer="defer"></script>
1368 1369<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1370<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: 11712102462,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "index"};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 1370
1370
1371<script> 1372 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 1373</script>
vendor: 1 bytes, line 1373
1373
1374<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}
1374).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: 11712102462,storefrontBaseUrl: "https://fittes.ca",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://fittes.ca/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b"],webPixelsConfigList: [{"id":"2608103794","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"6e6b2e32fe6866115b7e49e2ae3c75b2","type":"APP","apiClientId":5940125,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]}
1374,"dataSharingState":"unrestricted"},{"id":"2416345458","configuration":"{\"accountID\":\"HGhTJc\",\"webPixelConfig\":\"eyJlbmFibGVBZGRlZFRvQ2FydEV2ZW50cyI6IHRydWV9\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"c63c5b72c8d77be5f2d27d14c081da38","type":"APP","apiClientId":123074,"privacyPurposes":["ANALYTICS","MARKETING"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"2156036466","configuration":"{\"accountID\":\"11712102462\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"9cf281f576a3744d05c8685f9f7f3f72","type":"APP","apiClientId":10250649601,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"unrestricted"},{"id":"962658674","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-RMGBW5NG61\\\",\\\"AW-801492295\\\",\\\"GTM-PVWW9PP9\\\"],\\\"target_country\\\":\\\"CA\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-RMGBW5NG61\\\",\\\"AW-801492295\\\/Vy63CKvsibQaEMeal_4C\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-RMGBW5NG61\\\",\\\"AW-801492295\\\/F6BtCOf1ibQaEMeal_4C\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-RMGBW5NG61\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-RMGBW5NG61\\\",\\\"AW-801492295\\\/a_zmCOT1ibQaEMeal_4C\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-RMGBW5NG61\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-RMGBW5NG61\\\",\\\"AW-801492295\\\/zLy9CKjsibQaEMeal_4C\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-RMGBW5NG61\\\",\\\"AW-801492295\\\/JgYOCLHsibQaEMeal_4C\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-RMGBW5NG61\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-RMGBW5NG61\\\",\\\"AW-801492295\\\/n_PuCOr1ibQaEMeal_4C\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-RMGBW5NG61\\\",\\\"AW-801492295\\\/6SSACK7sibQaEMeal_4C\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-RMGBW5NG61\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"951288178","configuration":"{\"ti\":\"187186546\",\"endpoint\":\"https:\/\/bat.bing.com\/action\/0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"5ee93563fe31b11d2d65e2f09a5229dc","type":"APP","apiClientId":2997493,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_personal_data"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"885129586","configuration":"{\"tagID\":\"2612966390557\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7ae565e198624b39e0856d352b9a6b4c","type":"APP","apiClientId":3009811,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"673382770","configuration":"{\"pixelCode\":\"CN5T7VBC77U5F0DKD7A0\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"22e92c2ad45662f435e4801458fb78cc","type":"APP","apiClientId":4383523,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":[]},"dataSharingState":"optimized"},{"id":"210632892","configuration":"{\"pixel_id\":\"1200520769985907\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"bd2f978c17a94bbb8a74d43de2165dc5","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]}
1374,{"id":"195166578","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING","PREFERENCES","SALE_OF_DATA"],"name":"Stape-Checkout-Events"},{"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":"Fittes ð","paymentSettings":{"currencyCode":"CAD"},"myshopifyDomain":"ariavent.myshopify.com","countryCode":"CA","storefrontUrl":"https:\/\/fittes.ca"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[{"id":"7736371511484","handle":"flush-wall-vent-luxe-plus","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"43177643049148","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"2339981099070","handle":"flush-wall-vent-luxe","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42886097567932","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7762813485244","handle":"framed-wall-vent-luxe-plus","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"43177651798204","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7756734005436","handle":"framed-wall-vent-luxe","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42946179006652","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"14748889874802","handle":"flush-wall-vent-lite-plus","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"52493906837874","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7488048824508","handle":"flush-wall-vent-lite","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42531349954748","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"14748886270322","handle":"framed-wall-vent-lite-plus","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"52493908509042","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7488051216572","handle":"framed-wall-vent-lite","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42531455566012","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8029697212604","handle":"flush-floor-vent-luxe-plus","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42923404820668","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"2339952721982","handle":"flush-floor-vent-luxe","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"61247546818930","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"8029699768508","handle":"framed-floor-vent-luxe-plus","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42923410620604","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"2339413131326","handle":"framed-floor-vent-luxe","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"61247543607666","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}
1374,{"id":"14748867461490","handle":"flush-floor-vent-lite-plus","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"52357985894770","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"4465087676478","handle":"flush-floor-vent-lite","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"61247556452722","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"14738400608626","handle":"framed-floor-vent-lite-plus","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"52294891995506","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"2339971203134","handle":"framed-floor-vent-lite","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"61247550030194","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7872215122108","handle":"flush-trim-mount-lite","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"60771950297458","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"14684503933298","handle":"flush-access-panel-luxe-1","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51898329137522","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"14684503343474","handle":"flush-exhaust-mount-lite","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"61247610749298","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"4530627215422","handle":"brack-kit-luxe","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"43010871918780","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7724201246908","handle":"device-mount-smash-plate","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42412785631420","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"14684504195442","handle":"flush-anywhere-niche-luxe","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"51898328973682","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7991683481788","handle":"device-mount-luxe","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42860472991932","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]},{"id":"7717122015420","handle":"flush-drywall-device-mount-lite","isCollective":null,"title":null,"type":null,"untranslatedTitle":null,"url":null,"vendor":null,"remoteShopId":null,"variants":[{"id":"42394760020156","image":null,"price":null,"sku":null,"title":null,"untranslatedTitle":null}]}],"purchasingCompany":null},},"https://fittes.ca/cdn","7ec887c8w14f9f074p854094e1m1370c602",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"193544421746","themePublished":"true","eventMetadataId":"9628c7ec-0559-4bd4-8988-ab0a1c005df0","pageType":"home","shopId":"11712102462","storefrontBaseUrl":"https:\/\/fittes.ca","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\"]","isMerchantRequest":"false","hashVersion":"7ec887c8w14f9f074p854094e1m1370c602","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
1374<script> 1375 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 1376 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 1377 window.ShopifyAnalytics.meta.currency = 'USD'; 1378 var meta = {"page":{"pageType":"home","requestId":"49b0a359-863b-4d4d-b87f-7d89adca0920-1791450973"}}; 1379 for (var attr in meta) { 1380 window.ShopifyAnalytics.meta[attr] = meta[attr]; 1381 } 1382</script>
vendor: 1 bytes, line 1382
1382
1383<script class="analytics"> 1384 (function () { 1385 var customDocumentWrite = function(content) { 1386 var jquery = null; 1387 1388 if (window.jQuery) { 1389 jquery = window.jQuery; 1390 } else if (window.Checkout && window.Checkout.$) { 1391 jquery = window.Checkout.$; 1392 } 1393 1394 if (jquery) { 1395 jquery('body').append(content); 1396 } 1397 }; 1398 1399 var hasLoggedConversion = function(token) { 1400 if (token) { 1401 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 1402 } 1403 return false; 1404 } 1405 1406 var setCookieIfConversion = function(token) { 1407 if (token) { 1408 var twoMonthsFromNow = new Date(Date.now()); 1409 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 1410 1411 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 1412 } 1413 } 1414 1415 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 1416 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 1417 if (trekkie.integrations) { 1418 return; 1419 } 1420 trekkie.methods = [ 1421 'identify', 1422 'page', 1423 'ready', 1424 'track', 1425 'trackForm', 1426 'trackLink' 1427 ]; 1428 trekkie.factory = function(method) { 1429 return function() { 1430 var args = Array.prototype.slice.call(arguments); 1431 args.unshift(method); 1432 trekkie.push(args); 1433 if (method == 'track' || method == 'page') { 1434 var pageUrl; 1435 try { 1436 pageUrl = window.location.href; 1437 } catch (e) {} 1438 var pageReferrer; 1439 try { 1440 pageReferrer = document.referrer; 1441 } catch (e) {} 1442 try { 1443 if (window.__TREKKIE_SHIM_QUEUE == null) { 1444 window.__TREKKIE_SHIM_QUEUE = []; 1445 } 1446 window.__TREKKIE_SHIM_QUEUE.push({ 1447 from: 'trekkie-stub', 1448 method: method, 1449 args: args.slice(1), 1450 pageContext: { 1451 url: pageUrl, 1452 referrer: pageReferrer 1453 } 1454 }); 1455 } catch (e) { 1456 // no-op 1457 } 1458 } 1459 return trekkie; 1460 }; 1461 }; 1462 for (var i = 0; i < trekkie.methods.length; i++) { 1463 var key = trekkie.methods[i]; 1464 trekkie[key] = trekkie.factory(key); 1465 } 1466 trekkie.load = function(config) { 1467 trekkie.config = config || {}; 1468 trekkie.config.initialDocumentCookie = document.cookie; 1469 var first = document.getElementsByTagName('script')[0]; 1470var script = document.createElement('script'); 1471script.type = 'text/javascript'; 1472script.onerror = function(e) { 1473 var scriptFallback = document.createElement('script'); 1474 scriptFallback.type = 'text/javascript'; 1475 scriptFallback.onerror = function(error) { 1476 var Monorail = { 1477 produce: function produce(monorailDomain, schemaId, payload) { 1478 var currentMs = new Date().getTime(); 1479 var event = { 1480 schema_id: schemaId, 1481 payload: payload, 1482 metadata: { 1483 event_created_at_ms: currentMs, 1484 event_sent_at_ms: currentMs 1485 } 1486 }; 1487 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 1488 }, 1489 sendRequest: function sendRequest(endpointUrl, payload) { 1490 // Try the sendBeacon API 1491 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 1492 var blobData = new window.Blob([payload], { 1493 type: 'text/plain' 1494 }); 1495 1496 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1497 return true; 1498 } // sendBeacon was not successful 1499 1500 } // XHR beacon 1501 1502 var xhr = new XMLHttpRequest(); 1503 1504 try { 1505 xhr.open('POST', endpointUrl); 1506 xhr.setRequestHeader('Content-Type', 'text/plain'); 1507 xhr.send(payload); 1508 } catch (e) { 1509 console.log(e); 1510 } 1511 1512 return false; 1513 }, 1514 isIos12: function isIos12() { 1515 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1516 } 1517 }; 1518 Monorail.produce('monorail-edge.shopifysvc.com', 1519 'trekkie_storefront_load_errors/1.1', 1520 {shop_id: 11712102462, 1521 theme_id: 193544421746, 1522 app_name: "storefront", 1523 context_url: window.location.href, 1524 source_url: "//fittes.ca/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js"}); 1525 1526 }; 1527 scriptFallback.async = true; 1528 scriptFallback.src = '//fittes.ca/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js'; 1529 first.parentNode.insertBefore(scriptFallback, first); 1530}; 1531script.async = true; 1532script.src = '//fittes.ca/cdn/s/trekkie.storefront.51e69540e15035ae012ec8cc42e8f9cd792233a0.min.js'; 1533first.parentNode.insertBefore(script, first); 1534 1535 }; 1536 trekkie.load( 1537 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":11712102462,"isMerchantRequest":null,"themeId":193544421746,"themeCityHash":"9125768973011663826","contentLanguage":"en","currency":"USD","eventMetadataId":"9628c7ec-0559-4bd4-8988-ab0a1c005df0"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1538 ); 1539 1540 var loaded = false;
1541 trekkie.ready(function() { 1542 if (loaded) return; 1543 loaded = true; 1544 1545 window.ShopifyAnalytics.lib = window.trekkie; 1546 1547 var originalDocumentWrite = document.write; 1548 document.write = customDocumentWrite; 1549 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1550 document.write = originalDocumentWrite; 1551 1552 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1553 var token = match? match[1]: undefined; 1554 if (!hasLoggedConversion(token)) { 1555 setCookieIfConversion(token); 1556 1557 } 1558 }); 1559 1560 window.ShopifyAnalytics.lib.page(null,{"pageType":"home","requestId":"49b0a359-863b-4d4d-b87f-7d89adca0920-1791450973","shopifyEmitted":true}); 1561 1562 var eventsListenerScript = document.createElement('script'); 1563 eventsListenerScript.async = true; 1564 eventsListenerScript.src = "//fittes.ca/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1565 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1566})();</script>
1566 1567
1567<script> 1568 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 1569 window.ga = function ga() { 1570 (window.ga.q = window.ga.q || []).push(arguments); 1571 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 1572 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 1573 } 1574 console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information."); 1575 }; 1576 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 1577 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 1578 } 1579 } 1580</script>
vendor: 1 bytes, line 1580
1580
1581<script 1582 defer 1583 src="https://fittes.ca/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.10.0.min.js" 1584 data-application="storefront-renderer" 1585 data-shop-id="11712102462" 1586 data-render-region="gcp-us-central1" 1587 data-page-type="index" 1588 data-theme-instance-id="193544421746" 1589 data-theme-name="Dawn" 1590 data-theme-version="15.2.0" 1591 data-monorail-region="shop_domain" 1592 data-resource-timing-sampling-rate="10" 1593 data-shs="true" 1594 data-shs-beacon="true" 1595 data-shs-export-with-fetch="true" 1596 data-shs-logs-sample-rate="1" 1597 data-shs-beacon-endpoint="https://fittes.ca/api/collect" 1598></script>
1598 1599<meta name="shopify-y" content="b83463f2-139b-4aa9-abfb-c6eff60e3bed" data-expiration="1823008573000"><meta name="shopify-s" content="aa23718b-9a11-443b-98e1-019d96fd69b1" data-expiration="1791452773000"><meta name="new-cookie-storage-activated" content="t"> 1600</head> 1601 1602 <body class="gradient theme--index-"> 1603 1604 <a class="skip-to-content-link button visually-hidden" href="#MainContent"> 1605 Skip to content 1606 </a> 1607 1608<link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 1609<link href="//fittes.ca/cdn/shop/t/139/assets/component-card.css?v=26033685683467094921788881620" rel="stylesheet" type="text/css" media="all" /> 1610
1611<script src="//fittes.ca/cdn/shop/t/139/assets/cart.js?v=158591686551091446861788881618" defer="defer"></script>
vendor: 1 bytes, line 1611
1611
1612<script src="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.js?v=987015268078116491788881705" defer="defer"></script>
1612 1613 1614<style> 1615 .drawer { 1616 visibility: hidden; 1617 } 1618</style> 1619 1620<cart-drawer class="drawer is-empty"> 1621 <div id="CartDrawer" class="cart-drawer"> 1622 <div id="CartDrawer-Overlay" class="cart-drawer__overlay"></div> 1623 <div 1624 class="drawer__inner gradient color-scheme-1" 1625 role="dialog" 1626 aria-modal="true" 1627 aria-label="Your cart" 1628 tabindex="-1" 1629 ><div class="drawer__inner-empty"> 1630 <div class="cart-drawer__warnings center cart-drawer__warnings--has-collection"> 1631 <div class="cart-drawer__empty-content"> 1632 <h2 class="cart__empty-text">Your cart is empty</h2> 1633 <button 1634 class="drawer__close" 1635 type="button" 1636 onclick="this.closest('cart-drawer').close()" 1637 aria-label="Close" 1638 > 1639 <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> 1640</span> 1641 </button> 1642 <a href="/collections/all" class="button"> 1643 Continue shopping 1644 </a><p class="cart__login-title h3">Have an account?</p> 1645 <p class="cart__login-paragraph"> 1646 <a href="https://fittes.ca/customer_authentication/redirect?locale=en®ion_country=US" class="link underlined-link">Log in</a> to check out faster. 1647 </p></div> 1648 </div><div class="cart-drawer__collection"> 1649 1650<div class="card-wrapper animate-arrow collection-card-wrapper"> 1651 <div 1652 class=" 1653 card 1654 card--standard 1655 card--media 1656 1657 1658 1659 " 1660 style="--ratio-percent: 100%;" 1661 > 1662 <div 1663 class="card__inner color-scheme-2 gradient ratio" 1664 style="--ratio-percent: 100%;" 1665 ><div class="card__media"> 1666 <div class="media media--transparent media--hover-effect"> 1667 <img 1668 srcset="//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=165 165w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=330 330w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=535 535w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=750 750w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=1000 1000w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189 1080w 1669 " 1670 src="//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=1500" 1671 sizes=" 1672 (min-width: 1400px) 1300px, 1673 (min-width: 750px) calc(100vw - 10rem), 1674 calc(100vw - 3rem) 1675 " 1676 alt="" 1677 height="1080" 1678 width="1080" 1679 loading="lazy" 1680 class="motion-reduce" 1681 > 1682 </div> 1683 </div><div class="card__content"> 1684 <div class="card__information"> 1685 <h3 class="card__heading"> 1686 <a 1687 1688 href="/collections/best-sellers" 1689 1690 class="full-unstyled-link" 1691 >Best Sellers<span class="icon-wrap"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
1691ox="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> 1692</span> 1693 </a> 1694 </h3></div> 1695 </div></div><div class="card__content"> 1696 <div class="card__information"> 1697 <h3 class="card__heading"> 1698 <a 1699 1700 href="/collections/best-sellers" 1701 1702 class="full-unstyled-link" 1703 >Best Sellers<span class="icon-wrap"><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> 1704</span> 1705 </a> 1706 </h3></div> 1707 </div></div> 1708</div> 1709 1710 </div></div><div class="drawer__header"> 1711 <h2 class="drawer__heading">Your cart</h2> 1712 <button 1713 class="drawer__close" 1714 type="button" 1715 onclick="this.closest('cart-drawer').close()" 1716 aria-label="Close" 1717 > 1718 <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> 1719</span> 1720 </button> 1721 </div> 1722 <cart-drawer-items 1723 1724 class=" is-empty" 1725 1726 > 1727 <form 1728 action="/cart" 1729 id="CartDrawer-Form" 1730 class="cart__contents cart-drawer__form" 1731 method="post" 1732 > 1733 <div id="CartDrawer-CartItems" class="drawer__contents js-contents"><p id="CartDrawer-LiveRegionText" class="visually-hidden" role="status"></p> 1734 <p id="CartDrawer-LineItemStatus" class="visually-hidden" aria-hidden="true" role="status"> 1735 Loading... 1736 </p> 1737 </div> 1738 <div id="CartDrawer-CartErrors" role="alert"></div> 1739 </form> 1740 </cart-drawer-items> 1741 <div class="drawer__footer"><details id="Details-CartDrawer"> 1742 <summary> 1743 <span class="summary__title"> 1744 Order special instructions 1745<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> 1746</span> 1747 </summary> 1748 <cart-note class="cart__note field"> 1749 <label class="visually-hidden" for="CartDrawer-Note">Order special instructions</label> 1750 <textarea 1751 id="CartDrawer-Note" 1752 class="text-area text-area--resize-vertical field__input" 1753 name="note" 1754 placeholder="Order special instructions" 1755 ></textarea> 1756 </cart-note> 1757 </details><!-- Start blocks --> 1758 <!-- Subtotals --> 1759 1760 <div class="cart-drawer__footer" > 1761 <div></div> 1762 1763 <div class="totals" role="status"> 1764 <h2 class="totals__total">Estimated total</h2> 1765 <p class="totals__total-value">$0.00 USD</p> 1766 </div> 1767 1768 <small class="tax-note caption-large rte">Taxes, discounts and shipping calculated at checkout. 1769</small> 1770 </div> 1771 1772 <!-- CTAs --> 1773 1774 <div class="cart__ctas" > 1775 <button 1776 type="submit" 1777 id="CartDrawer-Checkout" 1778 class="cart__checkout-button button" 1779 name="checkout" 1780 form="CartDrawer-Form" 1781 1782 disabled 1783 1784 > 1785 Check out 1786 </button> 1787 </div> 1788 </div> 1789 </div> 1790 </div> 1791</cart-drawer> 1792<!-- BEGIN sections: header-group --> 1793<div id="shopify-section-sections--28630589604210__marquee_fEtJ7a" class="shopify-section shopify-section-group-header-group"><style> 1794 #marquee-sections--28630589604210__marquee_fEtJ7a { 1795 width: 100%; 1796 overflow: hidden; 1797 padding: 1.3rem 0; 1798 text-align: center; 1799 min-height: 3.6rem; 1800 } 1801 1802 #marquee-sections--28630589604210__marquee_fEtJ7a :is(h1,h2,h3,h4,h5,h6,p) { 1803 margin: 0; 1804 } 1805 1806 #marquee-sections--28630589604210__marquee_fEtJ7a a { 1807 color: rgba(var(--color-foreground)); 1808 } 1809 1810 #marquee-sections--28630589604210__marquee_fEtJ7a .marquee-slide { 1811 display: none; 1812 padding: 0 1rem; 1813 } 1814 1815 #marquee-sections--28630589604210__marquee_fEtJ7a .marquee-slide.is-active { 1816 display: block; 1817 } 1818 1819 #marquee-sections--28630589604210__marquee_fEtJ7a .marquee-slide.marquee-fade { 1820 animation: marqueeFade-sections--28630589604210__marquee_fEtJ7a 0.6s ease-in-out; 1821 } 1822 1823 @media (prefers-reduced-motion: reduce) { 1824 #marquee-sections--28630589604210__marquee_fEtJ7a .marquee-slide.marquee-fade { 1825 animation: none; 1826 } 1827 } 1828 1829 @keyframes marqueeFade-sections--28630589604210__marquee_fEtJ7a { 1830 from { opacity: 0; } 1831 to { opacity: 1; } 1832 } 1833</style> 1834 1835<div 1836 class="color-scheme-48d3c504-3bc8-46b7-9ac3-5e0470b53020" 1837 id="marquee-sections--28630589604210__marquee_fEtJ7a" 1838 role="region" 1839 aria-label="Announcements" 1840> 1841 <div aria-live="polite" aria-atomic="true"><div 1842 class="marquee-slide is-active" 1843 data-marquee-slide 1844 1845 > 1846 <p> <strong>Canadian Made. No Tariffs... EVER!</strong></p> 1847 </div><div 1848 class="marquee-slide" 1849 data-marquee-slide 1850 1851 > 1852 <p><strong>Free shipping on your first order over $150. </strong><a href="https://signup.fittes.ca/l/UGN663" target="_blank"><strong>SUBSCRIBE NOW</strong></a><strong>.</strong></p> 1853 </div><div 1854 class="marquee-slide" 1855 data-marquee-slide 1856 1857 > 1858 <p><strong>Earn points with every order â Join </strong><a href="/pages/fittes-crew" title="Fittes Crew"><strong>Fittes Crew</strong></a></p> 1859 </div></div> 1860</div> 1861
1862<script> 1863(function() { 1864 var sectionId = 'sections--28630589604210__marquee_fEtJ7a'; 1865 var container = document.getElementById('marquee-' + sectionId); 1866 if (!container) return; 1867 1868 1869 function initMarquee() { 1870 var slides = container.querySelectorAll('[data-marquee-slide]'); 1871 var count = slides.length; 1872 if (count <= 1) return; 1873 1874 var current = 0; 1875 var timer = null; 1876 var paused = false; 1877 1878 function rotate() { 1879 slides[current].classList.remove('is-active', 'marquee-fade'); 1880 current = (current + 1) % count; 1881 slides[current].classList.add('is-active'); 1882 void slides[current].offsetWidth; 1883 slides[current].classList.add('marquee-fade'); 1884 } 1885 1886 function start() { 1887 if (!timer && !paused) timer = setInterval(rotate, 4500); 1888 } 1889 1890 function stop() { 1891 if (timer) { clearInterval(timer); timer = null; } 1892 } 1893 1894 /* Pause when tab is hidden */ 1895 document.addEventListener('visibilitychange', function() { 1896 document.hidden ? stop() : start(); 1897 }); 1898 1899 /* Pause on hover so users can read */ 1900 container.addEventListener('mouseenter', function() { 1901 paused = true; 1902 stop(); 1903 }); 1904 1905 container.addEventListener('mouseleave', function() { 1906 paused = false; 1907 start(); 1908 }); 1909 1910 start(); 1911 } 1912 1913 initMarquee(); 1914 1915 if (Shopify.designMode) { 1916 document.addEventListener('shopify:section:load', function(e) { 1917 if (e.detail.sectionId === sectionId) { 1918 container = document.getElementById('marquee-' + sectionId); 1919 if (container) initMarquee(); 1920 } 1921 }); 1922 } 1923})(); 1924</script>
1924 1925 1926</div><div id="shopify-section-sections--28630589604210__header" class="shopify-section shopify-section-group-header-group section-header"><link rel="stylesheet" href="//fittes.ca/cdn/shop/t/139/assets/component-list-menu.css?v=151968516119678728991788881626" media="print" onload="this.media='all'"> 1927<link rel="stylesheet" href="//fittes.ca/cdn/shop/t/139/assets/component-search.css?v=165164710990765432851788881634" media="print" onload="this.media='all'"> 1928<link rel="stylesheet" href="//fittes.ca/cdn/shop/t/139/assets/component-menu-drawer.css?v=147478906057189667651788881629" media="print" onload="this.media='all'"> 1929<link rel="stylesheet" href="//fittes.ca/cdn/shop/t/139/assets/component-cart-notification.css?v=54116361853792938221788881622" media="print" onload="this.media='all'"> 1930<link rel="stylesheet" href="//fittes.ca/cdn/shop/t/139/assets/component-list-social.css?v=35792976012981934991788881627" media="print" onload="this.media='all'"><link rel="stylesheet" href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" media="print" onload="this.media='all'"><link rel="stylesheet" href="//fittes.ca/cdn/shop/t/139/assets/component-mega-menu.css?v=10110889665867715061788881628" media="print" onload="this.media='all'"><style> 1931 /* =============================================================== 1932 HORIZONTAL ALIGNMENT 1933 The header uses the exact same gutter as the collection template 1934 (and the rest of the site): 1.5rem on mobile, 5rem from 750px up. 1935 The header itself stays full-bleed, so on viewports wider than the 1936 page width the logo sits LEFT of the content edge, never right of it. 1937 No breakpoint ever changes the gutter, so nothing jumps. 1938 =============================================================== */ 1939 #shopify-section-sections--28630589604210__header { 1940 --hdr-gutter: 1.5rem; 1941 --hdr-max-width: 1400px; 1942 } 1943 @media screen and (min-width: 750px) { 1944 #shopify-section-sections--28630589604210__header { 1945 --hdr-gutter: 5rem; 1946 } 1947 } 1948 1949 /* Hamburger (below 990px): the visible glyph lands exactly on the content 1950 gutter. base.css makes the icon 2.4rem and pins it at left: 1.6rem inside 1951 a 4.4rem summary; here every dimension is set explicitly so the math 1952 holds: header-drawer sits 1rem left of the gutter, the summary is a 1953 4.4rem box with no padding, the icon sits 1rem in ((4.4 - 2.4) / 2). 1954 -1rem + 1rem = 0 -> glyph on the gutter, tap target still 44px. */ 1955 @media screen and (max-width: 989px) { 1956 #shopify-section-sections--28630589604210__header header-drawer { 1957 justify-self: start; 1958 margin-left: -1rem !important; 1959 } 1960 /* `>` matters: the drawer's own submenu headings are also <summary> elements */ 1961 #shopify-section-sections--28630589604210__header .menu-drawer-container > summary { 1962 box-sizing: border-box !important; 1963 width: 4.4rem !important; 1964 min-width: 4.4rem !important; 1965 padding: 0 !important; 1966 margin-left: 0 !important; 1967 margin-right: 0 !important; 1968 display: flex !important; 1969 align-items: center !important; 1970 justify-content: center !important; 1971 position: relative !important; 1972 } 1973 #shopify-section-sections--28630589604210__header .menu-drawer-container > summary > span { 1974 display: block !important; 1975 width: 100% !important; 1976 height: 100% !important; 1977 margin: 0 !important; 1978 padding: 0 !important; 1979 } 1980 #shopify-section-sections--28630589604210__header .menu-drawer-container > summary .icon { 1981 position: absolute !important; 1982 left: 1rem !important; 1983 top: calc(50% - 1.2rem) !important; 1984 width: 2.4rem !important; 1985 height: 2.4rem !important; 1986 margin: 0 !important; 1987 } 1988 } 1989 1990 /* =============================================================== 1991 SCROLL-UP REVEAL (self-contained) 1992 Does not depend on Dawn's .shopify-section-header-sticky / 1993 .shopify-section-header-hidden classes or on position: sticky. 1994 The section is switched to position: fixed once it has scrolled 1995 out of view, a spacer holds its slot in the flow, and it slides 1996 in/out with a transform. Fixed positioning is immune to overflow 1997 rules on any ancestor (the usual reason a sticky header silently 1998 stops sticking), so app CSS can't break it. 1999 =============================================================== */ 2000 .hdr-fixed-spacer { 2001 display: none; 2002 margin: 0; 2003 padding: 0; 2004 pointer-events: none; 2005 } 2006 /* Dawn gives every section .gradient with background-attachment: fixed. 2007 Fixed-attachment backgrounds have to be repainted on every scroll frame, 2008 and Chrome (macOS especially) flashes them black while it catches up once 2009 a composited fixed header is overlapping the page. Solid colour schemes 2010 render identically with scroll attachment, so it's turned off globally. 2011 (Cleaner long-term: delete that one line from .gradient in base.css.) */ 2012 .gradient { 2013 background-attachment: scroll !important; 2014 } 2015 2016 #shopify-section-sections--28630589604210__header.hdr-is-fixed { 2017 position: fixed; 2018 top: 0; 2019 left: 0; 2020 right: 0; 2021 width: 100%; 2022 z-index: 4; 2023 /* Keep the bar on its own pre-rasterised layer while fixed so its logo, 2024 menu and icons are already painted when it slides back in. */ 2025 will-change: transform; 2026 } 2027 #shopify-section-sections--28630589604210__header.hdr-is-fixed.hdr-is-hidden { 2028 transform: translateY(-100%); 2029 } 2030 #shopify-section-sections--28630589604210__header.hdr-is-fixed.hdr-animate { 2031 transition: transform 0.18s ease-out; 2032 } 2033 #shopify-section-sections--28630589604210__header.hdr-is-fixed.menu-open { 2034 transform: translateY(0); 2035 } 2036 @media (prefers-reduced-motion: reduce) { 2037 #shopify-section-sections--28630589604210__header.hdr-is-fixed.hdr-animate { 2038 transition: none; 2039 } 2040 } 2041 2042 #shopify-section-sections--28630589604210__header .hw-head-search-input::placeholder {
2043 color: #A9AEB2; 2044 opacity: 1; /* Firefox */ 2045 } 2046 2047 #shopify-section-sections--28630589604210__header .hw-head-search-input::-ms-input-placeholder { /* Edge 12 -18 */ 2048 color: #A9AEB2; 2049 } 2050 header-drawer { 2051 justify-self: start; 2052 margin-left: -1.2rem; 2053 }@media screen and (min-width: 990px) { 2054 header-drawer { 2055 display: none; 2056 } 2057 }.menu-drawer-container { 2058 display: flex; 2059 } 2060 2061 /* CA: grey separator line under the header (visible with the menu closed). 2062 Same rule the theme applies via .header-wrapper--border-bottom. */ 2063 #shopify-section-sections--28630589604210__header .header-wrapper { 2064 border-bottom: 0.1rem solid rgba(var(--color-foreground), 0.08); 2065 } 2066 2067 .list-menu { 2068 list-style: none; 2069 padding: 0; 2070 margin: 0; 2071 } 2072 2073 .list-menu--inline { 2074 display: inline-flex; 2075 margin-right: 0; 2076 /* flex-wrap: wrap; */ 2077 } 2078 .list-menu--inline li .header__menu-item > span{ 2079 flex-grow: 1; 2080 flex-shrink: 0; 2081 } 2082 2083 summary.list-menu__item { 2084 padding-right: 1rem; 2085 } 2086 2087 .list-menu__item { 2088 display: flex; 2089 align-items: flex-end; 2090 line-height: calc(1 + 0.3 / var(--font-body-scale)); 2091 } 2092 2093 .list-menu__item--link { 2094 text-decoration: none; 2095 padding-bottom: 1rem; 2096 padding-top: 1rem; 2097 line-height: calc(1 + 0.8 / var(--font-body-scale)); 2098 } 2099 2100 @media screen and (min-width: 750px) { 2101 .list-menu__item--link { 2102 padding-bottom: 0.5rem; 2103 padding-top: 0.5rem; 2104 } 2105 #shopify-section-sections--28630589604210__header .header__icon--account{ 2106 order: 3; 2107 } 2108 #shopify-section-sections--28630589604210__header details>.header__menu-item .icon-caret{ 2109 margin: auto 0; 2110 transform: translateY(0%); 2111 } 2112 #shopify-section-sections--28630589604210__header details[open]>.header__menu-item .icon-caret{ 2113 transform: translateY(0%) rotate(180deg); 2114 } 2115 #shopify-section-sections--28630589604210__header .header__inline-menu summary.header__menu-item *, 2116 #shopify-section-sections--28630589604210__header a.header__menu-item *{ 2117 transition: all .3s ease; 2118 } 2119 #shopify-section-sections--28630589604210__header .header__inline-menu summary.header__menu-item:hover *, 2120 #shopify-section-sections--28630589604210__header a.header__menu-item:hover *{ 2121 color: #e73c3e; 2122 } 2123 2124 /* Mega menu content follows the header gutter so it keeps the same 2125 relationship to the "Shop" trigger at every viewport width. */ 2126 #shopify-section-sections--28630589604210__header .mega-menu__content{ 2127 padding-left: calc(var(--hdr-gutter) + 7rem); 2128 padding-right: 32rem; 2129 /* CA: tighter menu â override the theme's larger default spacing 2130 above and below the link columns so it matches US */ 2131 padding-top: 2rem; 2132 padding-bottom: 2.4rem; 2133 } 2134 #shopify-section-sections--28630589604210__header .mega-menu__content .mega-image-link-wrapper{ 2135 margin-left: auto; 2136 gap: 2rem; 2137 } 2138 #shopify-section-sections--28630589604210__header .mega-image-link img{ 2139 --size: 14rem; 2140 width: var(--size); 2141 height: var(--size); 2142 object-fit: cover; 2143 } 2144 #shopify-section-sections--28630589604210__header .header__heading-link{ 2145 /* min-width: clamp(4rem, 5vw, 8rem); */ 2146 } 2147 2148 } 2149 2150 /* base.css snaps three header values at 1280px with nothing set below it: 2151 .header--middle-left column-gap 0 -> 4.8rem (moves all three tabs) 2152 .header__icons gap 0 -> 12px 2153 .header__icon--search-span padding 0 -> 2.4rem 2154 That is the desktop jump. These ramp the same values linearly from 2155 990px to 1280px and land on the exact live-site figures at 1280px+. */ 2156 @media screen and (min-width: 990px) { 2157 #shopify-section-sections--28630589604210__header .header--middle-left { 2158 column-gap: clamp(0rem, 16.55vw - 163.9px, 4.8rem); 2159 } 2160 #shopify-section-sections--28630589604210__header .header__icons { 2161 gap: clamp(0px, 4.14vw - 41px, 12px); 2162 } 2163 #shopify-section-sections--28630589604210__header .header__icon--search .header__icon--search-span { 2164 padding: 0 clamp(0rem, 8.28vw - 82px, 2.4rem); 2165 } 2166 /* Text-to-caret spacing inside a tab: constant, matching the live 1280px+ value */ 2167 .list-menu__item { 2168 gap: 1rem; 2169 } 2170 } 2171</style><style data-shopify>/* Vertical padding is the same at every width: the old file doubled it at 2172 990px and then halved it again at 1280px, which both changed the bar 2173 height mid-desktop and made 990-1279 thicker than the live site. */ 2174 .header { 2175 padding: 10px var(--hdr-gutter) 10px var(--hdr-gutter); 2176 } 2177 2178 .section-header { 2179 position: sticky; /* This is for fixing a Safari z-index issue. PR #2147 - also makes the section the containing block for the mega menu */ 2180 margin-bottom: 0px; 2181 } 2182 .hdr-fixed-spacer { 2183 margin-bottom: 0px; 2184 } 2185 2186 @media screen and (min-width: 750px) { 2187 .section-header, 2188 .hdr-fixed-spacer { 2189 margin-bottom: 0px; 2190 } 2191 }</style><style> 2192 /* this is for pre-search */ 2193 #shopify-section-sections--28630589604210__header .predictive-search{ 2194 border-radius: 20px; 2195 margin-top: 4rem; 2196 padding: 1.5rem 3.3rem; 2197 } 2198 #shopify-section-sections--28630589604210__header .predictive-search__heading { 2199 color: #1F1F1F; 2200 font-weight: 500; 2201 font-size: 2.4rem; 2202 line-height: 1.2; 2203 border: none; 2204 } 2205 #shopify-section-sections--28630589604210__header .predictive-search__item-heading *{ 2206 font-size: 24px; 2207 font-weight: 400; 2208 line-height: 1.2; 2209 /* color: #1f1f1f; */ 2210 } 2211 #shopify-section-sections--28630589604210__header .predictive-search__list-item:hover .predictive-search__item-heading{ 2212 text-decoration: none; 2213 color: #E73C3E; 2214 } 2215 #shopify-section-sections--28630589604210__header .predictive-search__list-item .predictive-search__item-heading svg{ 2216 margin-right: 16px; 2217 } 2218 #shopify-section-sections--28630589604210__header .predictive-search__list-item:hover .predictive-search__item-heading svg path{ 2219 fill: #E73C3E; 2220 } 2221 #shopify-section-sections--28630589604210__header .predictive-search__list-item:hover .predictive-search__item-heading *{ 2222 color: inherit; 2223 } 2224 2225 #shopify-section-sections--28630589604210__header #predictive-search-results-groups-wrapper .predictive-search__result-group:nth-of-type(1){ 2226 border-right: 1px solid #F1F1F1; 2227 } 2228 #shopify-section-sections--28630589604210__header #predictive-search-results-groups-wrapper .predictive-search__result-group:nth-of-type(2){ 2229 padding-left: 5rem; 2230 } 2231 2232 #shopify-section-sections--28630589604210__header #predictive-search-products{ 2233 margin-left: 0; 2234 margin-bottom: 24px; 2235 } 2236 #shopify-section-sections--28630589604210__header #predictive-search-results-products-list{ 2237 display: grid; 2238 grid-template-columns: repeat(3, 1fr); 2239 grid-column-gap: 18.5px; 2240 grid-row-gap: 20px; 2241 } 2242 #shopify-section-sections--28630589604210__header #predictive-search-results-products-list .predictive-search__item{
2243 display: flex; 2244 flex-direction: column; 2245 padding: 0; 2246 } 2247 #shopify-section-sections--28630589604210__header #predictive-search-results-products-list .predictive-search__item img{ 2248 width: 100%; 2249 object-fit: cover; 2250 aspect-ratio: 1 / 1; 2251 height: 100%; 2252 margin-bottom: 5px; 2253 } 2254 #shopify-section-sections--28630589604210__header #predictive-search-results-products-list .predictive-search__item .predictive-search__item-heading{ 2255 font-size: 12px; 2256 line-height: 1.2; 2257 font-weight: 400; 2258 color: #384353; 2259 } 2260 #shopify-section-sections--28630589604210__header #predictive-search-results-products-list .predictive-search__item .predictive-search__item-heading *{ 2261 font-size: 12px; 2262 line-height: 1.2; 2263 font-weight: 400; 2264 color: #384353; 2265 } 2266 2267 #shopify-section-sections--28630589604210__header #predictive-search-option-search-keywords .predictive-search__item{ 2268 justify-content: center; 2269 align-items: center; 2270 } 2271 #shopify-section-sections--28630589604210__header #predictive-search-option-search-keywords .predictive-search__item span:nth-of-type(1){ 2272 font-weight: 500; 2273 font-size: 20px; 2274 line-height: 25.2px; 2275 color: #E73C3E; 2276 text-decoration: underline; 2277 } 2278 2279 #shopify-section-sections--28630589604210__header predictive-search .reset__button{ 2280 display: none; 2281 } 2282 /* #shopify-section-sections--28630589604210__header predictive-search .field__label{ 2283 display: none; 2284 } */ 2285 #shopify-section-sections--28630589604210__header predictive-search .field::placeholder{ 2286 opacity: 1; 2287 color: #A9AEB2; 2288 } 2289 #shopify-section-sections--28630589604210__header predictive-search .field:before{ 2290 opacity: 0; 2291 } 2292 #shopify-section-sections--28630589604210__header predictive-search .field:after{ 2293 opacity: 0; 2294 } 2295 #shopify-section-sections--28630589604210__header predictive-search .search__button{ 2296 right: unset; 2297 left: var(--inputs-border-width); 2298 } 2299 #shopify-section-sections--28630589604210__header predictive-search .search__input.field__input { 2300 padding-left: 4.8rem; 2301 } 2302 #shopify-section-sections--28630589604210__header predictive-search .search__input.field__input:focus, 2303 #shopify-section-sections--28630589604210__header predictive-search .search__input.field__input{ 2304 padding: 1rem 1.5rem 1rem 5rem; 2305 box-shadow: none; 2306 } 2307 2308 #shopify-section-sections--28630589604210__header #predictive-search-results-groups-wrapper{ 2309 /* border-top: 1px solid #f1f1f1; */ 2310 } 2311 @media screen and (min-width: 750px){ 2312 #shopify-section-sections--28630589604210__header .header__search .search-modal{ 2313 min-height: 95px; 2314 } 2315 #shopify-section-sections--28630589604210__header .header__search .search-modal .icon-search, 2316 #shopify-section-sections--28630589604210__header .header__search .search-modal .icon-close{ 2317 width: 3.8rem; 2318 height: 3.8rem; 2319 } 2320 #shopify-section-sections--28630589604210__header .header__search .search-modal .modal__close-button.link { 2321 margin-left: 11rem; 2322 } 2323 #shopify-section-sections--28630589604210__header predictive-search .field .field__input:focus~.field__label{ 2324 opacity: 0; 2325 } 2326 #shopify-section-sections--28630589604210__header predictive-search .field .field__input~.field__label{ 2327 left: calc(var(--inputs-border-width) + 5rem); 2328 } 2329 #shopify-section-sections--28630589604210__header #predictive-search-option-search-keywords .predictive-search__item{ 2330 gap: 5px; 2331 } 2332 } 2333 2334 @media screen and (min-width: 990px) { 2335 #shopify-section-sections--28630589604210__header predictive-search .predictive-search{ 2336 width: calc(100% + 15.5rem); 2337 } 2338 } 2339 2340 @media screen and (max-width: 749px){ 2341 #shopify-section-sections--28630589604210__header .header__search .search-modal{ 2342 height: 60px; 2343 } 2344 /* Balanced hamburger menu clickable area. This also styles the drawer's 2345 submenu headings, exactly as on the live site; the hamburger itself is 2346 overridden by the higher-specificity alignment block near the top. */ 2347 .menu-drawer-container summary { 2348 padding: 2rem 1.5rem 2rem 1rem !important; 2349 margin-left: 0.5rem !important; 2350 margin-top: -0.5rem !important; 2351 margin-bottom: -0.5rem !important; 2352 min-height: 60px !important; 2353 display: flex !important; 2354 align-items: center !important; 2355 position: relative !important; 2356 -webkit-tap-highlight-color: rgba(0,0,0,0) !important; 2357 tap-highlight-color: rgba(0,0,0,0) !important; 2358 border: 0 !important; 2359 border-bottom: 0 !important; 2360 box-shadow: none !important; 2361 background: transparent !important; 2362 outline: 0 !important; 2363 } 2364 2365 .menu-drawer-container summary:before { 2366 content: ''; 2367 position: absolute; 2368 top: -0.5rem; 2369 left: -0.5rem; 2370 right: 0; 2371 bottom: -0.5rem; 2372 z-index: 1; 2373 } 2374 2375 .menu-drawer-container[open] summary, 2376 .menu-drawer-container summary:focus, 2377 .menu-drawer-container summary:active { 2378 border: 0 !important; 2379 border-bottom: 0 !important; 2380 box-shadow: none !important; 2381 background: transparent !important; 2382 outline: 0 !important; 2383 -webkit-tap-highlight-color: rgba(0,0,0,0) !important; 2384 } 2385 2386 /* Remove highlight from all menu elements */ 2387 header-drawer *, 2388 .menu-drawer-container *, 2389 .menu-drawer__menu-item, 2390 .menu-drawer__menu-item *, 2391 details summary, 2392 .header__icon--summary { 2393 -webkit-tap-highlight-color: rgba(0,0,0,0) !important; 2394 tap-highlight-color: rgba(0,0,0,0) !important; 2395 } 2396 2397/* Remove grey line - target specific pseudo-elements but keep our custom one */ 2398 header-drawer::before, 2399 header-drawer::after, 2400 .menu-drawer-container::before, 2401 .menu-drawer-container::after, 2402 .menu-drawer-container summary::after, 2403 .header__icon--menu::before, 2404 .header__icon--menu::after, 2405 .header__icon--summary::after { 2406 display: none !important; 2407 content: none !important; 2408 border: none !important; 2409 background: none !important; 2410 } 2411 2412 /* Our custom clickable area pseudo-element */ 2413 .menu-drawer-container summary::before { 2414 content: '' !important; 2415 position: absolute !important; 2416 top: -0.5rem !important; 2417 left: -0.5rem !important; 2418 right: 0 !important; 2419 bottom: -0.5rem !important; 2420 z-index: 1 !important; 2421 display: block !important; 2422 border: none !important; 2423 background: transparent !important; 2424 box-shadow: none !important; 2425 } 2426 2427 2428 2429 2430 #shopify-section-sections--28630589604210__header predictive-search .field .field__input~.field__label{ 2431 left: calc(var(--inputs-border-width) + 5rem); 2432 } 2433 #shopify-section-sections--28630589604210__header predictive-search .field .field__input:focus~.field__label{ 2434 opacity: 0; 2435 } 2436 #shopify-section-sections--28630589604210__header #predictive-search-results-groups-wrapper .predictive-search__result-group:nth-of-type(1) { 2437 border: none; 2438 } 2439 2440 #shopify-section-sections--28630589604210__header .predictive-search{ 2441 border-radius: 0px; 2442 margin-top: 0rem; 2443 padding: 0; 2444 border: none; 2445 } 2446 #shopify-section-sections--28630589604210__header #predictive-search-results-groups-wrapper .predictive-search__result-group:nth-of-type(2) { 2447 padding-left: 2rem; 2448 padding-right: 2rem; 2449 } 2450 #shopify-section-sections--28630589604210__header #predictive-search-results-products-list { 2451 grid-template-columns: repeat(2, 1fr); 2452 } 2453 #shopify-section-sections--28630589604210__header #predictive-search-products{ 2454 margin-bottom: 20px; 2455 padding-bottom: 0; 2456 } 2457 #shopify-section-sections--28630589604210__header .predictive-search__heading{ 2458 font-size: 2rem; 2459 } 2460 #shopify-section-sections--28630589604210__header .predictive-search__item-heading { 2461 font-size: 20px; 2462 /* color: #1f1f1f; */ 2463 } 2464 #shopify-section-sections--28630589604210__header .predictive-search__item-heading *{ 2465 font-size: 20px; 2466 /* color: #1f1f1f; */ 2467 } 2468 #shopify-section-sections--28630589604210__header .predictive-search__result-group:has(.predictive-search__pages-wrapper){ 2469 flex-direction: column-reverse; 2470 } 2471 #shopify-section-sections--28630589604210__header .predictive-search__pages-wrapper{ 2472 border-bottom: 1px solid #F1F1F1; 2473 padding-bottom: 4rem; 2474 } 2475 #shopify-section-sections--28630589604210__header #predictive-search-pages-mobile{ 2476 margin-left: 0; 2477 } 2478 #shopify-section-sections--28630589604210__header #predictive-search-results-pages-list-mobile .predictive-search__item{
2479 padding-left: 0; 2480 } 2481 2482 #shopify-section-sections--28630589604210__header predictive-search .reset__button{ 2483 display: none; 2484 } 2485 #shopify-section-sections--28630589604210__header predictive-search .field__label{ 2486 /* display: none; */ 2487 } 2488 #shopify-section-sections--28630589604210__header predictive-search .field .search__input::placeholder{ 2489 opacity: 1; 2490 color: #A9AEB2; 2491 } 2492 #shopify-section-sections--28630589604210__header predictive-search .field:before{ 2493 opacity: 0; 2494 } 2495 #shopify-section-sections--28630589604210__header predictive-search .field:after{ 2496 opacity: 0; 2497 } 2498 #shopify-section-sections--28630589604210__header predictive-search .search__button{ 2499 right: unset; 2500 left: var(--inputs-border-width); 2501 } 2502 #shopify-section-sections--28630589604210__header predictive-search .search__input.field__input { 2503 padding-left: 4.8rem; 2504 } 2505 #shopify-section-sections--28630589604210__header predictive-search .search__input.field__input:focus, 2506 #shopify-section-sections--28630589604210__header predictive-search .search__input.field__input{ 2507 padding: 1rem 1.5rem 1rem 5rem; 2508 box-shadow: none; 2509 } 2510 2511 #shopify-section-sections--28630589604210__header #predictive-search-results-groups-wrapper{ 2512 border-top: 1px solid #f1f1f1; 2513 padding-top: 2.5rem; 2514 } 2515 } 2516 /* this is for pre-search_end */ 2517 2518 predictive-search[open] .predictive-search--header{ 2519 display: block; 2520 } 2521 .predictive-search--header #predictive-search-results:has(.predictive-search__results-groups-wrapper) .pre-search-default{ 2522 display: none; 2523 } 2524 #shopify-section-sections--28630589604210__header .pre-search-default{ 2525 display: flex; 2526 flex-direction: column; 2527 } 2528 #shopify-section-sections--28630589604210__header .pre-search-default .hw-collection{ 2529 display: grid; 2530 grid-template-columns: repeat(5,1fr); 2531 gap: 18px; 2532 } 2533 #shopify-section-sections--28630589604210__header .pre-search-default .hw-collection-item{ 2534 position: relative; 2535 } 2536 #shopify-section-sections--28630589604210__header .pre-search-default .hw-collection-item img, 2537 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product-item img{ 2538 width: 100%; 2539 object-fit: cover; 2540 aspect-ratio: 1 / 1; 2541 } 2542 #shopify-section-sections--28630589604210__header .pre-search-default .hw-collection-item .heading{ 2543 position: absolute; 2544 top: 50%; 2545 left: 50%; 2546 transform: translate(-50%, -50%); 2547 color: white; 2548 font-size: 14px; 2549 font-weight: 500; 2550 line-height: 1; 2551 text-transform: uppercase; 2552 } 2553 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product{ 2554 display: grid; 2555 grid-template-columns: repeat(5,1fr); 2556 gap: 18px; 2557 margin-bottom: 6rem; 2558 } 2559 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product-item{ 2560 text-decoration: none; 2561 z-index: 2; 2562 } 2563 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product-item .info{ 2564 display: flex; 2565 align-items: flex-end; 2566 justify-content: space-between; 2567 } 2568 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product-item .info .price, 2569 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product-item .info .heading{ 2570 color:#384353; 2571 font-weight: 400; 2572 font-size: 12px; 2573 line-height: 1; 2574 letter-spacing: 0%; 2575 } 2576 #shopify-section-sections--28630589604210__header .pre-search-default .hw-search-title{ 2577 color:#1F1F1F; 2578 font-weight: 500; 2579 font-size: 24px; 2580 line-height: 1; 2581 letter-spacing: 0%; 2582 margin-bottom: 2.4rem; 2583 } 2584 2585 @media screen and (max-width: 749px){ 2586 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product, 2587 #shopify-section-sections--28630589604210__header .pre-search-default .hw-collection{ 2588 grid-template-columns: repeat(2,1fr); 2589 } 2590 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product .hw-product-item{ 2591 display: none; 2592 } 2593 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product .hw-product-item:nth-of-type(1), 2594 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product .hw-product-item:nth-of-type(2), 2595 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product .hw-product-item:nth-of-type(3), 2596 #shopify-section-sections--28630589604210__header .pre-search-default .hw-product .hw-product-item:nth-of-type(4){ 2597 display: block; 2598 } 2599 #shopify-section-sections--28630589604210__header .pre-search-default{ 2600 padding: 2rem 1rem; 2601 } 2602 } 2603 2604 #shopify-section-sections--28630589604210__header .predictive-search__pages-wrapper{ 2605 display: none; 2606 } 2607 2608 /* CA: drawer social icons â force a horizontal row (CA drawer was stacking them vertically) */ 2609 #shopify-section-sections--28630589604210__header .menu-drawer ul.list-social, 2610 #shopify-section-sections--28630589604210__header .menu-drawer__utility-links .list-social{ 2611 display: flex; 2612 flex-direction: row; 2613 flex-wrap: wrap; 2614 align-items: center; 2615 justify-content: flex-start; 2616 gap: 0 1rem; 2617 list-style: none; 2618 padding: 0; 2619 margin: 0; 2620 } 2621 #shopify-section-sections--28630589604210__header .menu-drawer .list-social__item{ 2622 display: flex; 2623 align-items: center; 2624 } 2625 2626</style> 2627
2628<script src="//fittes.ca/cdn/shop/t/139/assets/cart-notification.js?v=133508293167896966491788881618" defer="defer"></script>
2628<sticky-header data-sticky-type="on-scroll-up" class="header-wrapper color-scheme-1 gradient"><header class="header header--middle-left header--mobile-center header--has-menu header--has-social header--has-account"> 2629 2630<header-drawer data-breakpoint="tablet"> 2631 <details id="Details-menu-drawer-container" class="menu-drawer-container"> 2632 <summary 2633 class="header__icon header__icon--menu header__icon--summary link focus-inset" 2634 aria-label="Menu" 2635 > 2636 <span><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-hamburger" viewBox="0 0 24 24"> 2637<g clip-path="url(#clip0_545_5014)"> 2638<path d="M3 6.25H2.25V7.75H3V6.25ZM3 7.75H21V6.25H3V7.75Z" fill="currentColor"/> 2639<path d="M3 15.25H2.25V16.75H3V15.25ZM3 16.75H15V15.25H3V16.75Z" fill="currentColor"/> 2640</g> 2641</svg> 2642<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> 2643</span> 2644 </summary> 2645 <div id="menu-drawer" class="gradient menu-drawer motion-reduce color-scheme-1"> 2646 <div class="menu-drawer__inner-container"> 2647 <div class="menu-drawer__navigation-container"> 2648 <nav class="menu-drawer__navigation"> 2649 <ul class="menu-drawer__menu has-submenu list-menu" role="list"> 2650 2651 2652 2653 2654 2655 2656 2657 <li> 2658 <details id="Details-menu-drawer-menu-item-2"> 2659 <summary 2660 id="HeaderDrawer-shop-by-product" 2661 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2662 > 2663 Shop by Product 2664 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2664ox="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> 2665</span> 2666 <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> 2667</span> 2668 </summary> 2669 <div 2670 id="link-shop-by-product" 2671 class="menu-drawer__submenu has-submenu gradient motion-reduce" 2672 tabindex="-1" 2673 > 2674 <div class="menu-drawer__inner-submenu"> 2675 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2676 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2676ox="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> 2677</span> 2678 Shop by Product 2679 </button> 2680 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li> 2681 <a 2682 id="HeaderDrawer-shop-by-product-wall-ceiling-vents" 2683 href="/collections/wall-vent" 2684 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2685 2686 > 2687 Wall / Ceiling Vents 2688 </a> 2689 </li><li> 2690 <a 2691 id="HeaderDrawer-shop-by-product-floor-vents" 2692 href="/collections/floor" 2693 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2694 2695 > 2696 Floor Vents 2697 </a> 2698 </li><li> 2699 <a 2700 id="HeaderDrawer-shop-by-product-exhaust-fans" 2701 href="/collections/exhaust-mounts" 2702 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2703 2704 > 2705 Exhaust Fans 2706 </a> 2707 </li><li> 2708 <a 2709 id="HeaderDrawer-shop-by-product-mounts-niches" 2710 href="/collections/mounts-niches" 2711 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2712 2713 > 2714 Mounts & Niches 2715 </a> 2716 </li><li> 2717 <a 2718 id="HeaderDrawer-shop-by-product-accessories" 2719 href="/collections/accessories" 2720 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2721 2722 > 2723 Accessories 2724 </a> 2725 </li></ul> 2726 </div> 2727 </div> 2728 </details> 2729 </li> 2730 2731 2732 <li> 2733 <details id="Details-menu-drawer-menu-item-3"> 2734 <summary 2735 id="HeaderDrawer-shop-by-finish" 2736 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2737 > 2738 Shop by Finish 2739 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2739ox="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> 2740</span> 2741 <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> 2742</span> 2743 </summary> 2744 <div 2745 id="link-shop-by-finish" 2746 class="menu-drawer__submenu has-submenu gradient motion-reduce" 2747 tabindex="-1" 2748 > 2749 <div class="menu-drawer__inner-submenu"> 2750 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2751 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2751ox="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> 2752</span> 2753 Shop by Finish 2754 </button> 2755 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li> 2756 <a 2757 id="HeaderDrawer-shop-by-finish-framed" 2758 href="/collections/framed" 2759 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2760 2761 > 2762 Framed 2763 </a> 2764 </li><li> 2765 <a 2766 id="HeaderDrawer-shop-by-finish-flush" 2767 href="/collections/flush" 2768 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2769 2770 > 2771 Flush 2772 </a> 2773 </li></ul> 2774 </div> 2775 </div> 2776 </details> 2777 </li> 2778 2779 2780 <li> 2781 <details id="Details-menu-drawer-menu-item-4"> 2782 <summary 2783 id="HeaderDrawer-specs-support" 2784 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2785 > 2786 Specs + Support 2787 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2787ox="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> 2788</span> 2789 <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> 2790</span> 2791 </summary> 2792 <div 2793 id="link-specs-support" 2794 class="menu-drawer__submenu has-submenu gradient motion-reduce" 2795 tabindex="-1" 2796 > 2797 <div class="menu-drawer__inner-submenu"> 2798 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2799 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2799ox="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> 2800</span> 2801 Specs + Support 2802 </button> 2803 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li> 2804 <a 2805 id="HeaderDrawer-specs-support-compare-products" 2806 href="/pages/compare-products" 2807 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2808 2809 > 2810 Compare Products 2811 </a> 2812 </li><li> 2813 <a 2814 id="HeaderDrawer-specs-support-help-center" 2815 href="https://fittes-canada.gorgias.help/en-US" 2816 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2817 2818 > 2819 Help Center 2820 </a> 2821 </li><li> 2822 <a 2823 id="HeaderDrawer-specs-support-airflow-specs" 2824 href="/pages/airflow-specs" 2825 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2826 2827 > 2828 Airflow Specs 2829 </a> 2830 </li><li> 2831 <a 2832 id="HeaderDrawer-specs-support-install-guides" 2833 href="/pages/install-guides-1" 2834 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2835 2836 > 2837 Install Guides 2838 </a> 2839 </li><li> 2840 <a 2841 id="HeaderDrawer-specs-support-product-basics" 2842 href="/pages/fittes-lingo" 2843 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2844 2845 > 2846 Product Basics 2847 </a> 2848 </li></ul> 2849 </div> 2850 </div> 2851 </details> 2852 </li> 2853 2854 2855 <li> 2856 <details id="Details-menu-drawer-menu-item-5"> 2857 <summary 2858 id="HeaderDrawer-trade-rewards" 2859 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2860 > 2861 Trade + Rewards 2862 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2862ox="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> 2863</span> 2864 <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> 2865</span> 2866 </summary> 2867 <div 2868 id="link-trade-rewards" 2869 class="menu-drawer__submenu has-submenu gradient motion-reduce" 2870 tabindex="-1" 2871 > 2872 <div class="menu-drawer__inner-submenu"> 2873 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2874 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2874ox="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> 2875</span> 2876 Trade + Rewards 2877 </button> 2878 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li> 2879 <a 2880 id="HeaderDrawer-trade-rewards-fittes-crew-rewards" 2881 href="/pages/fittes-crew" 2882 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2883 2884 > 2885 Fittes Crew Rewards 2886 </a> 2887 </li><li> 2888 <a 2889 id="HeaderDrawer-trade-rewards-partner-with-us" 2890 href="/pages/partner" 2891 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2892 2893 > 2894 Partner With Us 2895 </a> 2896 </li><li> 2897 <a 2898 id="HeaderDrawer-trade-rewards-trades-program" 2899 href="/pages/trades-program" 2900 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2901 2902 > 2903 Trades Program 2904 </a> 2905 </li></ul> 2906 </div> 2907 </div> 2908 </details> 2909 </li> 2910 2911 2912 <li> 2913 <details id="Details-menu-drawer-menu-item-6"> 2914 <summary 2915 id="HeaderDrawer-about-us" 2916 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2917 > 2918 About Us 2919 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2919ox="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> 2920</span> 2921 <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> 2922</span> 2923 </summary> 2924 <div 2925 id="link-about-us" 2926 class="menu-drawer__submenu has-submenu gradient motion-reduce" 2927 tabindex="-1" 2928 > 2929 <div class="menu-drawer__inner-submenu"> 2930 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2931 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-arrow" viewB
2931ox="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> 2932</span> 2933 About Us 2934 </button> 2935 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"><li> 2936 <a 2937 id="HeaderDrawer-about-us-our-story" 2938 href="/pages/our-story" 2939 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2940 2941 > 2942 Our Story 2943 </a> 2944 </li><li> 2945 <a 2946 id="HeaderDrawer-about-us-our-team" 2947 href="/pages/our-team" 2948 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2949 2950 > 2951 Our Team 2952 </a> 2953 </li><li> 2954 <a 2955 id="HeaderDrawer-about-us-blog" 2956 href="/blogs/blog" 2957 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2958 2959 > 2960 Blog 2961 </a> 2962 </li><li> 2963 <a 2964 id="HeaderDrawer-about-us-faq" 2965 href="/pages/faq" 2966 class="menu-drawer__menu-item link link--text list-menu__item focus-inset" 2967 2968 > 2969 FAQ 2970 </a> 2971 </li></ul> 2972 </div> 2973 </div> 2974 </details> 2975 </li> 2976 2977 2978 <li> 2979 <a 2980 id="HeaderDrawer-vent-finder" 2981 href="#quiz-6jRk3l" 2982 class="menu-drawer__menu-item list-menu__item link link--text focus-inset" 2983 2984 > 2985 Vent Finder 2986 </a> 2987 </li> 2988 2989 </ul> 2990 </nav> 2991 <div class="menu-drawer__utility-links"><div class="menu-drawer__localization header-localization"><localization-form><form method="post" action="/localization" id="HeaderCountryMobileForm" accept-charset="UTF-8" class="localization-form" enctype="multipart/form-data"><input type="hidden" name="form_type" value="localization" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="_method" value="put" /><input type="hidden" name="return_to" value="/" /><div> 2992 <h2 class="visually-hidden" id="HeaderCountryMobileLabel"> 2993 Country/region 2994 </h2> 2995 2996<div class="disclosure"> 2997 <button 2998 type="button" 2999 class="disclosure__button localization-form__select localization-selector link link--text caption-large" 3000 aria-expanded="false" 3001 aria-controls="HeaderCountryMobile-country-results" 3002 aria-describedby="HeaderCountryMobileLabel" 3003 > 3004 <span>United States | 3005 USD 3006 $</span> 3007 <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> 3008 3009 </button> 3010 <div class="disclosure__list-wrapper country-selector" hidden> 3011 <div class="country-filter country-filter--no-padding"> 3012 3013 <button 3014 class="country-selector__close-button button--small link" 3015 type="button" 3016 aria-label="Close" 3017 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-close" viewBox="0 0 18 17">
3017<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> 3018</button> 3019 </div> 3020 <div id="sr-country-search-results" class="visually-hidden" aria-live="polite"></div> 3021 <div 3022 class="disclosure__list country-selector__list country-selector__list--with-multiple-currencies" 3023 id="HeaderCountryMobile-country-results" 3024 > 3025 3026 <ul role="list" class="list-unstyled countries"><li class="disclosure__item" tabindex="-1"> 3027 <a 3028 class="link link--text disclosure__link caption-large focus-inset" 3029 href="#" 3030 3031 data-value="AU" 3032 id="Australia" 3033 > 3034 <span 3035 3036 class="visibility-hidden" 3037 3038 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-checkmark" viewBox="0 0 12 9"><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> 3039</span> 3040 <span class="country">Australia</span> 3041 <span class="localization-form__currency motion-reduce"> 3042 AUD 3043 $</span> 3044 </a> 3045 </li><li class="disclosure__item" tabindex="-1"> 3046 <a 3047 class="link link--text disclosure__link caption-large focus-inset" 3048 href="#" 3049 3050 data-value="BE" 3051 id="Belgium" 3052 > 3053 <span 3054 3055 class="visibility-hidden" 3056 3057 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-checkmark" viewBox="0 0 12 9"><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> 3058</span> 3059 <span class="country">Belgium</span> 3060 <span class="localization-form__currency motion-reduce"> 3061 EUR 3062 â¬</span> 3063 </a> 3064 </li><li class="disclosure__item" tabindex="-1"> 3065 <a 3066 class="link link--text disclosure__link caption-large focus-inset" 3067 href="#" 3068 3069 data-value="CA" 3070 id="Canada" 3071 > 3072 <span 3073 3074 class="visibility-hidden" 3075 3076 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-checkmark" viewBox="0 0 12 9"><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> 3077</span> 3078 <span class="country">Canada</span> 3079 <span class="localization-form__currency motion-reduce"> 3080 CAD 3081 $</span> 3082 </a> 3083 </li><li class="disclosure__item" tabindex="-1"> 3084 <a 3085 class="link link--text disclosure__link caption-large focus-inset" 3086 href="#" 3087 3088 data-value="DK" 3089 id="Denmark" 3090 > 3091 <span 3092 3093 class="visibility-hidden" 3094 3095 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-checkmark" viewBox="0 0 12 9"><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> 3096</span> 3097 <span class="country">Denmark</span> 3098 <span class="localization-form__currency motion-reduce"> 3099 DKK 3100 kr.</span> 3101 </a> 3102 </li><li class="disclosure__item" tabindex="-1"> 3103 <a 3104 class="link link--text disclosure__link caption-large focus-inset" 3105 href="#" 3106 3107 data-value="IS" 3108 id="Iceland" 3109 >
3110 <span 3111 3112 class="visibility-hidden" 3113 3114 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-checkmark" viewBox="0 0 12 9"><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> 3115</span> 3116 <span class="country">Iceland</span> 3117 <span class="localization-form__currency motion-reduce"> 3118 ISK 3119 kr</span> 3120 </a> 3121 </li><li class="disclosure__item" tabindex="-1"> 3122 <a 3123 class="link link--text disclosure__link caption-large focus-inset" 3124 href="#" 3125 3126 data-value="SE" 3127 id="Sweden" 3128 > 3129 <span 3130 3131 class="visibility-hidden" 3132 3133 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-checkmark" viewBox="0 0 12 9"><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> 3134</span> 3135 <span class="country">Sweden</span> 3136 <span class="localization-form__currency motion-reduce"> 3137 SEK 3138 kr</span> 3139 </a> 3140 </li><li class="disclosure__item" tabindex="-1"> 3141 <a 3142 class="link link--text disclosure__link caption-large focus-inset" 3143 href="#" 3144 3145 data-value="GB" 3146 id="United Kingdom" 3147 > 3148 <span 3149 3150 class="visibility-hidden" 3151 3152 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-checkmark" viewBox="0 0 12 9"><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> 3153</span> 3154 <span class="country">United Kingdom</span> 3155 <span class="localization-form__currency motion-reduce"> 3156 GBP 3157 £</span> 3158 </a> 3159 </li><li class="disclosure__item" tabindex="-1"> 3160 <a 3161 class="link link--text disclosure__link caption-large focus-inset" 3162 href="#" 3163 3164 aria-current="true" 3165 3166 data-value="US" 3167 id="United States" 3168 > 3169 <span 3170 3171 ><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-checkmark" viewBox="0 0 12 9"><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> 3172</span> 3173 <span class="country">United States</span> 3174 <span class="localization-form__currency motion-reduce"> 3175 USD 3176 $</span> 3177 </a> 3178 </li></ul> 3179 </div> 3180 </div> 3181 <div class="country-selector__overlay"></div> 3182</div> 3183<input type="hidden" name="country_code" value="US"> 3184</div></form></localization-form> 3185 3186</div><ul class="list list-social list-unstyled" role="list"><li class="list-social__item"> 3187 <a href="https://x.com/fittesco" class="list-social__link link" target="_blank"> 3188 <span class="svg-wrapper"><svg class="icon icon-twitter" viewBox="0 0 20 20"><path fill="currentColor" fill-rule="evenodd" d="M7.273 2.8 10.8 7.822 15.218 2.8h1.768l-5.4 6.139 5.799 8.254h-4.658l-3.73-5.31-4.671 5.31H2.558l5.654-6.427L2.615 2.8zm6.242 13.125L5.07 4.109h1.405l8.446 11.816z" clip-rule="evenodd"/></svg> 3189</span> 3190 <span class="visually-hidden">X (Twitter)</span> 3191 </a> 3192 </li><li class="list-social__item"> 3193 <a href="https://www.facebook.com/fittes/" class="list-social__link link" target="_blank">
3194 <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> 3195</span> 3196 <span class="visually-hidden">Facebook</span> 3197 </a> 3198 </li><li class="list-social__item"> 3199 <a href="https://ca.pinterest.com/fittesofficial/" class="list-social__link link" target="_blank"> 3200 <span class="svg-wrapper"><svg class="icon icon-pinterest" viewBox="0 0 20 20"><path fill="currentColor" d="M10 2.01a8.1 8.1 0 0 1 5.666 2.353 8.09 8.09 0 0 1 1.277 9.68A7.95 7.95 0 0 1 10 18.04a8.2 8.2 0 0 1-2.276-.307c.403-.653.672-1.24.816-1.729l.567-2.2c.134.27.393.5.768.702.384.192.768.297 1.19.297q1.254 0 2.248-.72a4.7 4.7 0 0 0 1.537-1.969c.37-.89.554-1.848.537-2.813 0-1.249-.48-2.315-1.43-3.227a5.06 5.06 0 0 0-3.65-1.374c-.893 0-1.729.154-2.478.461a5.02 5.02 0 0 0-3.236 4.552c0 .72.134 1.355.413 1.902.269.538.672.922 1.22 1.152.096.039.182.039.25 0 .066-.028.114-.096.143-.192l.173-.653c.048-.144.02-.288-.105-.432a2.26 2.26 0 0 1-.548-1.565 3.803 3.803 0 0 1 3.976-3.861c1.047 0 1.863.288 2.44.855.585.576.883 1.315.883 2.228a6.8 6.8 0 0 1-.317 2.122 3.8 3.8 0 0 1-.893 1.556c-.384.384-.836.576-1.345.576-.413 0-.749-.144-1.018-.451-.259-.307-.345-.672-.25-1.085q.22-.77.452-1.537l.173-.701c.057-.25.086-.451.086-.624 0-.346-.096-.634-.269-.855-.192-.22-.451-.336-.797-.336-.432 0-.797.192-1.085.595-.288.394-.442.893-.442 1.499.005.374.063.746.173 1.104l.058.144c-.576 2.478-.913 3.938-1.037 4.36-.116.528-.154 1.153-.125 1.863A8.07 8.07 0 0 1 2 10.03c0-2.208.778-4.11 2.343-5.666A7.72 7.72 0 0 1 10 2.001z"/></svg> 3201</span> 3202 <span class="visually-hidden">Pinterest</span> 3203 </a> 3204 </li><li class="list-social__item"> 3205 <a href="https://www.instagram.com/fittes/" class="list-social__link link" target="_blank"> 3206 <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> 3207</span> 3208 <span class="visually-hidden">Instagram</span> 3209 </a> 3210 </li><li class="list-social__item"> 3211 <a href="https://www.tiktok.com/@fittesofficial" class="list-social__link link" target="_blank">
3212 <span class="svg-wrapper"><svg class="icon icon-tiktok" viewBox="0 0 20 20"><path fill="currentColor" d="M10.511 1.705h2.74s-.157 3.51 3.795 3.768v2.711s-2.114.129-3.796-1.158l.028 5.606A5.073 5.073 0 1 1 8.213 7.56h.708v2.785a2.298 2.298 0 1 0 1.618 2.205z"/></svg> 3213</span> 3214 <span class="visually-hidden">TikTok</span> 3215 </a> 3216 </li><li class="list-social__item"> 3217 <a href="https://www.linkedin.com/company/fittes/" class="list-social__link link" target="_blank"> 3218 <span class="svg-wrapper"><svg class="icon icon-linkedin" role="presentation" viewBox="0 0 24 24"><path fill="currentColor" d="M19 0H5a5 5 0 0 0-5 5v14a5 5 0 0 0 5 5h14a5 5 0 0 0 5-5V5a5 5 0 0 0-5-5zM8 19H5V8h3v11zM6.5 6.73a1.76 1.76 0 1 1 0-3.53 1.76 1.76 0 0 1 0 3.53zM20 19h-3v-5.6c0-3.37-4-3.12-4 0V19h-3V8h3v1.76a3.8 3.8 0 0 1 7 2.48V19z"></path></svg></span> 3219 <span class="visually-hidden">Linkedin</span> 3220 </a> 3221 </li><li class="list-social__item"> 3222 <a href="https://www.youtube.com/channel/UC6Z3b0jfeKE3KaOuTxUrEog/featured" class="list-social__link link" target="_blank"> 3223 <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> 3224</span> 3225 <span class="visually-hidden">YouTube</span> 3226 </a> 3227 </li></ul> 3228 </div> 3229 </div> 3230 </div> 3231 </div> 3232 </details> 3233</header-drawer> 3234 3235<h1 class="header__heading"><a href="/" class="header__heading-link link link--text focus-inset"><div class="header__heading-logo-wrapper"> 3236 3237 <img src="//fittes.ca/cdn/shop/files/Mask_group_97ddf3d5-dd56-4218-80dd-4c12dd719ed5.png?v=1744384378&width=600" alt="Fittes ð" srcset="//fittes.ca/cdn/shop/files/Mask_group_97ddf3d5-dd56-4218-80dd-4c12dd719ed5.png?v=1744384378&width=60 60w, //fittes.ca/cdn/shop/files/Mask_group_97ddf3d5-dd56-4218-80dd-4c12dd719ed5.png?v=1744384378&width=90 90w, //fittes.ca/cdn/shop/files/Mask_group_97ddf3d5-dd56-4218-80dd-4c12dd719ed5.png?v=1744384378&width=120 120w" width="60" height="34.80662983425414" loading="eager" class="header__heading-logo motion-reduce" sizes="(max-width: 120px) 50vw, 60px"> 3238 </div></a></h1> 3239 3240<style> 3241 .header__inline-menu .header__menu-item, 3242 .header__inline-menu summary.header__menu-item { 3243 cursor: default; 3244 } 3245 3246 .header__inline-menu #HeaderMenu-compare-models.header__menu-item { 3247 cursor: pointer !important; 3248 } 3249 3250 .header__inline-menu .mega-menu__list { 3251 margin-right: 20px; 3252 } 3253 3254 .header__inline-menu .header__menu-item { 3255 display: inline-flex; 3256 align-items: center; 3257 white-space: nowrap; 3258 padding-right: 1.25rem; /* Increased from 0.75rem */ 3259 margin-right: 0.5rem; /* Added spacing between menu items */ 3260 } 3261 3262 /* Override the main header file's conflicting styles */ 3263 .header__inline-menu .header__menu-item .icon-caret, 3264 #shopify-section-header details>.header__menu-item .icon-caret { 3265 flex-shrink: 0; 3266 width: 0.5em !important; 3267 height: 0.5em !important; 3268 margin-left: 0.375em !important; 3269 } 3270 3271 /* Override the 1280px breakpoint that's causing issues */ 3272 @media screen and (min-width: 750px) { 3273 summary.list-menu__item { 3274 padding-right: 1.25rem !important; /* Override the 2.7rem from main file */ 3275 } 3276 } 3277 3278 /* Additional overrides for structured mega menu alignment */ 3279 .mega-menu__content--structured, 3280 .mega-menu__content--structured-secondary { 3281 padding-left: 0 !important; /* Remove default padding */ 3282 padding-right: 0 !important; 3283 } 3284 3285 @media screen and (min-width: 1280px) { 3286 .mega-menu__content--structured, 3287 .mega-menu__content--structured-secondary { 3288 padding-left: 0 !important; 3289 padding-right: 0 !important; 3290 } 3291 3292 .mega-menu__content--structured .mega-menu__columns, 3293 .mega-menu__content--structured-secondary .mega-menu__columns { 3294 padding: 1rem 0 2rem 6rem !important; /* Moved all columns right consistently */ 3295 gap: 2.5rem !important; /* Keep consistent spacing */ 3296 max-width: 800px !important; /* Prevent spreading on large screens */ 3297 } 3298 3299 .mega-menu__content--structured .mega-menu__column, 3300 .mega-menu__content--structured-secondary .mega-menu__column { 3301 width: 150px !important; /* Fixed width on all screen sizes */ 3302 flex: 0 0 auto !important; 3303 } 3304 3305 .mega-menu__content--structured .mega-menu__column--first, 3306 .mega-menu__content--structured-secondary .mega-menu__column--first { 3307 padding-top: 0.4rem !important; /* Perfect alignment with headers */ 3308 } 3309 } 3310 3311 @media screen and (min-width: 990px) { 3312 .mega-menu__content--structured, 3313 .mega-menu__content--structured-secondary { 3314 padding-left: 0 !important; 3315 padding-right: 0 !important; 3316 } 3317 3318 .mega-menu__content--structured .mega-menu__columns, 3319 .mega-menu__content--structured-secondary .mega-menu__columns { 3320 gap: 2.5rem !important; /* Ensure consistent spacing on all screen sizes */ 3321 max-width: 800px !important; 3322 padding: 1rem 0 2rem 6rem !important; /* Moved all columns right consistently */ 3323 } 3324 3325 .mega-menu__content--structured .mega-menu__column, 3326 .mega-menu__content--structured-secondary .mega-menu__column { 3327 width: 150px !important; /* Fixed width prevents auto-expansion */ 3328 flex: 0 0 auto !important; 3329 } 3330 3331 .mega-menu__content--structured .mega-menu__column--first, 3332 .mega-menu__content--structured-secondary .mega-menu__column--first { 3333 padding-top: 0.4rem !important; /* Maintain perfect alignment */ 3334 } 3335 } 3336 3337 .is-safari .header__inline-menu .header__menu-item > span { 3338 display: inline-block; 3339 white-space: nowrap !important; 3340 vertical-align: middle; 3341 } 3342 3343 .is-safari .header__inline-menu a.header__menu-item.link--text { 3344 text-decoration: none !important; 3345 border-bottom: none !important; 3346 } 3347 3348 .is-safari input[type="search"], 3349 .is-safari .header__search-input { 3350 -webkit-appearance: none; 3351 border: none; 3352 outline: none; 3353 background: transparent; 3354 border-bottom: 1px solid transparent; 3355 border-image-source: linear-gradient(to right, currentColor 0%, currentColor 100%); 3356 border-image-slice: 1; 3357 border-image-repeat: stretch; 3358 border-image-width: 1px; 3359 } 3360 3361 /* 4-column mega menu layout - ONLY for the first dropdown */ 3362 .mega-menu__content--structured, 3363 .mega-menu__content--structured-secondary { 3364 padding-left: 0 !important; /* Remove default padding */ 3365 padding-right: 0 !important; 3366 } 3367 3368 .mega-menu__content--structured .mega-menu__columns, 3369 .mega-menu__content--structured-secondary .mega-menu__columns { 3370 display: flex !important; 3371 flex-direction: row !important; 3372 gap: 2.5rem !important; /* Fixed spacing between columns - ADJUST THIS VALUE to change column spacing */ 3373 width: 100% !important; 3374 padding: 1rem 0 2rem 10rem !important; /* Moved columns right - ADJUST LAST VALUE (6rem) to move all c
3374olumns left/right */ 3375 justify-content: flex-start !important; /* Keep columns grouped together on left */ 3376 max-width: 800px !important; /* Prevent container from getting too wide */ 3377 } 3378 3379 .mega-menu__content--structured .mega-menu__column, 3380 .mega-menu__content--structured-secondary .mega-menu__column { 3381 display: flex !important; 3382 flex-direction: column !important; 3383 gap: 0.8rem !important; 3384 flex: 0 0 auto !important; /* Fixed width columns that don't expand */ 3385 width: 150px !important; /* Fixed column width - ADJUST THIS VALUE to make columns wider/narrower */ 3386 min-width: 150px !important; 3387 } 3388 3389 .mega-menu__content--structured .mega-menu__column-header, 3390 .mega-menu__content--structured-secondary .mega-menu__column-header { 3391 font-weight: bold !important; 3392 font-size: inherit !important; 3393 margin: 0 0 0.5rem 0 !important; 3394 color: currentColor !important; 3395 line-height: 1.4 !important; 3396 padding: 0.4rem 0 !important; 3397 } 3398 3399 .mega-menu__content--structured .mega-menu__column--first, 3400 .mega-menu__content--structured-secondary .mega-menu__column--first { 3401 padding-top: 0.4rem !important; /* Align first items exactly with column headers */ 3402 } 3403 3404 .mega-menu__content--structured .mega-menu__column .mega-menu__link, 3405 .mega-menu__content--structured-secondary .mega-menu__column .mega-menu__link { 3406 display: block !important; 3407 text-decoration: none !important; 3408 padding: 0.4rem 0 !important; 3409 color: currentColor !important; 3410 line-height: 1.4 !important; 3411 font-weight: normal !important; 3412 } 3413 3414 .mega-menu__content--structured .mega-menu__column .mega-menu__link:hover, 3415 .mega-menu__content--structured-secondary .mega-menu__column .mega-menu__link:hover { 3416 text-decoration: underline !important; 3417 } 3418 3419 /* ============================================================ 3420 By Finish column + hover-only lazy-loaded media panel 3421 (first dropdown, desktop only) 3422 - Images carry NO src until JS injects it on hover, so nothing 3423 is requested on page load, and nothing loads on mobile. 3424 - The panel is only visible while the cursor is actively on the 3425 finish link; it hides again on mouseleave / blur / menu close. 3426 ============================================================ */ 3427 .mega-menu__content--structured .mega-menu__finish-link { 3428 cursor: pointer; 3429 } 3430 3431 .mega-menu__content--structured .mega-menu__finish-panel { 3432 display: none; 3433 } 3434 3435 /* When active, the panel is absolutely positioned inside the media column so its 3436 height NEVER adds to the mega menu height â the menu can't grow taller on hover. */ 3437 .mega-menu__content--structured .mega-menu__finish-panel.is-active { 3438 display: flex; 3439 flex-direction: column; 3440 animation: megaFinishFade 0.18s ease; 3441 } 3442 3443 @keyframes megaFinishFade { 3444 from { opacity: 0; } 3445 to { opacity: 1; } 3446 } 3447 3448 .mega-menu__content--structured .mega-menu__finish-image { 3449 flex: 1 1 auto; /* image takes whatever vertical space is left after the text */ 3450 min-height: 0; /* lets the image shrink so it always fits the current menu height */ 3451 width: 100%; 3452 border-radius: 0.5em; 3453 overflow: hidden; 3454 background: rgba(0, 0, 0, 0.04); /* subtle placeholder while the image fetches */ 3455 } 3456 3457 .mega-menu__content--structured .mega-menu__finish-img { 3458 width: 100%; 3459 height: 100%; 3460 object-fit: cover; 3461 display: block; 3462 } 3463 3464 .mega-menu__content--structured .mega-menu__finish-title { 3465 flex: 0 0 auto; 3466 font-weight: bold; 3467 margin: 0.7rem 0 0.2rem 0; 3468 line-height: 1.3; 3469 } 3470 3471 .mega-menu__content--structured .mega-menu__finish-desc { 3472 flex: 0 0 auto; 3473 margin: 0; 3474 line-height: 1.35; 3475 font-size: 0.9em; 3476 opacity: 0.85; 3477 } 3478 3479 @media screen and (min-width: 990px) { 3480 .mega-menu__content--structured .mega-menu__structured-inner { 3481 display: flex !important; 3482 align-items: stretch !important; /* media column matches the link columns' height */ 3483 width: 100% !important; 3484 } 3485 3486 /* Stop the columns block from growing so the image sits right beside the 3rd column */ 3487 .mega-menu__content--structured .mega-menu__structured-inner > .mega-menu__columns { 3488 flex: 0 0 auto !important; 3489 width: auto !important; 3490 max-width: none !important; 3491 } 3492 3493 .mega-menu__content--structured .mega-menu__finish-media { 3494 position: relative; /* active panel is positioned against this box */ 3495 align-self: stretch; /* height = the link columns' height, so nothing extends the menu */ 3496 flex: 0 0 auto; 3497 width: 12em; /* a bit smaller. ADJUST to resize the image column horizontally */ 3498 margin-left: 2.5rem; /* same gap as between columns, so it reads as a 4th column */ 3499 box-sizing: border-box; 3500 } 3501 3502 /* Fill the media column; because it's absolute, its height can't push the menu taller. */ 3503 .mega-menu__content--structured .mega-menu__finish-panel.is-active { 3504 position: absolute; 3505 top: 0.4rem; /* nudge down to align with the column text */ 3506 right: 0; 3507 bottom: 0; 3508 left: 0; 3509 } 3510 } 3511</style> 3512 3513<nav class="header__inline-menu" role="navigation" aria-label="Main navigation"> 3514 <ul class="list-menu list-menu--inline" role="list"> 3515 3516<li><header-menu> 3517 <details id="Details-HeaderMenu-1" class="mega-menu"> 3518 <summary 3519 id="HeaderMenu-shop" 3520 class="header__menu-item list-menu__item link focus-inset" 3521 aria-expanded="false" 3522 aria-controls="MegaMenu-Content-1" 3523 >
3524 <span 3525 >Shop</span> 3526 <svg 3527 class="icon icon-caret" 3528 viewBox="0 0 21 21" 3529 fill="none" 3530 xmlns="http://www.w3.org/2000/svg" 3531 aria-hidden="true" 3532 > 3533 <path 3534 fill-rule="evenodd" 3535 clip-rule="evenodd" 3536 d="M10.5 0C11.1443 0 11.6667 0.522334 11.6667 1.16667V19.8333C11.6667 20.4777 11.1443 21 10.5 21C9.85567 21 9.33333 20.4777 9.33333 19.8333V1.16667C9.33333 0.522334 9.85567 0 10.5 0Z" 3537 fill="currentColor" 3538 /> 3539 <path 3540 fill-rule="evenodd" 3541 clip-rule="evenodd" 3542 d="M0 10.5C0 9.85567 0.522334 9.33333 1.16667 9.33333H19.8333C20.4777 9.33333 21 9.85567 21 10.5C21 11.1443 20.4777 11.6667 19.8333 11.6667H1.16667C0.522334 11.6667 0 11.1443 0 10.5Z" 3543 fill="currentColor" 3544 /> 3545 </svg> 3546 </summary> 3547 <div 3548 id="MegaMenu-Content-1" 3549 class="mega-menu__content color-scheme-1 gradient motion-reduce global-settings-popup flex mega-menu__content--structured" 3550 tabindex="-1" 3551 role="region" 3552 aria-labelledby="HeaderMenu-shop" 3553 > 3554 3555<!-- First dropdown: 3-column layout with By Finish hover images --> 3556 <div class="mega-menu__structured-inner"> 3557 <div class="mega-menu__columns"> 3558 <!-- Column 1: First 5 items with "By Product" header --> 3559 <div class="mega-menu__column"> 3560 <h4 class="mega-menu__column-header">By Product</h4><a 3561 id="HeaderMenu-shop-wall-ceiling-vents" 3562 href="/collections/wall-vent" 3563 class="mega-menu__link mega-menu__link--level-2 link" 3564 3565 rel="prefetch" 3566 > 3567 Wall / Ceiling Vents 3568 </a><a 3569 id="HeaderMenu-shop-floor-vents" 3570 href="/collections/floor" 3571 class="mega-menu__link mega-menu__link--level-2 link" 3572 3573 rel="prefetch" 3574 > 3575 Floor Vents 3576 </a><a 3577 id="HeaderMenu-shop-exhaust-fans" 3578 href="/collections/exhaust-mounts" 3579 class="mega-menu__link mega-menu__link--level-2 link" 3580 3581 rel="prefetch" 3582 > 3583 Exhaust Fans 3584 </a><a 3585 id="HeaderMenu-shop-mounts-niches" 3586 href="/collections/mounts-niches" 3587 class="mega-menu__link mega-menu__link--level-2 link" 3588 3589 rel="prefetch" 3590 > 3591 Mounts & Niches 3592 </a><a 3593 id="HeaderMenu-shop-accessories" 3594 href="/collections/accessories" 3595 class="mega-menu__link mega-menu__link--level-2 link" 3596 3597 rel="prefetch" 3598 > 3599 Accessories 3600 </a></div> 3601 3602 <!-- Column 2: Next 2 items with "By Finish" header (hover swaps + lazy-loads the image) --> 3603 <div class="mega-menu__column mega-menu__column--finish"> 3604 <h4 class="mega-menu__column-header">By Finish</h4><a 3605 id="HeaderMenu-shop-framed" 3606 href="/collections/framed" 3607 class="mega-menu__link mega-menu__link--level-2 mega-menu__finish-link link" 3608 data-finish-target="finish-2" 3609 3610 rel="prefetch" 3611 > 3612 Framed 3613 </a><a 3614 id="HeaderMenu-shop-flush" 3615 href="/collections/flush" 3616 class="mega-menu__link mega-menu__link--level-2 mega-menu__finish-link link" 3617 data-finish-target="finish-1" 3618 3619 rel="prefetch" 3620 > 3621 Flush 3622 </a></div> 3623 3624 <!-- Column 3: Remaining items with "By Room" header (offset shifted from 8 to 7) --> 3625 <div class="mega-menu__column"> 3626 <h4 class="mega-menu__column-header">By Room</h4><a 3627 id="HeaderMenu-shop-bathroom" 3628 href="/collections/bathroom" 3629 class="mega-menu__link mega-menu__link--level-2 link" 3630 3631 rel="prefetch" 3632 > 3633 Bathroom 3634 </a><a 3635 id="HeaderMenu-shop-kitchen" 3636 href="/collections/kitchen" 3637 class="mega-menu__link mega-menu__link--level-2 link" 3638 3639 rel="prefetch" 3640 > 3641 Kitchen 3642 </a><a 3643 id="HeaderMenu-shop-living" 3644 href="/collections/living-room" 3645 class="mega-menu__link mega-menu__link--level-2 link" 3646 3647 rel="prefetch" 3648 > 3649 Living 3650 </a><a 3651 id="HeaderMenu-shop-entryway" 3652 href="/collections/entryway" 3653 class="mega-menu__link mega-menu__link--level-2 link" 3654 3655 rel="prefetch" 3656 > 3657 Entryway 3658 </a></div> 3659 </div><div class="mega-menu__finish-media" aria-hidden="true"><div 3660 class="mega-menu__finish-panel" 3661 data-finish-key="finish-1" 3662 ><div class="mega-menu__finish-image"><img 3663 class="mega-menu__finish-img" 3664 alt="Flush" 3665 width="320" 3666 height="320" 3667 loading="lazy" 3668 decoding="async" 3669 data-src="//fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.webp?v=1784899341&width=600" 3670 data-srcset="//fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.webp?v=1784899341&width=300 300w, //fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.webp?v=1784899341&width=450 450w, //fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.webp?v=1784899341&width=600 600w, //fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.webp?v=1784899341&width=700 700w" 3671 data-sizes="15em" 3672 > 3673 </div><p class="mega-menu__finish-title">Flush</p><p class="mega-menu__finish-desc">Sits in the surface</p></div><div 3674 class="mega-menu__finish-panel" 3675 data-finish-key="finish-2" 3676 ><div class="mega-menu__finish-image"><img 3677 class="mega-menu__finish-img" 3678 alt="Framed" 3679 width="320" 3680 height="320" 3681 loading="lazy" 3682 decoding="async" 3683 data-src="//fittes.ca/cdn/shop/files/Framed_Vent_FAQ.webp?v=1784293815&width=600" 3684 data-srcset="//fittes.ca/cdn/shop/files/Framed_Vent_FAQ.webp?v=1784293815&width=300 300w, //fittes.ca/cdn/shop/files/Framed_Vent_FAQ.webp?v=1784293815&width=450 450w, //fittes.ca/cdn/shop/files/Framed_Vent_FAQ.webp?v=1784293815&width=600 600w, //fittes.ca/cdn/shop/files/Framed_Vent_FAQ.webp?v=1784293815&width=700 700w" 3685 data-sizes="15em" 3686 > 3687 </div><p class="mega-menu__finish-title">Framed</p><p class="mega-menu__finish-desc">Sits on the surface</p></div></div></div> 3688 3689 </div> 3690 </details> 3691 </header-menu></li> 3692 3693<li><header-menu> 3694 <details id="Details-HeaderMenu-2" class="mega-menu"> 3695 <summary 3696 id="HeaderMenu-learn" 3697 class="header__menu-item list-menu__item link focus-inset" 3698 aria-expanded="false" 3699 aria-controls="MegaMenu-Content-2" 3700 >
3701 <span 3702 >Learn</span> 3703 <svg 3704 class="icon icon-caret" 3705 viewBox="0 0 21 21" 3706 fill="none" 3707 xmlns="http://www.w3.org/2000/svg" 3708 aria-hidden="true" 3709 > 3710 <path 3711 fill-rule="evenodd" 3712 clip-rule="evenodd" 3713 d="M10.5 0C11.1443 0 11.6667 0.522334 11.6667 1.16667V19.8333C11.6667 20.4777 11.1443 21 10.5 21C9.85567 21 9.33333 20.4777 9.33333 19.8333V1.16667C9.33333 0.522334 9.85567 0 10.5 0Z" 3714 fill="currentColor" 3715 /> 3716 <path 3717 fill-rule="evenodd" 3718 clip-rule="evenodd" 3719 d="M0 10.5C0 9.85567 0.522334 9.33333 1.16667 9.33333H19.8333C20.4777 9.33333 21 9.85567 21 10.5C21 11.1443 20.4777 11.6667 19.8333 11.6667H1.16667C0.522334 11.6667 0 11.1443 0 10.5Z" 3720 fill="currentColor" 3721 /> 3722 </svg> 3723 </summary> 3724 <div 3725 id="MegaMenu-Content-2" 3726 class="mega-menu__content color-scheme-1 gradient motion-reduce global-settings-popup flex mega-menu__content--structured-secondary" 3727 tabindex="-1" 3728 role="region" 3729 aria-labelledby="HeaderMenu-learn" 3730 > 3731 3732 <!-- Second dropdown: 3-column layout --> 3733 <div class="mega-menu__columns"> 3734 <!-- Column 1: First 5 items with "Specs + Support" header - UPDATED: limit changed from 6 to 5 --> 3735 <div class="mega-menu__column"> 3736 <h4 class="mega-menu__column-header">Specs + Support</h4><a 3737 id="HeaderMenu-learn-compare-products" 3738 href="/pages/compare-products" 3739 class="mega-menu__link mega-menu__link--level-2 link" 3740 3741 3742 > 3743 Compare Products 3744 </a><a 3745 id="HeaderMenu-learn-help-center" 3746 href="https://fittes-canada.gorgias.help/en-US" 3747 class="mega-menu__link mega-menu__link--level-2 link" 3748 3749 3750 > 3751 Help Center 3752 </a><a 3753 id="HeaderMenu-learn-airflow-specs" 3754 href="/pages/airflow-specs" 3755 class="mega-menu__link mega-menu__link--level-2 link" 3756 3757 3758 > 3759 Airflow Specs 3760 </a><a 3761 id="HeaderMenu-learn-install-guides" 3762 href="/pages/install-guides-1" 3763 class="mega-menu__link mega-menu__link--level-2 link" 3764 3765 3766 > 3767 Install Guides 3768 </a><a 3769 id="HeaderMenu-learn-product-basics" 3770 href="/pages/fittes-lingo" 3771 class="mega-menu__link mega-menu__link--level-2 link" 3772 3773 3774 > 3775 Product Basics 3776 </a></div> 3777 3778 <!-- Column 2: Next 2 items with "Trade + Rewards" header - UPDATED: offset changed from 6 to 5, limit changed from 3 to 2 --> 3779 <div class="mega-menu__column"> 3780 <h4 class="mega-menu__column-header">Trade + Rewards</h4><a 3781 id="HeaderMenu-learn-fittes-crew-rewards" 3782 href="/pages/fittes-crew" 3783 class="mega-menu__link mega-menu__link--level-2 link" 3784 3785 3786 > 3787 Fittes Crew Rewards 3788 </a><a 3789 id="HeaderMenu-learn-partner-with-us" 3790 href="/pages/partner" 3791 class="mega-menu__link mega-menu__link--level-2 link" 3792 3793 3794 > 3795 Partner With Us 3796 </a><a 3797 id="HeaderMenu-learn-trades-program" 3798 href="/pages/trades-program" 3799 class="mega-menu__link mega-menu__link--level-2 link" 3800 3801 3802 > 3803 Trades Program 3804 </a></div> 3805 3806 <!-- Column 3: Last 4 items with "About Us" header - UPDATED: offset changed from 9 to 7, limit changed from 2 to 4 --> 3807 <div class="mega-menu__column"> 3808 <h4 class="mega-menu__column-header">About Us</h4><a 3809 id="HeaderMenu-learn-our-story" 3810 href="/pages/our-story" 3811 class="mega-menu__link mega-menu__link--level-2 link" 3812 3813 3814 > 3815 Our Story 3816 </a><a 3817 id="HeaderMenu-learn-our-team" 3818 href="/pages/our-team" 3819 class="mega-menu__link mega-menu__link--level-2 link" 3820 3821 3822 > 3823 Our Team 3824 </a><a 3825 id="HeaderMenu-learn-blog" 3826 href="/blogs/blog" 3827 class="mega-menu__link mega-menu__link--level-2 link" 3828 3829 3830 > 3831 Blog 3832 </a><a 3833 id="HeaderMenu-learn-faq" 3834 href="/pages/faq" 3835 class="mega-menu__link mega-menu__link--level-2 link" 3836 3837 3838 > 3839 FAQ 3840 </a></div> 3841 </div> 3842 3843 </div> 3844 </details> 3845 </header-menu></li> 3846 3847<li><a 3848 id="HeaderMenu-vent-finder" 3849 href="#quiz-6jRk3l" 3850 class="header__menu-item list-menu__item link link--text focus-inset" 3851 3852 3853 3854 >
3855 <span >Vent Finder</span> 3856 </a></li> 3857 3858</ul> 3859</nav> 3860
3861<script> 3862 (function() { 3863 var ua = navigator.userAgent; 3864 var isSafari = /^((?!chrome|chromium|android).)*safari/i.test(ua); 3865 if (isSafari) { 3866 document.documentElement.classList.add('is-safari'); 3867 } 3868 })(); 3869</script>
3869 3870
3871<script> 3872 (function(){ 3873 var prefetchedUrls = new Set(); 3874 function prefetchPage(url) { 3875 if (prefetchedUrls.has(url) || !url) return; 3876 prefetchedUrls.add(url); 3877 var link = document.createElement('link'); 3878 link.rel = 'prefetch'; 3879 link.href = url; 3880 document.head.appendChild(link); 3881 setTimeout(function() { 3882 if (link.parentNode) link.parentNode.removeChild(link); 3883 }, 30000); 3884 } 3885 var allMenus = document.querySelectorAll('header-menu details.mega-menu'); 3886 function closeAllMenusExcept(activeMenu) { 3887 allMenus.forEach(function(menu) { 3888 if (menu !== activeMenu) { 3889 clearTimeout(menu._closeTimer); 3890 menu.removeAttribute('open'); 3891 menu.querySelector('summary').setAttribute('aria-expanded', 'false'); 3892 menu._isHovered = false; 3893 menu._openTime = null; 3894 } 3895 }); 3896 } 3897 allMenus.forEach(function(menu){ 3898 menu._closeTimer = null; 3899 menu._isHovered = false; 3900 menu._openTime = null; 3901 3902 function openMenu() { 3903 closeAllMenusExcept(menu); 3904 clearTimeout(menu._closeTimer); 3905 menu.setAttribute('open', ''); 3906 menu.querySelector('summary').setAttribute('aria-expanded', 'true'); 3907 menu._isHovered = true; 3908 menu._openTime = Date.now(); // Track when menu opened 3909 } 3910 function scheduleClose() { 3911 menu._isHovered = false; 3912 menu._closeTimer = setTimeout(function() { 3913 if (!menu._isHovered) { 3914 menu.removeAttribute('open'); 3915 menu.querySelector('summary').setAttribute('aria-expanded', 'false'); 3916 menu._openTime = null; 3917 } 3918 }, 200); 3919 } 3920 function cancelClose() { 3921 clearTimeout(menu._closeTimer); 3922 menu._isHovered = true; 3923 } 3924 3925 // Handle clicks on menu items with dropdowns 3926 var summary = menu.querySelector('summary'); 3927 summary.addEventListener('click', function(e) { 3928 e.preventDefault(); // Prevent default link navigation 3929 3930 var isOpen = menu.hasAttribute('open'); 3931 var currentTime = Date.now(); 3932 3933 if (!isOpen) { 3934 // Menu is closed, open it 3935 openMenu(); 3936 } else if (menu._openTime && (currentTime - menu._openTime) > 750) { 3937 // Menu has been open for more than 0.75 seconds, close it 3938 menu.removeAttribute('open'); 3939 summary.setAttribute('aria-expanded', 'false'); 3940 menu._isHovered = false; 3941 menu._openTime = null; 3942 } 3943 // If menu opened less than 0.75 seconds ago, do nothing (ignore click) 3944 }); 3945 3946 menu.addEventListener('mouseenter', function() { 3947 openMenu(); 3948 menu.querySelectorAll('a[href]').forEach(function(link) { 3949 var href = link.getAttribute('href'); 3950 if (href && (href.includes('/collections/') || href.includes('/products/'))) { 3951 prefetchPage(href); 3952 } 3953 }); 3954 }); 3955 menu.addEventListener('mouseleave', scheduleClose); 3956 var mq = window.matchMedia('(min-width: 990px)'); 3957 menu.addEventListener('focusin', function() { 3958 if (mq.matches) { 3959 clearTimeout(menu._closeTimer); 3960 menu.setAttribute('open', ''); 3961 menu.querySelector('summary').setAttribute('aria-expanded', 'true'); 3962 menu._openTime = Date.now(); 3963 } 3964 }); 3965 menu.addEventListener('focusout', function(e) { 3966 if (mq.matches && !menu.contains(e.relatedTarget)) { 3967 menu.removeAttribute('open'); 3968 menu.querySelector('summary').setAttribute('aria-expanded', 'false'); 3969 menu._openTime = null; 3970 } 3971 }); 3972 var content = menu.querySelector('.mega-menu__content'); 3973 if (content) { 3974 content.addEventListener('mouseenter', cancelClose); 3975 content.addEventListener('mouseleave', scheduleClose); 3976 } 3977 }); 3978 })(); 3979</script>
3979 3980
3981<script> 3982 /* ============================================================ 3983 By Finish: hover-only, lazy-loaded media panel (desktop only) 3984 - Images have NO src at page load, so nothing is requested. 3985 - The image source is injected once, on the first hover/focus 3986 of that finish link, and only when the viewport is >= 990px. 3987 - The panel shows ONLY while the cursor is actively on the link. 3988 It hides on mouseleave / blur / menu close, so reopening the 3989 menu shows nothing until a finish link is hovered again. 3990 - Nothing loads on mobile (no hover + the media query gate). 3991 ============================================================ */ 3992 (function () { 3993 var finishLinks = document.querySelectorAll('.mega-menu__finish-link'); 3994 if (!finishLinks.length) return; 3995 3996 // Only load/show images where the media panel is actually visible (desktop). 3997 var desktop = window.matchMedia('(min-width: 990px)'); 3998 var hideTimers = new WeakMap(); 3999 4000 function loadPanelImage(panel) { 4001 var img = panel && panel.querySelector('.mega-menu__finish-img'); 4002 if (!img || img.getAttribute('data-loaded') === 'true') return; 4003 var srcset = img.getAttribute('data-srcset'); 4004 var sizes = img.getAttribute('data-sizes'); 4005 var src = img.getAttribute('data-src'); 4006 if (sizes) img.setAttribute('sizes', sizes); 4007 if (srcset) img.setAttribute('srcset', srcset); 4008 if (src) img.setAttribute('src', src); // <-- the only line that triggers a network request 4009 img.setAttribute('data-loaded', 'true'); 4010 } 4011 4012 function hideAll(content) { 4013 if (!content) return; 4014 content.querySelectorAll('.mega-menu__finish-panel').forEach(function (panel) { 4015 panel.classList.remove('is-active'); 4016 }); 4017 } 4018 4019 function show(content, key) { 4020 if (!content || !key || !desktop.matches) return; 4021 content.querySelectorAll('.mega-menu__finish-panel').forEach(function (panel) { 4022 var isMatch = panel.getAttribute('data-finish-key') === key; 4023 panel.classList.toggle('is-active', isMatch); 4024 if (isMatch) loadPanelImage(panel); 4025 }); 4026 } 4027 4028 var seenMenus = new Set(); 4029 4030 finishLinks.forEach(function (link) { 4031 var content = link.closest('.mega-menu__content'); 4032 var key = link.getAttribute('data-finish-target'); 4033 4034 function onEnter() { 4035 // Cancel any pending hide so sliding between the two finish links does not flash empty. 4036 clearTimeout(hideTimers.get(content)); 4037 show(content, key); 4038 } 4039 function onLeave() { 4040 // Small delay so moving directly onto the sibling finish link cancels this hide. 4041 hideTimers.set(content, setTimeout(function () { hideAll(content); }, 40)); 4042 } 4043 4044 link.addEventListener('mouseenter', onEnter); 4045 link.addEventListener('mouseleave', onLeave); 4046 link.addEventListener('focus', onEnter); 4047 link.addEventListener('blur', onLeave); 4048 4049 // Safety: whenever this dropdown closes, clear the active image so a reopen starts blank. 4050 var details = link.closest('details.mega-menu'); 4051 if (details && !seenMenus.has(details)) { 4052 seenMenus.add(details); 4053 details.addEventListener('toggle', function () { 4054 if (!details.open) hideAll(content); 4055 }); 4056 } 4057 }); 4058 })(); 4059</script>
4059 4060 4061<div class="header__icons header__icons--localization header-localization"> 4062 <div class="desktop-localization-wrapper"> 4063</div> 4064 4065 4066<details-modal class="header__search"> 4067 <details> 4068 <summary 4069 class="header__icon header__icon--search header__icon--summary link focus-inset modal__toggle" 4070 aria-haspopup="dialog" 4071 aria-label="Search" 4072 > 4073 <span> 4074 <span class="header__icon--search-span"><svg fill="none" class="icon icon-search" viewBox="0 0 25 24"> 4075<path fill-rule="evenodd" clip-rule="evenodd" d="M7.55412 2.88593C8.48833 2.49897 9.4896 2.2998 10.5008 2.2998C11.512 2.2998 12.5132 2.49897 13.4474 2.88593C14.3817 3.27289 15.2305 3.84007 15.9455 4.55508C16.6605 5.27009 17.2277 6.11893 17.6147 7.05314C18.0016 7.98735 18.2008 8.98863 18.2008 9.99981C18.2008 11.011 18.0016 12.0123 17.6147 12.9465C17.3173 13.6644 16.9135 14.3319 16.4179 14.927L22.4907 20.9998L21.5008 21.9898L15.428 15.917C14.8329 16.4125 14.1654 16.8163 13.4474 17.1137C12.5132 17.5006 11.512 17.6998 10.5008 17.6998C9.4896 17.6998 8.48833 17.5006 7.55412 17.1137C6.61991 16.7267 5.77107 16.1595 5.05606 15.4445C4.34105 14.7295 3.77387 13.8807 3.38691 12.9465C2.99995 12.0123 2.80078 11.011 2.80078 9.99981C2.80078 8.98863 2.99995 7.98735 3.38691 7.05314C3.77387 6.11894 4.34105 5.27009 5.05606 4.55508C5.77107 3.84007 6.61991 3.27289 7.55412 2.88593ZM10.5008 3.6998C9.67345 3.6998 8.85423 3.86276 8.08988 4.17936C7.32552 4.49597 6.63102 4.96002 6.04601 5.54503C5.461 6.13004 4.99695 6.82455 4.68034 7.5889C4.36374 8.35325 4.20078 9.17248 4.20078 9.9998C4.20078 10.8271 4.36374 11.6464 4.68034 12.4107C4.99695 13.1751 5.461 13.8696 6.04601 14.4546C6.63102 15.0396 7.32553 15.5036 8.08988 15.8202C8.85423 16.1369 9.67345 16.2998 10.5008 16.2998C11.3281 16.2998 12.1473 16.1369 12.9117 15.8202C13.676 15.5036 14.3705 15.0396 14.9556 14.4546C15.5406 13.8696 16.0046 13.1751 16.3212 12.4107C16.6378 11.6464 16.8008 10.8271 16.8008 9.9998C16.8008 9.17248 16.6378 8.35325 16.3212 7.5889C16.0046 6.82455 15.5406 6.13004 14.9556 5.54503C14.3705 4.96002 13.676 4.49597 12.9117 4.17936C12.1473 3.86276 11.3281 3.6998 10.5008 3.6998Z" fill="currentColor"/> 4076</svg><div class="small-hide">Search</div> 4077 </span> 4078 <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> 4079</span> 4080 </span> 4081 </summary> 4082 <div 4083 class="search-modal modal__content gradient" 4084 role="dialog" 4085 aria-modal="true" 4086 aria-label="Search" 4087 > 4088 <div class="modal-overlay"></div> 4089 <div 4090 class="search-modal__content search-modal__content-bottom" 4091 tabindex="-1" 4092 ><predictive-search class="search-modal__form" data-loading-text="Loading..."><form action="/search" method="get" role="search" class="search search-modal__form"> 4093 <div class="field"> 4094 <input 4095 class="search__input field__input hw-head-search-input" 4096 id="Search-In-Modal" 4097 type="search" 4098 name="q" 4099 value="" 4100 placeholder="Search Fittes.ca"role="combobox" 4101 aria-expanded="false" 4102 aria-owns="predictive-search-results" 4103 aria-controls="predictive-search-results" 4104 aria-haspopup="listbox" 4105 aria-autocomplete="list" 4106 autocorrect="off" 4107 autocomplete="off" 4108 autocapitalize="off" 4109 spellcheck="false"> 4110 <input type="hidden" name="options[prefix]" value="last"> 4111 <button 4112 type="reset" 4113 class="reset__button field__button hidden" 4114 aria-label="Clear search term" 4115 > 4116 <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> 4117</span> 4118 </button> 4119 <button class="search__button field__button" aria-label="Search">
4120 <span class="svg-wrapper"><svg fill="none" class="icon icon-search" viewBox="0 0 25 24"> 4121<path fill-rule="evenodd" clip-rule="evenodd" d="M7.55412 2.88593C8.48833 2.49897 9.4896 2.2998 10.5008 2.2998C11.512 2.2998 12.5132 2.49897 13.4474 2.88593C14.3817 3.27289 15.2305 3.84007 15.9455 4.55508C16.6605 5.27009 17.2277 6.11893 17.6147 7.05314C18.0016 7.98735 18.2008 8.98863 18.2008 9.99981C18.2008 11.011 18.0016 12.0123 17.6147 12.9465C17.3173 13.6644 16.9135 14.3319 16.4179 14.927L22.4907 20.9998L21.5008 21.9898L15.428 15.917C14.8329 16.4125 14.1654 16.8163 13.4474 17.1137C12.5132 17.5006 11.512 17.6998 10.5008 17.6998C9.4896 17.6998 8.48833 17.5006 7.55412 17.1137C6.61991 16.7267 5.77107 16.1595 5.05606 15.4445C4.34105 14.7295 3.77387 13.8807 3.38691 12.9465C2.99995 12.0123 2.80078 11.011 2.80078 9.99981C2.80078 8.98863 2.99995 7.98735 3.38691 7.05314C3.77387 6.11894 4.34105 5.27009 5.05606 4.55508C5.77107 3.84007 6.61991 3.27289 7.55412 2.88593ZM10.5008 3.6998C9.67345 3.6998 8.85423 3.86276 8.08988 4.17936C7.32552 4.49597 6.63102 4.96002 6.04601 5.54503C5.461 6.13004 4.99695 6.82455 4.68034 7.5889C4.36374 8.35325 4.20078 9.17248 4.20078 9.9998C4.20078 10.8271 4.36374 11.6464 4.68034 12.4107C4.99695 13.1751 5.461 13.8696 6.04601 14.4546C6.63102 15.0396 7.32553 15.5036 8.08988 15.8202C8.85423 16.1369 9.67345 16.2998 10.5008 16.2998C11.3281 16.2998 12.1473 16.1369 12.9117 15.8202C13.676 15.5036 14.3705 15.0396 14.9556 14.4546C15.5406 13.8696 16.0046 13.1751 16.3212 12.4107C16.6378 11.6464 16.8008 10.8271 16.8008 9.9998C16.8008 9.17248 16.6378 8.35325 16.3212 7.5889C16.0046 6.82455 15.5406 6.13004 14.9556 5.54503C14.3705 4.96002 13.676 4.49597 12.9117 4.17936C12.1473 3.86276 11.3281 3.6998 10.5008 3.6998Z" fill="currentColor"/> 4122</svg></span> 4123 </button> 4124 </div><div class="predictive-search predictive-search--header" tabindex="-1" data-predictive-search> 4125 <div class="pre-search-default"> 4126 <div class="hw-search-title">New product</div> 4127 <div class="hw-product"> 4128 4129 <a class="hw-product-item" href="/products/brack-kit-luxe"> 4130 4131 <img 4132 src="//fittes.ca/cdn/shop/files/1-BrackKit_Lifestyle1.jpg?v=1754022178&width=320" 4133 srcset="//fittes.ca/cdn/shop/files/1-BrackKit_Lifestyle1.jpg?v=1754022178&width=160 160w, //fittes.ca/cdn/shop/files/1-BrackKit_Lifestyle1.jpg?v=1754022178&width=320 320w" 4134 sizes="(max-width: 749px) 40vw, 160px" 4135 loading="lazy" 4136 decoding="async" 4137 width="160" 4138 height="160" 4139 alt="Brack Kit [Luxe]" 4140 > 4141 4142 <div class="info"> 4143 <div class="heading">Brack Kit [Luxe]</div> 4144 <div class="price">$71.00</div> 4145 </div> 4146 </a> 4147 4148 <a class="hw-product-item" href="/products/device-mount-smash-plate"> 4149 4150 <img 4151 src="//fittes.ca/cdn/shop/files/2-DeviceMountSmashPlate_CloseCut1.png?v=1754022149&width=320" 4152 srcset="//fittes.ca/cdn/shop/files/2-DeviceMountSmashPlate_CloseCut1.png?v=1754022149&width=160 160w, //fittes.ca/cdn/shop/files/2-DeviceMountSmashPlate_CloseCut1.png?v=1754022149&width=320 320w" 4153 sizes="(max-width: 749px) 40vw, 160px" 4154 loading="lazy" 4155 decoding="async" 4156 width="160" 4157 height="160" 4158 alt="Device Mount Smash Plate" 4159 > 4160 4161 <div class="info"> 4162 <div class="heading">Device Mount Smash Plate</div> 4163 <div class="price">$13.00</div> 4164 </div> 4165 </a> 4166 4167 <a class="hw-product-item" href="/products/flush-access-panel-luxe-1"> 4168 4169 <img 4170 src="//fittes.ca/cdn/shop/files/1-FlushAccessPanel_Luxe__Lifestyle1_f4d44b28-1161-4
4170cbd-9bfd-f71874cb1e74.png?v=1754022088&width=320" 4171 srcset="//fittes.ca/cdn/shop/files/1-FlushAccessPanel_Luxe__Lifestyle1_f4d44b28-1161-4cbd-9bfd-f71874cb1e74.png?v=1754022088&width=160 160w, //fittes.ca/cdn/shop/files/1-FlushAccessPanel_Luxe__Lifestyle1_f4d44b28-1161-4cbd-9bfd-f71874cb1e74.png?v=1754022088&width=320 320w" 4172 sizes="(max-width: 749px) 40vw, 160px" 4173 loading="lazy" 4174 decoding="async" 4175 width="160" 4176 height="160" 4177 alt="Flush Access Panel [Luxe]" 4178 > 4179 4180 <div class="info"> 4181 <div class="heading">Flush Access Panel [Luxe]</div> 4182 <div class="price">$61.00</div> 4183 </div> 4184 </a> 4185 4186 <a class="hw-product-item" href="/products/flush-anywhere-niche-luxe"> 4187 4188 <img 4189 src="//fittes.ca/cdn/shop/files/1-FlushAnywhereNiche_Luxe__Lifestyle1_5c6ceb11-96f9-41c7-b6a6-e9b40b05f8ef.png?v=1754022083&width=320" 4190 srcset="//fittes.ca/cdn/shop/files/1-FlushAnywhereNiche_Luxe__Lifestyle1_5c6ceb11-96f9-41c7-b6a6-e9b40b05f8ef.png?v=1754022083&width=160 160w, //fittes.ca/cdn/shop/files/1-FlushAnywhereNiche_Luxe__Lifestyle1_5c6ceb11-96f9-41c7-b6a6-e9b40b05f8ef.png?v=1754022083&width=320 320w" 4191 sizes="(max-width: 749px) 40vw, 160px" 4192 loading="lazy" 4193 decoding="async" 4194 width="160" 4195 height="160" 4196 alt="Flush Anywhere Niche [Luxe]" 4197 > 4198 4199 <div class="info"> 4200 <div class="heading">Flush Anywhere Niche [Luxe]</div> 4201 <div class="price">$114.00</div> 4202 </div> 4203 </a> 4204 4205 <a class="hw-product-item" href="/products/device-mount-luxe"> 4206 4207 <img 4208 src="//fittes.ca/cdn/shop/files/1-FlushDeviceMount_Luxe__Lifestyle1.png?v=1754022116&width=320" 4209 srcset="//fittes.ca/cdn/shop/files/1-FlushDeviceMount_Luxe__Lifestyle1.png?v=1754022116&width=160 160w, //fittes.ca/cdn/shop/files/1-FlushDeviceMount_Luxe__Lifestyle1.png?v=1754022116&width=320 320w" 4210 sizes="(max-width: 749px) 40vw, 160px" 4211 loading="lazy" 4212 decoding="async" 4213 width="160" 4214 height="160" 4215 alt="Flush Device Mount [Luxe]" 4216 > 4217 4218 <div class="info"> 4219 <div class="heading">Flush Device Mount [Luxe]</div> 4220 <div class="price">$104.00</div> 4221 </div> 4222 </a> 4223 4224 <a class="hw-product-item" href="/products/flush-drywall-device-mount-lite"> 4225 4226 <img 4227 src="//fittes.ca/cdn/shop/files/1-FlushDrywallDeviceMount_Lite__Lifestyle1.png?v=1754022156&width=320" 4228 srcset="//fittes.ca/cdn/shop/files/1-FlushDrywallDeviceMount_Lite__Lifestyle1.png?v=1754022156&width=160 160w, //fittes.ca/cdn/shop/files/1-FlushDrywallDeviceMount_Lite__Lifestyle1.png?v=1754022156&width=320 320w" 4229 sizes="(max-width: 749px) 40vw, 160px" 4230 loading="lazy" 4231 decoding="async" 4232 width="160" 4233 height="160" 4234 alt="Flush Drywall Device Mount [Lite]" 4235 > 4236 4237 <div class="info"> 4238 <div class="heading">Flush Drywall Device Mount [Lite]</div> 4239 <div class="price">$14.00</div> 4240 </div> 4241 </a> 4242 4243 </div> 4244 <div class="hw-search-title">Collection</div> 4245 <div class="hw-collection"> 4246 4247 <a class="hw-collection-item" href="/collections/vents"> 4248 4249 <img 4250 src="//fittes.ca/cdn/shop/collections/Vents_1_-_1920_720.png?v=1748267664&width=400" 4251 srcset="//fittes.ca/cdn/shop/collections/Vents_1_-_1920_720.png?v=1748267664&width=200 200w, //fittes.ca/cdn/shop/collections/Vents_1_-_1920_720.png?v=1748267664&width=400 400w" 4252 sizes="(max-width: 749px) 45vw, 200px" 4253 loading="lazy" 4254 decoding="async" 4255 width="200" 4256 height="200" 4257 alt="Vents" 4258 > 4259 4260 <div class="heading">Vents</div> 4261 </a> 4262 4263 <a class="hw-collection-item" href="/collections/niche"> 4264 4265 <img 4266 src="//fittes.ca/cdn/shop/collections/Murphy-Bowl-Banner-2400x600.gif?v=1744652964&width=400" 4267 srcset="//fittes.ca/cdn/shop/collections/Murphy-Bowl-Banner-2400x600.gif?v=1744652964&width=200 200w, //fittes.ca/cdn/shop/collections/Murphy-Bowl-Banner-2400x600.gif?v=1744652964&width=400 400w" 4268 sizes="(max-width: 749px) 45vw, 200px" 4269 loading="lazy" 4270 decoding="async" 4271 width="200" 4272 height="200" 4273 alt="Niches" 4274 > 4275 4276 <div class="heading">Niches</div> 4277 </a> 4278 4279 <a class="hw-collection-item" href="/collections/mounts"> 4280 4281 <img 4282 src="//fittes.ca/cdn/shop/collections/Mount_1_-_1920_720.png?v=1744652563&width=400" 4283 srcset="//fittes.ca/cdn/shop/collections/Mount_1_-_1920_720.png?v=1744652563&width=200 200w, //fittes.ca/cdn/shop/collections/Mount_1_-_1920_720.png?v=1744652563&width=400 400w" 4284 sizes="(max-width: 749px) 45vw, 200px" 4285 loading="lazy" 4286 decoding="async" 4287 width="200" 4288 height="200" 4289 alt="Mounts" 4290 > 4291 4292 <div class="heading">Mounts</div> 4293 </a> 4294 4295 <a class="hw-collection-item" href="/collections/accessories"> 4296 4297 <img 4298 src="//fittes.ca/cdn/shop/collections/Accessories_1-_1920_720.png?v=1744653297&width=400" 4299 srcset="//fittes.ca/cdn/shop/collections/Accessories_1-_1920_720.png?v=1744653297&width=200 200w, //fittes.ca/cdn/shop/collections/Accessories_1-_1920_720.png?v=1744653297&width=400 400w" 4300 sizes="(max-width: 749px) 45vw, 200px" 4301 loading="lazy" 4302 decoding="async" 4303 width="200" 4304 height="200" 4305 alt="Accessories" 4306 > 4307 4308 <div class="heading">Accessories</div> 4309 </a> 4310 4311 </div> 4312 </div> 4313 4314<div class="predictive-search__loading-state"> 4315 <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> 4316 4317</div> 4318</div> 4319
4320 <span class="predictive-search-status visually-hidden" role="status" aria-hidden="true"></span></form></predictive-search><button 4321 type="button" 4322 class="search-modal__close-button modal__close-button link link--text focus-inset" 4323 aria-label="Close" 4324 > 4325 <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> 4326</span> 4327 </button> 4328 </div> 4329 </div> 4330 </details> 4331</details-modal> 4332 4333<style> 4334 /* Mobile: while the search modal is open, PickyStory's cart-button 4335 overlay must not intercept taps intended for the close controls */ 4336 @media screen and (max-width: 749px) { 4337 body:has(.header__search details[open]) [data-picky-cart-button-area] { 4338 pointer-events: none; 4339 } 4340 } 4341</style> 4342 4343<a 4344 href="https://fittes.ca/customer_authentication/redirect?locale=en®ion_country=US" 4345 class="header__icon header__icon--account link focus-inset" 4346 rel="nofollow" 4347 ><account-icon><span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-account" viewBox="0 0 27 28"> 4348<path fill-rule="evenodd" clip-rule="evenodd" d="M9.75961 4.63656C10.7512 3.64496 12.0961 3.08789 13.4984 3.08789C14.9008 3.08789 16.2457 3.64496 17.2373 4.63656C18.2289 5.62816 18.7859 6.97306 18.7859 8.37539C18.7859 9.77772 18.2289 11.1226 17.2373 12.1142C16.2457 13.1058 14.9008 13.6629 13.4984 13.6629C12.0961 13.6629 10.7512 13.1058 9.75961 12.1142C8.76801 11.1226 8.21094 9.77772 8.21094 8.37539C8.21094 6.97306 8.76801 5.62816 9.75961 4.63656ZM13.4984 4.66289C12.5138 4.66289 11.5695 5.05403 10.8733 5.75026C10.1771 6.44649 9.78594 7.39077 9.78594 8.37539C9.78594 9.36001 10.1771 10.3043 10.8733 11.0005C11.5695 11.6968 12.5138 12.0879 13.4984 12.0879C14.4831 12.0879 15.4273 11.6968 16.1236 11.0005C16.8198 10.3043 17.2109 9.36001 17.2109 8.37539C17.2109 7.39077 16.8198 6.44649 16.1236 5.75026C15.4273 5.05403 14.4831 4.66289 13.4984 4.66289ZM11.2484 18.1629C10.2638 18.1629 9.31953 18.554 8.6233 19.2503C7.92707 19.9465 7.53594 20.8908 7.53594 21.8754V24.9129H5.96094V21.8754C5.96094 20.4731 6.51801 19.1282 7.50961 18.1366C8.50121 17.145 9.8461 16.5879 11.2484 16.5879H15.7484C17.1508 16.5879 18.4957 17.145 19.4873 18.1366C20.4789 19.1282 21.0359 20.4731 21.0359 21.8754V24.9129H19.4609V21.8754C19.4609 20.8908 19.0698 19.9465 18.3736 19.2503C17.6773 18.554 16.7331 18.1629 15.7484 18.1629H11.2484Z" fill="currentColor"/> 4349</svg> 4350</span></account-icon><span class="visually-hidden">Log in</span> 4351 </a><a href="/cart" class="header__icon header__icon--cart link focus-inset" id="cart-icon-bubble"> 4352 4353 <span class="svg-wrapper"><svg xmlns="http://www.w3.org/2000/svg" fill="none" class="icon icon-cart-empty" viewBox="0 0 27 28"> 4354<path fill-rule="evenodd" clip-rule="evenodd" d="M13.4994 4.66289C12.8131 4.66289 12.155 4.9355 11.6697 5.42075C11.1845 5.906 10.9119 6.56414 10.9119 7.25039V8.71289H16.0869V7.25039C16.0869 6.56414 15.8143 5.906 15.329 5.42075C14.8438 4.9355 14.1856 4.66289 13.4994 4.66289ZM17.6619 8.71289V7.25039C17.6619 6.14643 17.2233 5.08768 16.4427 4.30706C15.6621 3.52644 14.6033 3.08789 13.4994 3.08789C12.3954 3.08789 11.3367 3.52644 10.556 4.30706C9.77541 5.08768 9.33686 6.14643 9.33686 7.25039V8.71289H7.12183M9.33686 10.2879H7.12174C6.91087 10.2879 6.7024 10.3334 6.51079 10.4215C6.31918 10.5095 6.14889 10.638 6.01157 10.798C5.87425 10.958 5.77316 11.1459 5.71524 11.3486C5.65732 11.5513 5.64392 11.7642 5.67595 11.9726C5.67595 11.9726 5.67594 11.9725 5.67595 11.9726L7.08782 21.1436C7.18177 21.7545 7.4913 22.3117 7.96037 22.7141C8.42943 23.1166 9.02706 23.3379 9.64512 23.3379C9.64513 23.3379 9.6451 23.3379 9.64512 23.3379H17.3536C17.9718 23.3381 18.5699 23.1169 19.0392 22.7144C19.5084 22.3119 19.818 21.7547 19.912 21.1437L21.3239 11.9727C21.3239 11.9726 21.3239 11.9727 21.3239 11.9727C21.3559 11.7643 21.3425 11.5513 21.2846 11.3486C21.2267 11.1459 21.1256 10.958 20.9883 10.798C20.851 10.638 20.6807 10.5095 20.4891 10.4215C20.2975 10.3334 20.0891 10.2879 19.8782 10.2879H17.6619V13.6629H16.0869V10.2879H10.9119V13.6629H9.33686V10.2879ZM17.6619 8.71289H19.878C19.8781 8.71289 19.878 8.71289 19.878 8.71289C20.3159 8.71285 20.7488 8.80751 21.1467 8.99037C21.5447 9.17324 21.8984 9.44001 22.1836 9.77238C22.4688 10.1047 22.6787 10.4949 22.799 10.916C22.9193 11.3371 22.9472 11.7792 22.8806 12.2121L21.4687 21.3831C21.4687 21.3831 21.4687 21.383 21.4687 21.3831C21.3175 22.366 20.8194 23.2624 20.0646 23.9099C19.3097 24.5573 18.3481 24.9131 17.3536 24.9129C17.3535 24.9129 17.3537 24.9129 17.3536 24.9129H9.64512C8.65083 24.9128 7.68937 24.5569 6.93478 23.9094C6.
435418021 23.262 5.68231 22.3659 5.53116 21.3832C5.53115 21.3832 5.53117 21.3833 5.53116 21.3832L4.11928 12.2122C4.05271 11.7793 4.08052 11.3371 4.20083 10.916C4.32114 10.4949 4.53109 10.1047 4.81629 9.77238C5.10149 9.44001 5.45518 9.17324 5.85313 8.99037C6.25106 8.80751 6.68391 8.71285 7.12183 8.71289" fill="currentColor"/> 4355</svg> 4356</span> 4357 4358 <span class="visually-hidden">Cart</span></a> 4359 </div> 4360 </header> 4361</sticky-header>
4362<script type="application/ld+json"> 4363 { 4364 "@context": "https://schema.org", 4365 "@type": "Organization", 4366 "@id": "https:\/\/fittes.ca#organization", 4367 "name": "Fittes ð", 4368 "url": "https:\/\/fittes.ca", 4369 "logo": "https:\/\/fittes.ca\/cdn\/shop\/files\/Mask_group_97ddf3d5-dd56-4218-80dd-4c12dd719ed5.png?v=1744384378\u0026width=500", 4370 "sameAs": ["https://www.facebook.com/fittes/","https://www.instagram.com/fittes/","https://www.youtube.com/channel/UC6Z3b0jfeKE3KaOuTxUrEog/featured","https://www.tiktok.com/@fittesofficial","https://x.com/fittesco","https://ca.pinterest.com/fittesofficial/","https://www.linkedin.com/company/fittes/"] 4371 } 4372</script>
4372 4373
4373<script type="application/ld+json"> 4374 { 4375 "@context": "https://schema.org", 4376 "@type": "WebSite", 4377 "name": "Fittes ð", 4378 "publisher": { "@id": "https:\/\/fittes.ca#organization" }, 4379 "potentialAction": { 4380 "@type": "SearchAction", 4381 "target": "https:\/\/fittes.ca\/search?q={search_term_string}", 4382 "query-input": "required name=search_term_string" 4383 }, 4384 "url": "https:\/\/fittes.ca" 4385 } 4386 </script>
4386<script> 4387 document.addEventListener('DOMContentLoaded', () => { 4388 const search = document.querySelector('predictive-search'); 4389 if (!search) return; 4390 4391 const input = search.querySelector('.field__input'); 4392 const panel = search.querySelector('.predictive-search'); 4393 4394 if (input) { 4395 input.addEventListener('focus', () => { 4396 search.setAttribute('open', 'true'); 4397 }); 4398 } 4399 4400 // Keep the input focused while interacting with results, 4401 // so blur doesn't destroy the link before the click lands. 4402 if (panel) { 4403 panel.addEventListener('mousedown', (event) => { 4404 event.preventDefault(); 4405 }); 4406 } 4407 4408 // Close only when focus genuinely leaves the whole component. 4409 search.addEventListener('focusout', (event) => { 4410 if (!search.contains(event.relatedTarget)) { 4411 search.removeAttribute('open'); 4412 } 4413 }); 4414 }); 4415</script>
4415 4416 4417<style> 4418@media (max-width: 989px) { 4419 #shopify-section-sections--28630589604210__header { 4420 /* Space between the hamburger glyph and the logo. ADJUST this one value. */ 4421 --hdr-mobile-logo-gap: 1.2rem; 4422 } 4423 4424 /* hamburger | logo | icons. The logo hugs the hamburger at every width below 4425 990px regardless of the "mobile logo position" theme setting; the icons 4426 column sizes to its content and stays right-aligned. */ 4427 #shopify-section-sections--28630589604210__header .header { 4428 grid-template-columns: auto 1fr auto !important; 4429 } 4430 #shopify-section-sections--28630589604210__header .header__heading, 4431 #shopify-section-sections--28630589604210__header .header__heading-link { 4432 justify-self: start !important; 4433 text-align: left !important; 4434 } 4435 4436 /* The hamburger's 4.4rem tap box extends 1rem past its glyph and the logo 4437 link has 0.75rem of padding, so the margin is the desired gap minus both. 4438 Applied to the link only (the homepage wraps it in an h1) so the offset 4439 is identical on every page. */ 4440 #shopify-section-sections--28630589604210__header .header__heading { 4441 margin-left: 0 !important; 4442 } 4443 #shopify-section-sections--28630589604210__header .header__heading-link { 4444 margin-left: calc(var(--hdr-mobile-logo-gap) - 1.75rem) !important; 4445 } 4446 #shopify-section-sections--28630589604210__header .header__heading-logo-wrapper { 4447 margin-left: 0 !important; 4448 } 4449} 4450@media (min-width: 990px) { 4451 .header__heading, 4452 .header__heading-link { 4453 flex: 0 0 60px !important; 4454 } 4455 4456 .header__heading-logo, 4457 .header__heading-logo img { 4458 width: 60px !important; 4459 min-width: 60px !important; 4460 max-width: 60px !important; 4461 height: auto !important; 4462 object-fit: contain; 4463 } 4464} 4465</style> 4466
4467<script> 4468(function () { 4469 // Survives inside the bfcache snapshot; true only on pages 4470 // where a cart mutation occurred (i.e., drawer likely open) 4471 let drawerTainted = false; 4472 4473 async function syncHeaderCart() { 4474 try { 4475 const cart = await (await fetch('/cart.js', { cache: 'no-store' })).json(); 4476 const bubbleLink = document.getElementById('cart-icon-bubble'); 4477 if (!bubbleLink) return; 4478 4479 let bubble = bubbleLink.querySelector('.cart-count-bubble'); 4480 if (cart.item_count > 0) { 4481 if (!bubble) { 4482 bubble = document.createElement('div'); 4483 bubble.className = 'cart-count-bubble'; 4484 bubbleLink.appendChild(bubble); 4485 } 4486 bubble.innerHTML = 4487 (cart.item_count < 100 ? `<span aria-hidden="true">${cart.item_count}</span>` : '') + 4488 `<span class="visually-hidden">${cart.item_count} items</span>`; 4489 } else if (bubble) { 4490 bubble.remove(); 4491 } 4492 } catch (e) { 4493 console.warn('Cart sync failed', e); 4494 } 4495 } 4496 4497 // Intercept all cart mutations, irrespective of originating script 4498 const CART_ENDPOINTS = /\/cart\/(add|change|update|clear)(\.js)?/; 4499 4500 const origFetch = window.fetch; 4501 window.fetch = async function (...args) { 4502 const res = await origFetch.apply(this, args); 4503 const url = args[0] instanceof Request ? args[0].url : String(args[0]); 4504 if (CART_ENDPOINTS.test(url) && res.ok) { 4505 drawerTainted = true; 4506 syncHeaderCart(); 4507 } 4508 return res; 4509 }; 4510 4511 const origOpen = XMLHttpRequest.prototype.open; 4512 XMLHttpRequest.prototype.open = function (method, url, ...rest) { 4513 if (CART_ENDPOINTS.test(url)) { 4514 this.addEventListener('load', () => { 4515 if (this.status >= 200 && this.status < 300) { 4516 drawerTainted = true; 4517 syncHeaderCart(); 4518 } 4519 }); 4520 }
4521 return origOpen.call(this, method, url, ...rest); 4522 }; 4523 4524 // Handle restoration from the back/forward cache 4525 window.addEventListener('pageshow', (event) => { 4526 if (!event.persisted) return; 4527 4528 if (drawerTainted) { 4529 // This snapshot was frozen with the cart drawer open (a cart 4530 // mutation occurred on this page). The drawer lives in a shadow 4531 // DOM / iframe we cannot reach, so discard the snapshot and 4532 // serve a fresh render â drawer closed, counts correct. 4533 location.reload(); 4534 return; 4535 } 4536 4537 // Clean snapshot: merely re-synchronize the header bubble 4538 syncHeaderCart(); 4539 }); 4540})(); 4541</script>
4541 4542 4543 4544</div> 4545<!-- END sections: header-group --> 4546 4547 4548 4549 4550 4551 4552 <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1"> 4553 <section id="shopify-section-template--28630587998578__carousel_hb_DVpczF" class="shopify-section section-banner-carousel"> 4554 4555<div class="banner-carousel carousel-loading" 4556 id="banner-carousel" 4557 role="region" 4558 aria-roledescription="carousel" 4559 aria-label="Homepage banner" 4560 data-autoplay="true" 4561 data-mobile-height="450px" 4562 data-desktop-height="450px" 4563 data-slide-count="3"> 4564 4565 <!-- Slides Container --> 4566 <div class="carousel-slides"> 4567 4568 4569 <div class="carousel-slide" data-slide-id="1" aria-roledescription="slide" aria-label="Slide 1 of 3" > 4570 4571 4572 <picture> 4573 4574 <source media="(min-width: 768px)" 4575 srcset="//fittes.ca/cdn/shop/files/Clip-in-exhuast-hero.webp?v=1790082003&width=800 800w, 4576 //fittes.ca/cdn/shop/files/Clip-in-exhuast-hero.webp?v=1790082003&width=1000 1000w, 4577 //fittes.ca/cdn/shop/files/Clip-in-exhuast-hero.webp?v=1790082003&width=1200 1200w, 4578 //fittes.ca/cdn/shop/files/Clip-in-exhuast-hero.webp?v=1790082003&width=1400 1400w, 4579 //fittes.ca/cdn/shop/files/Clip-in-exhuast-hero.webp?v=1790082003&width=1600 1600w, 4580 //fittes.ca/cdn/shop/files/Clip-in-exhuast-hero.webp?v=1790082003&width=1920 1920w" 4581 sizes="100vw" 4582 type="image/webp"> 4583 4584 4585 4586 <img src="//fittes.ca/cdn/shop/files/mobile-hero-clip-in.webp?v=1790019469&width=750" 4587 srcset="//fittes.ca/cdn/shop/files/mobile-hero-clip-in.webp?v=1790019469&width=375 375w, 4588 //fittes.ca/cdn/shop/files/mobile-hero-clip-in.webp?v=1790019469&width=450 450w, 4589 //fittes.ca/cdn/shop/files/mobile-hero-clip-in.webp?v=1790019469&width=550 550w, 4590 //fittes.ca/cdn/shop/files/mobile-hero-clip-in.webp?v=1790019469&width=650 650w, 4591 //fittes.ca/cdn/shop/files/mobile-hero-clip-in.webp?v=1790019469&width=750 750w" 4592 sizes="100vw" 4593 alt="Banner image" 4594 width="1007" 4595 height="1528" 4596 loading="eager" fetchpriority="high" 4597 decoding="async"> 4598 4599 </picture> 4600 4601 4602 4603 4604 <div class="carousel-text-overlays"> 4605 4606 4607 <h2 class="carousel-text carousel-main-title" 4608 data-secondary-color="#ffd700" 4609 style=" 4610 --desktop-x: 8%; 4611 --desktop-y: 35%; 4612 --desktop-size: 70px; 4613 --mobile-x: 6%; 4614 --mobile-y: 18%; 4615 --mobile-size: 42px; 4616 color: #1f1f1f; 4617 "> 4618 PRACTICALLY 4619INVISIBLE 4620 </h2> 4621 4622 4623 4624 4625 <p class="carousel-text carousel-subtext-1" 4626 style=" 4627 --desktop-x: 8%; 4628 --desktop-y: 64%; 4629 --desktop-size: 24px; 4630 --mobile-x: 6%; 4631 --mobile-y: 100%; 4632 --mobile-size: 18px; 4633 color: #1f1f1f; 4634 4635 "> 4636 Customizable to any ceiling 4637 </p> 4638 4639 4640 4641 <p class="carousel-text carousel-subtext-2" 4642 style=" 4643 --desktop-x: 8%; 4644 --desktop-y: 17%; 4645 --desktop-size: 22px; 4646 --mobile-x: 6%; 4647 --mobile-y: 7%; 4648 --mobile-size: 16px; 4649 color: #e73c3e; 4650 4651 "> 4652 MINIMALIST FAN COVER THAT DISAPPEARS 4653 </p> 4654 4655 </div> 4656 4657 4658 <div class="carousel-slide-content" 4659 style=" 4660 --button-desktop-x: 8%; 4661 --button-desktop-y: 82%; 4662 --button-mobile-x: 6%; 4663 --button-mobile-y: 44%; 4664 "> 4665 <a href="/pages/clip-in-exhaust" 4666 class="carousel-button" 4667 style=" 4668 background-color: #e73c3e; 4669 color: #ffffff; 4670 --btn-desktop-size: 16px; 4671 --btn-mobile-size: 14px; 4672 --btn-padding-v: 12px; 4673 --btn-padding-h: 32px; 4674 "> 4675 LEARN MORE 4676 </a> 4677 </div> 4678 4679 4680 </div> 4681 4682 4683 4684 4685 4686 <div class="carousel-slide carousel-slide--rotating" data-sli
4686de-id="2" aria-roledescription="slide" aria-label="Slide 2 of 3" > 4687 4688 4689 <picture> 4690 4691 <source media="(min-width: 768px)" 4692 srcset="//fittes.ca/cdn/shop/files/homepage_gbg.webp?v=1783017350&width=800 800w, 4693 //fittes.ca/cdn/shop/files/homepage_gbg.webp?v=1783017350&width=1000 1000w, 4694 //fittes.ca/cdn/shop/files/homepage_gbg.webp?v=1783017350&width=1200 1200w, 4695 //fittes.ca/cdn/shop/files/homepage_gbg.webp?v=1783017350&width=1400 1400w, 4696 //fittes.ca/cdn/shop/files/homepage_gbg.webp?v=1783017350&width=1600 1600w, 4697 //fittes.ca/cdn/shop/files/homepage_gbg.webp?v=1783017350&width=1920 1920w" 4698 sizes="100vw" 4699 type="image/webp"> 4700 4701 4702 4703 <img src="//fittes.ca/cdn/shop/files/homepage_GG_mobile.webp?v=1783017385&width=750" 4704 srcset="//fittes.ca/cdn/shop/files/homepage_GG_mobile.webp?v=1783017385&width=375 375w, 4705 //fittes.ca/cdn/shop/files/homepage_GG_mobile.webp?v=1783017385&width=450 450w, 4706 //fittes.ca/cdn/shop/files/homepage_GG_mobile.webp?v=1783017385&width=550 550w, 4707 //fittes.ca/cdn/shop/files/homepage_GG_mobile.webp?v=1783017385&width=650 650w, 4708 //fittes.ca/cdn/shop/files/homepage_GG_mobile.webp?v=1783017385&width=750 750w" 4709 sizes="100vw" 4710 alt="Banner image" 4711 width="1000" 4712 height="1350" 4713 loading="lazy" fetchpriority="low" 4714 decoding="async"> 4715 4716 </picture> 4717 4718 4719 4720 4721 <div class="carousel-text-overlays"> 4722 4723 4724 <h2 class="carousel-text carousel-main-title carousel-rotating-title" 4725 data-rotation-speed="1500" 4726 style=" 4727 --desktop-x: 9%; 4728 --desktop-y: 41%; 4729 --desktop-size: 98px; 4730 --mobile-x: 8%; 4731 --mobile-y: 35%; 4732 --mobile-size: 64px; 4733 font-weight: 800; 4734 letter-spacing: -0.05em; 4735 font-style: italic; 4736 "> 4737 <span class="rotating-text is-visible" style="color: #ffffff;">GOODBYE 4738GRILLES</span> 4739 <span class="rotating-text" aria-hidden="true" style="color: #ffff00;">HELLO, 4740SEXY VENTS</span> 4741 </h2> 4742 4743 4744 4745 4746 <p class="carousel-text carousel-subtext-1" 4747 style=" 4748 --desktop-x: 9%; 4749 --desktop-y: 64%; 4750 --desktop-size: 28px; 4751 --mobile-x: 9%; 4752 --mobile-y: 56%; 4753 --mobile-size: 22px; 4754 color: #ffffff; 4755 font-style: italic; 4756 "> 4757 Explore Our Range 4758 </p> 4759 4760 4761 4762 </div> 4763 4764 4765 <div class="carousel-slide-content" 4766 style=" 4767 --button-desktop-x: 9%; 4768 --button-desktop-y: 81%; 4769 --button-mobile-x: 9%; 4770 --button-mobile-y: 69%; 4771 "> 4772 <a href="/collections/vents" 4773 class="carousel-button" 4774 style=" 4775 background-color: #ffffff; 4776 color: #e73c3e; 4777 --btn-desktop-size: 20px; 4778 --btn-mobile-size: 14px; 4779 --btn-padding-v: 10px; 4780 --btn-padding-h: 30px; 4781 "> 4782 SHOP VENTS 4783 </a> 4784 </div> 4785 4786 4787 </div> 4788 4789 4790 4791 4792 4793 <div class="carousel-slide" data-slide-id="3" aria-roledescription="slide" aria-label="Slide 3 of 3" > 4794 4795 4796 <picture> 4797 4798 <source media="(min-width: 768px)" 4799 srcset="//fittes.ca/cdn/shop/files/MAINHERO_WALLVENT_FITTES.jpg?format=webp&v=1763996504&width=800 800w, 4800 //fittes.ca/cdn/shop/files/MAINHERO_WALLVENT_FITTES.jpg?format=webp&v=1763996504&width=1000 1000w, 4801 //fittes.ca/cdn/shop/files/MAINHERO_WALLVENT_FITTES.jpg?format=webp&v=1763996504&width=1200 1200w, 4802 //fittes.ca/cdn/shop/files/MAINHERO_WALLVENT_FITTES.jpg?format=webp&v=1763996504&width=1400 1400w, 4803 //fittes.ca/cdn/shop/files/MAINHERO_WALLVENT_FITTES.jpg?format=webp&v=1763996504&width=1600 1600w, 4804 //fittes.ca/cdn/shop/files/MAINHERO_WALLVENT_FITTES.jpg?format=webp&v=1763996504&width=1920 1920w" 4805 sizes="100vw" 4806 type="image/webp"> 4807 4808 4809 4810 <img src="//fittes.ca/cdn/shop/files/MOBILE_HERO_BANNER_WALL_VENTS_1.webp?v=1771859922&width=750" 4811 srcset="//fittes.ca/cdn/shop/files/MOBILE_HERO_BANNER_WALL_VENTS_1.webp?v=1771859922&width=375 375w, 4812 //fittes.ca/cdn/shop/files/MOBILE_HERO_BANNER_WALL_VENTS_1.webp?v=1771859922&width=450 450w, 4813 //fittes.ca/cdn/shop/files/MOBILE_HERO_BANNER_WALL_VENTS_1.webp?v=1771859922&width=550 550w, 4814 //fittes.ca/cdn/shop/files/MOBILE_HERO_BANNER_WALL_VENTS_1.webp?v=1771859922&width=650 650w, 4815 //fittes.ca/cdn/shop/files/MOBILE_HERO_BANNER_WALL_VENTS_1.webp?v=1771859922&width=750 750w" 4816 sizes="100vw" 4817 alt="Banner image" 4818 width="1531" 4819 height="1937" 4820 loading="lazy" fetchpriority="low" 4821 decoding="async"> 4822 4823 </picture> 4824 4825 4826 4827 4828 <div class="carousel-text-overlays"> 4829 4830 4831 <h2 class="carousel-text carousel-main-title" 4832 data-secondary-color="#ffd700" 4833 style=" 4834 --desktop-x: 10%; 4835 --desktop-y: 34%; 4836 --desktop-size: 60px; 4837 --mobile-x: 4%; 4838 --mobile-y: 29%; 4839 --mobile-size: 30px; 4840 color: #ffffff; 4841 "> 4842 Fittes makes it easy to 4843upgrade your space 4844 </h2> 4845 4846 4847 4848 4849 4850 4851 <p class="carousel-text carousel-subtext-2" 4852 style=" 4853 --desktop-x: 10%; 4854 --desktop-y: 20%; 4855 --desktop-size: 20px; 4856 --mobile-x: 4%; 4857 --mobile-y: 19%; 4858 --mobile-size: 16px; 4859 color: #ffffff; 4860 4861 "> 4862 Small Detail. Huge Impact. 4863 </p> 4864 4865 </div> 4866 4867 4868 <div class="carousel-slide-content" 4869 style=" 4870 --button-desktop-x: 10%; 4871 --button-desktop-y: 69%; 4872 --button-mobile-x: 4%; 4873 --button-mobile-y: 51%; 4874 "> 4875 <a href="/collections/wall-vent" 4876 class="carousel-button" 4877 style=" 4878 background-color: #e73c3e; 4879 color: #ffffff; 4880 --btn-desktop-size: 16px; 4881 --btn-mobile-size: 14px; 4882 --btn-padding-v: 12px; 4883 --btn-padding-h: 32px; 4884 "> 4885 SHOP WALL VENTS 4886 </a> 4887 </div> 4888 4889 4890 </div> 4891 4892 4893 4894 4895 </div> 4896 4897 4898 <button class="carousel-arrow carousel-prev" aria-label="Previous slide"> 4899 <svg width="32" height="32" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 4900 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M15 19l-7-7 7-7" /> 4901 </svg> 4902 </button> 4903 4904 <button class="carousel-arrow carousel-next" aria-label="Next slide"> 4905 <svg width="32" height="32" fill="none" stroke="currentColor" viewBox="0 0 24 24"> 4906 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 5l7 7-7 7" /> 4907 </svg> 4908 </button> 4909 4910 <div class="carousel-bottom-bar"> 4911 <div class="carousel-dots"> 4912 4913 <button class="carousel-dot active" 4914 aria-label="Go to slide 1" 4915 aria-current="true"></button> 4916 4917 <button class="carousel-dot" 4918 aria-label="Go to slide 2" 4919 ></button> 4920 4921 <button class="carousel-dot" 4922 aria-label="Go to slide 3" 4923 ></button> 4924 4925 </div> 4926 </div> 4927 4928</div> 4929 4930<style> 4931 .banner-carousel { 4932 position: relative; 4933 width: 100%; 4934 height: calc(450px + 40px); 4935 overflow: hidden; 4936 background: #000; 4937 contain: layout style paint; 4938 } 4939 4940 .banner-carousel.single-slide { 4941 height: 450px; 4942 } 4943 4944 @media (min-width: 768px) { 4945 .banner-carousel { 4946 height: calc(450px + 40px); 4947 } 4948 .banner-carousel.single-slide { 4949 height: 450px; 4950 } 4951 } 4952 4953 .carousel-slides { 4954 position: relative; 4955 height: calc(100% - 40px); 4956 width: 100%; 4957 } 4958 4959 .banner-carousel.single-slide .carousel-slides { 4960 height: 100%; 4961 } 4962 4963 .carousel-slide { 4964 position: absolute; 4965 top: 0; 4966 left: 0; 4967 width: 100%; 4968 height: 100%; 4969 opacity: 0; 4970 transition: opacity 1000ms cubic-bezier(0.25, 0.1, 0.25, 1); 4971 pointer-events: none; 4972 contain: layout style paint; 4973 } 4974 4975 .carousel-loading .carousel-slide:first-child, 4976 .banner-carousel.single-slide .carousel-slide { 4977 opacity: 1; 4978 pointer-events: auto; 4979 } 4980 4981 .carousel-slide.active { 4982 opacity: 1; 4983 pointer-events: auto; 4984 } 4985 4986 .carousel-slide.active, 4987 .carousel-slide.transitioning { 4988 will-change: opacity; 4989 } 4990 4991 .carousel-slide-link { 4992 display: block; 4993 width: 100%; 4994 height: 100%; 4995 text-decoration: none; 4996 position: absolute; 4997 top: 0; 4998 left: 0; 4999 z-index: 1; 5000 } 5001 5002 .carousel-slide picture { 5003 display: block; 5004 width: 100%; 5005 height: 100%; 5006 } 5007 5008 .carousel-slide picture img { 5009 width: 100%; 5010 height: 100%; 5011 object-fit: cover; 5012 display: block; 5013 } 5014 5015/* ââ Overlay image: independent fixed px for mobile & desktop ââ */ 5016 .carousel-overlay-image { 5017 position: absolute; 5018 transform: translateY(-50%); 5019 z-index: 3; 5020 pointer-events: none; 5021 left: var(--overlay-mobile-x); 5022 top: var(--overlay-mobile-y); 5023 width: var(--overlay-mobile-width); 5024 } 5025 5026 @media (min-width: 768px) { 5027 .carousel-overlay-image { 5028 left: var(--overlay-desktop-x); 5029 top: var(--overlay-desktop-y); 5030 width: var(--overlay-desktop-width); 5031 } 5032 } 5033 5034 .carousel-overlay-image img { 5035 width: 100%; 5036 height: auto; 5037 display: block; 5038 object-fit: contain; 5039 } 5040 5041 .carousel-text-overlays { 5042 position: absolute; 5043 top: 0; 5044 left: 0; 5045 width: 100%; 5046 height: 100%; 5047 pointer-events: none; 5048 z-index: 5; 5049 } 5050 5051 .carousel-text { 5052 position: absolute; 5053 transform: translateY(-50%); 5054 margin: 0; 5055 padding: 0; 5056 line-height: 1.2; 5057 text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); 5058 white-space: pre-line; 5059 text-align: left; 5060 left: var(--mobile-x); 5061 top: var(--mobile-y); 5062 font-size: var(--mobile-size); 5063 } 5064 5065 @media (min-width: 768px) { 5066 .carousel-text { 5067 left: var(--desktop-x); 5068 top: var(--desktop-y); 5069 font-size: var(--desktop-size); 5070 } 5071 } 5072 5073 @media (min-width: 768px) and (max-width: 1199px) { 5074 .carousel-text { 5075 font-size: calc(var(--desktop-size) * 0.85); 5076 } 5077 } 5078 5079 @media (min-width: 1921px) { 5080 .carousel-text { 5081 font-size: calc(var(--desktop-size) * 1.1); 5082 } 5083 } 5084 5085 .carousel-main-title { 5086 font-family: 'Outfit', sans-serif; 5087 font-weight: 700; 5088 font-display: swap; 5089 } 5090 5091 .carousel-main-title .quoted-text { 5092 display: inline; 5093 } 5094 5095 /* ââ Rotating title: stacked, cross-fading text layers ââ */ 5096 .carousel-rotating-title { 5097 display: grid; 5098 /* 0.95 halves the visible gap between wrapped lines relative to the 5099 base 1.2 used elsewhere; single-line titles are unaffected. */ 5100 line-height: 0.95; 5101 } 5102 5103 .carousel-rotating-title .rotating-text { 5104 grid-area: 1 / 1; 5105 opacity: 0; 5106 transition: opacity 0.6s ease; 5107 white-space: pre-line; 5108 } 5109 5110 .carousel-rotating-title .rotating-text.is-visible { 5111 opacity: 1; 5112 } 5113 5114 @media (prefers-reduced-motion: reduce) { 5115 .carousel-rotating-title .rotating-text { 5116 transition: none; 5117 } 5118 } 5119 5120 .carousel-subtext-1 { 5121 font-family: 'Lora', serif; 5122 font-weight: 400; 5123 font-display: swap; 5124 } 5125 5126 .carousel-subtext-2 { 5127 font-family: 'Outfit', sans-serif; 5128 font-weight: 500; 5129 font-display: swap; 5130 text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); 5131 } 5132 5133 /* ââ Rotating slide: lighter text weights ââ 5134 The title's weight comes from the schema range (default now 600); 5135 these rules thin the two subtexts relative to the base 400/500 5136 used on the static slide. Weights render only if the theme loads 5137 them for the respective fonts. ââ */ 5138 .carousel-slide--rotating .carousel-subtext-1 { 5139 font-weight: 300; 5140 } 5141 5142 .carousel-slide--rotating .carousel-subtext-2 { 5143 font-weight: 400; 5144 } 5145 5146 .carousel-top-text { 5147 font-family: 'Outfit', sans-serif; 5148 font-weight: 700; 5149 font-style: italic; 5150 text-transform: uppercase; 5151 letter-spacing: 0.02em; 5152 font-display: swap; 5153 } 5154 5155 /* ââ Triptych text colours: resolved per breakpoint from the 5156 desktop/mobile variables set inline on each element. The active 5157 colour is assigned in the stylesheet (not inline) so the media 5158 query can switch it. ââ */ 5159 .carousel-slide--triptych .carousel-text { 5160 color: var(--text-color-mobile, #ffffff); 5161 --quote-color: var(--quote-color-mobile, #ffffff); 5162 } 5163 5164 @media (min-width: 768px) { 5165 .carousel-slide--triptych .carousel-text { 5166 color: var(--text-color-desktop, #ffffff); 5167 --quote-color: var(--quote-color-desktop, #ffffff); 5168 } 5169 } 5170 5171 /* ââ Triptych layout: three panels desktop, video-only mobile ââ 5172 Grid tracks are defined on the container so panel widths cannot 5173 be collapsed by theme-level CSS acting on the children. ââ */ 5174 .triptych-panels { 5175 display: grid; 5176 grid-template-columns: minmax(0, 1fr); /* mobile: middle panel only */ 5177 grid-template-rows: 100%; 5178 width: 100%; 5179 height: 100%; 5180 } 5181 5182 .triptych-panel { 5183 position: relative; 5184 height: 100%; 5185 width: 100%; 5186 min-width: 0; 5187 overflow: hidden; 5188 } 5189 5190 .triptych-left, 5191 .triptych-right { 5192 display: none; 5193 } 5194 5195 .triptych-middle { 5196 grid-column: 1; 5197 grid-row: 1; 5198 background: #111; 5199 } 5200 5201 @media (min-width: 768px) { 5202 .triptych-panels { 5203 grid-template-columns: 5204 var(--left-width-desktop, 33%) 5205 var(--middle-width-desktop, 34%) 5206 minmax(0, 1fr); 5207 /* Fail-safe: the container itself is painted the left-panel colour, 5208 so track 1 shows it even if the left div is suppressed by theme CSS. */ 5209 background-color: var(--left-bg, #e35d54); 5210 } 5211 .triptych-left { 5212 display: block; 5213 grid-column: 1; 5214 grid-row: 1; 5215 background-color: var(--left-bg, #e35d54); 5216 } 5217 .triptych-middle { 5218 grid-column: 2; 5219 grid-row: 1; 5220 } 5221 .triptych-right { 5222 display: block; 5223 grid-column: 3; 5224 grid-row: 1; 5225 } 5226 } 5227 5228 .triptych-video-wrap { 5229 position: absolute; 5230 inset: 0; 5231 } 5232 5233 .triptych-fallback, 5234 .triptych-video { 5235 position: absolute; 5236 inset: 0; 5237 width: 100%; 5238 height: 100%; 5239 object-fit: cover; 5240 display: block; 5241 } 5242 5243 .triptych-video { 5244 opacity: 0; 5245 transition: opacity 0.5s ease; 5246 } 5247 5248 .triptych-video-wrap.video-ready .triptych-video { 5249 opacity: 1; 5250 } 5251 5252 .triptych-right img { 5253 position: absolute; 5254 inset: 0; 5255 width: 100%; 5256 height: 100%; 5257 object-fit: cover; 5258 display: block; 5259 } 5260 5261 .carousel-slide-content { 5262 position: absolute; 5263 transform: translateY(-50%); 5264 z-index: 100; 5265 left: var(--button-mobile-x); 5266 top: var(--button-mobile-y); 5267 } 5268 5269 @media (min-width: 768px) { 5270 .carousel-slide-content { 5271 left: var(--button
5271-desktop-x); 5272 top: var(--button-desktop-y); 5273 } 5274 } 5275 5276 /* ââ Button: sizes driven by CSS vars from schema ââ */ 5277 .carousel-button { 5278 display: inline-block; 5279 padding: var(--btn-padding-v) var(--btn-padding-h); 5280 background: #fff; 5281 color: #1a1a1a; 5282 text-decoration: none; 5283 border-radius: 4px; 5284 font-weight: 720; 5285 font-size: var(--btn-mobile-size); 5286 transition: transform 0.2s ease, box-shadow 0.2s ease; 5287 box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); 5288 white-space: nowrap; 5289 } 5290 5291 @media (min-width: 768px) { 5292 .carousel-button { 5293 font-size: var(--btn-desktop-size); 5294 } 5295 } 5296 5297 @media (min-width: 768px) and (max-width: 1199px) { 5298 .carousel-button { 5299 font-size: calc(var(--btn-desktop-size) * 0.85); 5300 padding: calc(var(--btn-padding-v) * 0.85) calc(var(--btn-padding-h) * 0.85); 5301 } 5302 } 5303 5304 @media (min-width: 1921px) { 5305 .carousel-button { 5306 font-size: calc(var(--btn-desktop-size) * 1.1); 5307 padding: calc(var(--btn-padding-v) * 1.1) calc(var(--btn-padding-h) * 1.1); 5308 } 5309 } 5310 5311 @media (hover: hover) { 5312 .carousel-button:hover { 5313 transform: translateY(-2px); 5314 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25); 5315 } 5316 } 5317 5318 .carousel-arrow { 5319 position: absolute; 5320 top: 50%; 5321 transform: translateY(-50%); 5322 z-index: 10; 5323 background: transparent; 5324 color: #fff; 5325 border: none; 5326 padding: 0; 5327 width: 32px; 5328 height: 32px; 5329 display: none; 5330 align-items: center; 5331 justify-content: center; 5332 cursor: pointer; 5333 transition: transform 0.2s ease; 5334 filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.5)); 5335 } 5336 5337 @media (min-width: 768px) { 5338 .carousel-arrow { 5339 display: flex; 5340 } 5341 } 5342 5343 @media (hover: hover) { 5344 .carousel-arrow:hover { 5345 transform: translateY(-50%) scale(1.3); 5346 } 5347 } 5348 5349 .carousel-arrow:focus { 5350 outline: none; 5351 } 5352 5353 .carousel-arrow:focus-visible { 5354 outline: 2px solid #fff; 5355 outline-offset: 2px; 5356 } 5357 5358 .carousel-prev { left: 20px; } 5359 .carousel-next { right: 20px; } 5360 5361 .carousel-bottom-bar { 5362 position: absolute; 5363 bottom: 0; 5364 left: 0; 5365 width: 100%; 5366 height: 40px; 5367 background: #ffffff; 5368 display: flex; 5369 align-items: center; 5370 justify-content: center; 5371 z-index: 10; 5372 } 5373 5374 .carousel-dots { 5375 display: flex; 5376 gap: 8px; 5377 align-items: center; 5378 } 5379 5380 .carousel-dot { 5381 width: 24px; 5382 height: 3px; 5383 border-radius: 0; 5384 background: #9ca3af; 5385 border: none; 5386 cursor: pointer; 5387 transition: background-color 0.3s ease; 5388 padding: 0; 5389 } 5390 5391 @media (min-width: 768px) { 5392 .carousel-dot { 5393 width: 48px; 5394 } 5395 } 5396 5397 @media (hover: hover) { 5398 .carousel-dot:hover { 5399 background: #6b7280; 5400 } 5401 } 5402 5403 .carousel-dot.active { 5404 background: #1a1a1a; 5405 } 5406 5407 .carousel-dot:focus { 5408 outline: none; 5409 } 5410 5411 .carousel-dot:focus-visible { 5412 outline: 2px solid #1a1a1a; 5413 outline-offset: 2px; 5414 } 5415</style> 5416
5417<script> 5418(function() { 5419 'use strict'; 5420 5421 const carousel = document.getElementById('banner-carousel'); 5422 if (!carousel) return; 5423 5424 const slides = carousel.querySelectorAll('.carousel-slide'); 5425 const slideCount = slides.length; 5426 if (slideCount === 0) return; 5427 5428 const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 5429 5430 let currentSlide = 0; 5431 let carouselVisible = false; 5432 let autoplayTimer = null; 5433 5434 /* ââ Quoted-text secondary colour (static titles only) ââ */ 5435 function processQuotedText() { 5436 const titles = carousel.querySelectorAll('.carousel-main-title:not(.carousel-rotating-title)'); 5437 titles.forEach(title => { 5438 const secondaryColor = title.getAttribute('data-secondary-color'); 5439 if (!secondaryColor) return; 5440 const text = title.textContent; 5441 const parts = text.split(/("(?:[^"\\]|\\.)*")/g); 5442 title.textContent = ''; 5443 parts.forEach(part => { 5444 if (part.startsWith('"') && part.endsWith('"')) { 5445 const span = document.createElement('span'); 5446 span.className = 'quoted-text'; 5447 span.style.color = secondaryColor; 5448 span.textContent = part.slice(1, -1); 5449 title.appendChild(span); 5450 } else if (part) { 5451 title.appendChild(document.createTextNode(part)); 5452 } 5453 }); 5454 }); 5455 } 5456 5457 /* ââ Rotating titles: interval per title, active slide only ââ */ 5458 const rotationTimers = new Map(); 5459 5460 function startRotation(slide) { 5461 slide.querySelectorAll('.carousel-rotating-title').forEach(title => { 5462 if (rotationTimers.has(title)) return; 5463 const spans = title.querySelectorAll('.rotating-text'); 5464 if (spans.length < 2) return; 5465 const speed = Math.max(parseInt(title.dataset.rotationSpeed, 10) || 3500, 1000); 5466 const timer = setInterval(() => { 5467 spans.forEach(span => { 5468 const visible = span.classList.toggle('is-visible'); 5469 span.setAttribute('aria-hidden', !visible); 5470 }); 5471 }, speed); 5472 rotationTimers.set(title, timer); 5473 }); 5474 } 5475 5476 function stopRotation(slide) { 5477 slide.querySelectorAll('.carousel-rotating-title').forEach(title => { 5478 const timer = rotationTimers.get(title); 5479 if (timer) { 5480 clearInterval(timer); 5481 rotationTimers.delete(title); 5482 } 5483 }); 5484 } 5485 5486 /* ââ Triptych videos: deferred load, play only when active + visible ââ */ 5487 function loadVideo(video) { 5488 if (video.dataset.loaded) return; 5489 video.dataset.loaded = 'true'; 5490 video.querySelectorAll('source[data-src]').forEach(source => { 5491 source.src = source.dataset.src; 5492 }); 5493 video.addEventListener('playing', () => { 5494 const wrap = video.closest('.triptych-video-wrap'); 5495 if (wrap) wrap.classList.add('video-ready'); 5496 }, { once: true }); 5497 video.addEventListener('error', () => { 5498 const wrap = video.closest('.triptych-video-wrap'); 5499 if (wrap) wrap.classList.remove('video-ready'); 5500 }); 5501 video.load(); 5502 } 5503 5504 function playSlideVideo(slide) { 5505 const video = slide.querySelector('.triptych-video'); 5506 if (!video || prefersReducedMotion) return; 5507 loadVideo(video); 5508 const attempt = video.play(); 5509 if (attempt && typeof attempt.catch === 'function') { 5510 attempt.catch(() => { /* autoplay blocked â fallback image remains visible */ }); 5511 } 5512 } 5513 5514 function pauseSlideVideo(slide) { 5515 const video = slide.querySelector('.triptych-video'); 5516 if (video && !video.paused) video.pause(); 5517 } 5518 5519 function activateSlideMedia(slide) { 5520 playSlideVideo(slide); 5521 startRotation(slide); 5522 } 5523 5524 function deactivateSlideMedia(slide) { 5525 pauseSlideVideo(slide); 5526 stopRotation(slide); 5527 } 5528 5529 function pauseAllMedia() { 5530 slides.forEach(deactivateSlideMedia); 5531 } 5532 5533 processQuotedText(); 5534 5535 /* ââ Visibility management: no media work while off-screen or tab hidden ââ */ 5536 let keyboardListenerActive = false; 5537 5538 const observer = new IntersectionObserver((entries) => { 5539 entries.forEach(entry => { 5540 carouselVisible = entry.isIntersecting; 5541 if (entry.isIntersecting) { 5542 activateSlideMedia(slides[currentSlide]); 5543 if (slideCount > 1 && !keyboardListenerActive) { 5544 window.addEventListener('keydown', handleKeyDown); 5545 keyboardListenerActive = true; 5546 } 5547 } else { 5548 pauseAllMedia(); 5549 if (keyboardListenerActive) { 5550 window.removeEventListener('keydown', handleKeyDown); 5551 keyboardListenerActive = false;
5552 } 5553 } 5554 }); 5555 }, { threshold: 0.5 }); 5556 5557 observer.observe(carousel); 5558 5559 document.addEventListener('visibilitychange', () => { 5560 if (document.hidden) { 5561 pauseAllMedia(); 5562 } else if (carouselVisible) { 5563 activateSlideMedia(slides[currentSlide]); 5564 } 5565 }); 5566 5567 window.addEventListener('beforeunload', () => { 5568 if (autoplayTimer) clearTimeout(autoplayTimer); 5569 rotationTimers.forEach(timer => clearInterval(timer)); 5570 rotationTimers.clear(); 5571 observer.disconnect(); 5572 }); 5573 5574 /* ââ Single-slide mode: activate media, skip navigation ââ */ 5575 if (slideCount <= 1) { 5576 slides[0].classList.add('active'); 5577 return; 5578 } 5579 5580 carousel.classList.remove('carousel-loading'); 5581 5582 const dotsContainer = carousel.querySelector('.carousel-dots'); 5583 const prevButton = carousel.querySelector('.carousel-prev'); 5584 const nextButton = carousel.querySelector('.carousel-next'); 5585 const autoplay = carousel.dataset.autoplay === 'true'; 5586 5587 let hasInteracted = false; 5588 let touchStartX = 0; 5589 let touchEndX = 0; 5590 let isTransitioning = false; 5591 5592 const dots = carousel.querySelectorAll('.carousel-dot'); 5593 dots.forEach((dot, index) => { 5594 dot.addEventListener('click', () => goToSlide(index), { passive: true }); 5595 }); 5596 5597 function updateSlide(index) { 5598 if (isTransitioning) return; 5599 isTransitioning = true; 5600 const previousSlide = currentSlide; 5601 currentSlide = index; 5602 5603 deactivateSlideMedia(slides[previousSlide]); 5604 if (carouselVisible && !document.hidden) { 5605 activateSlideMedia(slides[currentSlide]); 5606 } 5607 5608 slides[previousSlide].classList.add('transitioning'); 5609 slides[currentSlide].classList.add('transitioning'); 5610 5611 requestAnimationFrame(() => { 5612 slides.forEach((slide, i) => { 5613 slide.classList.toggle('active', i === currentSlide); 5614 slide.setAttribute('aria-hidden', i !== currentSlide); 5615 }); 5616 dots.forEach((dot, i) => { 5617 dot.classList.toggle('active', i === currentSlide); 5618 dot.setAttribute('aria-current', i === currentSlide); 5619 }); 5620 }); 5621 5622 setTimeout(() => { 5623 slides[previousSlide].classList.remove('transitioning'); 5624 slides[currentSlide].classList.remove('transitioning'); 5625 isTransitioning = false; 5626 }, 1000); 5627 } 5628 5629 function startAutoplay() { 5630 if (!autoplay) return; 5631 const delay = hasInteracted 5632 ? 7500 5633 : 6000; 5634 if (autoplayTimer) clearTimeout(autoplayTimer); 5635 autoplayTimer = setTimeout(() => { 5636 updateSlide((currentSlide + 1) % slides.length); 5637 startAutoplay(); 5638 }, delay); 5639 } 5640 5641 function goToSlide(index) { 5642 if (index === currentSlide) return; 5643 hasInteracted = true; 5644 updateSlide(index); 5645 startAutoplay(); 5646 } 5647 5648 function nextSlide() { 5649 hasInteracted = true; 5650 updateSlide((currentSlide + 1) % slides.length); 5651 startAutoplay(); 5652 } 5653 5654 function prevSlide() { 5655 hasInteracted = true; 5656 updateSlide((currentSlide - 1 + slides.length) % slides.length); 5657 startAutoplay(); 5658 } 5659 5660 function handleTouchStart(e) { touchStartX = e.touches[0].clientX; } 5661 function handleTouchMove(e) { touchEndX = e.touches[0].clientX; } 5662 function handleTouchEnd() { 5663 if (!touchStartX || !touchEndX) return; 5664 const distance = touchStartX - touchEndX; 5665 if (Math.abs(distance) > 50) { 5666 distance > 0 ? nextSlide() : prevSlide(); 5667 } 5668 touchStartX = 0; 5669 touchEndX = 0; 5670 } 5671 5672 function handleKeyDown(e) { 5673 if (e.key === 'ArrowLeft') { e.preventDefault(); prevSlide(); } 5674 if (e.key === 'ArrowRight') { e.preventDefault(); nextSlide(); } 5675 } 5676 5677 if (prevButton && nextButton) { 5678 prevButton.addEventListener('click', prevSlide, { passive: true }); 5679 nextButton.addEventListener('click', nextSlide, { passive: true }); 5680 } 5681 5682 carousel.addEventListener('touchstart', handleTouchStart, { passive: true }); 5683 carousel.addEventListener('touchmove', handleTouchMove, { passive: true }); 5684 carousel.addEventListener('touchend', handleTouchEnd, { passive: true }); 5685 5686 updateSlide(0); 5687 startAutoplay(); 5688})(); 5689</script>
5689 5690 5691 5692 5693</section><section id="shopify-section-template--28630587998578__producthomepage_sbr_GxFWVF" class="shopify-section section-shop-by-room"><style> 5694 /* Universal box-sizing */ 5695 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF *, 5696 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF *::before, 5697 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF *::after { box-sizing: border-box; } 5698 5699 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF { 5700 margin: 0; 5701 padding: 40px 0 40px; 5702 text-align: center; 5703 font-family: inherit; 5704 background-color: #ffffff; 5705 overflow-x: hidden; 5706 } 5707 5708 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF h2 { 5709 font-size: clamp(28px, 4vw, 42px); 5710 margin: 0 0 8px; 5711 font-weight: 700; 5712 letter-spacing: .02em; 5713 color: #000000; 5714 } 5715 5716 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-banner-subtext { 5717 margin: 0 0 24px; 5718 font-size: clamp(14px, 2.2vw, 18px); 5719 color: #444444; 5720 line-height: 1.4; 5721 } 5722 5723 /* Desktop & tablet grid */ 5724 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-grid { 5725 position: relative; 5726 width: 100%; 5727 display: grid; 5728 grid-template-columns: repeat(4, 1fr); 5729 gap: 0; 5730 overflow: hidden; 5731 } 5732 @media (max-width: 991px) { 5733 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-grid { 5734 grid-template-columns: repeat(2, 1fr); 5735 } 5736 } 5737 5738 /* Mobile 2-column grid */ 5739 @media (max-width: 575px) { 5740 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-banner-subtext { 5741 padding: 0 16px; 5742 } 5743 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-grid { 5744 display: grid; 5745 grid-template-columns: repeat(2, 1fr); 5746 width: 100%; 5747 gap: 0; 5748 } 5749 } 5750 5751 /* Tile styling with half-pixel overlap to prevent gaps */ 5752 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-tile { 5753 position: relative; 5754 display: block; 5755 overflow: hidden; 5756 height: 0; 5757 padding-bottom: 100%; 5758 margin: -0.5px; 5759 } 5760 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-tile img { 5761 position: absolute; 5762 inset: -0.5px; 5763 width: calc(100% + 1px); 5764 height: calc(100% + 1px); 5765 object-fit: cover; 5766 object-position: center; 5767 } 5768 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-tile span { 5769 position: absolute; 5770 left: 12px; 5771 top: 12px; 5772 font-size: clamp(14px, 3vw, 22px); 5773 font-weight: 700; 5774 color: #ffffff; 5775 letter-spacing: .05em; 5776 text-shadow: 0 0 8px rgba(0, 0, 0, .75), 0 1px 2px rgba(0, 0, 0, .5); 5777 } 5778 @media (max-width: 575px) { 5779 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-tile span { 5780 font-size: clamp(17.5px, 3.75vw, 27.5px); 5781 } 5782 } 5783 5784 /* CTA button */ 5785 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .btn-all { 5786 display: inline-block; 5787 margin: 32px auto 0; 5788 padding: 12px 40px; 5789 font-size: 18px; 5790 font-weight: 700; 5791 color: #ffffff; 5792 background: #e73c3e; 5793 text-decoration: none; 5794 border: none; 5795 border-radius: 6px; 5796 box-shadow: 0 4px 8px rgba(0, 0, 0, .15); 5797 transition: transform .25s ease, box-shadow .25s ease, background .25s ease; 5798 } 5799 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .btn-all:hover { 5800 background: #c63c3c; 5801 transform: translateY(-3px) scale(1.04); 5802 box-shadow: 0 8px 16px rgba(0, 0, 0, .25); 5803 } 5804 5805 /* Safari on iPad z-index fix */ 5806 @media (min-width: 576px) and (max-width: 991px) { 5807 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-tile img { z-index: 0; } 5808 #shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF .room-tile span { z-index: 1; } 5809 } 5810</style> 5811 5812<section id="shop-by-room-template--28630587998578__producthomepage_sbr_GxFWVF" class="room-banner"><h2>SHOP BY ROOM</h2><p class="room-banner-subtext">Vents, mounts, niches and receptacles to elevate every corner of your home</p><div class="room-grid"><a href="/collections/bathroom" 5813 class="room-tile" 5814 aria-label="Shop BATHROOM" 5815 ><img src="//fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Bathroom.webp?v=1777311845&width=720" 5816 srcset="//fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Bathroom.webp?v=1777311845&width=360 360w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Bathroom.webp?v=1777311845&width=480 480w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Bathroom.webp?v=1777311845&width=600 600w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Bathroom.webp?v=1777311845&width=720 720w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Bathroom.webp?v=1777311845&width=960 960w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Bathroom.webp?v=1777311845&width=1200 1200w" 5817 sizes="(max-width:575px) 50vw, (max-width:991px) 50vw, 25vw" 5818 width="960" 5819 height="960" 5820 loading="eager" 5821 decoding="async" 5822 alt="BATHROOM" /><span>BATHROOM</span></a><a href="/collections/living-room" 5823 class="room-tile" 5824 aria-label="Shop LIVING" 5825 ><img src="//fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Living.webp?v=1777311865&width=720" 5826 srcset="//fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Living.webp?v=1777311865&width=360 360w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Living.webp?v=1777311865&width=480 480w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Living.webp?v=1777311865&width=600 600w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Living.webp?v=1777311865&width=720 720w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Living.webp?v=1777311865&width=960 960w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Living.webp?v=1777311865&width=1200 1200w" 5827 sizes="(max-width:575px) 50vw, (max-width:991px) 50vw, 25vw" 5828 width="960" 5829 height="960" 5830 loading="lazy" 5831 decoding="async" 5832 alt="LIVING" /><span>LIVING</span></a><a href="/collections/kitchen" 5833 class="room-tile" 5834 aria-label="Shop KITCHEN" 5835 ><img src="//fittes.ca/cdn/shop/files/Shop_ByRoom_Kitchen.jpg?v=1777312295&width=720" 5836 srcset="//fittes.ca/cdn/shop/files/Shop_ByRoom_Kitchen.jpg?v=1777312295&width=360 360w, //fittes.ca/cdn/shop/files/Shop_ByRoom_Kitchen.jpg?v=1777312295&width=480 480w, //fittes.ca/cdn/shop/files/Shop_ByRoom_Kitchen.jpg?v=1777312295&width=600 600w, //fittes.ca/cdn/shop/files/Shop_ByRoom_Kitchen.jpg?v=1777312295&width=720 720w, //fittes.ca/cdn/shop/files/Shop_ByRoom_Kitchen.jpg?v=1777312295&width=960 960w, //fittes.ca/cdn/shop/files/Shop_ByRoom_Kitchen.jpg?v=1777312295&width=1200 1200w" 5837 sizes="(max-width:575px) 50vw, (max-width:991px) 50vw, 25vw" 5838 width="960" 5839 height="960" 5840 loading="lazy" 5841 decoding="async" 5842 alt="KITCHEN" /><span>KITCHEN</span></a><a href="/collections/entryway" 5843 class="room-tile" 5844 aria-label="Shop ENTRYWAY" 5845 ><img src="//fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Entry.webp?v=1777312088&width=720" 5846 srcset="//fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Entry.webp?v=1777312088&width=360 360w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Entry.webp?v=1777312088&width=480 480w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Entry.webp?v=1777312088&width=600 600w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Entry.webp?v=1777312088&width=720 720w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Entry.webp?v=1777312088&width=960 960w, //fittes.ca/cdn/shop/files/HP_Shop_ByRoom_Entry.webp?v=1777312088&width=1200 1200w" 5847 sizes="(max-width:575px) 50vw, (max-width:991px) 50vw, 25vw" 5848 width="960" 5849 height="960" 5850 loading="lazy" 5851 decoding="async" 5852 alt="ENTRYWAY" /><span>ENTRYWAY</span></a></div><a href="/collections/all" class="btn-all">View All</a></section> 5853 5854 5855</section><div id="shopify-section-template--28630587998578__home_tab_product_tJDMfE" class="shopify-section"><link href="//fittes.ca/cdn/shop/t/139/assets/component-card.css?v=26033685683467094921788881620" rel="stylesheet" type="text/css" media="all" /> 5856<link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 5857<style data-shopify>
5857.ffp-pills { 5858 --ffp-pill-h: 2.1rem; 5859 --ffp-gap: 0.6rem; 5860 position: relative; 5861 z-index: 2; /* above the full-card link overlay so pills get hover */ 5862 display: flex; 5863 flex-wrap: nowrap; 5864 justify-content: flex-start; 5865 align-items: center; 5866 gap: var(--ffp-gap); 5867 list-style: none; 5868 margin: 0.5rem 0 1.3rem; /* 0.5 + 2.1 + 1.3 = 3.9rem below the image */ 5869 padding: 0; 5870 width: 100%; 5871 max-width: 100%; 5872 min-width: 0; 5873 height: var(--ffp-pill-h); /* fixed: count never changes row height */ 5874 text-align: left; 5875 overflow: hidden; /* clip, never spill past the card edge */ 5876 contain: inline-size; /* row can't widen its parent */ 5877 } 5878 .ffp-pill { 5879 flex: 0 0 auto; 5880 display: inline-flex; 5881 align-items: center; 5882 height: var(--ffp-pill-h); 5883 margin: 0; 5884 padding: 0 1rem; 5885 border: 0; 5886 border-radius: 999px; 5887 background: #EFF1ED; 5888 color: rgb(var(--color-foreground)); 5889 font-family: var(--font-body-family); 5890 font-size: 1.05rem; 5891 line-height: 1; 5892 letter-spacing: 0.02em; 5893 white-space: nowrap; 5894 cursor: default; 5895 outline-offset: 2px; 5896 transition: background-color 0.15s ease; 5897 } 5898 .ffp-pill:hover, 5899 .ffp-pill:focus-visible, 5900 .ffp-pill.is-active { 5901 background: #E4E7E2; 5902 } 5903 5904 /* Applied by the sync script, per section */ 5905 .ffp-pills[data-ffp-max="2"] .ffp-pill:nth-child(n+3), 5906 .ffp-pills[data-ffp-max="1"] .ffp-pill:nth-child(n+2) { 5907 display: none; 5908 } 5909 5910 /* Tooltip bubble - one element on <body>, positioned by JS */ 5911 #ffp-tooltip { 5912 position: fixed; 5913 z-index: 9999; 5914 max-width: 24rem; 5915 padding: 0.8rem 1.1rem; 5916 border-radius: 0.8rem; 5917 background: #1E1E1E; 5918 color: #fff; 5919 font-family: var(--font-body-family); 5920 font-size: 1.15rem; 5921 line-height: 1.45; 5922 letter-spacing: 0.01em; 5923 text-align: left; 5924 pointer-events: none; 5925 opacity: 0; 5926 transform: translateY(4px); 5927 transition: opacity 0.15s ease, transform 0.15s ease; 5928 box-shadow: 0 6px 20px rgba(0, 0, 0, 0.18); 5929 } 5930 #ffp-tooltip.is-visible { 5931 opacity: 1; 5932 transform: translateY(0); 5933 } 5934 #ffp-tooltip::after { 5935 content: ''; 5936 position: absolute; 5937 left: var(--ffp-arrow-x, 50%); 5938 width: 0; 5939 height: 0; 5940 border: 6px solid transparent; 5941 transform: translateX(-50%); 5942 } 5943 #ffp-tooltip[data-placement="top"]::after { 5944 top: 100%; 5945 border-top-color: #1E1E1E; 5946 } 5947 #ffp-tooltip[data-placement="bottom"]::after { 5948 bottom: 100%; 5949 border-bottom-color: #1E1E1E; 5950 } 5951 5952 @media screen and (max-width: 749px) { 5953 .ffp-pills { 5954 --ffp-pill-h: 1.9rem; 5955 --ffp-gap: 0.5rem; 5956 margin: 0.4rem 0 1.1rem; /* 0.4 + 1.9 + 1.1 = 3.4rem below the image */ 5957 } 5958 .ffp-pill { 5959 padding: 0 0.85rem; 5960 font-size: 0.95rem; 5961 } 5962 #ffp-tooltip { 5963 max-width: 22rem; 5964 font-size: 1.1rem; 5965 } 5966 }</style>
5966<script> 5967 (function () { 5968 if (window.ffpSync) return; 5969 5970 /* ================= PILL COUNT SYNC ================= */ 5971 5972 function pillWidths(row) { 5973 var prev = row.getAttribute('data-ffp-max'); 5974 row.removeAttribute('data-ffp-max'); 5975 var pills = row.querySelectorAll('.ffp-pill'); 5976 var widths = []; 5977 for (var i = 0; i < pills.length; i++) { 5978 widths.push(pills[i].getBoundingClientRect().width); 5979 } 5980 if (prev !== null) row.setAttribute('data-ffp-max', prev); 5981 return widths; 5982 } 5983 5984 function fits(widths, gap, available, count) { 5985 var n = Math.min(count, widths.length); 5986 if (n < 1) return true; 5987 var needed = gap * (n - 1); 5988 for (var i = 0; i < n; i++) needed += widths[i]; 5989 return needed <= available + 0.5; 5990 } 5991 5992 window.ffpSync = function (root) { 5993 var scope = root && root.querySelectorAll ? root : document; 5994 var groups = new Map(); 5995 5996 scope.querySelectorAll('.ffp-pills').forEach(function (row) { 5997 if (!row.offsetParent) return; 5998 var key = row.closest('[id^="shopify-section-"]') || document.body; 5999 if (!groups.has(key)) groups.set(key, []); 6000 groups.get(key).push(row); 6001 }); 6002 6003 groups.forEach(function (rows) { 6004 var data = rows.map(function (row) { 6005 return { 6006 row: row, 6007 widths: pillWidths(row), 6008 gap: parseFloat(getComputedStyle(row).columnGap) || 0, 6009 available: row.clientWidth 6010 }; 6011 }); 6012 6013 var max = 3; 6014 while (max > 1) { 6015 var ok = data.every(function (d) { return fits(d.widths, d.gap, d.available, max); }); 6016 if (ok) break; 6017 max--; 6018 } 6019 6020 data.forEach(function (d) { 6021 if (max >= 3) { 6022 d.row.removeAttribute('data-ffp-max'); 6023 } else { 6024 d.row.setAttribute('data-ffp-max', String(max)); 6025 } 6026 }); 6027 }); 6028 }; 6029 6030 var raf = null; 6031 function schedule() { 6032 if (raf) return; 6033 raf = requestAnimationFrame(function () { 6034 raf = null; 6035 window.ffpSync(); 6036 }); 6037 } 6038 6039 if (document.readyState === 'loading') { 6040 document.addEventListener('DOMContentLoaded', schedule); 6041 } else { 6042 schedule(); 6043 } 6044 if (document.fonts && document.fonts.ready) { 6045 document.fonts.ready.then(schedule); 6046 } 6047 6048 var resizeTimer; 6049 window.addEventListener('resize', function () { 6050 clearTimeout(resizeTimer); 6051 resizeTimer = setTimeout(schedule, 150); 6052 hideTip(); 6053 }); 6054 6055 if ('MutationObserver' in window) { 6056 new MutationObserver(function (mutations) { 6057 for (var i = 0; i < mutations.length; i++) { 6058 if (mutations[i].addedNodes.length) { schedule(); return; } 6059 } 6060 }).observe(document.body, { childList: true, subtree: true }); 6061 } 6062 6063 /* ================= TOOLTIPS ================= */ 6064 6065 var tip = null; 6066 var activePill = null; 6067 6068 function getTip() { 6069 if (tip) return tip; 6070 tip = document.createElement('div'); 6071 tip.id = 'ffp-tooltip'; 6072 tip.setAttribute('role', 'tooltip'); 6073 document.body.appendChild(tip); 6074 return tip; 6075 } 6076 6077 function showTip(pill) { 6078 var text = pill.getAttribute('data-ffp-tip'); 6079 if (!text) return; 6080 6081 if (activePill && activePill !== pill) { 6082 activePill.classList.remove('is-active'); 6083 activePill.removeAttribute('aria-describedby'); 6084 } 6085 activePill = pill; 6086 pill.classList.add('is-active'); 6087 6088 var el = getTip(); 6089 el.textContent = text; 6090 el.classList.remove('is-visible'); 6091 el.style.left = '0px'; 6092 el.style.top = '0px'; 6093 6094 var pr = pill.getBoundingClientRect(); 6095 var tr = el.getBoundingClientRect(); 6096 var margin = 8; 6097 var gap = 8; 6098 6099 var left = pr.left + pr.width / 2 - tr.width / 2; 6100 var maxLeft = window.innerWidth - tr.width - margin; 6101 left = Math.max(margin, Math.min(left, maxLeft)); 6102 6103 var top = pr.top - tr.height - gap; 6104 var placement = 'top'; 6105 if (top < margin) { 6106 top = pr.bottom + gap; 6107 placement = 'bottom'; 6108 } 6109 6110 var arrowX = pr.left + pr.width / 2 - left; 6111 arrowX = Math.max(12, Math.min(arrowX, tr.width - 12)); 6112 6113 el.style.left = left + 'px'; 6114 el.style.top = top + 'px'; 6115 el.style.setProperty('--ffp-arrow-x', arrowX + 'px'); 6116 el.setAttribute('data-placement', placement); 6117 pill.setAttribute('aria-describedby', 'ffp-tooltip'); 6118 6119 requestAnimationFrame(function () { el.classList.add('is-visible'); }); 6120 } 6121 6122 function hideTip() { 6123 if (tip) tip.classList.remove('is-visible'); 6124 if (activePill) { 6125 activePill.classList.remove('is-active'); 6126 activePill.removeAttribute('aria-describedby'); 6127 activePill = null; 6128 } 6129 } 6130 6131 document.addEventListener('mouseover', function (e) { 6132 var pill = e.target.closest && e.target.closest('.ffp-pill[data-ffp-tip]'); 6133 if (pill) showTip(pill); 6134 }); 6135 document.addEventListener('mouseout', function (e) { 6136 var pill = e.target.closest && e.target.closest('.ffp-pill[data-ffp-tip]'); 6137 if (!pill) return; 6138 var to = e.relatedTarget; 6139 if (to && pill.contains(to)) return; 6140 hideTip(); 6141 }); 6142 6143 document.addEventListener('focusin', function (e) { 6144 var pill = e.target.closest && e.target.closest('.ffp-pill[data-ffp-tip]'); 6145 if (pill) showTip(pill); 6146 }); 6147 document.addEventListener('focusout', function (e) { 6148 var pill = e.target.closest && e.target.closest('.ffp-pill[data-ffp-tip]'); 6149 if (pill) hideTip(); 6150 }); 6151 6152 document.addEventListener('click', function (e) { 6153 var pill = e.target.closest && e.target.closest('.ffp-pill[data-ffp-tip]'); 6154 if (pill) { 6155 e.preventDefault(); 6156 e.stopPropagation(); 6157 if (activePill === pill && tip && tip.classList.contains('is-visible')) { 6158 hideTip(); 6159 } else { 6160 showTip(pill); 6161 } 6162 return; 6163 } 6164 hideTip(); 6165 }, true); 6166 6167 document.addEventListener('keydown', function (e) { 6168 if (e.key === 'Escape') hideTip(); 6169 }); 6170 window.addEventListener('scroll', hideTip, { passive: true }); 6171 })(); 6172 </script>
6172 6173 6174<link href="//fittes.ca/cdn/shop/t/139/assets/quick-add.css?v=102034667505639970811788881706" rel="stylesheet" type="text/css" media="all" /> 6175
6175<script src="//fittes.ca/cdn/shop/t/139/assets/product-form.js?v=72199052513909285881788881702" defer="defer"></script>
6175<script src="//fittes.ca/cdn/shop/t/139/assets/quick-add.js?v=73073840428863680991788881707" defer="defer"></script>
6175<style data-shopify>/* ========== SECTION PADDING VARIABLES - MATCHES HERO VIDEO SECTION ========== */ 6176 #shopify-section-template--28630587998578__home_tab_product_tJDMfE { 6177 --content-padding: 20px; 6178 --slide-gap: 20px; 6179 --nav-offset: 10px; 6180 } 6181 @media (min-width: 750px) { 6182 #shopify-section-template--28630587998578__home_tab_product_tJDMfE { 6183 --content-padding: calc(2.5rem + 30px); 6184 --slide-gap: 33px; 6185 --nav-offset: 15px; 6186 } 6187 } 6188 @media (min-width: 990px) { 6189 #shopify-section-template--28630587998578__home_tab_product_tJDMfE { 6190 --content-padding: calc(2.5rem + 40px); 6191 } 6192 } 6193 @media (min-width: 1200px) { 6194 #shopify-section-template--28630587998578__home_tab_product_tJDMfE { 6195 --content-padding: calc(2.5rem + 50px); 6196 } 6197 } 6198 6199 /* ========== BASE SECTION PADDING ========== */ 6200 .section-template--28630587998578__home_tab_product_tJDMfE-padding { 6201 padding-top: 24px; 6202 padding-bottom: 24px; 6203 } 6204 @media (min-width: 750px) { 6205 .section-template--28630587998578__home_tab_product_tJDMfE-padding { 6206 padding-top: 32px; 6207 padding-bottom: 32px; 6208 } 6209 } 6210 6211 /* ========== TITLE AREA - MATCHES HERO VIDEO ALIGNMENT ========== */ 6212 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-top { 6213 max-width: 1420px !important; 6214 margin: 0 auto 20px !important; 6215 padding-left: var(--content-padding) !important; 6216 padding-right: var(--content-padding) !important; 6217 box-sizing: border-box; 6218 display: flex; 6219 align-items: center; 6220 justify-content: space-between; 6221 flex-wrap: wrap; 6222 gap: 15px; 6223 } 6224 6225 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-top h6 { 6226 font-weight: 500; 6227 color: #F73308; 6228 margin: 0; 6229 } 6230 6231 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-top h3 { 6232 margin: 10px 0 0; 6233 } 6234 6235 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .collage-wrapper-title { 6236 flex-shrink: 0; 6237 } 6238 6239 @media (min-width: 750px) { 6240 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-top { 6241 margin-bottom: 40px !important; 6242 flex-wrap: nowrap; 6243 } 6244 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-top h3 { 6245 margin: 20px 0 0; 6246 } 6247 } 6248 6249 /* ========== TABS ========== */ 6250 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-tab { 6251 display: flex; 6252 gap: 10px; 6253 flex-shrink: 0; 6254 } 6255 6256 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-tab p { 6257 color: #000; 6258 cursor: pointer; 6259 padding: 5px 15px; 6260 font-size: 12px; 6261 margin: 0; 6262 white-space: nowrap; 6263 } 6264 6265 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-tab p.active { 6266 border-radius: var(--buttons-radius-outset); 6267 border: 1px solid #000; 6268 } 6269 6270 @media (min-width: 750px) { 6271 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-tab { 6272 gap: 20px; 6273 } 6274 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-tab p { 6275 padding: 10px 15px; 6276 font-size: 14px; 6277 } 6278 } 6279 6280 /* ========== PRODUCT GRID CONTAINER ========== */ 6281 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-bottom { 6282 display: none; 6283 max-width: 1420px; 6284 margin: 0 auto; 6285 box-sizing: border-box; 6286 position: relative; 6287 } 6288 6289 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-bottom.active { 6290 display: block; 6291 } 6292 6293 /* Reserve space before hydration to avoid layout shift */ 6294 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .series-product-bottom.active:not([data-hydrated]) { 6295 min-height: 300px; 6296 } 6297 6298 /* ========== SWIPER WRAPPER FOR NAVIGATION POSITIONING ========== */ 6299 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-outer-wrapper { 6300 position: relative; 6301 padding: 0 var(--nav-offset); 6302 } 6303 6304 @media (min-width: 750px) { 6305 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-outer-wrapper { 6306 padding: 0; 6307 } 6308 } 6309 6310 /* ========== SWIPER - STRICT OVERFLOW CONTROL ========== */ 6311 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper { 6312 overflow: hidden !important; 6313 position: relative; 6314 margin: 0 calc(var(--content-padding) - var(--nav-offset)); 6315 } 6316 6317 @media (min-width: 750px) { 6318 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper { 6319 margin: 0 var(--content-padding); 6320 } 6321 } 6322 6323 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-wrapper { 6324 display: flex; 6325 } 6326 6327 /* ========== SLIDE SIZING ========== */ 6328 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-slide { 6329 flex-shrink: 0;
6330 width: calc((100% - (var(--slide-gap) * 3)) / 4); 6331 box-sizing: border-box; 6332 } 6333 6334 /* Mobile: show partial slides for swipe hint */ 6335 @media (max-width: 749px) { 6336 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-slide { 6337 width: calc((100% - var(--slide-gap)) / 1.9); 6338 } 6339 } 6340 6341 /* ========== PRE-INIT SPACING - PREVENTS FLASH BEFORE SWIPER BOOTS ========== */ 6342 /* Swiper applies spaceBetween as inline margin-right at init. Mirror that 6343 for the un-initialized state so the layout is pixel-identical before 6344 and after Swiper boots. Covers Swiper 7+ and legacy class names. */ 6345 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper:not(.swiper-initialized):not(.swiper-container-initialized) .swiper-slide { 6346 margin-right: var(--slide-gap); 6347 } 6348 6349 /* ========== SWIPER NAVIGATION - OUTSIDE CONTENT AREA ========== */ 6350 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-next, 6351 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-prev { 6352 width: 50px; 6353 height: 50px; 6354 background: #fff; 6355 border-radius: 50px; 6356 opacity: 0.7; 6357 transition: all 0.3s; 6358 top: 30%; 6359 box-shadow: 0px 7px 20px rgba(0, 0, 0, 0.06); 6360 z-index: 10; 6361 position: absolute; 6362 cursor: pointer; 6363 } 6364 6365 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-next:after, 6366 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-prev:after { 6367 content: none; 6368 } 6369 6370 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-next:hover, 6371 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-prev:hover { 6372 opacity: 1; 6373 } 6374 6375 /* Hide disabled navigation buttons */ 6376 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-disabled { 6377 opacity: 0 !important; 6378 pointer-events: none !important; 6379 visibility: hidden !important; 6380 } 6381 6382 /* Position navigation at the outer edges */ 6383 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-next { 6384 right: calc(var(--content-padding) - 60px); 6385 } 6386 6387 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-prev { 6388 left: calc(var(--content-padding) - 60px); 6389 } 6390 6391 @media (min-width: 1500px) { 6392 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-next { 6393 right: calc(var(--content-padding) - 70px); 6394 } 6395 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .swiper-button-prev { 6396 left: calc(var(--content-padding) - 70px); 6397 } 6398 } 6399 6400 /* ========== CARD SLIDES ========== */ 6401 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide { 6402 display: flex; 6403 flex-direction: column; 6404 } 6405 6406 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .my-buy-btn { 6407 color: #fff; 6408 transform: translateY(-70%); 6409 } 6410 6411 @media (min-width: 750px) { 6412 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .my-buy-btn { 6413 transform: translateY(-100%); 6414 } 6415 } 6416 6417 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .my-buy-btn .product-form__submit::before, 6418 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .my-buy-btn .product-form__submit::after { 6419 content: unset; 6420 } 6421 6422 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .my-buy-btn .product-form__submit { 6423 padding: 0; 6424 background: #E73C3E; 6425 } 6426 /* ========== LEFT ALIGN - TEXT, PILLS & PRICE FLUSH WITH IMAGE EDGE ========== */ 6427 /* Dawn adds horizontal padding to .card__content / .card__information and 6428 reads --card-text-alignment for text. Zero both so every line under the 6429 image starts where the image and the Learn More button start. */ 6430 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .card > .card__content, 6431 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .card > .card__content .card__information, 6432 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .card > .card__content .card-information { 6433 padding-left: 0; 6434 padding-right: 0; 6435 text-align: left; 6436 } 6437 6438 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .card__heading, 6439 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .card__heading a { 6440 text-align: left; 6441 } 6442 6443 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .price, 6444 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .price__container { 6445 justify-content: flex-start; 6446 text-align: left; 6447 } 6448 6449 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card-slide .ffp-pills { 6450 margin-left: 0; 6451 padding-left: 0; 6452 } 6453 6454 /* ========== CARD CONTENT ========== */ 6455 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card .card__heading { 6456 height: 6rem; 6457 max-height: 6rem; 6458 overflow: hidden; 6459 text-overflow: ellipsis; 6460 } 6461 6462 @media (max-width: 749px) { 6463 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card .card__heading { 6464 min-height: 8.5rem; 6465 } 6466 } 6467 6468 @media (min-width: 750px) { 6469 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .card__information .card-information { 6470 min-height: 44px; 6471 display: flex; 6472 } 6473 } 6474 6475 #shopify-section-template--28630587998578__home_tab_product_tJDMfE .product-card-wrapper .card__heading { 6476 text-transform: capitalize; 6477 } 6478 6479 /* ========== PRICE QUICKADD ========== */ 6480 @media (min-width: 750px) { 6481 [class^="price-quickadd"] { 6482 display: flex; 6483 justify-content: space-between; 6484 } 6485 [class^="price-quickadd"] .guide-link { 6486 display: inline-flex; 6487 gap: 5px; 6488 color: black; 6489 text-decoration: none; 6490 } 6491 }</style><div class="color-scheme-1 gradient isolate" data-open-new-tab="false"> 6492 <div class="section-template--28630587998578__home_tab_product_tJDMfE-padding"> 6493 <div class="series-product-top">
6493<div class="collage-wrapper-title scroll-trigger animate--slide-in"> 6494 <h3>Shop Vents</h3> 6495 </div><div class="series-product-tab scroll-trigger animate--slide-in"> 6496 6497 <p class="active" data-tab="wall-ceiling-vents">Wall / Ceiling Vents</p> 6498 6499 <p class="" data-tab="floor-vents">Floor Vents</p> 6500 6501 <p class="" data-tab="lite">Lite+</p> 6502 6503 </div> 6504 </div> 6505 <div class="series-product-bottom active" data-content="wall-ceiling-vents" data-index="0"><template data-swiper-template> 6506 <div class="swiper-outer-wrapper"> 6507 <div class="swiper mySwiper series-product-product"> 6508 <div class="swiper-wrapper"> 6509 6510 <div class="swiper-slide card-slide"> 6511 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 6512 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 6513 6514 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 6515 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 6516<div 6517 preorder-product-element="form" 6518 d-id="7736371511484" 6519 data-product-id="7736371511484" 6520 class="card-wrapper product-card-wrapper underline-links-hover" 6521 style="position: relative;" 6522 > 6523 6524 <div 6525 class=" 6526 card card--standard 6527 card--media 6528 6529 6530 6531 6532 6533 " 6534 style="--ratio-percent: 100%;" 6535 > 6536<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 6537 6538<div 6539 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 6540 style="color: black; background-color: white;" 6541 >Airflow Increased</div> 6542 6543 </div> 6544 <div 6545 class="card__inner color-scheme-2 gradient ratio" 6546 style="--ratio-percent: 100%;" 6547 > 6548 6549<div class="card__media"> 6550 <div class="media media--transparent media--hover-effect"> 6551 6552 <img 6553 srcset="//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198500&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198500&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198500&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198500&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198500&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198500&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198500 1080w 6554 " 6555 src="//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198500&width=533" 6556 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 6557 alt="Flush Wall Vent [Luxe+]" 6558 class="motion-reduce" 6559 6560 loading="lazy" 6561 6562 width="1080" 6563 height="1080" 6564 > 6565 6566<img 6567 srcset="//fittes.ca/cdn/shop/files/7-FlushWallVent_Luxe__Lifestyle1.png?v=1772198500&width=165 165w,//fittes.ca/cdn/shop/files/7-FlushWallVent_Luxe__Lifestyle1.png?v=1772198500&width=360 360w,//fittes.ca/cdn/shop/files/7-FlushWallVent_Luxe__Lifestyle1.png?v=1772198500&width=533 533w,//fittes.ca/cdn/shop/files/7-FlushWallVent_Luxe__Lifestyle1.png?v=1772198500&width=720 720w,//fittes.ca/cdn/shop/files/7-FlushWallVent_Luxe__Lifestyle1.png?v=1772198500&width=940 940w,//fittes.ca/cdn/shop/files/7-FlushWallVent_Luxe__Lifestyle1.png?v=1772198500&width=1066 1066w,//fittes.ca/cdn/shop/files/7-FlushWallVent_Luxe__Lifestyle1.png?v=1772198500 1080w 6568 " 6569 src="//fittes.ca/cdn/shop/files/7-FlushWallVent_Luxe__Lifestyle1.png?v=1772198500&width=533" 6570 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 6571 alt="" 6572 class="motion-reduce" 6573 loading="lazy" 6574 width="1080" 6575 height="1080" 6576 > 6577 </div> 6578 </div><div class="card__content"> 6579 <div class="card__information ss"> 6580 <h3 6581 class="card__heading" 6582 6583 > 6584 <a href="/products/flush-wall-vent-luxe-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-7736371511484" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-7736371511484 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-7736371511484"> 6585 Flush Wall Vent [Luxe+] 6586 </a> 6587 </h3> 6588 </div> 6589 6590 6591 6592 </div> 6593 </div> 6594 6595 <div class="card__content"> 6596 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Set into the drywall and finished with mud for a seamless, flush look.">Mud-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Steel construction for a premium, long-lasting finish.">Steel</li></ul> 6597<div class="bv_rating_summary "> 6598 <div data-bv-show="rating_summary" data-bv-product-id="7736371511484"></div> 6599 </div> 6600 6601 <h3 6602 class="card__heading h6" 6603 6604 id="title-template--28630587998578__home_tab_product_tJDMfE-7736371511484" 6605 6606 > 6607 <a href="/products/flush-wall-vent-luxe-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-7736371511484" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-7736371511484 Badge-template--28630587998578__home_tab_product_tJDMfE-7736371511484"> 6608 Flush Wall Vent [Luxe+] 6609 </a> 6610 </h3> 6611 <div class="card-information"> 6612 6613 6614<div 6615 class=" 6616 price " 6617 > 6618 <div class="price__container"><!-- REGULAR --> 6619 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
6620 <span class="price-item price-item--regular"> 6621 $93.00 USD+ 6622 </span></div> 6623 6624 6625 6626 <small class="unit-price caption hidden"> 6627 <span class="visually-hidden">Unit price</span> 6628 <span class="price-item price-item--last"> 6629 <span></span> 6630 <span aria-hidden="true">/</span> 6631 <span class="visually-hidden"> per </span> 6632 <span> 6633 </span> 6634 </span> 6635 </small> 6636 </div></div> 6637 6638 6639 6640</div> 6641 </div> 6642 6643 6644 6645 6646 6647 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-7736371511484"> 6648 <button 6649 id="quick-add-template--28630587998578__home_tab_product_tJDMfE7736371511484-submit" 6650 type="submit" 6651 name="add" 6652 class="quick-add__submit button button--full-width button--secondary" 6653 aria-haspopup="dialog" 6654 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE7736371511484-submit title-template--28630587998578__home_tab_product_tJDMfE-7736371511484" 6655 data-product-url="/products/flush-wall-vent-luxe-plus" 6656 > 6657 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 6658 <g clip-path="url(#clip0_694_4827)"> 6659 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 6660 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 6661 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 6662 </g> 6663 <defs> 6664 <clipPath id="clip0_694_4827"> 6665 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 6666 </clipPath> 6667 </defs> 6668 </svg> 6669 6670<div class="loading__spinner hidden"> 6671 <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> 6672 6673</div> 6674</button> 6675 </modal-opener> 6676 <quick-add-modal id="QuickAdd-7736371511484" class="quick-add-modal"> 6677 <div 6678 role="dialog"
6679 aria-label="Choose options for Flush Wall Vent [Luxe+]" 6680 aria-modal="true" 6681 class="quick-add-modal__content global-settings-popup" 6682 tabindex="-1" 6683 > 6684 <button 6685 id="ModalClose-7736371511484" 6686 type="button" 6687 class="quick-add-modal__toggle" 6688 aria-label="Close" 6689 ><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> 6690</button> 6691 <div id="QuickAddInfo-7736371511484" class="quick-add-modal__content-info"></div> 6692 </div> 6693 </quick-add-modal></div> 6694 6695 6696 6697 6698 <div class="card__badge top left"></div> 6699 </div> 6700 6701 </div> 6702 </div> 6703 <div class="my-buy-btn"> 6704<div class="" ><product-form 6705 class="product-form" 6706 data-hide-errors="false" 6707 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 6708 > 6709 <div class="product-form__error-message-wrapper" role="alert" hidden> 6710 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 6711</span> 6712 <span class="product-form__error-message"></span> 6713 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 6714 type="hidden" 6715 name="id" 6716 value="43177643049148" 6717 6718 class="product-variant-id" 6719 ><div class="product-form__buttons"><button 6720 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 6721 type="submit" 6722 name="add" 6723 class="product-form__submit button button--full-width button--primary" 6724 6725 > 6726 <span> 6727 Learn More 6728 6729</span> 6730 6731<div class="loading__spinner hidden"> 6732 <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> 6733 6734</div> 6735</button></div><input type="hidden" name="product-id" value="7736371511484" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 6736</div> 6737 </div> 6738 6739 <div class="swiper-slide card-slide"> 6740 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 6741 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 6742 6743 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 6744 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 6745<div 6746 preorder-product-element="form" 6747 d-id="2339981099070" 6748 data-product-id="2339981099070" 6749 class="card-wrapper product-card-wrapper underline-links-hover" 6750 style="position: relative;" 6751 > 6752 6753 <div 6754 class=" 6755 card card--standard 6756 card--media 6757 6758 6759 6760 6761 6762 " 6763 style="--ratio-percent: 100%;" 6764 > 6765 6766 <div 6767 class="card__inner color-scheme-2 gradient ratio" 6768 style="--ratio-percent: 100%;" 6769 > 6770 6771<div class="card__media"> 6772 <div class="media media--transparent media--hover-effect"> 6773 6774 <img 6775 srcset="//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=165 165w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=360 360w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=533 533w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=720 720w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=940 940w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=1066 1066w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189 1080w 6776 " 6777 src="//fittes.ca/cdn/shop/files/1-FlushWallVent_Luxe__Lifestyle1_96d8c0b4-5986-406c-ba0b-9d9e6f2daa0f.jpg?v=1754022189&width=533" 6778 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 6779 alt="Flush Wall Vent [Luxe]" 6780 class="motion-reduce" 6781 6782 loading="lazy" 6783 6784 width="1080" 6785 height="1080" 6786 > 6787 6788<img 6789 srcset="//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Luxe_or_Lite_-_Lifestyle.webp?v=1782744429&width=165 165w,//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Luxe_or_Lite_-_Lifestyle.webp?v=1782744429&width=360 360w,//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Luxe_or_Lite_-_Lifestyle.webp?v=1782744429&width=533 533w,//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Luxe_or_Lite_-_Lifestyle.webp?v=1782744429&width=720 720w,//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Luxe_or_Lite_-_Lifestyle.webp?v=1782744429&width=940 940w,//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Luxe_or_Lite_-_Lifestyle.webp?v=1782744429 1000w 6790 " 6791 src="//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Luxe_or_Lite_-_Lifestyle.webp?v=1782744429&width=533" 6792 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 6793 alt="" 6794 class="motion-reduce" 6795 loading="lazy" 6796 width="1000" 6797 height="1000" 6798 > 6799 </div> 6800 </div><div class="card__content"> 6801 <div class="card__information ss"> 6802 <h3 6803 class="card__heading" 6804 6805 > 6806 <a href="/products/flush-wall-vent-luxe" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-2339981099070" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-2339981099070 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-2339981099070"> 6807 Flush Wall Vent [Luxe] 6808 </a> 6809 </h3> 6810 </div> 6811 6812 6813 6814 </div> 6815 </div> 6816 6817 <div class="card__content"> 6818 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Set into the drywall and finished with mud for a seamless, flush look.">Mud-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Standard airflow, well suited to most rooms.">Single Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Steel construction for a premium, long-lasting finish.">Steel</li></ul> 6819<div class="bv_rating_summary "> 6820 <div data-bv-show="rating_summary" data-bv-product-id="2339981099070"></div> 6821 </div> 6822 6823 <h3 6824 class="card__heading h6" 6825 6826 id="title-template--28630587998578__home_tab_product_tJDMfE-2339981099070" 6827 6828 > 6829 <a href="/products/flush-wall-vent-luxe" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-2339981099070" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-2339981099070 Badge-template--28630587998578__home_tab_product_tJDMfE-2339981099070"> 6830 Flush Wall Vent [Luxe] 6831 </a> 6832 </h3> 6833 <div class="card-information"> 6834 6835 6836<div 6837 class=" 6838 price " 6839 > 6840 <div class="price__container"><!-- REGULAR --> 6841 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
6842 <span class="price-item price-item--regular"> 6843 $64.00 USD+ 6844 </span></div> 6845 6846 6847 6848 <small class="unit-price caption hidden"> 6849 <span class="visually-hidden">Unit price</span> 6850 <span class="price-item price-item--last"> 6851 <span></span> 6852 <span aria-hidden="true">/</span> 6853 <span class="visually-hidden"> per </span> 6854 <span> 6855 </span> 6856 </span> 6857 </small> 6858 </div></div> 6859 6860 6861 6862</div> 6863 </div> 6864 6865 6866 6867 6868 6869 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-2339981099070"> 6870 <button 6871 id="quick-add-template--28630587998578__home_tab_product_tJDMfE2339981099070-submit" 6872 type="submit" 6873 name="add" 6874 class="quick-add__submit button button--full-width button--secondary" 6875 aria-haspopup="dialog" 6876 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE2339981099070-submit title-template--28630587998578__home_tab_product_tJDMfE-2339981099070" 6877 data-product-url="/products/flush-wall-vent-luxe" 6878 > 6879 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 6880 <g clip-path="url(#clip0_694_4827)"> 6881 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 6882 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 6883 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 6884 </g> 6885 <defs> 6886 <clipPath id="clip0_694_4827"> 6887 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 6888 </clipPath> 6889 </defs> 6890 </svg> 6891 6892<div class="loading__spinner hidden"> 6893 <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> 6894 6895</div> 6896</button> 6897 </modal-opener> 6898 <quick-add-modal id="QuickAdd-2339981099070" class="quick-add-modal"> 6899 <div 6900 role="dialog"
6901 aria-label="Choose options for Flush Wall Vent [Luxe]" 6902 aria-modal="true" 6903 class="quick-add-modal__content global-settings-popup" 6904 tabindex="-1" 6905 > 6906 <button 6907 id="ModalClose-2339981099070" 6908 type="button" 6909 class="quick-add-modal__toggle" 6910 aria-label="Close" 6911 ><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> 6912</button> 6913 <div id="QuickAddInfo-2339981099070" class="quick-add-modal__content-info"></div> 6914 </div> 6915 </quick-add-modal></div> 6916 6917 6918 6919 6920 <div class="card__badge top left"></div> 6921 </div> 6922 6923 </div> 6924 </div> 6925 <div class="my-buy-btn"> 6926<div class="" ><product-form 6927 class="product-form" 6928 data-hide-errors="false" 6929 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 6930 > 6931 <div class="product-form__error-message-wrapper" role="alert" hidden> 6932 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 6933</span> 6934 <span class="product-form__error-message"></span> 6935 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 6936 type="hidden" 6937 name="id" 6938 value="42886097567932" 6939 6940 class="product-variant-id" 6941 ><div class="product-form__buttons"><button 6942 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 6943 type="submit" 6944 name="add" 6945 class="product-form__submit button button--full-width button--primary" 6946 6947 > 6948 <span> 6949 Learn More 6950 6951</span> 6952 6953<div class="loading__spinner hidden"> 6954 <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> 6955 6956</div> 6957</button></div><input type="hidden" name="product-id" value="2339981099070" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 6958</div> 6959 </div> 6960 6961 <div class="swiper-slide card-slide"> 6962 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 6963 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 6964 6965 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 6966 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 6967<div 6968 preorder-product-element="form" 6969 d-id="7762813485244" 6970 data-product-id="7762813485244" 6971 class="card-wrapper product-card-wrapper underline-links-hover" 6972 style="position: relative;" 6973 > 6974 6975 <div 6976 class=" 6977 card card--standard 6978 card--media 6979 6980 6981 6982 6983 6984 " 6985 style="--ratio-percent: 100%;" 6986 > 6987<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 6988 6989<div 6990 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 6991 style="color: black; background-color: white;" 6992 >Airflow Increased</div> 6993 6994 </div> 6995 <div 6996 class="card__inner color-scheme-2 gradient ratio" 6997 style="--ratio-percent: 100%;" 6998 > 6999 7000<div class="card__media"> 7001 <div class="media media--transparent media--hover-effect"> 7002 7003 <img 7004 srcset="//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198614&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198614&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198614&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198614&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198614&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198614&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198614 1080w 7005 " 7006 src="//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Luxe___Lifestyle_1.jpg?v=1772198614&width=533" 7007 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7008 alt="Framed Wall Vent [Luxe+]" 7009 class="motion-reduce" 7010 7011 loading="lazy" 7012 7013 width="1080" 7014 height="1080" 7015 > 7016 7017<img 7018 srcset="//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1.png?v=1772198614&width=165 165w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1.png?v=1772198614&width=360 360w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1.png?v=1772198614&width=533 533w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1.png?v=1772198614&width=720 720w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1.png?v=1772198614&width=940 940w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1.png?v=1772198614&width=1066 1066w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1.png?v=1772198614 1080w 7019 " 7020 src="//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1.png?v=1772198614&width=533" 7021 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7022 alt="" 7023 class="motion-reduce" 7024 loading="lazy" 7025 width="1080" 7026 height="1080" 7027 > 7028 </div> 7029 </div><div class="card__content"> 7030 <div class="card__information ss"> 7031 <h3 7032 class="card__heading" 7033 7034 > 7035 <a href="/products/framed-wall-vent-luxe-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-7762813485244" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-7762813485244 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-7762813485244"> 7036 Framed Wall Vent [Luxe+] 7037 </a> 7038 </h3> 7039 </div> 7040 7041 7042 7043 </div> 7044 </div> 7045 7046 <div class="card__content"> 7047 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Drops into the opening with minimal tools. Slight lip at the edge; fully paintable.">Drop-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Steel construction for a premium, long-lasting finish.">Steel</li></ul> 7048<div class="bv_rating_summary "> 7049 <div data-bv-show="rating_summary" data-bv-product-id="7762813485244"></div> 7050 </div> 7051 7052 <h3 7053 class="card__heading h6" 7054 7055 id="title-template--28630587998578__home_tab_product_tJDMfE-7762813485244" 7056 7057 > 7058 <a href="/products/framed-wall-vent-luxe-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-7762813485244" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-7762813485244 Badge-template--28630587998578__home_tab_product_tJDMfE-7762813485244"> 7059 Framed Wall Vent [Luxe+] 7060 </a> 7061 </h3> 7062 <div class="card-information"> 7063 7064 7065<div 7066 class=" 7067 price " 7068 > 7069 <div class="price__container"><!-- REGULAR --> 7070 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
7071 <span class="price-item price-item--regular"> 7072 $93.00 USD+ 7073 </span></div> 7074 7075 7076 7077 <small class="unit-price caption hidden"> 7078 <span class="visually-hidden">Unit price</span> 7079 <span class="price-item price-item--last"> 7080 <span></span> 7081 <span aria-hidden="true">/</span> 7082 <span class="visually-hidden"> per </span> 7083 <span> 7084 </span> 7085 </span> 7086 </small> 7087 </div></div> 7088 7089 7090 7091</div> 7092 </div> 7093 7094 7095 7096 7097 7098 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-7762813485244"> 7099 <button 7100 id="quick-add-template--28630587998578__home_tab_product_tJDMfE7762813485244-submit" 7101 type="submit" 7102 name="add" 7103 class="quick-add__submit button button--full-width button--secondary" 7104 aria-haspopup="dialog" 7105 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE7762813485244-submit title-template--28630587998578__home_tab_product_tJDMfE-7762813485244" 7106 data-product-url="/products/framed-wall-vent-luxe-plus" 7107 > 7108 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 7109 <g clip-path="url(#clip0_694_4827)"> 7110 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 7111 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 7112 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 7113 </g> 7114 <defs> 7115 <clipPath id="clip0_694_4827"> 7116 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 7117 </clipPath> 7118 </defs> 7119 </svg> 7120 7121<div class="loading__spinner hidden"> 7122 <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> 7123 7124</div> 7125</button> 7126 </modal-opener> 7127 <quick-add-modal id="QuickAdd-7762813485244" class="quick-add-modal"> 7128 <div 7129 role="dialog"
7130 aria-label="Choose options for Framed Wall Vent [Luxe+]" 7131 aria-modal="true" 7132 class="quick-add-modal__content global-settings-popup" 7133 tabindex="-1" 7134 > 7135 <button 7136 id="ModalClose-7762813485244" 7137 type="button" 7138 class="quick-add-modal__toggle" 7139 aria-label="Close" 7140 ><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> 7141</button> 7142 <div id="QuickAddInfo-7762813485244" class="quick-add-modal__content-info"></div> 7143 </div> 7144 </quick-add-modal></div> 7145 7146 7147 7148 7149 <div class="card__badge top left"></div> 7150 </div> 7151 7152 </div> 7153 </div> 7154 <div class="my-buy-btn"> 7155<div class="" ><product-form 7156 class="product-form" 7157 data-hide-errors="false" 7158 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 7159 > 7160 <div class="product-form__error-message-wrapper" role="alert" hidden> 7161 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 7162</span> 7163 <span class="product-form__error-message"></span> 7164 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 7165 type="hidden" 7166 name="id" 7167 value="43177651798204" 7168 7169 class="product-variant-id" 7170 ><div class="product-form__buttons"><button 7171 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 7172 type="submit" 7173 name="add" 7174 class="product-form__submit button button--full-width button--primary" 7175 7176 > 7177 <span> 7178 Learn More 7179 7180</span> 7181 7182<div class="loading__spinner hidden"> 7183 <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> 7184 7185</div> 7186</button></div><input type="hidden" name="product-id" value="7762813485244" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 7187</div> 7188 </div> 7189 7190 <div class="swiper-slide card-slide"> 7191 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 7192 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 7193 7194 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 7195 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 7196<div 7197 preorder-product-element="form" 7198 d-id="7756734005436" 7199 data-product-id="7756734005436" 7200 class="card-wrapper product-card-wrapper underline-links-hover" 7201 style="position: relative;" 7202 > 7203 7204 <div 7205 class=" 7206 card card--standard 7207 card--media 7208 7209 7210 7211 7212 7213 " 7214 style="--ratio-percent: 100%;" 7215 > 7216 7217 <div 7218 class="card__inner color-scheme-2 gradient ratio" 7219 style="--ratio-percent: 100%;" 7220 > 7221 7222<div class="card__media"> 7223 <div class="media media--transparent media--hover-effect"> 7224 7225 <img 7226 srcset="//fittes.ca/cdn/shop/files/1-FramedWallVent_Luxe__Lifestyle1_81a536d2-8225-4375-adb6-7c84162bcc16.png?v=1754022130&width=165 165w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Luxe__Lifestyle1_81a536d2-8225-4375-adb6-7c84162bcc16.png?v=1754022130&width=360 360w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Luxe__Lifestyle1_81a536d2-8225-4375-adb6-7c84162bcc16.png?v=1754022130&width=533 533w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Luxe__Lifestyle1_81a536d2-8225-4375-adb6-7c84162bcc16.png?v=1754022130&width=720 720w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Luxe__Lifestyle1_81a536d2-8225-4375-adb6-7c84162bcc16.png?v=1754022130&width=940 940w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Luxe__Lifestyle1_81a536d2-8225-4375-adb6-7c84162bcc16.png?v=1754022130&width=1066 1066w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Luxe__Lifestyle1_81a536d2-8225-4375-adb6-7c84162bcc16.png?v=1754022130 1080w 7227 " 7228 src="//fittes.ca/cdn/shop/files/1-FramedWallVent_Luxe__Lifestyle1_81a536d2-8225-4375-adb6-7c84162bcc16.png?v=1754022130&width=533" 7229 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7230 alt="Framed Wall Vent [Luxe]" 7231 class="motion-reduce" 7232 7233 loading="lazy" 7234 7235 width="1080" 7236 height="1080" 7237 > 7238 7239<img 7240 srcset="//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1_8b91792c-d2f1-4fbc-aba0-eed00f9bb66e.png?v=1754061306&width=165 165w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1_8b91792c-d2f1-4fbc-aba0-eed00f9bb66e.png?v=1754061306&width=360 360w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1_8b91792c-d2f1-4fbc-aba0-eed00f9bb66e.png?v=1754061306&width=533 533w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1_8b91792c-d2f1-4fbc-aba0-eed00f9bb66e.png?v=1754061306&width=720 720w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1_8b91792c-d2f1-4fbc-aba0-eed00f9bb66e.png?v=1754061306&width=940 940w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1_8b91792c-d2f1-4fbc-aba0-eed00f9bb66e.png?v=1754061306&width=1066 1066w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1_8b91792c-d2f1-4fbc-aba0-eed00f9bb66e.png?v=1754061306 1080w 7241 " 7242 src="//fittes.ca/cdn/shop/files/7-FramedWallVent_Luxe__Lifestyle1_8b91792c-d2f1-4fbc-aba0-eed00f9bb66e.png?v=1754061306&width=533" 7243 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7244 alt="" 7245 class="motion-reduce" 7246 loading="lazy" 7247 width="1080" 7248 height="1080" 7249 > 7250 </div> 7251 </div><div class="card__content"> 7252 <div class="card__information ss"> 7253 <h3 7254 class="card__heading" 7255 7256 > 7257 <a href="/products/framed-wall-vent-luxe" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-7756734005436" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-7756734005436 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-7756734005436"> 7258 Framed Wall Vent [Luxe] 7259 </a> 7260 </h3> 7261 </div> 7262 7263 7264 7265 </div> 7266 </div> 7267 7268 <div class="card__content"> 7269 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Drops into the opening with minimal tools. Slight lip at the edge; fully paintable.">Drop-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Standard airflow, well suited to most rooms.">Single Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Steel construction for a premium, long-lasting finish.">Steel</li></ul> 7270<div class="bv_rating_summary "> 7271 <div data-bv-show="rating_summary" data-bv-product-id="7756734005436"></div> 7272 </div> 7273 7274 <h3 7275 class="card__heading h6" 7276 7277 id="title-template--28630587998578__home_tab_product_tJDMfE-7756734005436" 7278 7279 > 7280 <a href="/products/framed-wall-vent-luxe" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-7756734005436" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-7756734005436 Badge-template--28630587998578__home_tab_product_tJDMfE-7756734005436"> 7281 Framed Wall Vent [Luxe] 7282 </a> 7283 </h3> 7284 <div class="card-information"> 7285 7286 7287<div 7288 class=" 7289 price " 7290 > 7291 <div class="price__container"><!-- REGULAR --> 7292 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
7293 <span class="price-item price-item--regular"> 7294 $64.00 USD+ 7295 </span></div> 7296 7297 7298 7299 <small class="unit-price caption hidden"> 7300 <span class="visually-hidden">Unit price</span> 7301 <span class="price-item price-item--last"> 7302 <span></span> 7303 <span aria-hidden="true">/</span> 7304 <span class="visually-hidden"> per </span> 7305 <span> 7306 </span> 7307 </span> 7308 </small> 7309 </div></div> 7310 7311 7312 7313</div> 7314 </div> 7315 7316 7317 7318 7319 7320 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-7756734005436"> 7321 <button 7322 id="quick-add-template--28630587998578__home_tab_product_tJDMfE7756734005436-submit" 7323 type="submit" 7324 name="add" 7325 class="quick-add__submit button button--full-width button--secondary" 7326 aria-haspopup="dialog" 7327 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE7756734005436-submit title-template--28630587998578__home_tab_product_tJDMfE-7756734005436" 7328 data-product-url="/products/framed-wall-vent-luxe" 7329 > 7330 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 7331 <g clip-path="url(#clip0_694_4827)"> 7332 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 7333 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 7334 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 7335 </g> 7336 <defs> 7337 <clipPath id="clip0_694_4827"> 7338 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 7339 </clipPath> 7340 </defs> 7341 </svg> 7342 7343<div class="loading__spinner hidden"> 7344 <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> 7345 7346</div> 7347</button> 7348 </modal-opener> 7349 <quick-add-modal id="QuickAdd-7756734005436" class="quick-add-modal"> 7350 <div 7351 role="dialog"
7352 aria-label="Choose options for Framed Wall Vent [Luxe]" 7353 aria-modal="true" 7354 class="quick-add-modal__content global-settings-popup" 7355 tabindex="-1" 7356 > 7357 <button 7358 id="ModalClose-7756734005436" 7359 type="button" 7360 class="quick-add-modal__toggle" 7361 aria-label="Close" 7362 ><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> 7363</button> 7364 <div id="QuickAddInfo-7756734005436" class="quick-add-modal__content-info"></div> 7365 </div> 7366 </quick-add-modal></div> 7367 7368 7369 7370 7371 <div class="card__badge top left"></div> 7372 </div> 7373 7374 </div> 7375 </div> 7376 <div class="my-buy-btn"> 7377<div class="" ><product-form 7378 class="product-form" 7379 data-hide-errors="false" 7380 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 7381 > 7382 <div class="product-form__error-message-wrapper" role="alert" hidden> 7383 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 7384</span> 7385 <span class="product-form__error-message"></span> 7386 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 7387 type="hidden" 7388 name="id" 7389 value="42946179006652" 7390 7391 class="product-variant-id" 7392 ><div class="product-form__buttons"><button 7393 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 7394 type="submit" 7395 name="add" 7396 class="product-form__submit button button--full-width button--primary" 7397 7398 > 7399 <span> 7400 Learn More 7401 7402</span> 7403 7404<div class="loading__spinner hidden"> 7405 <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> 7406 7407</div> 7408</button></div><input type="hidden" name="product-id" value="7756734005436" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 7409</div> 7410 </div> 7411 7412 <div class="swiper-slide card-slide"> 7413 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 7414 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 7415 7416 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 7417 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 7418<div 7419 preorder-product-element="form" 7420 d-id="14748889874802" 7421 data-product-id="14748889874802" 7422 class="card-wrapper product-card-wrapper underline-links-hover" 7423 style="position: relative;" 7424 > 7425 7426 <div 7427 class=" 7428 card card--standard 7429 card--media 7430 7431 7432 7433 7434 7435 " 7436 style="--ratio-percent: 100%;" 7437 > 7438<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 7439 7440<div 7441 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 7442 style="color: black; background-color: white;" 7443 >Airflow Increased</div> 7444 7445 </div> 7446 <div 7447 class="card__inner color-scheme-2 gradient ratio" 7448 style="--ratio-percent: 100%;" 7449 > 7450 7451<div class="card__media"> 7452 <div class="media media--transparent media--hover-effect"> 7453 7454 <img 7455 srcset="//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533 1080w 7456 " 7457 src="//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=533" 7458 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7459 alt="Flush Wall Vent [Lite+]"
7460 class="motion-reduce" 7461 7462 loading="lazy" 7463 7464 width="1080" 7465 height="1080" 7466 > 7467 7468<img 7469 srcset="//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=165 165w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=360 360w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=533 533w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=720 720w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=940 940w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=1066 1066w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925 2000w 7470 " 7471 src="//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=533" 7472 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7473 alt="" 7474 class="motion-reduce" 7475 loading="lazy" 7476 width="2000" 7477 height="2000" 7478 > 7479 </div> 7480 </div><div class="card__content"> 7481 <div class="card__information ss"> 7482 <h3 7483 class="card__heading" 7484 7485 > 7486 <a href="/products/flush-wall-vent-lite-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748889874802" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748889874802 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-14748889874802"> 7487 Flush Wall Vent [Lite+] 7488 </a> 7489 </h3> 7490 </div> 7491 7492 7493 7494 </div> 7495 </div> 7496 7497 <div class="card__content"> 7498 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Set into the drywall and finished with mud for a seamless, flush look.">Mud-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 7499<div class="bv_rating_summary "> 7500 <div data-bv-show="rating_summary" data-bv-product-id="14748889874802"></div> 7501 </div> 7502 7503 <h3 7504 class="card__heading h6" 7505 7506 id="title-template--28630587998578__home_tab_product_tJDMfE-14748889874802" 7507 7508 > 7509 <a href="/products/flush-wall-vent-lite-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748889874802" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748889874802 Badge-template--28630587998578__home_tab_product_tJDMfE-14748889874802"> 7510 Flush Wall Vent [Lite+] 7511 </a> 7512 </h3> 7513 <div class="card-information"> 7514 7515 7516<div 7517 class=" 7518 price " 7519 > 7520 <div class="price__container"><!-- REGULAR --> 7521 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> 7522 <span class="price-item price-item--regular"> 7523 $34.00 USD+ 7524 </span></div> 7525 7526 7527 7528 <small class="unit-price caption hidden"> 7529 <span class="visually-hidden">Unit price</span> 7530 <span class="price-item price-item--last"> 7531 <span></span> 7532 <span aria-hidden="true">/</span> 7533 <span class="visually-hidden"> per </span> 7534 <span> 7535 </span> 7536 </span> 7537 </small> 7538 </div></div> 7539 7540 7541 7542</div> 7543 </div> 7544 7545 7546 7547 7548 7549 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-14748889874802"> 7550 <button 7551 id="quick-add-template--28630587998578__home_tab_product_tJDMfE14748889874802-submit" 7552 type="submit" 7553 name="add" 7554 class="quick-add__submit button button--full-width button--secondary" 7555 aria-haspopup="dialog" 7556 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE14748889874802-submit title-template--28630587998578__home_tab_product_tJDMfE-14748889874802" 7557 data-product-url="/products/flush-wall-vent-lite-plus" 7558 > 7559 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 7560 <g clip-path="url(#clip0_694_4827)"> 7561 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 7562 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 7563 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.4854
75631 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 7564 </g> 7565 <defs> 7566 <clipPath id="clip0_694_4827"> 7567 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 7568 </clipPath> 7569 </defs> 7570 </svg> 7571 7572<div class="loading__spinner hidden"> 7573 <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> 7574 7575</div> 7576</button> 7577 </modal-opener> 7578 <quick-add-modal id="QuickAdd-14748889874802" class="quick-add-modal"> 7579 <div 7580 role="dialog" 7581 aria-label="Choose options for Flush Wall Vent [Lite+]" 7582 aria-modal="true" 7583 class="quick-add-modal__content global-settings-popup" 7584 tabindex="-1" 7585 > 7586 <button 7587 id="ModalClose-14748889874802" 7588 type="button" 7589 class="quick-add-modal__toggle" 7590 aria-label="Close" 7591 ><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> 7592</button> 7593 <div id="QuickAddInfo-14748889874802" class="quick-add-modal__content-info"></div> 7594 </div> 7595 </quick-add-modal></div> 7596 7597 7598 7599 7600 <div class="card__badge top left"></div> 7601 </div> 7602 7603 </div> 7604 </div> 7605 <div class="my-buy-btn"> 7606<div class="" ><product-form 7607 class="product-form" 7608 data-hide-errors="false" 7609 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 7610 > 7611 <div class="product-form__error-message-wrapper" role="alert" hidden> 7612 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 7613</span> 7614 <span class="product-form__error-message"></span> 7615 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 7616 type="hidden" 7617 name="id" 7618 value="52493906837874" 7619 7620 class="product-variant-id" 7621 ><div class="product-form__buttons"><button 7622 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 7623 type="submit" 7624 name="add" 7625 class="product-form__submit button button--full-width button--primary" 7626 7627 > 7628 <span> 7629 Learn More 7630 7631</span> 7632 7633<div class="loading__spinner hidden"> 7634 <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> 7635 7636</div> 7637</button></div><input type="hidden" name="product-id" value="14748889874802" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 7638</div> 7639 </div> 7640 7641 <div class="swiper-slide card-slide"> 7642 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 7643 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 7644 7645 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 7646 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 7647<div 7648 preorder-product-element="form" 7649 d-id="7488048824508" 7650 data-product-id="7488048824508" 7651 class="card-wrapper product-card-wrapper underline-links-hover" 7652 style="position: relative;" 7653 > 7654 7655 <div 7656 class=" 7657 card card--standard 7658 card--media 7659 7660 7661 7662 7663 7664 " 7665 style="--ratio-percent: 100%;" 7666 > 7667 7668 <div 7669 class="card__inner color-scheme-2 gradient ratio" 7670 style="--ratio-percent: 100%;" 7671 > 7672 7673<div class="card__media"> 7674 <div class="media media--transparent media--hover-effect"> 7675 7676 <img 7677 srcset="//fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=165 165w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=360 360w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=533 533w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=720 720w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=940 940w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=1066 1066w,//fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170 1080w 7678 " 7679 src="//fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=533" 7680 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7681 alt="Flush Wall Vent [Lite]" 7682 class="motion-reduce" 7683 7684 loading="lazy" 7685 7686 width="1080" 7687 height="1080" 7688 > 7689 7690<img 7691 srcset="//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=165 165w,//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=360 360w,//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=533 533w,//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=720 720w,//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=940 940w,//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267 1000w 7692 " 7693 src="//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=533" 7694 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7695 alt="" 7696 class="motion-reduce" 7697 loading="lazy" 7698 width="1000" 7699 height="1000" 7700 > 7701 </div> 7702 </div><div class="card__content"> 7703 <div class="card__information ss"> 7704 <h3 7705 class="card__heading" 7706 7707 > 7708 <a href="/products/flush-wall-vent-lite" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-7488048824508" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-7488048824508 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-7488048824508"> 7709 Flush Wall Vent [Lite] 7710 </a> 7711 </h3> 7712 </div> 7713 7714 7715 7716 </div> 7717 </div> 7718 7719 <div class="card__content"> 7720 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Set into the drywall and finished with mud for a seamless, flush look.">Mud-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Standard airflow, well suited to most rooms.">Single Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 7721<div class="bv_rating_summary "> 7722 <div data-bv-show="rating_summary" data-bv-product-id="7488048824508"></div> 7723 </div> 7724 7725 <h3 7726 class="card__heading h6" 7727 7728 id="title-template--28630587998578__home_tab_product_tJDMfE-7488048824508" 7729 7730 > 7731 <a href="/products/flush-wall-vent-lite" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-7488048824508" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-7488048824508 Badge-template--28630587998578__home_tab_product_tJDMfE-7488048824508"> 7732 Flush Wall Vent [Lite] 7733 </a> 7734 </h3> 7735 <div class="card-information"> 7736 7737 7738<div 7739 class=" 7740 price " 7741 > 7742 <div class="price__container"><!-- REGULAR --> 7743 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
7744 <span class="price-item price-item--regular"> 7745 $26.00 USD+ 7746 </span></div> 7747 7748 7749 7750 <small class="unit-price caption hidden"> 7751 <span class="visually-hidden">Unit price</span> 7752 <span class="price-item price-item--last"> 7753 <span></span> 7754 <span aria-hidden="true">/</span> 7755 <span class="visually-hidden"> per </span> 7756 <span> 7757 </span> 7758 </span> 7759 </small> 7760 </div></div> 7761 7762 7763 7764</div> 7765 </div> 7766 7767 7768 7769 7770 7771 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-7488048824508"> 7772 <button 7773 id="quick-add-template--28630587998578__home_tab_product_tJDMfE7488048824508-submit" 7774 type="submit" 7775 name="add" 7776 class="quick-add__submit button button--full-width button--secondary" 7777 aria-haspopup="dialog" 7778 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE7488048824508-submit title-template--28630587998578__home_tab_product_tJDMfE-7488048824508" 7779 data-product-url="/products/flush-wall-vent-lite" 7780 > 7781 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 7782 <g clip-path="url(#clip0_694_4827)"> 7783 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 7784 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 7785 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 7786 </g> 7787 <defs> 7788 <clipPath id="clip0_694_4827"> 7789 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 7790 </clipPath> 7791 </defs> 7792 </svg> 7793 7794<div class="loading__spinner hidden"> 7795 <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> 7796 7797</div> 7798</button> 7799 </modal-opener> 7800 <quick-add-modal id="QuickAdd-7488048824508" class="quick-add-modal"> 7801 <div 7802 role="dialog"
7803 aria-label="Choose options for Flush Wall Vent [Lite]" 7804 aria-modal="true" 7805 class="quick-add-modal__content global-settings-popup" 7806 tabindex="-1" 7807 > 7808 <button 7809 id="ModalClose-7488048824508" 7810 type="button" 7811 class="quick-add-modal__toggle" 7812 aria-label="Close" 7813 ><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> 7814</button> 7815 <div id="QuickAddInfo-7488048824508" class="quick-add-modal__content-info"></div> 7816 </div> 7817 </quick-add-modal></div> 7818 7819 7820 7821 7822 <div class="card__badge top left"></div> 7823 </div> 7824 7825 </div> 7826 </div> 7827 <div class="my-buy-btn"> 7828<div class="" ><product-form 7829 class="product-form" 7830 data-hide-errors="false" 7831 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 7832 > 7833 <div class="product-form__error-message-wrapper" role="alert" hidden> 7834 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 7835</span> 7836 <span class="product-form__error-message"></span> 7837 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 7838 type="hidden" 7839 name="id" 7840 value="42531349954748" 7841 7842 class="product-variant-id" 7843 ><div class="product-form__buttons"><button 7844 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 7845 type="submit" 7846 name="add" 7847 class="product-form__submit button button--full-width button--primary" 7848 7849 > 7850 <span> 7851 Learn More 7852 7853</span> 7854 7855<div class="loading__spinner hidden"> 7856 <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> 7857 7858</div> 7859</button></div><input type="hidden" name="product-id" value="7488048824508" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 7860</div> 7861 </div> 7862 7863 <div class="swiper-slide card-slide"> 7864 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 7865 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 7866 7867 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 7868 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 7869<div 7870 preorder-product-element="form" 7871 d-id="14748886270322" 7872 data-product-id="14748886270322" 7873 class="card-wrapper product-card-wrapper underline-links-hover" 7874 style="position: relative;" 7875 > 7876 7877 <div 7878 class=" 7879 card card--standard 7880 card--media 7881 7882 7883 7884 7885 7886 " 7887 style="--ratio-percent: 100%;" 7888 > 7889<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 7890 7891<div 7892 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 7893 style="color: black; background-color: white;" 7894 >Airflow Increased</div> 7895 7896 </div> 7897 <div 7898 class="card__inner color-scheme-2 gradient ratio" 7899 style="--ratio-percent: 100%;" 7900 > 7901 7902<div class="card__media"> 7903 <div class="media media--transparent media--hover-effect"> 7904 7905 <img 7906 srcset="//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565 1080w 7907 " 7908 src="//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=533" 7909 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7910 alt="Framed Wall Vent [Lite+]"
7911 class="motion-reduce" 7912 7913 loading="lazy" 7914 7915 width="1080" 7916 height="1080" 7917 > 7918 7919<img 7920 srcset="//fittes.ca/cdn/shop/files/preview_images/cec61f8de7b44b5e9c63e555ec680c96.thumbnail.0000000000.jpg?v=1752259765 w 7921 " 7922 src="//fittes.ca/cdn/shop/files/preview_images/cec61f8de7b44b5e9c63e555ec680c96.thumbnail.0000000000.jpg?v=1752259765&width=533" 7923 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 7924 alt="" 7925 class="motion-reduce" 7926 loading="lazy" 7927 width="" 7928 height="" 7929 > 7930 </div> 7931 </div><div class="card__content"> 7932 <div class="card__information ss"> 7933 <h3 7934 class="card__heading" 7935 7936 > 7937 <a href="/products/framed-wall-vent-lite-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748886270322" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748886270322 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-14748886270322"> 7938 Framed Wall Vent [Lite+] 7939 </a> 7940 </h3> 7941 </div> 7942 7943 7944 7945 </div> 7946 </div> 7947 7948 <div class="card__content"> 7949 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Drops into the opening with minimal tools. Slight lip at the edge; fully paintable.">Drop-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 7950<div class="bv_rating_summary "> 7951 <div data-bv-show="rating_summary" data-bv-product-id="14748886270322"></div> 7952 </div> 7953 7954 <h3 7955 class="card__heading h6" 7956 7957 id="title-template--28630587998578__home_tab_product_tJDMfE-14748886270322" 7958 7959 > 7960 <a href="/products/framed-wall-vent-lite-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748886270322" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748886270322 Badge-template--28630587998578__home_tab_product_tJDMfE-14748886270322"> 7961 Framed Wall Vent [Lite+] 7962 </a> 7963 </h3> 7964 <div class="card-information"> 7965 7966 7967<div 7968 class=" 7969 price " 7970 > 7971 <div class="price__container"><!-- REGULAR --> 7972 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> 7973 <span class="price-item price-item--regular"> 7974 $34.00 USD+ 7975 </span></div> 7976 7977 7978 7979 <small class="unit-price caption hidden"> 7980 <span class="visually-hidden">Unit price</span> 7981 <span class="price-item price-item--last"> 7982 <span></span> 7983 <span aria-hidden="true">/</span> 7984 <span class="visually-hidden"> per </span> 7985 <span> 7986 </span> 7987 </span> 7988 </small> 7989 </div></div> 7990 7991 7992 7993</div> 7994 </div> 7995 7996 7997 7998 7999 8000 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-14748886270322"> 8001 <button 8002 id="quick-add-template--28630587998578__home_tab_product_tJDMfE14748886270322-submit" 8003 type="submit" 8004 name="add" 8005 class="quick-add__submit button button--full-width button--secondary" 8006 aria-haspopup="dialog" 8007 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE14748886270322-submit title-template--28630587998578__home_tab_product_tJDMfE-14748886270322" 8008 data-product-url="/products/framed-wall-vent-lite-plus" 8009 > 8010 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 8011 <g clip-path="url(#clip0_694_4827)"> 8012 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 8013 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 8014 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.4854
80141 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 8015 </g> 8016 <defs> 8017 <clipPath id="clip0_694_4827"> 8018 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 8019 </clipPath> 8020 </defs> 8021 </svg> 8022 8023<div class="loading__spinner hidden"> 8024 <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> 8025 8026</div> 8027</button> 8028 </modal-opener> 8029 <quick-add-modal id="QuickAdd-14748886270322" class="quick-add-modal"> 8030 <div 8031 role="dialog" 8032 aria-label="Choose options for Framed Wall Vent [Lite+]" 8033 aria-modal="true" 8034 class="quick-add-modal__content global-settings-popup" 8035 tabindex="-1" 8036 > 8037 <button 8038 id="ModalClose-14748886270322" 8039 type="button" 8040 class="quick-add-modal__toggle" 8041 aria-label="Close" 8042 ><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> 8043</button> 8044 <div id="QuickAddInfo-14748886270322" class="quick-add-modal__content-info"></div> 8045 </div> 8046 </quick-add-modal></div> 8047 8048 8049 8050 8051 <div class="card__badge top left"></div> 8052 </div> 8053 8054 </div> 8055 </div> 8056 <div class="my-buy-btn"> 8057<div class="" ><product-form 8058 class="product-form" 8059 data-hide-errors="false" 8060 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 8061 > 8062 <div class="product-form__error-message-wrapper" role="alert" hidden> 8063 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 8064</span> 8065 <span class="product-form__error-message"></span> 8066 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 8067 type="hidden" 8068 name="id" 8069 value="52493908509042" 8070 8071 class="product-variant-id" 8072 ><div class="product-form__buttons"><button 8073 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 8074 type="submit" 8075 name="add" 8076 class="product-form__submit button button--full-width button--primary" 8077 8078 > 8079 <span> 8080 Learn More 8081 8082</span> 8083 8084<div class="loading__spinner hidden"> 8085 <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> 8086 8087</div> 8088</button></div><input type="hidden" name="product-id" value="14748886270322" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 8089</div> 8090 </div> 8091 8092 <div class="swiper-slide card-slide"> 8093 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 8094 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 8095 8096 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 8097 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 8098<div 8099 preorder-product-element="form" 8100 d-id="7488051216572" 8101 data-product-id="7488051216572" 8102 class="card-wrapper product-card-wrapper underline-links-hover" 8103 style="position: relative;" 8104 > 8105 8106 <div 8107 class=" 8108 card card--standard 8109 card--media 8110 8111 8112 8113 8114 8115 " 8116 style="--ratio-percent: 100%;" 8117 > 8118 8119 <div 8120 class="card__inner color-scheme-2 gradient ratio" 8121 style="--ratio-percent: 100%;" 8122 > 8123 8124<div class="card__media"> 8125 <div class="media media--transparent media--hover-effect"> 8126 8127 <img 8128 srcset="//fittes.ca/cdn/shop/files/1-FramedWallVent_Lite__Lifestyle1.jpg?v=1754022166&width=165 165w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Lite__Lifestyle1.jpg?v=1754022166&width=360 360w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Lite__Lifestyle1.jpg?v=1754022166&width=533 533w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Lite__Lifestyle1.jpg?v=1754022166&width=720 720w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Lite__Lifestyle1.jpg?v=1754022166&width=940 940w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Lite__Lifestyle1.jpg?v=1754022166&width=1066 1066w,//fittes.ca/cdn/shop/files/1-FramedWallVent_Lite__Lifestyle1.jpg?v=1754022166 1080w 8129 " 8130 src="//fittes.ca/cdn/shop/files/1-FramedWallVent_Lite__Lifestyle1.jpg?v=1754022166&width=533" 8131 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8132 alt="Framed Wall Vent [Lite]" 8133 class="motion-reduce" 8134 8135 loading="lazy" 8136 8137 width="1080" 8138 height="1080" 8139 > 8140 8141<img 8142 srcset="//fittes.ca/cdn/shop/files/7-FramedWallVent_Lite__Lifestyle2.png?v=1754060149&width=165 165w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Lite__Lifestyle2.png?v=1754060149&width=360 360w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Lite__Lifestyle2.png?v=1754060149&width=533 533w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Lite__Lifestyle2.png?v=1754060149&width=720 720w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Lite__Lifestyle2.png?v=1754060149&width=940 940w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Lite__Lifestyle2.png?v=1754060149&width=1066 1066w,//fittes.ca/cdn/shop/files/7-FramedWallVent_Lite__Lifestyle2.png?v=1754060149 1080w 8143 " 8144 src="//fittes.ca/cdn/shop/files/7-FramedWallVent_Lite__Lifestyle2.png?v=1754060149&width=533" 8145 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8146 alt="" 8147 class="motion-reduce" 8148 loading="lazy" 8149 width="1080" 8150 height="1080" 8151 > 8152 </div> 8153 </div><div class="card__content"> 8154 <div class="card__information ss"> 8155 <h3 8156 class="card__heading" 8157 8158 > 8159 <a href="/products/framed-wall-vent-lite" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-7488051216572"
8159class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-7488051216572 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-7488051216572"> 8160 Framed Wall Vent [Lite] 8161 </a> 8162 </h3> 8163 </div> 8164 8165 8166 8167 </div> 8168 </div> 8169 8170 <div class="card__content"> 8171 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Drops into the opening with minimal tools. Slight lip at the edge; fully paintable.">Drop-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Standard airflow, well suited to most rooms.">Single Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 8172<div class="bv_rating_summary "> 8173 <div data-bv-show="rating_summary" data-bv-product-id="7488051216572"></div> 8174 </div> 8175 8176 <h3 8177 class="card__heading h6" 8178 8179 id="title-template--28630587998578__home_tab_product_tJDMfE-7488051216572" 8180 8181 > 8182 <a href="/products/framed-wall-vent-lite" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-7488051216572"
8182class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-7488051216572 Badge-template--28630587998578__home_tab_product_tJDMfE-7488051216572"> 8183 Framed Wall Vent [Lite] 8184 </a> 8185 </h3> 8186 <div class="card-information"> 8187 8188 8189<div 8190 class=" 8191 price " 8192 > 8193 <div class="price__container"><!-- REGULAR --> 8194 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> 8195 <span class="price-item price-item--regular"> 8196 $26.00 USD+ 8197 </span></div> 8198 8199 8200 8201 <small class="unit-price caption hidden"> 8202 <span class="visually-hidden">Unit price</span> 8203 <span class="price-item price-item--last"> 8204 <span></span> 8205 <span aria-hidden="true">/</span> 8206 <span class="visually-hidden"> per </span> 8207 <span> 8208 </span> 8209 </span> 8210 </small> 8211 </div></div> 8212 8213 8214 8215</div> 8216 </div> 8217 8218 8219 8220 8221 8222 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-7488051216572"> 8223 <button 8224 id="quick-add-template--28630587998578__home_tab_product_tJDMfE7488051216572-submit" 8225 type="submit" 8226 name="add" 8227 class="quick-add__submit button button--full-width button--secondary" 8228 aria-haspopup="dialog" 8229 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE7488051216572-submit title-template--28630587998578__home_tab_product_tJDMfE-7488051216572" 8230 data-product-url="/products/framed-wall-vent-lite" 8231 > 8232 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 8233 <g clip-path="url(#clip0_694_4827)"> 8234 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 8235 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 8236 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 8237 </g> 8238 <defs> 8239 <clipPath id="clip0_694_4827"> 8240 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357
8240)"/> 8241 </clipPath> 8242 </defs> 8243 </svg> 8244 8245<div class="loading__spinner hidden"> 8246 <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> 8247 8248</div> 8249</button> 8250 </modal-opener> 8251 <quick-add-modal id="QuickAdd-7488051216572" class="quick-add-modal"> 8252 <div 8253 role="dialog" 8254 aria-label="Choose options for Framed Wall Vent [Lite]" 8255 aria-modal="true" 8256 class="quick-add-modal__content global-settings-popup" 8257 tabindex="-1" 8258 > 8259 <button 8260 id="ModalClose-7488051216572" 8261 type="button" 8262 class="quick-add-modal__toggle" 8263 aria-label="Close" 8264 ><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> 8265</button>
8266 <div id="QuickAddInfo-7488051216572" class="quick-add-modal__content-info"></div> 8267 </div> 8268 </quick-add-modal></div> 8269 8270 8271 8272 8273 <div class="card__badge top left"></div> 8274 </div> 8275 8276 </div> 8277 </div> 8278 <div class="my-buy-btn"> 8279<div class="" ><product-form 8280 class="product-form" 8281 data-hide-errors="false" 8282 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 8283 > 8284 <div class="product-form__error-message-wrapper" role="alert" hidden> 8285 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 8286</span> 8287 <span class="product-form__error-message"></span> 8288 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 8289 type="hidden" 8290 name="id" 8291 value="42531455566012" 8292 8293 class="product-variant-id" 8294 ><div class="product-form__buttons"><button 8295 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 8296 type="submit" 8297 name="add" 8298 class="product-form__submit button button--full-width button--primary" 8299 8300 > 8301 <span> 8302 Learn More 8303 8304</span> 8305 8306<div class="loading__spinner hidden"> 8307 <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> 8308 8309</div> 8310</button></div><input type="hidden" name="product-id" value="7488051216572" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 8311</div> 8312 </div> 8313 8314 </div> 8315 </div> 8316 <div class="swiper-button-prev small-hide swiper-button-disabled"> 8317 <svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 27 27" fill="none"> 8318 <path d="M22.1953 13.9355H4.98519M4.98519 13.9355C4.98519 13.9355 9.86348 10.7272 10.8548 8.06592M4.98519 13.9355C4.98519 13.9355 9.29778 16.95 10.8548 19.805" stroke="#1E1E1E" stroke-width="2.17391" stroke-linecap="square"/> 8319 </svg> 8320 </div> 8321 <div class="swiper-button-next small-hide"> 8322 <svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 27 27" fill="none"> 8323 <path d="M4.80469 13.9355H22.0148M22.0148 13.9355C22.0148 13.9355 17.1365 10.7272 16.1452 8.06592M22.0148 13.9355C22.0148 13.9355 17.7022 16.95 16.1452 19.805" stroke="#1E1E1E" stroke-width="2.17391" stroke-linecap="square"/> 8324 </svg> 8325 </div> 8326 </div> 8327 </template> 8328 </div> 8329 8330 <div class="series-product-bottom" data-content="floor-vents" data-index="1"><template data-swiper-template> 8331 <div class="swiper-outer-wrapper"> 8332 <div class="swiper mySwiper series-product-product"> 8333 <div class="swiper-wrapper"> 8334 8335 <div class="swiper-slide card-slide"> 8336 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 8337 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 8338 8339 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 8340 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 8341<div 8342 preorder-product-element="form" 8343 d-id="8029697212604" 8344 data-product-id="8029697212604" 8345 class="card-wrapper product-card-wrapper underline-links-hover" 8346 style="position: relative;" 8347 > 8348 8349 <div 8350 class=" 8351 card card--standard 8352 card--media 8353 8354 8355 8356 8357 8358 " 8359 style="--ratio-percent: 100%;" 8360 > 8361<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 8362 8363<div 8364 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 8365 style="color: black; background-color: white;" 8366 >Airflow Increased</div> 8367 8368 </div> 8369 <div 8370 class="card__inner color-scheme-2 gradient ratio" 8371 style="--ratio-percent: 100%;" 8372 > 8373 8374<div class="card__media"> 8375 <div class="media media--transparent media--hover-effect"> 8376 8377 <img 8378 srcset="//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Luxe___Lifestyle_1_baa012c5-72d0-4e2a-9397-b05a915b2aeb.jpg?v=1772198044&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Luxe___Lifestyle_1_baa012c5-72d0-4e2a-9397-b05a915b2aeb.jpg?v=1772198044&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Luxe___Lifestyle_1_baa012c5-72d0-4e2a-9397-b05a915b2aeb.jpg?v=1772198044&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Luxe___Lifestyle_1_baa012c5-72d0-4e2a-9397-b05a915b2aeb.jpg?v=1772198044&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Luxe___Lifestyle_1_baa012c5-72d0-4e2a-9397-b05a915b2aeb.jpg?v=1772198044&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Luxe___Lifestyle_1_baa012c5-72d0-4e2a-9397-b05a915b2aeb.jpg?v=1772198044&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Luxe___Lifestyle_1_baa012c5-72d0-4e2a-9397-b05a915b2aeb.jpg?v=1772198044 1080w 8379 " 8380 src="//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Luxe___Lifestyle_1_baa012c5-72d0-4e2a-9397-b05a915b2aeb.jpg?v=1772198044&width=533" 8381 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8382 alt="Flush Floor Vent [Luxe+]" 8383 class="motion-reduce" 8384 8385 loading="lazy" 8386 8387 width="1080" 8388 height="1080" 8389 > 8390 8391<img 8392 srcset="//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=165 165w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=360 360w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=533 533w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=720 720w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=940 940w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011 1000w 8393 " 8394 src="//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=533" 8395 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8396 alt="" 8397 class="motion-reduce" 8398 loading="lazy" 8399 width="1000" 8400 height="1000" 8401 > 8402 </div> 8403 </div><div class="card__content"> 8404 <div class="card__information ss"> 8405 <h3 8406 class="card__heading" 8407 8408 > 8409 <a href="/products/flush-floor-vent-luxe-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-8029697212604" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-8029697212604 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-8029697212604"> 8410 Flush Floor Vent [Luxe+] 8411 </a> 8412 </h3> 8413 </div> 8414 8415 8416 8417 </div> 8418 </div> 8419 8420 <div class="card__content"> 8421 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Installs before the flooring goes down, sitting flush on the sub-floor.">Sub-Floor</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Steel construction for a premium, long-lasting finish.">Steel</li></ul> 8422<div class="bv_rating_summary "> 8423 <div data-bv-show="rating_summary" data-bv-product-id="8029697212604"></div> 8424 </div> 8425 8426 <h3 8427 class="card__heading h6" 8428 8429 id="title-template--28630587998578__home_tab_product_tJDMfE-8029697212604" 8430 8431 > 8432 <a href="/products/flush-floor-vent-luxe-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-8029697212604" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-8029697212604 Badge-template--28630587998578__home_tab_product_tJDMfE-8029697212604"> 8433 Flush Floor Vent [Luxe+] 8434 </a> 8435 </h3> 8436 <div class="card-information"> 8437 8438 8439<div 8440 class=" 8441 price " 8442 > 8443 <div class="price__container"><!-- REGULAR --> 8444 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
8445 <span class="price-item price-item--regular"> 8446 $100.00 USD+ 8447 </span></div> 8448 8449 8450 8451 <small class="unit-price caption hidden"> 8452 <span class="visually-hidden">Unit price</span> 8453 <span class="price-item price-item--last"> 8454 <span></span> 8455 <span aria-hidden="true">/</span> 8456 <span class="visually-hidden"> per </span> 8457 <span> 8458 </span> 8459 </span> 8460 </small> 8461 </div></div> 8462 8463 8464 8465</div> 8466 </div> 8467 8468 8469 8470 8471 8472 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-8029697212604"> 8473 <button 8474 id="quick-add-template--28630587998578__home_tab_product_tJDMfE8029697212604-submit" 8475 type="submit" 8476 name="add" 8477 class="quick-add__submit button button--full-width button--secondary" 8478 aria-haspopup="dialog" 8479 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE8029697212604-submit title-template--28630587998578__home_tab_product_tJDMfE-8029697212604" 8480 data-product-url="/products/flush-floor-vent-luxe-plus" 8481 > 8482 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 8483 <g clip-path="url(#clip0_694_4827)"> 8484 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 8485 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 8486 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 8487 </g> 8488 <defs> 8489 <clipPath id="clip0_694_4827"> 8490 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 8491 </clipPath> 8492 </defs> 8493 </svg> 8494 8495<div class="loading__spinner hidden"> 8496 <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> 8497 8498</div> 8499</button> 8500 </modal-opener> 8501 <quick-add-modal id="QuickAdd-8029697212604" class="quick-add-modal"> 8502 <div 8503 role="dialog"
8504 aria-label="Choose options for Flush Floor Vent [Luxe+]" 8505 aria-modal="true" 8506 class="quick-add-modal__content global-settings-popup" 8507 tabindex="-1" 8508 > 8509 <button 8510 id="ModalClose-8029697212604" 8511 type="button" 8512 class="quick-add-modal__toggle" 8513 aria-label="Close" 8514 ><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> 8515</button> 8516 <div id="QuickAddInfo-8029697212604" class="quick-add-modal__content-info"></div> 8517 </div> 8518 </quick-add-modal></div> 8519 8520 8521 8522 8523 <div class="card__badge top left"></div> 8524 </div> 8525 8526 </div> 8527 </div> 8528 <div class="my-buy-btn"> 8529<div class="" ><product-form 8530 class="product-form" 8531 data-hide-errors="false" 8532 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 8533 > 8534 <div class="product-form__error-message-wrapper" role="alert" hidden> 8535 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 8536</span> 8537 <span class="product-form__error-message"></span> 8538 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 8539 type="hidden" 8540 name="id" 8541 value="42923404820668" 8542 8543 class="product-variant-id" 8544 ><div class="product-form__buttons"><button 8545 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 8546 type="submit" 8547 name="add" 8548 class="product-form__submit button button--full-width button--primary" 8549 8550 > 8551 <span> 8552 Learn More 8553 8554</span> 8555 8556<div class="loading__spinner hidden"> 8557 <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> 8558 8559</div> 8560</button></div><input type="hidden" name="product-id" value="8029697212604" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 8561</div> 8562 </div> 8563 8564 <div class="swiper-slide card-slide"> 8565 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 8566 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 8567 8568 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 8569 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 8570<div 8571 preorder-product-element="form" 8572 d-id="2339952721982" 8573 data-product-id="2339952721982" 8574 class="card-wrapper product-card-wrapper underline-links-hover" 8575 style="position: relative;" 8576 > 8577 8578 <div 8579 class=" 8580 card card--standard 8581 card--media 8582 8583 8584 8585 8586 8587 " 8588 style="--ratio-percent: 100%;" 8589 > 8590 8591 <div 8592 class="card__inner color-scheme-2 gradient ratio" 8593 style="--ratio-percent: 100%;" 8594 > 8595 8596<div class="card__media"> 8597 <div class="media media--transparent media--hover-effect"> 8598 8599 <img 8600 srcset="//fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.jpg?v=1754022197&width=165 165w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.jpg?v=1754022197&width=360 360w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.jpg?v=1754022197&width=533 533w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.jpg?v=1754022197&width=720 720w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.jpg?v=1754022197&width=940 940w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.jpg?v=1754022197&width=1066 1066w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.jpg?v=1754022197 1080w 8601 " 8602 src="//fittes.ca/cdn/shop/files/1-FlushFloorVent_Luxe__Lifestyle1.jpg?v=1754022197&width=533" 8603 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8604 alt="Flush Floor Vent [Luxe]" 8605 class="motion-reduce" 8606 8607 loading="lazy" 8608 8609 width="1080" 8610 height="1080" 8611 > 8612 8613<img 8614 srcset="//fittes.ca/cdn/shop/files/8-FlushFloorVent_Luxe__Lifestyle1.png?v=1754076362&width=165 165w,//fittes.ca/cdn/shop/files/8-FlushFloorVent_Luxe__Lifestyle1.png?v=1754076362&width=360 360w,//fittes.ca/cdn/shop/files/8-FlushFloorVent_Luxe__Lifestyle1.png?v=1754076362&width=533 533w,//fittes.ca/cdn/shop/files/8-FlushFloorVent_Luxe__Lifestyle1.png?v=1754076362&width=720 720w,//fittes.ca/cdn/shop/files/8-FlushFloorVent_Luxe__Lifestyle1.png?v=1754076362&width=940 940w,//fittes.ca/cdn/shop/files/8-FlushFloorVent_Luxe__Lifestyle1.png?v=1754076362&width=1066 1066w,//fittes.ca/cdn/shop/files/8-FlushFloorVent_Luxe__Lifestyle1.png?v=1754076362 1080w 8615 " 8616 src="//fittes.ca/cdn/shop/files/8-FlushFloorVent_Luxe__Lifestyle1.png?v=1754076362&width=533" 8617 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8618 alt="" 8619 class="motion-reduce" 8620 loading="lazy" 8621 width="1080" 8622 height="1080" 8623 > 8624 </div> 8625 </div><div class="card__content"> 8626 <div class="card__information ss"> 8627 <h3 8628 class="card__heading" 8629 8630 > 8631 <a href="/products/flush-floor-vent-luxe" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-2339952721982" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-2339952721982 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-2339952721982"> 8632 Flush Floor Vent [Luxe] 8633 </a> 8634 </h3> 8635 </div> 8636 8637 8638 8639 </div> 8640 </div> 8641 8642 <div class="card__content"> 8643 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Installs before the flooring goes down, sitting flush on the sub-floor.">Sub-Floor</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Standard airflow, well suited to most rooms.">Single Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Steel construction for a premium, long-lasting finish.">Steel</li></ul> 8644<div class="bv_rating_summary "> 8645 <div data-bv-show="rating_summary" data-bv-product-id="2339952721982"></div> 8646 </div> 8647 8648 <h3 8649 class="card__heading h6" 8650 8651 id="title-template--28630587998578__home_tab_product_tJDMfE-2339952721982" 8652 8653 > 8654 <a href="/products/flush-floor-vent-luxe" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-2339952721982" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-2339952721982 Badge-template--28630587998578__home_tab_product_tJDMfE-2339952721982"> 8655 Flush Floor Vent [Luxe] 8656 </a> 8657 </h3> 8658 <div class="card-information"> 8659 8660 8661<div 8662 class=" 8663 price " 8664 > 8665 <div class="price__container"><!-- REGULAR --> 8666 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
8667 <span class="price-item price-item--regular"> 8668 $69.00 USD+ 8669 </span></div> 8670 8671 8672 8673 <small class="unit-price caption hidden"> 8674 <span class="visually-hidden">Unit price</span> 8675 <span class="price-item price-item--last"> 8676 <span></span> 8677 <span aria-hidden="true">/</span> 8678 <span class="visually-hidden"> per </span> 8679 <span> 8680 </span> 8681 </span> 8682 </small> 8683 </div></div> 8684 8685 8686 8687</div> 8688 </div> 8689 8690 8691 8692 8693 8694 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-2339952721982"> 8695 <button 8696 id="quick-add-template--28630587998578__home_tab_product_tJDMfE2339952721982-submit" 8697 type="submit" 8698 name="add" 8699 class="quick-add__submit button button--full-width button--secondary" 8700 aria-haspopup="dialog" 8701 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE2339952721982-submit title-template--28630587998578__home_tab_product_tJDMfE-2339952721982" 8702 data-product-url="/products/flush-floor-vent-luxe" 8703 > 8704 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 8705 <g clip-path="url(#clip0_694_4827)"> 8706 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 8707 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 8708 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 8709 </g> 8710 <defs> 8711 <clipPath id="clip0_694_4827"> 8712 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 8713 </clipPath> 8714 </defs> 8715 </svg> 8716 8717<div class="loading__spinner hidden"> 8718 <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> 8719 8720</div> 8721</button> 8722 </modal-opener> 8723 <quick-add-modal id="QuickAdd-2339952721982" class="quick-add-modal"> 8724 <div 8725 role="dialog"
8726 aria-label="Choose options for Flush Floor Vent [Luxe]" 8727 aria-modal="true" 8728 class="quick-add-modal__content global-settings-popup" 8729 tabindex="-1" 8730 > 8731 <button 8732 id="ModalClose-2339952721982" 8733 type="button" 8734 class="quick-add-modal__toggle" 8735 aria-label="Close" 8736 ><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> 8737</button> 8738 <div id="QuickAddInfo-2339952721982" class="quick-add-modal__content-info"></div> 8739 </div> 8740 </quick-add-modal></div> 8741 8742 8743 8744 8745 <div class="card__badge top left"></div> 8746 </div> 8747 8748 </div> 8749 </div> 8750 <div class="my-buy-btn"> 8751<div class="" ><product-form 8752 class="product-form" 8753 data-hide-errors="false" 8754 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 8755 > 8756 <div class="product-form__error-message-wrapper" role="alert" hidden> 8757 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 8758</span> 8759 <span class="product-form__error-message"></span> 8760 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 8761 type="hidden" 8762 name="id" 8763 value="61247546818930" 8764 8765 class="product-variant-id" 8766 ><div class="product-form__buttons"><button 8767 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 8768 type="submit" 8769 name="add" 8770 class="product-form__submit button button--full-width button--primary" 8771 8772 > 8773 <span> 8774 Learn More 8775 8776</span> 8777 8778<div class="loading__spinner hidden"> 8779 <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> 8780 8781</div> 8782</button></div><input type="hidden" name="product-id" value="2339952721982" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 8783</div> 8784 </div> 8785 8786 <div class="swiper-slide card-slide"> 8787 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 8788 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 8789 8790 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 8791 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 8792<div 8793 preorder-product-element="form" 8794 d-id="8029699768508" 8795 data-product-id="8029699768508" 8796 class="card-wrapper product-card-wrapper underline-links-hover" 8797 style="position: relative;" 8798 > 8799 8800 <div 8801 class=" 8802 card card--standard 8803 card--media 8804 8805 8806 8807 8808 8809 " 8810 style="--ratio-percent: 100%;" 8811 > 8812<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 8813 8814<div 8815 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 8816 style="color: black; background-color: white;" 8817 >Airflow Increased</div> 8818 8819 </div> 8820 <div 8821 class="card__inner color-scheme-2 gradient ratio" 8822 style="--ratio-percent: 100%;" 8823 > 8824 8825<div class="card__media"> 8826 <div class="media media--transparent media--hover-effect"> 8827 8828 <img 8829 srcset="//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Luxe___Lifestyle_1_53e2fa67-6466-41c0-af0e-a9523cd921fb.jpg?v=1772197987&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Luxe___Lifestyle_1_53e2fa67-6466-41c0-af0e-a9523cd921fb.jpg?v=1772197987&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Luxe___Lifestyle_1_53e2fa67-6466-41c0-af0e-a9523cd921fb.jpg?v=1772197987&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Luxe___Lifestyle_1_53e2fa67-6466-41c0-af0e-a9523cd921fb.jpg?v=1772197987&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Luxe___Lifestyle_1_53e2fa67-6466-41c0-af0e-a9523cd921fb.jpg?v=1772197987&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Luxe___Lifestyle_1_53e2fa67-6466-41c0-af0e-a9523cd921fb.jpg?v=1772197987&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Luxe___Lifestyle_1_53e2fa67-6466-41c0-af0e-a9523cd921fb.jpg?v=1772197987 1080w 8830 " 8831 src="//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Luxe___Lifestyle_1_53e2fa67-6466-41c0-af0e-a9523cd921fb.jpg?v=1772197987&width=533" 8832 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8833 alt="Framed Floor Vent [Luxe+]" 8834 class="motion-reduce" 8835 8836 loading="lazy" 8837 8838 width="1080" 8839 height="1080" 8840 > 8841 8842<img 8843 srcset="//fittes.ca/cdn/shop/files/8_-_Framed_Floor_Vent_Luxe___Lifestyle_1.png?v=1772197987&width=165 165w,//fittes.ca/cdn/shop/files/8_-_Framed_Floor_Vent_Luxe___Lifestyle_1.png?v=1772197987&width=360 360w,//fittes.ca/cdn/shop/files/8_-_Framed_Floor_Vent_Luxe___Lifestyle_1.png?v=1772197987&width=533 533w,//fittes.ca/cdn/shop/files/8_-_Framed_Floor_Vent_Luxe___Lifestyle_1.png?v=1772197987&width=720 720w,//fittes.ca/cdn/shop/files/8_-_Framed_Floor_Vent_Luxe___Lifestyle_1.png?v=1772197987&width=940 940w,//fittes.ca/cdn/shop/files/8_-_Framed_Floor_Vent_Luxe___Lifestyle_1.png?v=1772197987&width=1066 1066w,//fittes.ca/cdn/shop/files/8_-_Framed_Floor_Vent_Luxe___Lifestyle_1.png?v=1772197987 1080w 8844 " 8845 src="//fittes.ca/cdn/shop/files/8_-_Framed_Floor_Vent_Luxe___Lifestyle_1.png?v=1772197987&width=533" 8846 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 8847 alt="" 8848 class="motion-reduce" 8849 loading="lazy" 8850 width="1080" 8851 height="1080" 8852 > 8853 </div> 8854 </div><div class="card__content"> 8855 <div class="card__information ss"> 8856 <h3 8857 class="card__heading" 8858 8859 > 8860 <a href="/products/framed-floor-vent-luxe-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-8029699768508" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-8029699768508 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-8029699768508"> 8861 Framed Floor Vent [Luxe+] 8862 </a> 8863 </h3> 8864 </div> 8865 8866 8867 8868 </div> 8869 </div> 8870 8871 <div class="card__content"> 8872 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Drops into the opening with minimal tools. Slight lip at the edge; fully paintable.">Drop-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Steel construction for a premium, long-lasting finish.">Steel</li></ul> 8873<div class="bv_rating_summary "> 8874 <div data-bv-show="rating_summary" data-bv-product-id="8029699768508"></div> 8875 </div> 8876 8877 <h3 8878 class="card__heading h6" 8879 8880 id="title-template--28630587998578__home_tab_product_tJDMfE-8029699768508" 8881 8882 > 8883 <a href="/products/framed-floor-vent-luxe-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-8029699768508" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-8029699768508 Badge-template--28630587998578__home_tab_product_tJDMfE-8029699768508"> 8884 Framed Floor Vent [Luxe+] 8885 </a> 8886 </h3> 8887 <div class="card-information"> 8888 8889 8890<div 8891 class=" 8892 price " 8893 > 8894 <div class="price__container"><!-- REGULAR --> 8895 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
8896 <span class="price-item price-item--regular"> 8897 $90.00 USD+ 8898 </span></div> 8899 8900 8901 8902 <small class="unit-price caption hidden"> 8903 <span class="visually-hidden">Unit price</span> 8904 <span class="price-item price-item--last"> 8905 <span></span> 8906 <span aria-hidden="true">/</span> 8907 <span class="visually-hidden"> per </span> 8908 <span> 8909 </span> 8910 </span> 8911 </small> 8912 </div></div> 8913 8914 8915 8916</div> 8917 </div> 8918 8919 8920 8921 8922 8923 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-8029699768508"> 8924 <button 8925 id="quick-add-template--28630587998578__home_tab_product_tJDMfE8029699768508-submit" 8926 type="submit" 8927 name="add" 8928 class="quick-add__submit button button--full-width button--secondary" 8929 aria-haspopup="dialog" 8930 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE8029699768508-submit title-template--28630587998578__home_tab_product_tJDMfE-8029699768508" 8931 data-product-url="/products/framed-floor-vent-luxe-plus" 8932 > 8933 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 8934 <g clip-path="url(#clip0_694_4827)"> 8935 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 8936 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 8937 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 8938 </g> 8939 <defs> 8940 <clipPath id="clip0_694_4827"> 8941 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 8942 </clipPath> 8943 </defs> 8944 </svg> 8945 8946<div class="loading__spinner hidden"> 8947 <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> 8948 8949</div> 8950</button> 8951 </modal-opener> 8952 <quick-add-modal id="QuickAdd-8029699768508" class="quick-add-modal"> 8953 <div 8954 role="dialog"
8955 aria-label="Choose options for Framed Floor Vent [Luxe+]" 8956 aria-modal="true" 8957 class="quick-add-modal__content global-settings-popup" 8958 tabindex="-1" 8959 > 8960 <button 8961 id="ModalClose-8029699768508" 8962 type="button" 8963 class="quick-add-modal__toggle" 8964 aria-label="Close" 8965 ><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> 8966</button> 8967 <div id="QuickAddInfo-8029699768508" class="quick-add-modal__content-info"></div> 8968 </div> 8969 </quick-add-modal></div> 8970 8971 8972 8973 8974 <div class="card__badge top left"></div> 8975 </div> 8976 8977 </div> 8978 </div> 8979 <div class="my-buy-btn"> 8980<div class="" ><product-form 8981 class="product-form" 8982 data-hide-errors="false" 8983 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 8984 > 8985 <div class="product-form__error-message-wrapper" role="alert" hidden> 8986 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 8987</span> 8988 <span class="product-form__error-message"></span> 8989 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 8990 type="hidden" 8991 name="id" 8992 value="42923410620604" 8993 8994 class="product-variant-id" 8995 ><div class="product-form__buttons"><button 8996 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 8997 type="submit" 8998 name="add" 8999 class="product-form__submit button button--full-width button--primary" 9000 9001 > 9002 <span> 9003 Learn More 9004 9005</span> 9006 9007<div class="loading__spinner hidden"> 9008 <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> 9009 9010</div> 9011</button></div><input type="hidden" name="product-id" value="8029699768508" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 9012</div> 9013 </div> 9014 9015 <div class="swiper-slide card-slide"> 9016 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 9017 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 9018 9019 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 9020 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 9021<div 9022 preorder-product-element="form" 9023 d-id="2339413131326" 9024 data-product-id="2339413131326" 9025 class="card-wrapper product-card-wrapper underline-links-hover" 9026 style="position: relative;" 9027 > 9028 9029 <div 9030 class=" 9031 card card--standard 9032 card--media 9033 9034 9035 9036 9037 9038 " 9039 style="--ratio-percent: 100%;" 9040 > 9041 9042 <div 9043 class="card__inner color-scheme-2 gradient ratio" 9044 style="--ratio-percent: 100%;" 9045 > 9046 9047<div class="card__media"> 9048 <div class="media media--transparent media--hover-effect"> 9049 9050 <img 9051 srcset="//fittes.ca/cdn/shop/files/1-FramedFloorVent_Luxe__Lifestyle1_1.jpg?v=1754022200&width=165 165w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Luxe__Lifestyle1_1.jpg?v=1754022200&width=360 360w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Luxe__Lifestyle1_1.jpg?v=1754022200&width=533 533w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Luxe__Lifestyle1_1.jpg?v=1754022200&width=720 720w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Luxe__Lifestyle1_1.jpg?v=1754022200&width=940 940w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Luxe__Lifestyle1_1.jpg?v=1754022200&width=1066 1066w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Luxe__Lifestyle1_1.jpg?v=1754022200 1080w 9052 " 9053 src="//fittes.ca/cdn/shop/files/1-FramedFloorVent_Luxe__Lifestyle1_1.jpg?v=1754022200&width=533" 9054 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9055 alt="Framed Floor Vent [Luxe]" 9056 class="motion-reduce" 9057 9058 loading="lazy" 9059 9060 width="1080" 9061 height="1080" 9062 > 9063 9064<img 9065 srcset="//fittes.ca/cdn/shop/files/8-FramedFloorVent_Luxe__Lifestyle2.png?v=1754076183&width=165 165w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Luxe__Lifestyle2.png?v=1754076183&width=360 360w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Luxe__Lifestyle2.png?v=1754076183&width=533 533w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Luxe__Lifestyle2.png?v=1754076183&width=720 720w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Luxe__Lifestyle2.png?v=1754076183&width=940 940w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Luxe__Lifestyle2.png?v=1754076183&width=1066 1066w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Luxe__Lifestyle2.png?v=1754076183 1080w 9066 " 9067 src="//fittes.ca/cdn/shop/files/8-FramedFloorVent_Luxe__Lifestyle2.png?v=1754076183&width=533" 9068 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9069 alt="" 9070 class="motion-reduce" 9071 loading="lazy" 9072 width="1080" 9073 height="1080" 9074 > 9075 </div> 9076 </div><div class="card__content"> 9077 <div class="card__information ss"> 9078 <h3 9079 class="card__heading" 9080 9081 > 9082 <a href="/products/framed-floor-vent-luxe" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-2339413131326" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-2339413131326 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-2339413131326"> 9083 Framed Floor Vent [Luxe] 9084 </a> 9085 </h3> 9086 </div> 9087 9088 9089 9090 </div> 9091 </div> 9092 9093 <div class="card__content"> 9094 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Drops into the opening with minimal tools. Slight lip at the edge; fully paintable.">Drop-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Standard airflow, well suited to most rooms.">Single Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Steel construction for a premium, long-lasting finish.">Steel</li></ul> 9095<div class="bv_rating_summary "> 9096 <div data-bv-show="rating_summary" data-bv-product-id="2339413131326"></div> 9097 </div> 9098 9099 <h3 9100 class="card__heading h6" 9101 9102 id="title-template--28630587998578__home_tab_product_tJDMfE-2339413131326" 9103 9104 > 9105 <a href="/products/framed-floor-vent-luxe" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-2339413131326" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-2339413131326 Badge-template--28630587998578__home_tab_product_tJDMfE-2339413131326"> 9106 Framed Floor Vent [Luxe] 9107 </a> 9108 </h3> 9109 <div class="card-information"> 9110 9111 9112<div 9113 class=" 9114 price " 9115 > 9116 <div class="price__container"><!-- REGULAR --> 9117 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
9118 <span class="price-item price-item--regular"> 9119 $61.00 USD+ 9120 </span></div> 9121 9122 9123 9124 <small class="unit-price caption hidden"> 9125 <span class="visually-hidden">Unit price</span> 9126 <span class="price-item price-item--last"> 9127 <span></span> 9128 <span aria-hidden="true">/</span> 9129 <span class="visually-hidden"> per </span> 9130 <span> 9131 </span> 9132 </span> 9133 </small> 9134 </div></div> 9135 9136 9137 9138</div> 9139 </div> 9140 9141 9142 9143 9144 9145 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-2339413131326"> 9146 <button 9147 id="quick-add-template--28630587998578__home_tab_product_tJDMfE2339413131326-submit" 9148 type="submit" 9149 name="add" 9150 class="quick-add__submit button button--full-width button--secondary" 9151 aria-haspopup="dialog" 9152 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE2339413131326-submit title-template--28630587998578__home_tab_product_tJDMfE-2339413131326" 9153 data-product-url="/products/framed-floor-vent-luxe" 9154 > 9155 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 9156 <g clip-path="url(#clip0_694_4827)"> 9157 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 9158 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 9159 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 9160 </g> 9161 <defs> 9162 <clipPath id="clip0_694_4827"> 9163 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 9164 </clipPath> 9165 </defs> 9166 </svg> 9167 9168<div class="loading__spinner hidden"> 9169 <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> 9170 9171</div> 9172</button> 9173 </modal-opener> 9174 <quick-add-modal id="QuickAdd-2339413131326" class="quick-add-modal"> 9175 <div 9176 role="dialog"
9177 aria-label="Choose options for Framed Floor Vent [Luxe]" 9178 aria-modal="true" 9179 class="quick-add-modal__content global-settings-popup" 9180 tabindex="-1" 9181 > 9182 <button 9183 id="ModalClose-2339413131326" 9184 type="button" 9185 class="quick-add-modal__toggle" 9186 aria-label="Close" 9187 ><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> 9188</button> 9189 <div id="QuickAddInfo-2339413131326" class="quick-add-modal__content-info"></div> 9190 </div> 9191 </quick-add-modal></div> 9192 9193 9194 9195 9196 <div class="card__badge top left"></div> 9197 </div> 9198 9199 </div> 9200 </div> 9201 <div class="my-buy-btn"> 9202<div class="" ><product-form 9203 class="product-form" 9204 data-hide-errors="false" 9205 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 9206 > 9207 <div class="product-form__error-message-wrapper" role="alert" hidden> 9208 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 9209</span> 9210 <span class="product-form__error-message"></span> 9211 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 9212 type="hidden" 9213 name="id" 9214 value="61247543607666" 9215 9216 class="product-variant-id" 9217 ><div class="product-form__buttons"><button 9218 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 9219 type="submit" 9220 name="add" 9221 class="product-form__submit button button--full-width button--primary" 9222 9223 > 9224 <span> 9225 Learn More 9226 9227</span> 9228 9229<div class="loading__spinner hidden"> 9230 <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> 9231 9232</div> 9233</button></div><input type="hidden" name="product-id" value="2339413131326" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 9234</div> 9235 </div> 9236 9237 <div class="swiper-slide card-slide"> 9238 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 9239 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 9240 9241 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 9242 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 9243<div 9244 preorder-product-element="form" 9245 d-id="14748867461490" 9246 data-product-id="14748867461490" 9247 class="card-wrapper product-card-wrapper underline-links-hover" 9248 style="position: relative;" 9249 > 9250 9251 <div 9252 class=" 9253 card card--standard 9254 card--media 9255 9256 9257 9258 9259 9260 " 9261 style="--ratio-percent: 100%;" 9262 > 9263<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 9264 9265<div 9266 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 9267 style="color: black; background-color: white;" 9268 >Airflow Increased</div> 9269 9270 </div> 9271 <div 9272 class="card__inner color-scheme-2 gradient ratio" 9273 style="--ratio-percent: 100%;" 9274 > 9275 9276<div class="card__media"> 9277 <div class="media media--transparent media--hover-effect"> 9278 9279 <img 9280 srcset="//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094 1080w 9281 " 9282 src="//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=533" 9283 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9284 alt="Flush Floor Vent [Lite+]"
9285 class="motion-reduce" 9286 9287 loading="lazy" 9288 9289 width="1080" 9290 height="1080" 9291 > 9292 9293<img 9294 srcset="//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=165 165w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=360 360w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=533 533w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=720 720w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=940 940w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368 1000w 9295 " 9296 src="//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=533" 9297 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9298 alt="" 9299 class="motion-reduce" 9300 loading="lazy" 9301 width="1000" 9302 height="1000" 9303 > 9304 </div> 9305 </div><div class="card__content"> 9306 <div class="card__information ss"> 9307 <h3 9308 class="card__heading" 9309 9310 > 9311 <a href="/products/flush-floor-vent-lite-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748867461490" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748867461490 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-14748867461490"> 9312 Flush Floor Vent [Lite+] 9313 </a> 9314 </h3> 9315 </div> 9316 9317 9318 9319 </div> 9320 </div> 9321 9322 <div class="card__content"> 9323 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Installs before the flooring goes down, sitting flush on the sub-floor.">Sub-Floor</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 9324<div class="bv_rating_summary "> 9325 <div data-bv-show="rating_summary" data-bv-product-id="14748867461490"></div> 9326 </div> 9327 9328 <h3 9329 class="card__heading h6" 9330 9331 id="title-template--28630587998578__home_tab_product_tJDMfE-14748867461490" 9332 9333 > 9334 <a href="/products/flush-floor-vent-lite-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748867461490" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748867461490 Badge-template--28630587998578__home_tab_product_tJDMfE-14748867461490"> 9335 Flush Floor Vent [Lite+] 9336 </a> 9337 </h3> 9338 <div class="card-information"> 9339 9340 9341<div 9342 class=" 9343 price " 9344 > 9345 <div class="price__container"><!-- REGULAR --> 9346 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> 9347 <span class="price-item price-item--regular"> 9348 $51.00 USD+ 9349 </span></div> 9350 9351 9352 9353 <small class="unit-price caption hidden"> 9354 <span class="visually-hidden">Unit price</span> 9355 <span class="price-item price-item--last"> 9356 <span></span> 9357 <span aria-hidden="true">/</span> 9358 <span class="visually-hidden"> per </span> 9359 <span> 9360 </span> 9361 </span> 9362 </small> 9363 </div></div> 9364 9365 9366 9367</div> 9368 </div> 9369 9370 9371 9372 9373 9374 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-14748867461490"> 9375 <button 9376 id="quick-add-template--28630587998578__home_tab_product_tJDMfE14748867461490-submit" 9377 type="submit" 9378 name="add" 9379 class="quick-add__submit button button--full-width button--secondary" 9380 aria-haspopup="dialog" 9381 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE14748867461490-submit title-template--28630587998578__home_tab_product_tJDMfE-14748867461490" 9382 data-product-url="/products/flush-floor-vent-lite-plus" 9383 > 9384 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 9385 <g clip-path="url(#clip0_694_4827)"> 9386 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 9387 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 9388 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.4854
93881 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 9389 </g> 9390 <defs> 9391 <clipPath id="clip0_694_4827"> 9392 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 9393 </clipPath> 9394 </defs> 9395 </svg> 9396 9397<div class="loading__spinner hidden"> 9398 <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> 9399 9400</div> 9401</button> 9402 </modal-opener> 9403 <quick-add-modal id="QuickAdd-14748867461490" class="quick-add-modal"> 9404 <div 9405 role="dialog" 9406 aria-label="Choose options for Flush Floor Vent [Lite+]" 9407 aria-modal="true" 9408 class="quick-add-modal__content global-settings-popup" 9409 tabindex="-1" 9410 > 9411 <button 9412 id="ModalClose-14748867461490" 9413 type="button" 9414 class="quick-add-modal__toggle" 9415 aria-label="Close" 9416 ><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> 9417</button> 9418 <div id="QuickAddInfo-14748867461490" class="quick-add-modal__content-info"></div> 9419 </div> 9420 </quick-add-modal></div> 9421 9422 9423 9424 9425 <div class="card__badge top left"></div> 9426 </div> 9427 9428 </div> 9429 </div> 9430 <div class="my-buy-btn"> 9431<div class="" ><product-form 9432 class="product-form" 9433 data-hide-errors="false" 9434 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 9435 > 9436 <div class="product-form__error-message-wrapper" role="alert" hidden> 9437 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 9438</span> 9439 <span class="product-form__error-message"></span> 9440 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 9441 type="hidden" 9442 name="id" 9443 value="52357985894770" 9444 9445 class="product-variant-id" 9446 ><div class="product-form__buttons"><button 9447 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 9448 type="submit" 9449 name="add" 9450 class="product-form__submit button button--full-width button--primary" 9451 9452 > 9453 <span> 9454 Learn More 9455 9456</span> 9457 9458<div class="loading__spinner hidden"> 9459 <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> 9460 9461</div> 9462</button></div><input type="hidden" name="product-id" value="14748867461490" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 9463</div> 9464 </div> 9465 9466 <div class="swiper-slide card-slide"> 9467 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 9468 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 9469 9470 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 9471 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 9472<div 9473 preorder-product-element="form" 9474 d-id="4465087676478" 9475 data-product-id="4465087676478" 9476 class="card-wrapper product-card-wrapper underline-links-hover" 9477 style="position: relative;" 9478 > 9479 9480 <div 9481 class=" 9482 card card--standard 9483 card--media 9484 9485 9486 9487 9488 9489 " 9490 style="--ratio-percent: 100%;" 9491 > 9492 9493 <div 9494 class="card__inner color-scheme-2 gradient ratio" 9495 style="--ratio-percent: 100%;" 9496 > 9497 9498<div class="card__media"> 9499 <div class="media media--transparent media--hover-effect"> 9500 9501 <img 9502 srcset="//fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=165 165w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=360 360w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=533 533w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=720 720w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=940 940w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=1066 1066w,//fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184 1080w 9503 " 9504 src="//fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=533" 9505 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9506 alt="Flush Floor Vent [Lite]" 9507 class="motion-reduce" 9508 9509 loading="lazy" 9510 9511 width="1080" 9512 height="1080" 9513 > 9514 9515<img 9516 srcset="//fittes.ca/cdn/shop/files/7-FlushFloorVent_Lite__Lifestyle1.png?v=1754076327&width=165 165w,//fittes.ca/cdn/shop/files/7-FlushFloorVent_Lite__Lifestyle1.png?v=1754076327&width=360 360w,//fittes.ca/cdn/shop/files/7-FlushFloorVent_Lite__Lifestyle1.png?v=1754076327&width=533 533w,//fittes.ca/cdn/shop/files/7-FlushFloorVent_Lite__Lifestyle1.png?v=1754076327&width=720 720w,//fittes.ca/cdn/shop/files/7-FlushFloorVent_Lite__Lifestyle1.png?v=1754076327&width=940 940w,//fittes.ca/cdn/shop/files/7-FlushFloorVent_Lite__Lifestyle1.png?v=1754076327&width=1066 1066w,//fittes.ca/cdn/shop/files/7-FlushFloorVent_Lite__Lifestyle1.png?v=1754076327 1080w 9517 " 9518 src="//fittes.ca/cdn/shop/files/7-FlushFloorVent_Lite__Lifestyle1.png?v=1754076327&width=533" 9519 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9520 alt="" 9521 class="motion-reduce" 9522 loading="lazy" 9523 width="1080" 9524 height="1080" 9525 > 9526 </div> 9527 </div><div class="card__content"> 9528 <div class="card__information ss"> 9529 <h3 9530 class="card__heading" 9531 9532 > 9533 <a href="/products/flush-floor-vent-lite" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-4465087676478" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-4465087676478 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-4465087676478"> 9534 Flush Floor Vent [Lite] 9535 </a> 9536 </h3> 9537 </div> 9538 9539 9540 9541 </div> 9542 </div> 9543 9544 <div class="card__content"> 9545 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Installs before the flooring goes down, sitting flush on the sub-floor.">Sub-Floor</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Standard airflow, well suited to most rooms.">Single Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 9546<div class="bv_rating_summary "> 9547 <div data-bv-show="rating_summary" data-bv-product-id="4465087676478"></div> 9548 </div> 9549 9550 <h3 9551 class="card__heading h6" 9552 9553 id="title-template--28630587998578__home_tab_product_tJDMfE-4465087676478" 9554 9555 > 9556 <a href="/products/flush-floor-vent-lite" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-4465087676478" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-4465087676478 Badge-template--28630587998578__home_tab_product_tJDMfE-4465087676478"> 9557 Flush Floor Vent [Lite] 9558 </a> 9559 </h3> 9560 <div class="card-information"> 9561 9562 9563<div 9564 class=" 9565 price " 9566 > 9567 <div class="price__container"><!-- REGULAR --> 9568 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
9569 <span class="price-item price-item--regular"> 9570 $42.00 USD+ 9571 </span></div> 9572 9573 9574 9575 <small class="unit-price caption hidden"> 9576 <span class="visually-hidden">Unit price</span> 9577 <span class="price-item price-item--last"> 9578 <span></span> 9579 <span aria-hidden="true">/</span> 9580 <span class="visually-hidden"> per </span> 9581 <span> 9582 </span> 9583 </span> 9584 </small> 9585 </div></div> 9586 9587 9588 9589</div> 9590 </div> 9591 9592 9593 9594 9595 9596 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-4465087676478"> 9597 <button 9598 id="quick-add-template--28630587998578__home_tab_product_tJDMfE4465087676478-submit" 9599 type="submit" 9600 name="add" 9601 class="quick-add__submit button button--full-width button--secondary" 9602 aria-haspopup="dialog" 9603 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE4465087676478-submit title-template--28630587998578__home_tab_product_tJDMfE-4465087676478" 9604 data-product-url="/products/flush-floor-vent-lite" 9605 > 9606 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 9607 <g clip-path="url(#clip0_694_4827)"> 9608 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 9609 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 9610 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 9611 </g> 9612 <defs> 9613 <clipPath id="clip0_694_4827"> 9614 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 9615 </clipPath> 9616 </defs> 9617 </svg> 9618 9619<div class="loading__spinner hidden"> 9620 <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> 9621 9622</div> 9623</button> 9624 </modal-opener> 9625 <quick-add-modal id="QuickAdd-4465087676478" class="quick-add-modal"> 9626 <div 9627 role="dialog"
9628 aria-label="Choose options for Flush Floor Vent [Lite]" 9629 aria-modal="true" 9630 class="quick-add-modal__content global-settings-popup" 9631 tabindex="-1" 9632 > 9633 <button 9634 id="ModalClose-4465087676478" 9635 type="button" 9636 class="quick-add-modal__toggle" 9637 aria-label="Close" 9638 ><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> 9639</button> 9640 <div id="QuickAddInfo-4465087676478" class="quick-add-modal__content-info"></div> 9641 </div> 9642 </quick-add-modal></div> 9643 9644 9645 9646 9647 <div class="card__badge top left"></div> 9648 </div> 9649 9650 </div> 9651 </div> 9652 <div class="my-buy-btn"> 9653<div class="" ><product-form 9654 class="product-form" 9655 data-hide-errors="false" 9656 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 9657 > 9658 <div class="product-form__error-message-wrapper" role="alert" hidden> 9659 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 9660</span> 9661 <span class="product-form__error-message"></span> 9662 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 9663 type="hidden" 9664 name="id" 9665 value="61247556452722" 9666 9667 class="product-variant-id" 9668 ><div class="product-form__buttons"><button 9669 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 9670 type="submit" 9671 name="add" 9672 class="product-form__submit button button--full-width button--primary" 9673 9674 > 9675 <span> 9676 Learn More 9677 9678</span> 9679 9680<div class="loading__spinner hidden"> 9681 <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> 9682 9683</div> 9684</button></div><input type="hidden" name="product-id" value="4465087676478" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 9685</div> 9686 </div> 9687 9688 <div class="swiper-slide card-slide"> 9689 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 9690 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 9691 9692 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 9693 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 9694<div 9695 preorder-product-element="form" 9696 d-id="14738400608626" 9697 data-product-id="14738400608626" 9698 class="card-wrapper product-card-wrapper underline-links-hover" 9699 style="position: relative;" 9700 > 9701 9702 <div 9703 class=" 9704 card card--standard 9705 card--media 9706 9707 9708 9709 9710 9711 " 9712 style="--ratio-percent: 100%;" 9713 > 9714<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 9715 9716<div 9717 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 9718 style="color: black; background-color: white;" 9719 >Airflow Increased</div> 9720 9721 </div> 9722 <div 9723 class="card__inner color-scheme-2 gradient ratio" 9724 style="--ratio-percent: 100%;" 9725 > 9726 9727<div class="card__media"> 9728 <div class="media media--transparent media--hover-effect"> 9729 9730 <img 9731 srcset="//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185 1080w 9732 " 9733 src="//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=533" 9734 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9735 alt="Framed Floor Vent [Lite+]"
9736 class="motion-reduce" 9737 9738 loading="lazy" 9739 9740 width="1080" 9741 height="1080" 9742 > 9743 9744<img 9745 srcset="//fittes.ca/cdn/shop/files/preview_images/a73087210e2a4d7a9f10dbf4a9fc161f.thumbnail.0000000000.jpg?v=1756908646 w 9746 " 9747 src="//fittes.ca/cdn/shop/files/preview_images/a73087210e2a4d7a9f10dbf4a9fc161f.thumbnail.0000000000.jpg?v=1756908646&width=533" 9748 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9749 alt="" 9750 class="motion-reduce" 9751 loading="lazy" 9752 width="" 9753 height="" 9754 > 9755 </div> 9756 </div><div class="card__content"> 9757 <div class="card__information ss"> 9758 <h3 9759 class="card__heading" 9760 9761 > 9762 <a href="/products/framed-floor-vent-lite-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14738400608626" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14738400608626 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-14738400608626"> 9763 Framed Floor Vent [Lite+] 9764 </a> 9765 </h3> 9766 </div> 9767 9768 9769 9770 </div> 9771 </div> 9772 9773 <div class="card__content"> 9774 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Drops into the opening with minimal tools. Slight lip at the edge; fully paintable.">Drop-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 9775<div class="bv_rating_summary "> 9776 <div data-bv-show="rating_summary" data-bv-product-id="14738400608626"></div> 9777 </div> 9778 9779 <h3 9780 class="card__heading h6" 9781 9782 id="title-template--28630587998578__home_tab_product_tJDMfE-14738400608626" 9783 9784 > 9785 <a href="/products/framed-floor-vent-lite-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-14738400608626" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-14738400608626 Badge-template--28630587998578__home_tab_product_tJDMfE-14738400608626"> 9786 Framed Floor Vent [Lite+] 9787 </a> 9788 </h3> 9789 <div class="card-information"> 9790 9791 9792<div 9793 class=" 9794 price " 9795 > 9796 <div class="price__container"><!-- REGULAR --> 9797 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> 9798 <span class="price-item price-item--regular"> 9799 $28.00 USD+ 9800 </span></div> 9801 9802 9803 9804 <small class="unit-price caption hidden"> 9805 <span class="visually-hidden">Unit price</span> 9806 <span class="price-item price-item--last"> 9807 <span></span> 9808 <span aria-hidden="true">/</span> 9809 <span class="visually-hidden"> per </span> 9810 <span> 9811 </span> 9812 </span> 9813 </small> 9814 </div></div> 9815 9816 9817 9818</div> 9819 </div> 9820 9821 9822 9823 9824 9825 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-14738400608626"> 9826 <button 9827 id="quick-add-template--28630587998578__home_tab_product_tJDMfE14738400608626-submit" 9828 type="submit" 9829 name="add" 9830 class="quick-add__submit button button--full-width button--secondary" 9831 aria-haspopup="dialog" 9832 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE14738400608626-submit title-template--28630587998578__home_tab_product_tJDMfE-14738400608626" 9833 data-product-url="/products/framed-floor-vent-lite-plus" 9834 > 9835 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 9836 <g clip-path="url(#clip0_694_4827)"> 9837 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 9838 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 9839 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.4854
98391 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 9840 </g> 9841 <defs> 9842 <clipPath id="clip0_694_4827"> 9843 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 9844 </clipPath> 9845 </defs> 9846 </svg> 9847 9848<div class="loading__spinner hidden"> 9849 <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> 9850 9851</div> 9852</button> 9853 </modal-opener> 9854 <quick-add-modal id="QuickAdd-14738400608626" class="quick-add-modal"> 9855 <div 9856 role="dialog" 9857 aria-label="Choose options for Framed Floor Vent [Lite+]" 9858 aria-modal="true" 9859 class="quick-add-modal__content global-settings-popup" 9860 tabindex="-1" 9861 > 9862 <button 9863 id="ModalClose-14738400608626" 9864 type="button" 9865 class="quick-add-modal__toggle" 9866 aria-label="Close" 9867 ><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> 9868</button> 9869 <div id="QuickAddInfo-14738400608626" class="quick-add-modal__content-info"></div> 9870 </div> 9871 </quick-add-modal></div> 9872 9873 9874 9875 9876 <div class="card__badge top left"></div> 9877 </div> 9878 9879 </div> 9880 </div> 9881 <div class="my-buy-btn"> 9882<div class="" ><product-form 9883 class="product-form" 9884 data-hide-errors="false" 9885 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 9886 > 9887 <div class="product-form__error-message-wrapper" role="alert" hidden> 9888 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 9889</span> 9890 <span class="product-form__error-message"></span> 9891 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 9892 type="hidden" 9893 name="id" 9894 value="52294891995506" 9895 9896 class="product-variant-id" 9897 ><div class="product-form__buttons"><button 9898 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 9899 type="submit" 9900 name="add" 9901 class="product-form__submit button button--full-width button--primary" 9902 9903 > 9904 <span> 9905 Learn More 9906 9907</span> 9908 9909<div class="loading__spinner hidden"> 9910 <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> 9911 9912</div> 9913</button></div><input type="hidden" name="product-id" value="14738400608626" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 9914</div> 9915 </div> 9916 9917 <div class="swiper-slide card-slide"> 9918 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 9919 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 9920 9921 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 9922 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 9923<div 9924 preorder-product-element="form" 9925 d-id="2339971203134" 9926 data-product-id="2339971203134" 9927 class="card-wrapper product-card-wrapper underline-links-hover" 9928 style="position: relative;" 9929 > 9930 9931 <div 9932 class=" 9933 card card--standard 9934 card--media 9935 9936 9937 9938 9939 9940 " 9941 style="--ratio-percent: 100%;" 9942 > 9943 9944 <div 9945 class="card__inner color-scheme-2 gradient ratio" 9946 style="--ratio-percent: 100%;" 9947 > 9948 9949<div class="card__media"> 9950 <div class="media media--transparent media--hover-effect"> 9951 9952 <img 9953 srcset="//fittes.ca/cdn/shop/files/1-FramedFloorVent_Lite__Lifestyle1_041cdba3-cae9-44c0-ba82-a7ecf116ddf0.png?v=1754022193&width=165 165w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Lite__Lifestyle1_041cdba3-cae9-44c0-ba82-a7ecf116ddf0.png?v=1754022193&width=360 360w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Lite__Lifestyle1_041cdba3-cae9-44c0-ba82-a7ecf116ddf0.png?v=1754022193&width=533 533w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Lite__Lifestyle1_041cdba3-cae9-44c0-ba82-a7ecf116ddf0.png?v=1754022193&width=720 720w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Lite__Lifestyle1_041cdba3-cae9-44c0-ba82-a7ecf116ddf0.png?v=1754022193&width=940 940w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Lite__Lifestyle1_041cdba3-cae9-44c0-ba82-a7ecf116ddf0.png?v=1754022193&width=1066 1066w,//fittes.ca/cdn/shop/files/1-FramedFloorVent_Lite__Lifestyle1_041cdba3-cae9-44c0-ba82-a7ecf116ddf0.png?v=1754022193 1080w 9954 " 9955 src="//fittes.ca/cdn/shop/files/1-FramedFloorVent_Lite__Lifestyle1_041cdba3-cae9-44c0-ba82-a7ecf116ddf0.png?v=1754022193&width=533" 9956 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9957 alt="Framed Floor Vent [Lite]" 9958 class="motion-reduce" 9959 9960 loading="lazy" 9961 9962 width="1080" 9963 height="1080" 9964 > 9965 9966<img 9967 srcset="//fittes.ca/cdn/shop/files/8-FramedFloorVent_Lite__Lifestyle2_2_9c2bd9f4-d05a-401f-8a2d-bb09fe29db5c.png?v=1754076115&width=165 165w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Lite__Lifestyle2_2_9c2bd9f4-d05a-401f-8a2d-bb09fe29db5c.png?v=1754076115&width=360 360w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Lite__Lifestyle2_2_9c2bd9f4-d05a-401f-8a2d-bb09fe29db5c.png?v=1754076115&width=533 533w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Lite__Lifestyle2_2_9c2bd9f4-d05a-401f-8a2d-bb09fe29db5c.png?v=1754076115&width=720 720w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Lite__Lifestyle2_2_9c2bd9f4-d05a-401f-8a2d-bb09fe29db5c.png?v=1754076115&width=940 940w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Lite__Lifestyle2_2_9c2bd9f4-d05a-401f-8a2d-bb09fe29db5c.png?v=1754076115&width=1066 1066w,//fittes.ca/cdn/shop/files/8-FramedFloorVent_Lite__Lifestyle2_2_9c2bd9f4-d05a-401f-8a2d-bb09fe29db5c.png?v=1754076115 1080w 9968 " 9969 src="//fittes.ca/cdn/shop/files/8-FramedFloorVent_Lite__Lifestyle2_2_9c2bd9f4-d05a-401f-8a2d-bb09fe29db5c.png?v=1754076115&width=533" 9970 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 9971 alt="" 9972 class="motion-reduce" 9973 loading="lazy" 9974 width="1080" 9975 height="1080" 9976 > 9977 </div> 9978 </div><div class="card__content"> 9979 <div class="card__information ss"> 9980 <h3 9981 class="card__heading" 9982 9983 > 9984 <a href="/products/framed-floor-vent-lite" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-2339971203134" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-2339971203134 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-2339971203134"> 9985 Framed Floor Vent [Lite] 9986 </a> 9987 </h3> 9988 </div> 9989 9990 9991 9992 </div> 9993 </div> 9994 9995 <div class="card__content"> 9996 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Drops into the opening with minimal tools. Slight lip at the edge; fully paintable.">Drop-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Standard airflow, well suited to most rooms.">Single Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 9997<div class="bv_rating_summary "> 9998 <div data-bv-show="rating_summary" data-bv-product-id="2339971203134"></div> 9999 </div> 10000 10001 <h3 10002 class="card__heading h6" 10003 10004 id="title-template--28630587998578__home_tab_product_tJDMfE-2339971203134" 10005 10006 > 10007 <a href="/products/framed-floor-vent-lite" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-2339971203134" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-2339971203134 Badge-template--28630587998578__home_tab_product_tJDMfE-2339971203134"> 10008 Framed Floor Vent [Lite] 10009 </a> 10010 </h3> 10011 <div class="card-information"> 10012 10013 10014<div 10015 class=" 10016 price " 10017 > 10018 <div class="price__container"><!-- REGULAR --> 10019 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span>
10020 <span class="price-item price-item--regular"> 10021 $22.00 USD+ 10022 </span></div> 10023 10024 10025 10026 <small class="unit-price caption hidden"> 10027 <span class="visually-hidden">Unit price</span> 10028 <span class="price-item price-item--last"> 10029 <span></span> 10030 <span aria-hidden="true">/</span> 10031 <span class="visually-hidden"> per </span> 10032 <span> 10033 </span> 10034 </span> 10035 </small> 10036 </div></div> 10037 10038 10039 10040</div> 10041 </div> 10042 10043 10044 10045 10046 10047 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-2339971203134"> 10048 <button 10049 id="quick-add-template--28630587998578__home_tab_product_tJDMfE2339971203134-submit" 10050 type="submit" 10051 name="add" 10052 class="quick-add__submit button button--full-width button--secondary" 10053 aria-haspopup="dialog" 10054 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE2339971203134-submit title-template--28630587998578__home_tab_product_tJDMfE-2339971203134" 10055 data-product-url="/products/framed-floor-vent-lite" 10056 > 10057 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 10058 <g clip-path="url(#clip0_694_4827)"> 10059 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 10060 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 10061 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.48541 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 10062 </g> 10063 <defs> 10064 <clipPath id="clip0_694_4827"> 10065 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 10066 </clipPath> 10067 </defs> 10068 </svg> 10069 10070<div class="loading__spinner hidden"> 10071 <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> 10072 10073</div> 10074</button> 10075 </modal-opener> 10076 <quick-add-modal id="QuickAdd-2339971203134" class="quick-add-modal"> 10077 <div 10078 role="dialog"
10079 aria-label="Choose options for Framed Floor Vent [Lite]" 10080 aria-modal="true" 10081 class="quick-add-modal__content global-settings-popup" 10082 tabindex="-1" 10083 > 10084 <button 10085 id="ModalClose-2339971203134" 10086 type="button" 10087 class="quick-add-modal__toggle" 10088 aria-label="Close" 10089 ><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> 10090</button> 10091 <div id="QuickAddInfo-2339971203134" class="quick-add-modal__content-info"></div> 10092 </div> 10093 </quick-add-modal></div> 10094 10095 10096 10097 10098 <div class="card__badge top left"></div> 10099 </div> 10100 10101 </div> 10102 </div> 10103 <div class="my-buy-btn"> 10104<div class="" ><product-form 10105 class="product-form" 10106 data-hide-errors="false" 10107 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 10108 > 10109 <div class="product-form__error-message-wrapper" role="alert" hidden> 10110 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 10111</span> 10112 <span class="product-form__error-message"></span> 10113 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 10114 type="hidden" 10115 name="id" 10116 value="61247550030194" 10117 10118 class="product-variant-id" 10119 ><div class="product-form__buttons"><button 10120 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 10121 type="submit" 10122 name="add" 10123 class="product-form__submit button button--full-width button--primary" 10124 10125 > 10126 <span> 10127 Learn More 10128 10129</span> 10130 10131<div class="loading__spinner hidden"> 10132 <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> 10133 10134</div> 10135</button></div><input type="hidden" name="product-id" value="2339971203134" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 10136</div> 10137 </div> 10138 10139 </div> 10140 </div> 10141 <div class="swiper-button-prev small-hide swiper-button-disabled"> 10142 <svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 27 27" fill="none"> 10143 <path d="M22.1953 13.9355H4.98519M4.98519 13.9355C4.98519 13.9355 9.86348 10.7272 10.8548 8.06592M4.98519 13.9355C4.98519 13.9355 9.29778 16.95 10.8548 19.805" stroke="#1E1E1E" stroke-width="2.17391" stroke-linecap="square"/> 10144 </svg> 10145 </div> 10146 <div class="swiper-button-next small-hide"> 10147 <svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 27 27" fill="none"> 10148 <path d="M4.80469 13.9355H22.0148M22.0148 13.9355C22.0148 13.9355 17.1365 10.7272 16.1452 8.06592M22.0148 13.9355C22.0148 13.9355 17.7022 16.95 16.1452 19.805" stroke="#1E1E1E" stroke-width="2.17391" stroke-linecap="square"/> 10149 </svg> 10150 </div> 10151 </div> 10152 </template> 10153 </div> 10154 10155 <div class="series-product-bottom" data-content="lite" data-index="2"><template data-swiper-template> 10156 <div class="swiper-outer-wrapper"> 10157 <div class="swiper mySwiper series-product-product"> 10158 <div class="swiper-wrapper"> 10159 10160 <div class="swiper-slide card-slide"> 10161 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 10162 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 10163 10164 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 10165 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 10166<div 10167 preorder-product-element="form" 10168 d-id="14748889874802" 10169 data-product-id="14748889874802" 10170 class="card-wrapper product-card-wrapper underline-links-hover" 10171 style="position: relative;" 10172 > 10173 10174 <div 10175 class=" 10176 card card--standard 10177 card--media 10178 10179 10180 10181 10182 10183 " 10184 style="--ratio-percent: 100%;" 10185 > 10186<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 10187 10188<div 10189 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 10190 style="color: black; background-color: white;" 10191 >Airflow Increased</div> 10192 10193 </div> 10194 <div 10195 class="card__inner color-scheme-2 gradient ratio" 10196 style="--ratio-percent: 100%;" 10197 > 10198 10199<div class="card__media"> 10200 <div class="media media--transparent media--hover-effect"> 10201 10202 <img 10203 srcset="//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533 1080w 10204 " 10205 src="//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198533&width=533" 10206 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10207 alt="Flush Wall Vent [Lite+]"
10208 class="motion-reduce" 10209 10210 loading="lazy" 10211 10212 width="1080" 10213 height="1080" 10214 > 10215 10216<img 10217 srcset="//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=165 165w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=360 360w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=533 533w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=720 720w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=940 940w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=1066 1066w,//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925 2000w 10218 " 10219 src="//fittes.ca/cdn/shop/files/DWLITBD10X14WHT-HP_2000_x_2000_px.webp?v=1787678925&width=533" 10220 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10221 alt="" 10222 class="motion-reduce" 10223 loading="lazy" 10224 width="2000" 10225 height="2000" 10226 > 10227 </div> 10228 </div><div class="card__content"> 10229 <div class="card__information ss"> 10230 <h3 10231 class="card__heading" 10232 10233 > 10234 <a href="/products/flush-wall-vent-lite-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748889874802" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748889874802 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-14748889874802"> 10235 Flush Wall Vent [Lite+] 10236 </a> 10237 </h3> 10238 </div> 10239 10240 10241 10242 </div> 10243 </div> 10244 10245 <div class="card__content"> 10246 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Set into the drywall and finished with mud for a seamless, flush look.">Mud-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 10247<div class="bv_rating_summary "> 10248 <div data-bv-show="rating_summary" data-bv-product-id="14748889874802"></div> 10249 </div> 10250 10251 <h3 10252 class="card__heading h6" 10253 10254 id="title-template--28630587998578__home_tab_product_tJDMfE-14748889874802" 10255 10256 > 10257 <a href="/products/flush-wall-vent-lite-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748889874802" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748889874802 Badge-template--28630587998578__home_tab_product_tJDMfE-14748889874802"> 10258 Flush Wall Vent [Lite+] 10259 </a> 10260 </h3> 10261 <div class="card-information"> 10262 10263 10264<div 10265 class=" 10266 price " 10267 > 10268 <div class="price__container"><!-- REGULAR --> 10269 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> 10270 <span class="price-item price-item--regular"> 10271 $34.00 USD+ 10272 </span></div> 10273 10274 10275 10276 <small class="unit-price caption hidden"> 10277 <span class="visually-hidden">Unit price</span> 10278 <span class="price-item price-item--last"> 10279 <span></span> 10280 <span aria-hidden="true">/</span> 10281 <span class="visually-hidden"> per </span> 10282 <span> 10283 </span> 10284 </span> 10285 </small> 10286 </div></div> 10287 10288 10289 10290</div> 10291 </div> 10292 10293 10294 10295 10296 10297 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-14748889874802"> 10298 <button 10299 id="quick-add-template--28630587998578__home_tab_product_tJDMfE14748889874802-submit" 10300 type="submit" 10301 name="add" 10302 class="quick-add__submit button button--full-width button--secondary" 10303 aria-haspopup="dialog" 10304 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE14748889874802-submit title-template--28630587998578__home_tab_product_tJDMfE-14748889874802" 10305 data-product-url="/products/flush-wall-vent-lite-plus" 10306 > 10307 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 10308 <g clip-path="url(#clip0_694_4827)"> 10309 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 10310 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 10311 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.4854
103111 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 10312 </g> 10313 <defs> 10314 <clipPath id="clip0_694_4827"> 10315 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 10316 </clipPath> 10317 </defs> 10318 </svg> 10319 10320<div class="loading__spinner hidden"> 10321 <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> 10322 10323</div> 10324</button> 10325 </modal-opener> 10326 <quick-add-modal id="QuickAdd-14748889874802" class="quick-add-modal"> 10327 <div 10328 role="dialog" 10329 aria-label="Choose options for Flush Wall Vent [Lite+]" 10330 aria-modal="true" 10331 class="quick-add-modal__content global-settings-popup" 10332 tabindex="-1" 10333 > 10334 <button 10335 id="ModalClose-14748889874802" 10336 type="button" 10337 class="quick-add-modal__toggle" 10338 aria-label="Close" 10339 ><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> 10340</button> 10341 <div id="QuickAddInfo-14748889874802" class="quick-add-modal__content-info"></div> 10342 </div> 10343 </quick-add-modal></div> 10344 10345 10346 10347 10348 <div class="card__badge top left"></div> 10349 </div> 10350 10351 </div> 10352 </div> 10353 <div class="my-buy-btn"> 10354<div class="" ><product-form 10355 class="product-form" 10356 data-hide-errors="false" 10357 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 10358 > 10359 <div class="product-form__error-message-wrapper" role="alert" hidden> 10360 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 10361</span> 10362 <span class="product-form__error-message"></span> 10363 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 10364 type="hidden" 10365 name="id" 10366 value="52493906837874" 10367 10368 class="product-variant-id" 10369 ><div class="product-form__buttons"><button 10370 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 10371 type="submit" 10372 name="add" 10373 class="product-form__submit button button--full-width button--primary" 10374 10375 > 10376 <span> 10377 Learn More 10378 10379</span> 10380 10381<div class="loading__spinner hidden"> 10382 <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> 10383 10384</div> 10385</button></div><input type="hidden" name="product-id" value="14748889874802" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 10386</div> 10387 </div> 10388 10389 <div class="swiper-slide card-slide"> 10390 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 10391 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 10392 10393 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 10394 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 10395<div 10396 preorder-product-element="form" 10397 d-id="14748867461490" 10398 data-product-id="14748867461490" 10399 class="card-wrapper product-card-wrapper underline-links-hover" 10400 style="position: relative;" 10401 > 10402 10403 <div 10404 class=" 10405 card card--standard 10406 card--media 10407 10408 10409 10410 10411 10412 " 10413 style="--ratio-percent: 100%;" 10414 > 10415<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 10416 10417<div 10418 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 10419 style="color: black; background-color: white;" 10420 >Airflow Increased</div> 10421 10422 </div> 10423 <div 10424 class="card__inner color-scheme-2 gradient ratio" 10425 style="--ratio-percent: 100%;" 10426 > 10427 10428<div class="card__media"> 10429 <div class="media media--transparent media--hover-effect"> 10430 10431 <img 10432 srcset="//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094 1080w 10433 " 10434 src="//fittes.ca/cdn/shop/files/1_-_Flush_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198094&width=533" 10435 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10436 alt="Flush Floor Vent [Lite+]"
10437 class="motion-reduce" 10438 10439 loading="lazy" 10440 10441 width="1080" 10442 height="1080" 10443 > 10444 10445<img 10446 srcset="//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=165 165w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=360 360w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=533 533w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=720 720w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=940 940w,//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368 1000w 10447 " 10448 src="//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Lite_-_Lifestyle.webp?v=1782754368&width=533" 10449 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10450 alt="" 10451 class="motion-reduce" 10452 loading="lazy" 10453 width="1000" 10454 height="1000" 10455 > 10456 </div> 10457 </div><div class="card__content"> 10458 <div class="card__information ss"> 10459 <h3 10460 class="card__heading" 10461 10462 > 10463 <a href="/products/flush-floor-vent-lite-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748867461490" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748867461490 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-14748867461490"> 10464 Flush Floor Vent [Lite+] 10465 </a> 10466 </h3> 10467 </div> 10468 10469 10470 10471 </div> 10472 </div> 10473 10474 <div class="card__content"> 10475 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Installs before the flooring goes down, sitting flush on the sub-floor.">Sub-Floor</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 10476<div class="bv_rating_summary "> 10477 <div data-bv-show="rating_summary" data-bv-product-id="14748867461490"></div> 10478 </div> 10479 10480 <h3 10481 class="card__heading h6" 10482 10483 id="title-template--28630587998578__home_tab_product_tJDMfE-14748867461490" 10484 10485 > 10486 <a href="/products/flush-floor-vent-lite-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748867461490" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748867461490 Badge-template--28630587998578__home_tab_product_tJDMfE-14748867461490"> 10487 Flush Floor Vent [Lite+] 10488 </a> 10489 </h3> 10490 <div class="card-information"> 10491 10492 10493<div 10494 class=" 10495 price " 10496 > 10497 <div class="price__container"><!-- REGULAR --> 10498 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> 10499 <span class="price-item price-item--regular"> 10500 $51.00 USD+ 10501 </span></div> 10502 10503 10504 10505 <small class="unit-price caption hidden"> 10506 <span class="visually-hidden">Unit price</span> 10507 <span class="price-item price-item--last"> 10508 <span></span> 10509 <span aria-hidden="true">/</span> 10510 <span class="visually-hidden"> per </span> 10511 <span> 10512 </span> 10513 </span> 10514 </small> 10515 </div></div> 10516 10517 10518 10519</div> 10520 </div> 10521 10522 10523 10524 10525 10526 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-14748867461490"> 10527 <button 10528 id="quick-add-template--28630587998578__home_tab_product_tJDMfE14748867461490-submit" 10529 type="submit" 10530 name="add" 10531 class="quick-add__submit button button--full-width button--secondary" 10532 aria-haspopup="dialog" 10533 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE14748867461490-submit title-template--28630587998578__home_tab_product_tJDMfE-14748867461490" 10534 data-product-url="/products/flush-floor-vent-lite-plus" 10535 > 10536 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 10537 <g clip-path="url(#clip0_694_4827)"> 10538 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 10539 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 10540 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.4854
105401 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 10541 </g> 10542 <defs> 10543 <clipPath id="clip0_694_4827"> 10544 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 10545 </clipPath> 10546 </defs> 10547 </svg> 10548 10549<div class="loading__spinner hidden"> 10550 <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> 10551 10552</div> 10553</button> 10554 </modal-opener> 10555 <quick-add-modal id="QuickAdd-14748867461490" class="quick-add-modal"> 10556 <div 10557 role="dialog" 10558 aria-label="Choose options for Flush Floor Vent [Lite+]" 10559 aria-modal="true" 10560 class="quick-add-modal__content global-settings-popup" 10561 tabindex="-1" 10562 > 10563 <button 10564 id="ModalClose-14748867461490" 10565 type="button" 10566 class="quick-add-modal__toggle" 10567 aria-label="Close" 10568 ><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> 10569</button> 10570 <div id="QuickAddInfo-14748867461490" class="quick-add-modal__content-info"></div> 10571 </div> 10572 </quick-add-modal></div> 10573 10574 10575 10576 10577 <div class="card__badge top left"></div> 10578 </div> 10579 10580 </div> 10581 </div> 10582 <div class="my-buy-btn"> 10583<div class="" ><product-form 10584 class="product-form" 10585 data-hide-errors="false" 10586 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 10587 > 10588 <div class="product-form__error-message-wrapper" role="alert" hidden> 10589 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 10590</span> 10591 <span class="product-form__error-message"></span> 10592 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 10593 type="hidden" 10594 name="id" 10595 value="52357985894770" 10596 10597 class="product-variant-id" 10598 ><div class="product-form__buttons"><button 10599 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 10600 type="submit" 10601 name="add" 10602 class="product-form__submit button button--full-width button--primary" 10603 10604 > 10605 <span> 10606 Learn More 10607 10608</span> 10609 10610<div class="loading__spinner hidden"> 10611 <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> 10612 10613</div> 10614</button></div><input type="hidden" name="product-id" value="14748867461490" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 10615</div> 10616 </div> 10617 10618 <div class="swiper-slide card-slide"> 10619 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 10620 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 10621 10622 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 10623 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 10624<div 10625 preorder-product-element="form" 10626 d-id="14748886270322" 10627 data-product-id="14748886270322" 10628 class="card-wrapper product-card-wrapper underline-links-hover" 10629 style="position: relative;" 10630 > 10631 10632 <div 10633 class=" 10634 card card--standard 10635 card--media 10636 10637 10638 10639 10640 10641 " 10642 style="--ratio-percent: 100%;" 10643 > 10644<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 10645 10646<div 10647 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 10648 style="color: black; background-color: white;" 10649 >Airflow Increased</div> 10650 10651 </div> 10652 <div 10653 class="card__inner color-scheme-2 gradient ratio" 10654 style="--ratio-percent: 100%;" 10655 > 10656 10657<div class="card__media"> 10658 <div class="media media--transparent media--hover-effect"> 10659 10660 <img 10661 srcset="//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565 1080w 10662 " 10663 src="//fittes.ca/cdn/shop/files/1_-_Framed_Wall_Vent_Lite___Lifestyle_1.jpg?v=1772198565&width=533" 10664 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10665 alt="Framed Wall Vent [Lite+]"
10666 class="motion-reduce" 10667 10668 loading="lazy" 10669 10670 width="1080" 10671 height="1080" 10672 > 10673 10674<img 10675 srcset="//fittes.ca/cdn/shop/files/preview_images/cec61f8de7b44b5e9c63e555ec680c96.thumbnail.0000000000.jpg?v=1752259765 w 10676 " 10677 src="//fittes.ca/cdn/shop/files/preview_images/cec61f8de7b44b5e9c63e555ec680c96.thumbnail.0000000000.jpg?v=1752259765&width=533" 10678 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10679 alt="" 10680 class="motion-reduce" 10681 loading="lazy" 10682 width="" 10683 height="" 10684 > 10685 </div> 10686 </div><div class="card__content"> 10687 <div class="card__information ss"> 10688 <h3 10689 class="card__heading" 10690 10691 > 10692 <a href="/products/framed-wall-vent-lite-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748886270322" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14748886270322 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-14748886270322"> 10693 Framed Wall Vent [Lite+] 10694 </a> 10695 </h3> 10696 </div> 10697 10698 10699 10700 </div> 10701 </div> 10702 10703 <div class="card__content"> 10704 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Drops into the opening with minimal tools. Slight lip at the edge; fully paintable.">Drop-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 10705<div class="bv_rating_summary "> 10706 <div data-bv-show="rating_summary" data-bv-product-id="14748886270322"></div> 10707 </div> 10708 10709 <h3 10710 class="card__heading h6" 10711 10712 id="title-template--28630587998578__home_tab_product_tJDMfE-14748886270322" 10713 10714 > 10715 <a href="/products/framed-wall-vent-lite-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748886270322" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-14748886270322 Badge-template--28630587998578__home_tab_product_tJDMfE-14748886270322"> 10716 Framed Wall Vent [Lite+] 10717 </a> 10718 </h3> 10719 <div class="card-information"> 10720 10721 10722<div 10723 class=" 10724 price " 10725 > 10726 <div class="price__container"><!-- REGULAR --> 10727 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> 10728 <span class="price-item price-item--regular"> 10729 $34.00 USD+ 10730 </span></div> 10731 10732 10733 10734 <small class="unit-price caption hidden"> 10735 <span class="visually-hidden">Unit price</span> 10736 <span class="price-item price-item--last"> 10737 <span></span> 10738 <span aria-hidden="true">/</span> 10739 <span class="visually-hidden"> per </span> 10740 <span> 10741 </span> 10742 </span> 10743 </small> 10744 </div></div> 10745 10746 10747 10748</div> 10749 </div> 10750 10751 10752 10753 10754 10755 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-14748886270322"> 10756 <button 10757 id="quick-add-template--28630587998578__home_tab_product_tJDMfE14748886270322-submit" 10758 type="submit" 10759 name="add" 10760 class="quick-add__submit button button--full-width button--secondary" 10761 aria-haspopup="dialog" 10762 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE14748886270322-submit title-template--28630587998578__home_tab_product_tJDMfE-14748886270322" 10763 data-product-url="/products/framed-wall-vent-lite-plus" 10764 > 10765 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 10766 <g clip-path="url(#clip0_694_4827)"> 10767 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 10768 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 10769 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.4854
107691 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 10770 </g> 10771 <defs> 10772 <clipPath id="clip0_694_4827"> 10773 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 10774 </clipPath> 10775 </defs> 10776 </svg> 10777 10778<div class="loading__spinner hidden"> 10779 <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> 10780 10781</div> 10782</button> 10783 </modal-opener> 10784 <quick-add-modal id="QuickAdd-14748886270322" class="quick-add-modal"> 10785 <div 10786 role="dialog" 10787 aria-label="Choose options for Framed Wall Vent [Lite+]" 10788 aria-modal="true" 10789 class="quick-add-modal__content global-settings-popup" 10790 tabindex="-1" 10791 > 10792 <button 10793 id="ModalClose-14748886270322" 10794 type="button" 10795 class="quick-add-modal__toggle" 10796 aria-label="Close" 10797 ><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> 10798</button> 10799 <div id="QuickAddInfo-14748886270322" class="quick-add-modal__content-info"></div> 10800 </div> 10801 </quick-add-modal></div> 10802 10803 10804 10805 10806 <div class="card__badge top left"></div> 10807 </div> 10808 10809 </div> 10810 </div> 10811 <div class="my-buy-btn"> 10812<div class="" ><product-form 10813 class="product-form" 10814 data-hide-errors="false" 10815 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 10816 > 10817 <div class="product-form__error-message-wrapper" role="alert" hidden> 10818 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 10819</span> 10820 <span class="product-form__error-message"></span> 10821 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 10822 type="hidden" 10823 name="id" 10824 value="52493908509042" 10825 10826 class="product-variant-id" 10827 ><div class="product-form__buttons"><button 10828 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 10829 type="submit" 10830 name="add" 10831 class="product-form__submit button button--full-width button--primary" 10832 10833 > 10834 <span> 10835 Learn More 10836 10837</span> 10838 10839<div class="loading__spinner hidden"> 10840 <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> 10841 10842</div> 10843</button></div><input type="hidden" name="product-id" value="14748886270322" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 10844</div> 10845 </div> 10846 10847 <div class="swiper-slide card-slide"> 10848 <link href="//fittes.ca/cdn/shop/t/139/assets/component-rating.css?v=179577762467860590411788881634" rel="stylesheet" type="text/css" media="all" /> 10849 <link href="//fittes.ca/cdn/shop/t/139/assets/component-volume-pricing.css?v=111870094811454961941788881637" rel="stylesheet" type="text/css" media="all" /> 10850 10851 <link href="//fittes.ca/cdn/shop/t/139/assets/component-price.css?v=23758474204081435051788881632" rel="stylesheet" type="text/css" media="all" /> 10852 <link href="//fittes.ca/cdn/shop/t/139/assets/quantity-popover.css?v=129068967981937647381788881705" rel="stylesheet" type="text/css" media="all" /> 10853<div 10854 preorder-product-element="form" 10855 d-id="14738400608626" 10856 data-product-id="14738400608626" 10857 class="card-wrapper product-card-wrapper underline-links-hover" 10858 style="position: relative;" 10859 > 10860 10861 <div 10862 class=" 10863 card card--standard 10864 card--media 10865 10866 10867 10868 10869 10870 " 10871 style="--ratio-percent: 100%;" 10872 > 10873<div class="product-badges tw-absolute tw-left-2 tw-top-2 tw-z-[1] tw-hidden tw-max-w-[90%] "> 10874 10875<div 10876 class="product-badge tw-px-2 tw-py-1 tw-text-sm tw-uppercase " 10877 style="color: black; background-color: white;" 10878 >Airflow Increased</div> 10879 10880 </div> 10881 <div 10882 class="card__inner color-scheme-2 gradient ratio" 10883 style="--ratio-percent: 100%;" 10884 > 10885 10886<div class="card__media"> 10887 <div class="media media--transparent media--hover-effect"> 10888 10889 <img 10890 srcset="//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=165 165w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=360 360w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=533 533w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=720 720w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=940 940w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=1066 1066w,//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185 1080w 10891 " 10892 src="//fittes.ca/cdn/shop/files/1_-_Framed_Floor_Vent_Lite___Lifestyle_1.jpg?v=1772198185&width=533" 10893 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10894 alt="Framed Floor Vent [Lite+]"
10895 class="motion-reduce" 10896 10897 loading="lazy" 10898 10899 width="1080" 10900 height="1080" 10901 > 10902 10903<img 10904 srcset="//fittes.ca/cdn/shop/files/preview_images/a73087210e2a4d7a9f10dbf4a9fc161f.thumbnail.0000000000.jpg?v=1756908646 w 10905 " 10906 src="//fittes.ca/cdn/shop/files/preview_images/a73087210e2a4d7a9f10dbf4a9fc161f.thumbnail.0000000000.jpg?v=1756908646&width=533" 10907 sizes="(min-width: 1400px) 317px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2)" 10908 alt="" 10909 class="motion-reduce" 10910 loading="lazy" 10911 width="" 10912 height="" 10913 > 10914 </div> 10915 </div><div class="card__content"> 10916 <div class="card__information ss"> 10917 <h3 10918 class="card__heading" 10919 10920 > 10921 <a href="/products/framed-floor-vent-lite-plus" id="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14738400608626" class="full-unstyled-link" aria-labelledby="StandardCardNoMediaLink-template--28630587998578__home_tab_product_tJDMfE-14738400608626 NoMediaStandardBadge-template--28630587998578__home_tab_product_tJDMfE-14738400608626"> 10922 Framed Floor Vent [Lite+] 10923 </a> 10924 </h3> 10925 </div> 10926 10927 10928 10929 </div> 10930 </div> 10931 10932 <div class="card__content"> 10933 <div class="card__information sss"><ul class="ffp-pills" aria-label="Product features"><li class="ffp-pill" tabindex="0" data-ffp-tip="Drops into the opening with minimal tools. Slight lip at the edge; fully paintable.">Drop-In</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Extra airflow for larger rooms or spaces with fewer vents.">Double Air Channel</li><li class="ffp-pill" tabindex="0" data-ffp-tip="Lightweight, durable ABS plastic that will not rust.">ABS Plastic</li></ul> 10934<div class="bv_rating_summary "> 10935 <div data-bv-show="rating_summary" data-bv-product-id="14738400608626"></div> 10936 </div> 10937 10938 <h3 10939 class="card__heading h6" 10940 10941 id="title-template--28630587998578__home_tab_product_tJDMfE-14738400608626" 10942 10943 > 10944 <a href="/products/framed-floor-vent-lite-plus" id="CardLink-template--28630587998578__home_tab_product_tJDMfE-14738400608626" class="full-unstyled-link" aria-labelledby="CardLink-template--28630587998578__home_tab_product_tJDMfE-14738400608626 Badge-template--28630587998578__home_tab_product_tJDMfE-14738400608626"> 10945 Framed Floor Vent [Lite+] 10946 </a> 10947 </h3> 10948 <div class="card-information"> 10949 10950 10951<div 10952 class=" 10953 price " 10954 > 10955 <div class="price__container"><!-- REGULAR --> 10956 <div class="price__regular"><span class="visually-hidden visually-hidden--inline">Regular price</span> 10957 <span class="price-item price-item--regular"> 10958 $28.00 USD+ 10959 </span></div> 10960 10961 10962 10963 <small class="unit-price caption hidden"> 10964 <span class="visually-hidden">Unit price</span> 10965 <span class="price-item price-item--last"> 10966 <span></span> 10967 <span aria-hidden="true">/</span> 10968 <span class="visually-hidden"> per </span> 10969 <span> 10970 </span> 10971 </span> 10972 </small> 10973 </div></div> 10974 10975 10976 10977</div> 10978 </div> 10979 10980 10981 10982 10983 10984 <div class="quick-add no-js-hidden"><modal-opener data-modal="#QuickAdd-14738400608626"> 10985 <button 10986 id="quick-add-template--28630587998578__home_tab_product_tJDMfE14738400608626-submit" 10987 type="submit" 10988 name="add" 10989 class="quick-add__submit button button--full-width button--secondary" 10990 aria-haspopup="dialog" 10991 aria-labelledby="quick-add-template--28630587998578__home_tab_product_tJDMfE14738400608626-submit title-template--28630587998578__home_tab_product_tJDMfE-14738400608626" 10992 data-product-url="/products/framed-floor-vent-lite-plus" 10993 > 10994 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" fill="none"> 10995 <g clip-path="url(#clip0_694_4827)"> 10996 <path fill-rule="evenodd" clip-rule="evenodd" d="M3.74172 8.52891C3.71398 8.52891 3.69149 8.5514 3.69149 8.57914C3.69149 8.60687 3.71398 8.62936 3.74172 8.62936C3.76946 8.62936 3.79194 8.60687 3.79194 8.57914C3.79194 8.5514 3.76946 8.52891 3.74172 8.52891ZM2.98835 8.57914C2.98835 8.16306 3.32565 7.82577 3.74172 7.82577C4.15779 7.82577 4.49509 8.16306 4.49509 8.57914C4.49509 8.99521 4.15779 9.3325 3.74172 9.3325C3.32565 9.3325 2.98835 8.99521 2.98835 8.57914Z" fill="#333D4C"/> 10997 <path fill-rule="evenodd" clip-rule="evenodd" d="M8.16147 8.52891C8.13373 8.52891 8.11125 8.5514 8.11125 8.57914C8.11125 8.60687 8.13373 8.62936 8.16147 8.62936C8.18921 8.62936 8.2117 8.60687 8.2117 8.57914C8.2117 8.5514 8.18921 8.52891 8.16147 8.52891ZM7.4081 8.57914C7.4081 8.16306 7.7454 7.82577 8.16147 7.82577C8.57754 7.82577 8.91484 8.16306 8.91484 8.57914C8.91484 8.99521 8.57754 9.3325 8.16147 9.3325C7.7454 9.3325 7.4081 8.99521 7.4081 8.57914Z" fill="#333D4C"/> 10998 <path fill-rule="evenodd" clip-rule="evenodd" d="M0.175781 0.543222C0.175781 0.349054 0.333185 0.19165 0.527353 0.19165H2.13454C2.3021 0.19165 2.44638 0.309914 2.47927 0.474223L2.82481 2.20063H9.36686C9.47164 2.20063 9.57095 2.24736 9.63774 2.32809C9.70453 2.40882 9.73183 2.51514 9.71221 2.61806L9.06883 5.99176C9.01601 6.25768 8.87134 6.49654 8.66016 6.66655C8.44992 6.83578 8.1871 6.92604 7.91732 6.92173H4.01801C3.74824 6.92604 3.4854
109981 6.83578 3.27518 6.66655C3.06407 6.49661 2.91944 6.25786 2.86657 5.99206V5.99206L2.19508 2.6371C2.19254 2.62687 2.19045 2.61646 2.18884 2.6059L1.84636 0.894793H0.527353C0.333185 0.894793 0.175781 0.737389 0.175781 0.543222ZM2.96554 2.90377L3.55618 5.85477C3.57685 5.95883 3.63346 6.0523 3.7161 6.11882C3.79873 6.18535 3.90214 6.22068 4.0082 6.21865L4.01494 6.21859H7.92039L7.92713 6.21865C8.0332 6.22068 8.1366 6.18535 8.21924 6.11882C8.30157 6.05254 8.35807 5.95952 8.37892 5.85592L8.37915 5.85477L8.94191 2.90377H2.96554Z" fill="#333D4C"/> 10999 </g> 11000 <defs> 11001 <clipPath id="clip0_694_4827"> 11002 <rect width="9.6431" height="9.6431" fill="white" transform="translate(0.125 0.141357)"/> 11003 </clipPath> 11004 </defs> 11005 </svg> 11006 11007<div class="loading__spinner hidden"> 11008 <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> 11009 11010</div> 11011</button> 11012 </modal-opener> 11013 <quick-add-modal id="QuickAdd-14738400608626" class="quick-add-modal"> 11014 <div 11015 role="dialog" 11016 aria-label="Choose options for Framed Floor Vent [Lite+]" 11017 aria-modal="true" 11018 class="quick-add-modal__content global-settings-popup" 11019 tabindex="-1" 11020 > 11021 <button 11022 id="ModalClose-14738400608626" 11023 type="button" 11024 class="quick-add-modal__toggle" 11025 aria-label="Close" 11026 ><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> 11027</button> 11028 <div id="QuickAddInfo-14738400608626" class="quick-add-modal__content-info"></div> 11029 </div> 11030 </quick-add-modal></div> 11031 11032 11033 11034 11035 <div class="card__badge top left"></div> 11036 </div> 11037 11038 </div> 11039 </div> 11040 <div class="my-buy-btn"> 11041<div class="" ><product-form 11042 class="product-form" 11043 data-hide-errors="false" 11044 data-section-id="template--28630587998578__home_tab_product_tJDMfE" 11045 > 11046 <div class="product-form__error-message-wrapper" role="alert" hidden> 11047 <span class="svg-wrapper"><svg class="icon icon-error" viewBox="0 0 13 13"><circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="2"/><circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/><path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/><path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/></svg> 11048</span> 11049 <span class="product-form__error-message"></span> 11050 </div><form method="post" action="/cart/add" id="product-form-template--28630587998578__home_tab_product_tJDMfE" accept-charset="UTF-8" class="form" enctype="multipart/form-data" novalidate="novalidate" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 11051 type="hidden" 11052 name="id" 11053 value="52294891995506" 11054 11055 class="product-variant-id" 11056 ><div class="product-form__buttons"><button 11057 id="ProductSubmitButton-template--28630587998578__home_tab_product_tJDMfE" 11058 type="submit" 11059 name="add" 11060 class="product-form__submit button button--full-width button--primary" 11061 11062 > 11063 <span> 11064 Learn More 11065 11066</span> 11067 11068<div class="loading__spinner hidden"> 11069 <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> 11070 11071</div> 11072</button></div><input type="hidden" name="product-id" value="14738400608626" /><input type="hidden" name="section-id" value="template--28630587998578__home_tab_product_tJDMfE" /></form></product-form></div> 11073</div> 11074 </div> 11075 11076 </div> 11077 </div> 11078 <div class="swiper-button-prev small-hide swiper-button-disabled"> 11079 <svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewB
11079ox="0 0 27 27" fill="none"> 11080 <path d="M22.1953 13.9355H4.98519M4.98519 13.9355C4.98519 13.9355 9.86348 10.7272 10.8548 8.06592M4.98519 13.9355C4.98519 13.9355 9.29778 16.95 10.8548 19.805" stroke="#1E1E1E" stroke-width="2.17391" stroke-linecap="square"/> 11081 </svg> 11082 </div> 11083 <div class="swiper-button-next small-hide"> 11084 <svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 27 27" fill="none"> 11085 <path d="M4.80469 13.9355H22.0148M22.0148 13.9355C22.0148 13.9355 17.1365 10.7272 16.1452 8.06592M22.0148 13.9355C22.0148 13.9355 17.7022 16.95 16.1452 19.805" stroke="#1E1E1E" stroke-width="2.17391" stroke-linecap="square"/> 11086 </svg> 11087 </div> 11088 </div> 11089 </template> 11090 </div> 11091 11092 </div> 11093</div> 11094
11095<script> 11096 (function() { 11097 const sectionId = 'template--28630587998578__home_tab_product_tJDMfE'; 11098 const section = document.getElementById('shopify-section-' + sectionId); 11099 if (!section) return; 11100 11101 const tabs = section.querySelectorAll('.series-product-tab p'); 11102 const contents = section.querySelectorAll('.series-product-bottom'); 11103 const openInNewTab = section.querySelector('[data-open-new-tab]')?.dataset.openNewTab === 'true'; 11104 let currentSwiper = null; 11105 let sectionInView = false; 11106 11107 const isMobile = () => window.innerWidth < 750; 11108 // Fully/partially visible slides at rest: 1.9 on mobile, 4 on desktop 11109 const visibleCount = () => (isMobile() ? 2 : 4); 11110 11111 /* ---------- Image deferral helpers ---------- */ 11112 11113 // Called while the node is still in a detached fragment, so nothing fetches 11114 function deferImage(img) { 11115 if (img.dataset.deferred) return; 11116 if (img.hasAttribute('srcset')) { 11117 img.dataset.srcset = img.getAttribute('srcset'); 11118 img.removeAttribute('srcset'); 11119 } 11120 if (img.hasAttribute('src')) { 11121 img.dataset.src = img.getAttribute('src'); 11122 img.removeAttribute('src'); 11123 } 11124 img.dataset.deferred = 'true'; 11125 } 11126 11127 function loadImage(img) { 11128 if (!img.dataset.deferred) return; 11129 img.setAttribute('loading', 'eager'); 11130 if (img.dataset.srcset) { 11131 img.setAttribute('srcset', img.dataset.srcset); 11132 delete img.dataset.srcset; 11133 } 11134 if (img.dataset.src) { 11135 img.setAttribute('src', img.dataset.src); 11136 delete img.dataset.src; 11137 } 11138 delete img.dataset.deferred; 11139 } 11140 11141 /* ---------- Tab hydration ---------- */ 11142 11143 function hydrateTab(content) { 11144 if (!content || content.dataset.hydrated) return; 11145 11146 const template = content.querySelector('template[data-swiper-template]'); 11147 if (!template) return; 11148 11149 const fragment = template.content.cloneNode(true); 11150 11151 // Defer images on slides beyond the initially visible set (+1 buffer 11152 // so the first swipe/click feels instant) 11153 const slides = fragment.querySelectorAll('.swiper-slide'); 11154 const eagerLimit = visibleCount() + 1; 11155 slides.forEach((slide, index) => { 11156 if (index >= eagerLimit) { 11157 slide.querySelectorAll('img').forEach(deferImage); 11158 } 11159 }); 11160 11161 if (openInNewTab) { 11162 fragment.querySelectorAll('.card-slide a[href*="/products/"]').forEach((link) => { 11163 link.setAttribute('target', '_blank'); 11164 link.setAttribute('rel', 'noopener noreferrer'); 11165 }); 11166 } 11167 11168 content.appendChild(fragment); 11169 template.remove(); 11170 content.dataset.hydrated = 'true'; 11171 } 11172 11173 /* ---------- Swiper ---------- */ 11174 11175 function getActiveContent() { 11176 return section.querySelector('.series-product-bottom.active'); 11177 } 11178 11179 function destroyCurrentSwiper() { 11180 if (currentSwiper && typeof currentSwiper.destroy === 'function') { 11181 currentSwiper.destroy(true, true); 11182 currentSwiper = null; 11183 } 11184 } 11185 11186 // Loads everything from slide 0 through (active + visible + 1 ahead) 11187 function loadVisibleSlideImages(swiper) { 11188 if (!swiper || !swiper.slides) return; 11189 const spv = Math.ceil(swiper.params.slidesPerView); 11190 const end = Math.min(swiper.activeIndex + spv + 1, swiper.slides.length); 11191 for (let i = 0; i < end; i++) { 11192 swiper.slides[i].querySelectorAll('img[data-deferred]').forEach(loadImage); 11193 } 11194 } 11195 11196 function initActiveSwiper() { 11197 const activeContent = getActiveContent(); 11198 if (!activeContent || !activeContent.dataset.hydrated) return; 11199 11200 const swiperEl = activeContent.querySelector('.mySwiper'); 11201 if (!swiperEl) return; 11202 11203 const prevBtn = activeContent.querySelector('.swiper-button-prev'); 11204 const nextBtn = activeContent.querySelector('.swiper-button-next'); 11205 11206 destroyCurrentSwiper(); 11207 11208 const mobile = isMobile(); 11209 11210 if (prevBtn) prevBtn.classList.add('swiper-button-disabled'); 11211 if (nextBtn) nextBtn.classList.remove('swiper-button-disabled'); 11212 11213 currentSwiper = new Swiper(swiperEl, { 11214 slidesPerView: mobile ? 1.9 : 4, 11215 spaceBetween: mobile ? 20 : 33, 11216 loop: false, 11217 initialSlide: 0, 11218 watchOverflow: true, 11219 observer: true, 11220 observeParents: true, 11221 simulateTouch: mobile, 11222 allowTouchMove: mobile, 11223 preventClicks: false, 11224 preventClicksPropagation: false, 11225 touchStartPreventDefault: false, 11226 navigation: mobile ? false : { 11227 nextEl: nextBtn, 11228 prevEl: prevBtn, 11229 disabledClass: 'swiper-button-disabled' 11230 }, 11231 on: { 11232 init: function() { 11233 updateNavButtons(this, prevBtn, nextBtn); 11234 loadVisibleSlideImages(this); 11235 }, 11236 slideChange: function() { 11237 updateNavButtons(this, prevBtn, nextBtn); 11238 loadVisibleSlideImages(this); 11239 }, 11240 // Mobile: start loading the moment a swipe begins, not after it settles 11241 touchStart: function() { 11242 loadVisibleSlideImages(this); 11243 }, 11244 reachBeginning: function() { 11245 if (prevBtn) prevBtn.classList.add('swiper-button-disabled'); 11246 }, 11247 reachEnd: function() { 11248 if (nextBtn) nextBtn.classList.add('swiper-button-disabled'); 11249 } 11250 } 11251 }); 11252 } 11253 11254 function updateNavButtons(swiper, prevBtn, nextBtn) { 11255 if (!swiper || !prevBtn || !nextBtn) return; 11256 11257 // At beginning - hide prev 11258 if (swiper.isBeginning) { 11259 prevBtn.classList.add('swiper-button-disabled'); 11260 } else { 11261 prevBtn.classList.remove('swiper-button-disabled'); 11262 } 11263
11264 // At end - hide next 11265 if (swiper.isEnd) { 11266 nextBtn.classList.add('swiper-button-disabled'); 11267 } else { 11268 nextBtn.classList.remove('swiper-button-disabled'); 11269 } 11270 11271 // If not enough slides for navigation, hide both 11272 if (swiper.slides.length <= swiper.params.slidesPerView) { 11273 prevBtn.classList.add('swiper-button-disabled'); 11274 nextBtn.classList.add('swiper-button-disabled'); 11275 } 11276 } 11277 11278 /* ---------- Tab switching ---------- */ 11279 11280 tabs.forEach((tab) => { 11281 tab.addEventListener('click', function() { 11282 const targetName = this.dataset.tab; 11283 11284 destroyCurrentSwiper(); 11285 11286 tabs.forEach((t) => t.classList.remove('active')); 11287 contents.forEach((c) => c.classList.remove('active')); 11288 this.classList.add('active'); 11289 11290 const targetContent = section.querySelector('.series-product-bottom[data-content="' + targetName + '"]'); 11291 if (targetContent) { 11292 targetContent.classList.add('active'); 11293 hydrateTab(targetContent); // stamps template on first visit only 11294 } 11295 11296 // Synchronous init - hydrate, stamp, and boot Swiper in the same task 11297 // so the browser never paints the un-initialized state 11298 initActiveSwiper(); 11299 }); 11300 }); 11301 11302 /* ---------- Deferred initialization via IntersectionObserver ---------- */ 11303 11304 function activateSection() { 11305 if (sectionInView) return; 11306 sectionInView = true; 11307 hydrateTab(getActiveContent()); 11308 initActiveSwiper(); 11309 } 11310 11311 if ('IntersectionObserver' in window) { 11312 const observer = new IntersectionObserver((entries, obs) => { 11313 if (entries.some((entry) => entry.isIntersecting)) { 11314 obs.disconnect(); 11315 activateSection(); 11316 } 11317 }, { rootMargin: '200px 0px' }); 11318 observer.observe(section); 11319 } else { 11320 // Ancient browser fallback: just load immediately 11321 if (document.readyState === 'loading') { 11322 document.addEventListener('DOMContentLoaded', activateSection); 11323 } else { 11324 activateSection(); 11325 } 11326 } 11327 11328 /* ---------- Resize ---------- */ 11329 11330 let resizeTimer; 11331 window.addEventListener('resize', function() { 11332 clearTimeout(resizeTimer); 11333 resizeTimer = setTimeout(() => { 11334 if (!sectionInView) return; 11335 destroyCurrentSwiper(); 11336 initActiveSwiper(); 11337 }, 250); 11338 }); 11339 })(); 11340</script>
11340 11341 11342</div><section id="shopify-section-template--28630587998578__beforeandafterslider_hp_d3gJ9B" class="shopify-section section-before-after-slider"> 11343 11344<style> 11345 .flush-lite-slider-container { 11346 display: flex; 11347 justify-content: center; 11348 align-items: center; 11349 min-height: 300px; 11350 padding: 40px 20px 40px; 11351 box-sizing: border-box; 11352 background-color: #ffffff; 11353 } 11354 11355 .flush-lite-slider-container .fl-ba-item { 11356 width: 100%; 11357 max-width: 800px; 11358 } 11359 11360 .flush-lite-slider-container .fl-ba-wrapper { 11361 position: relative; 11362 overflow: hidden; 11363 border: 5px solid #000000; 11364 border-radius: 8px; 11365 box-shadow: 0 6px 20px rgba(0,0,0,.2); 11366 background-color: #000; 11367 box-sizing: border-box; 11368 transform: translateZ(0); 11369 -webkit-transform: translateZ(0); 11370 } 11371 11372 .flush-lite-slider-container .fl-ba-wrapper::before { 11373 content: ""; 11374 display: block; 11375 padding-top: 50%; 11376 } 11377 11378 .flush-lite-slider-container .fl-ba-img { 11379 position: absolute; 11380 top: 0; 11381 left: 0; 11382 width: 100%; 11383 height: 100%; 11384 object-fit: cover; 11385 pointer-events: none; 11386 user-select: none; 11387 -webkit-user-select: none; 11388 -moz-user-select: none; 11389 -ms-user-select: none; 11390 } 11391 11392 .flush-lite-slider-container .fl-ba-before { 11393 z-index: 1; 11394 -webkit-clip-path: inset(0 50% 0 0); 11395 clip-path: inset(0 50% 0 0); 11396 } 11397 11398 .flush-lite-slider-container .fl-ba-after { 11399 z-index: 0; 11400 } 11401 11402 .flush-lite-slider-container .fl-ba-divider { 11403 position: absolute; 11404 top: 0; 11405 left: 50%; 11406 width: 2px; 11407 height: 100%; 11408 background: #ffffff; 11409 mix-blend-mode: difference; 11410 z-index: 2; 11411 } 11412 11413 .flush-lite-slider-container .fl-ba-handle { 11414 position: absolute; 11415 top: 50%; 11416 left: 50%; 11417 transform: translate(-50%, -50%); 11418 -webkit-transform: translate(-50%, -50%); 11419 -moz-transform: translate(-50%, -50%); 11420 -ms-transform: translate(-50%, -50%); 11421 width: 36px; 11422 height: 36px; 11423 border-radius: 50%; 11424 background: #ffffff; 11425 display: flex; 11426 align-items: center; 11427 justify-content: center; 11428 cursor: pointer; 11429 user-select: none; 11430 -webkit-user-select: none; 11431 -moz-user-select: none; 11432 -ms-user-select: none; 11433 z-index: 3; 11434 } 11435 11436 .flush-lite-slider-container .fl-ba-handle svg { 11437 width: 24px; 11438 height: 24px; 11439 display: block; 11440 color: #000000; 11441 } 11442 11443 @media (min-width: 1200px) { 11444 .flush-lite-slider-container .fl-ba-item { 11445 max-width: min(800px, 70vw); 11446 } 11447 } 11448 11449 @media (min-width: 1600px) { 11450 .flush-lite-slider-container .fl-ba-item { 11451 max-width: min(800px, 60vw); 11452 } 11453 } 11454 11455 @media (max-width: 991px) { 11456 .flush-lite-slider-container .fl-ba-wrapper { 11457 border-width: 3px; 11458 } 11459 .flush-lite-slider-container .fl-ba-img { 11460 top: -1px; 11461 left: -1px; 11462 width: calc(100% + 2px); 11463 height: calc(100% + 2px); 11464 } 11465 } 11466 11467 @media (max-width: 768px) { 11468 .flush-lite-slider-container { 11469 padding: 30px 15px 30px; 11470 } 11471 11472 .flush-lite-slider-container .fl-ba-wrapper { 11473 border-width: 2px; 11474 } 11475 11476 .flush-lite-slider-container .fl-ba-handle { 11477 width: 30px; 11478 height: 30px; 11479 } 11480 11481 .flush-lite-slider-container .fl-ba-handle svg { 11482 width: 20px; 11483 height: 20px; 11484 } 11485 } 11486 11487 @media (max-width: 480px) { 11488 .flush-lite-slider-container { 11489 padding: 20px 5px 20px; 11490 min-height: 200px; 11491 } 11492 11493 .flush-lite-slider-container .fl-ba-item { 11494 max-width: 95%; 11495 } 11496 11497 .flush-lite-slider-container .fl-ba-wrapper { 11498 border-width: 1px; 11499 } 11500 11501 .flush-lite-slider-container .fl-ba-handle { 11502 width: 28px; 11503 height: 28px; 11504 } 11505 11506 .flush-lite-slider-container .fl-ba-handle svg { 11507 width: 18px; 11508 height: 18px; 11509 } 11510 } 11511</style><div class="flush-lite-slider-container" id="ba-slider-template--28630587998578__beforeandafterslider_hp_d3gJ9B"> 11512 <div class="fl-ba-item"> 11513 <div class="fl-ba-wrapper"> 11514 11515 <img class="fl-ba-img fl-ba-after" 11516 src="//fittes.ca/cdn/shop/files/AFTER_4.webp?v=1777318392&width=800" 11517 srcset="//fittes.ca/cdn/shop/files/AFTER_4.webp?v=1777318392&width=360 360w, 11518 //fittes.ca/cdn/shop/files/AFTER_4.webp?v=1777318392&width=480 480w, 11519 //fittes.ca/cdn/shop/files/AFTER_4.webp?v=1777318392&width=600 600w, 11520 //fittes.ca/cdn/shop/files/AFTER_4.webp?v=1777318392&width=768 768w, 11521 //fittes.ca/cdn/shop/files/AFTER_4.webp?v=1777318392&width=900 900w, 11522 //fittes.ca/cdn/shop/files/AFTER_4.webp?v=1777318392&width=1100 1100w, 11523 //fittes.ca/cdn/shop/files/AFTER_4.webp?v=1777318392&width=1400 1400w, 11524 //fittes.ca/cdn/shop/files/AFTER_4.webp?v=1777318392&width=1800 1800w" 11525 sizes="(max-width: 480px) 95vw, (max-width: 768px) 90vw, (max-width: 1199px) min(800px, 92vw), (max-width: 1599px) min(800px, 70vw), min(800px, 60vw)" 11526 alt="After comparison image" 11527 width="1500" 11528 height="750" 11529 loading="lazy" 11530 decoding="async"> 11531 11532 11533 11534 <img class="fl-ba-img fl-ba-before" 11535 src="//fittes.ca/cdn/shop/files/AFTER_3.webp?v=1777318379&width=800" 11536 srcset="//fittes.ca/cdn/shop/files/AFTER_3.webp?v=1777318379&width=360 360w, 11537 //fittes.ca/cdn/shop/files/AFTER_3.webp?v=1777318379&width=480 480w, 11538 //fittes.ca/cdn/shop/files/AFTER_3.webp?v=1777318379&width=600 600w, 11539 //fittes.ca/cdn/shop/files/AFTER_3.webp?v=1777318379&width=768 768w, 11540 //fittes.ca/cdn/shop/files/AFTER_3.webp?v=1777318379&width=900 900w, 11541 //fittes.ca/cdn/shop/files/AFTER_3.webp?v=1777318379&width=1100 1100w, 11542 //fittes.ca/cdn/shop/files/AFTER_3.webp?v=1777318379&width=1400 1400w, 11543 //fittes.ca/cdn/shop/files/AFTER_3.webp?v=1777318379&width=1800 1800w" 11544 sizes="(max-width: 480px) 95vw, (max-width: 768px) 90vw, (max-width: 1199px) min(800px, 92vw), (max-width: 1599px) min(800px, 70vw), min(800px, 60vw)" 11545 alt="Before comparison image" 11546 width="1500" 11547 height="750" 11548 loading="lazy" 11549 decoding="async"> 11550 11551 11552 <div class="fl-ba-divider"></div> 11553 <div class="fl-ba-handle" aria-label="Drag to compare before and after"> 11554 <svg width="40" height="24" viewBox="0 0 40 24" xmlns="http://www.w3.org/2000/svg"> 11555 <g stroke="currentColor" stroke-width="1.5" fill="none"> 11556 <polyline points="14,6 8,12 14,18" stroke-linecap="round" stroke-linejoin="round"/> 11557 <line x1="14" y1="12" x2="26" y2="12"/> 11558 <polyline points="26,6 32,12 26,18" stroke-linecap="round" stroke-linejoin="round"/> 11559 </g> 11560 </svg> 11561 </div> 11562 </div> 11563 </div> 11564</div> 11565
11566<script> 11567(function(){ 11568 const wrapper = document.querySelector('#ba-slider-template--28630587998578__beforeandafterslider_hp_d3gJ9B .fl-ba-wrapper'); 11569 if (!wrapper) return; 11570 11571 const before = wrapper.querySelector('.fl-ba-before'); 11572 const divider = wrapper.querySelector('.fl-ba-divider'); 11573 const handle = wrapper.querySelector('.fl-ba-handle'); 11574 11575 if (!before || !divider || !handle) return; 11576 11577 let dragging = false; 11578 11579 function updatePosition(percentage) { 11580 const pos = (percentage * 100) + '%'; 11581 const clipValue = 100 - (percentage * 100); 11582 11583 before.style.clipPath = `inset(0 ${clipValue}% 0 0)`; 11584 before.style.webkitClipPath = `inset(0 ${clipValue}% 0 0)`; 11585 11586 divider.style.left = pos; 11587 handle.style.left = pos; 11588 } 11589 11590 function setPosition(clientX) { 11591 const rect = wrapper.getBoundingClientRect(); 11592 let percentage = (clientX - rect.left) / rect.width; 11593 percentage = Math.max(0, Math.min(1, percentage)); 11594 updatePosition(percentage); 11595 } 11596 11597 wrapper.addEventListener('mousedown', function(e) { 11598 dragging = true; 11599 setPosition(e.clientX); 11600 e.preventDefault(); 11601 }); 11602 11603 window.addEventListener('mousemove', function(e) { 11604 if (dragging) { 11605 setPosition(e.clientX); 11606 e.preventDefault(); 11607 } 11608 }); 11609 11610 window.addEventListener('mouseup', function() { 11611 dragging = false; 11612 }); 11613 11614 wrapper.addEventListener('touchstart', function(e) { 11615 dragging = true; 11616 setPosition(e.touches[0].clientX); 11617 e.preventDefault(); 11618 }, {passive: false}); 11619 11620 window.addEventListener('touchmove', function(e) { 11621 if (dragging) { 11622 setPosition(e.touches[0].clientX); 11623 e.preventDefault(); 11624 } 11625 }, {passive: false}); 11626 11627 window.addEventListener('touchend', function() { 11628 dragging = false; 11629 }); 11630 11631 window.addEventListener('touchcancel', function() { 11632 dragging = false; 11633 }); 11634 11635 updatePosition(0.5); 11636})(); 11637</script>
11637 11638 11639 11640</section><section id="shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD" class="shopify-section section"><style data-shopify>/* ========== SHARED PADDING LADDER â matches the other homepage sections ========== */ 11641 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD { 11642 --content-padding: 20px; 11643 --panel-bg: #1a1a1a; 11644 --panel-fg: #f3f3f3; 11645 --accent: #e73c3e; 11646 --eyebrow-color: #e73c3e; 11647 --panel-radius: 0px; 11648 --rule: #3d3d3d; 11649 --active-title: #ffffff; 11650 } 11651 @media (min-width: 750px) { 11652 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD { --content-padding: calc(2.5rem + 30px); } 11653 } 11654 @media (min-width: 990px) { 11655 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD { --content-padding: calc(2.5rem + 40px); } 11656 } 11657 @media (min-width: 1200px) { 11658 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD { --content-padding: calc(2.5rem + 50px); } 11659 } 11660 11661 .seamless-template--28630587998578__seamless_spaces_accord_Lz6fGD-padding { 11662 padding-top: 27px; 11663 padding-bottom: 27px; 11664 } 11665 @media (min-width: 750px) { 11666 .seamless-template--28630587998578__seamless_spaces_accord_Lz6fGD-padding { 11667 padding-top: 36px; 11668 padding-bottom: 36px; 11669 } 11670 } 11671 11672 /* ========== OUTER FRAME ========== */ 11673 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss { 11674 max-width: 1420px; 11675 margin: 0 auto; 11676 padding-left: var(--content-padding); 11677 padding-right: var(--content-padding); 11678 box-sizing: border-box; 11679 } 11680 11681 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__eyebrow { 11682 font-size: 1.2rem; 11683 font-weight: 500; 11684 letter-spacing: 0.08em; 11685 text-transform: uppercase; 11686 color: var(--eyebrow-color); 11687 margin: 0; 11688 } 11689 11690 /* Header sits above the panel, left aligned, matching the carousel 11691 version's heading treatment */ 11692 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__header { 11693 margin-bottom: 20px; 11694 } 11695 11696 @media (min-width: 750px) { 11697 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__header { 11698 margin-bottom: 40px; 11699 } 11700 } 11701 11702 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame { 11703 background: var(--panel-bg); 11704 color: var(--panel-fg); 11705 border-radius: var(--panel-radius); 11706 overflow: hidden; 11707 display: grid; 11708 grid-template-columns: 1fr; 11709 } 11710 11711 @media (min-width: 990px) { 11712 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame { 11713 grid-template-columns: 45fr 55fr; 11714 min-height: 0; 11715 } 11716 } 11717 11718 /* ========== MEDIA PANEL ========== */ 11719 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__media { 11720 position: relative; 11721 aspect-ratio: 4 / 3; 11722 background: #f3f3f30d; 11723 } 11724 11725 @media (min-width: 990px) { 11726 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__media { 11727 aspect-ratio: auto; 11728 } 11729 } 11730 11731 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__figure { 11732 position: absolute; 11733 inset: 0; 11734 margin: 0; 11735 opacity: 0; 11736 transition: opacity 0.45s ease; 11737 pointer-events: none; 11738 } 11739 11740 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__figure img, 11741 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__figure svg { 11742 width: 100%; 11743 height: 100%; 11744 object-fit: cover; 11745 display: block; 11746 } 11747 11748 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__counter { 11749 position: absolute; 11750 left: 24px; 11751 bottom: 20px; 11752 z-index: 3; 11753 font-size: 1.2rem; 11754 letter-spacing: 0.12em; 11755 font-variant-numeric: tabular-nums; 11756 opacity: 0.75; 11757 } 11758 11759 @media (min-width: 750px) { 11760 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__counter { 11761 left: 32px; 11762 bottom: 28px; 11763 } 11764 } 11765 11766 /* ========== CONTENT PANEL ========== */ 11767 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__content { 11768 padding: 20px 20px 22px; 11769 display: flex; 11770 flex-direction: column; 11771 } 11772 11773 @media (min-width: 750px) { 11774 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__content { 11775 padding: 26px 28px 28px; 11776 } 11777 } 11778 11779 @media (min-width: 1200px) { 11780 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__content { 11781 padding: 30px 36px 32px; 11782 justify-content: center; 11783 } 11784 } 11785 11786 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__title { 11787 margin: 10px 0 0; 11788 letter-spacing: -0.015em; 11789 font-size: calc(var(--font-heading-scale, 1) * 3.2rem); 11790 line-height: 1.05; 11791 } 11792 11793 @media (min-width: 750px) { 11794 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__title { 11795 margin-top: 20px; 11796 font-size: calc(var(--font-heading-scale, 1) * 4.0rem); 11797 } 11798 } 11799 11800 /* Inline by default, so the heading sits on one line when there is room 11801 and wraps naturally when there is not */ 11802 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__title { 11803 text-wrap: balance; 11804 } 11805 11806 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__title em { 11807 font-style: italic; 11808 font-weight: 400; 11809 } 11810 11811 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__intro { 11812 margin: 12px 0 0; 11813 max-width: 62ch; 11814 font-size: 1.5rem; 11815 line-height: 1.6; 11816 opacity: 0.8; 11817 } 11818 11819 @media (min-width: 750px) { 11820 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__intro { 11821 font-size: 1.6rem; 11822 } 11823 } 11824 11825 /* ========== ACCORDION LIST ========== */ 11826 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__list { 11827 list-style: none; 11828 margin: 0; 11829 padding: 0; 11830 border-top: 1px solid var(--rule); 11831 } 11832 11833 @media (min-width: 750px) { 11834 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__list { 11835 margin-top: 0; 11836 } 11837 } 11838 11839 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__item { 11840 position: relative; 11841 border-bottom: 1px solid var(--rule); 11842 } 11843 11844 /* The radio is the state machine. Kept in the DOM, never display:none, so 11845 it stays operable; positioned off-screen rather than hidden. */ 11846 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__radio { 11847 position: absolute; 11848 width: 1px; 11849 height: 1px; 11850 margin: 0; 11851 padding: 0; 11852 border: 0; 11853 clip: rect(0 0 0 0); 11854 clip-path: inset(50%); 11855 overflow: hidden; 11856 white-space: nowrap; 11857 } 11858 11859 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__trigger { 11860 display: grid; 11861 grid-template-columns: 34px 1fr;
11862 align-items: baseline; 11863 gap: 4px; 11864 padding: 16px 0; 11865 cursor: pointer; 11866 transition: opacity 0.25s ease; 11867 opacity: 0.62; 11868 } 11869 11870 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__trigger:hover { 11871 opacity: 0.9; 11872 } 11873 11874 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__num { 11875 font-size: 1.1rem; 11876 letter-spacing: 0.06em; 11877 font-variant-numeric: tabular-nums; 11878 opacity: 0.7; 11879 } 11880 11881 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__card-title { 11882 margin: 0; 11883 font-size: 1.89rem; 11884 line-height: 1.25; 11885 letter-spacing: -0.01em; 11886 color: inherit; 11887 } 11888 11889 @media (min-width: 750px) { 11890 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__card-title { 11891 font-size: 2.1rem; 11892 } 11893 } 11894 11895 /* ---- Collapsed panel: clipped, NOT hidden ---- 11896 grid-template-rows 0fr keeps the text in the DOM and in the 11897 accessibility tree. No display:none, no visibility:hidden. */ 11898 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__panel { 11899 display: grid; 11900 grid-template-rows: 0fr; 11901 transition: grid-template-rows 0.4s ease, opacity 0.3s ease; 11902 opacity: 0; 11903 } 11904 11905 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__panel-inner { 11906 overflow: hidden; 11907 grid-column: 1 / -1; 11908 padding-left: 38px; 11909 padding-bottom: 4px; 11910 } 11911 11912 /* Matches .reviews__quote p exactly */ 11913 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__text { 11914 margin: 0 0 12px; 11915 font-size: 1.5rem; 11916 line-height: 1.6; 11917 opacity: 0.82; 11918 } 11919 11920 @media (min-width: 750px) { 11921 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__text { 11922 font-size: 1.6rem; 11923 } 11924 } 11925 11926 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__link { 11927 display: inline-flex; 11928 align-items: center; 11929 gap: 8px; 11930 margin-bottom: 16px; 11931 font-size: 1.4rem; 11932 color: inherit; 11933 text-underline-offset: 0.3em; 11934 text-decoration-thickness: 1px; 11935 } 11936 11937 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__link svg { 11938 width: 14px; 11939 height: 14px; 11940 } 11941 11942 /* ---- Open state ---- */ 11943 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__radio:checked ~ .ss__trigger { 11944 opacity: 1; 11945 } 11946 11947 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__radio:checked ~ .ss__trigger .ss__card-title { 11948 color: var(--active-title); 11949 font-weight: 700; 11950 } 11951 11952 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__radio:checked ~ .ss__panel { 11953 grid-template-rows: 1fr; 11954 opacity: 1; 11955 } 11956 11957 /* Active row marker: a single accent rule on the left edge of the row, 11958 held inside the dark panel so it never crosses onto the image. Only 11959 border-left is touched, so the grey dividers stay intact. */ 11960 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__item:has(.ss__radio:checked) { 11961 border-left: 2px solid var(--accent); 11962 margin-left: -8px; 11963 padding-left: 8px; 11964 z-index: 2; 11965 } 11966 11967 /* Keyboard focus lands on the radio; surface it on the visible row */ 11968 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__radio:focus-visible ~ .ss__trigger { 11969 outline: 2px solid var(--accent); 11970 outline-offset: 4px; 11971 opacity: 1; 11972 } 11973 11974 @media (prefers-reduced-motion: reduce) { 11975 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__panel, 11976 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__figure, 11977 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__trigger { 11978 transition: none; 11979 } 11980 } 11981 11982 /* ========== PER-BLOCK MEDIA + COUNTER SWAPPING (CSS only) ========== */#shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-1:checked) .ss__figure[data-index="1"] { 11983 opacity: 1; 11984 } 11985 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-1:checked) .ss__counter::before { 11986 content: "01"; 11987 }#shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-2:checked) .ss__figure[data-index="2"] { 11988 opacity: 1; 11989 } 11990 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-2:checked) .ss__counter::before { 11991 content: "02"; 11992 }#shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-3:checked) .ss__figure[data-index="3"] { 11993 opacity: 1; 11994 } 11995 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-3:checked) .ss__counter::before { 11996 content: "03"; 11997 }#shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-4:checked) .ss__figure[data-index="4"] { 11998 opacity: 1; 11999 } 12000 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-4:checked) .ss__counter::before { 12001 content: "04"; 12002 }#shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-5:checked) .ss__figure[data-index="5"] { 12003 opacity: 1; 12004 } 12005 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-5:checked) .ss__counter::before { 12006 content: "05"; 12007 }#shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-6:checked) .ss__figure[data-index="6"] { 12008 opacity: 1; 12009 } 12010 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-6:checked) .ss__counter::before { 12011 content: "06"; 12012 }/* Fallback for browsers without :has() â first item shows by default */ 12013 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__figure[data-index="1"] { 12014 opacity: 1; 12015 } 12016 @supports selector(:has(*)) { 12017 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__figure[data-index="1"] { 12018 opacity: 0; 12019 } 12020 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__frame:has(#ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-1:checked) .ss__figure[data-index="1"] { 12021 opacity: 1; 12022 } 12023 } 12024 12025 #shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD .ss__counter::after { 12026 content: " / 06"; 12027 }</style><div class="color-scheme-1 gradient isolate"> 12028 <div class="seamless-template--28630587998578__seamless_spaces_accord_Lz6fGD-padding"> 12029 <section class="ss" aria-labelledby="ss-title-template--28630587998578__seamless_spaces_accord_Lz6fGD"> 12030 <header class="ss__header"><p class="ss__eyebrow">Seamless Spaces</p><h2 id="ss-title-template--28630587998578__seamless_spaces_accord_Lz6fGD" class="ss__title h1">Details that <em>disappear</em></h2><p class="ss__intro">Fittes makes vent covers, access doors, shadow-line baseboards and bathroom hardware designed to finish level with the surrounding surface. Paint them, paper them, or match them to your flooring and tile.</p></header> 12031 12032 <div class="ss__frame"> 12033 <div class="ss__media"><figure class="ss__figure" data-index="1"><img src="//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=1400" alt="Recessed floor register set level with white oak hardwood flooring" srcset="//fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=480 480w, //fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=720 720w, //fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=960 960w, //fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=1200 1200w, //fittes.ca/cdn/shop/files/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011&width=1400 1400w" width="1400" height="1400" loading="eager" sizes="(min-width: 990px) 55vw, 100vw"> 12034</figure><figure class="ss__figure" data-index="2"><img src="//fittes.ca/cdn/shop/files/flush-wall-vent-lite-plus-white-living-room.webp?v=1785943078&width=1400" alt="Paintable wall return air vent blending into a painted plaster wall" srcset="//fittes.ca/cdn/shop/files/flush-wall-vent-lite-plus-white-living-room.webp?v=1785943078&width=480 480w, //fittes.ca/cdn/shop/files/flush-wall-vent-lite-plus-white-living-room.webp?v=1785943078&width=720 720w, //fittes.ca/cdn/shop/files/flush-wall-vent-lite-plus-white-living-room.webp?v=1785943078&width=960 960w, //fittes.ca/cdn/shop/files/flush-wall-vent-lite-plus-white-living-room.webp?v=1785943078&width=1200 1200w, //fittes.ca/cdn/shop/files/flush-wall-vent-lite-plus-white-living-room.webp?v=1785943078&width=1400 1400w" width="1400" height="1400" loading="lazy" sizes="(min-width: 990px) 55vw, 100vw"> 12035</figure><figure class="ss__figure" data-index="3"><img src="//fittes.ca/cdn/shop/files/flush-exhaust-mount-red-paint-bathroom.webp?v=1785943174&width=1400" alt="Low-profile bathroom exhaust fan cover painted to match the ceiling" srcset="//fittes.ca/cdn/shop/files/flush-exhaust-mount-red-paint-bathroom.webp?v=1785943174&width=480 480w, //fittes.ca/cdn/shop/files/flush-exhaust-mount-red-paint-bathroom.webp?v=1785943174&width=720 720w, //fittes.ca/cdn/shop/files/flush-exhaust-mount-red-paint-bathroom.webp?v=1785943174&width=960 960w, //fittes.ca/cdn/shop/files/flush-exhaust-mount-red-paint-bathroom.webp?v=1785943174&width=1200 1200w, //fittes.ca/cdn/shop/files/flush-exhaust-mount-red-paint-bathroom.webp?v=1785943174&width=1400 1400w" width="1400" height="1750" loading="lazy" sizes="(min-width: 990px) 55vw, 100vw"> 12036</figure><figure class="ss__figure" data-index="4"><img src="//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=1400" alt="Floor vent tray filled with a flooring offcut so the wood grain runs uninterrupted" srcset="//fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=480 480w, //fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=720 720w, //fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=960 960w, //fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=1200 1200w, //fittes.ca/cdn/shop/files/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267&width=1400 1400w" width="1400" height="1400" loading="lazy" sizes="(min-width: 990px) 55vw, 100vw"> 12037</figure><figure class="ss__figure" data-index="5"><img src="//fittes.ca/cdn/shop/files/Fittes_PrimateRd_17_-_HR_photoshopped.webp?v=1788979080&width=1400" alt="Shadow-line reveal detail where a recessed baseboard meets the drywall" srcset="//fittes.ca/cdn/shop/files/Fittes_PrimateRd_17_-_HR_photoshopped.webp?v=1788979080&width=480 480w, //fittes.ca/cdn/shop/files/Fittes_PrimateRd_17_-_HR_photoshopped.webp?v=1788979080&width=720 720w, //fittes.ca/cdn/shop/files/Fittes_PrimateRd_17_-_HR_photoshopped.webp?v=1788979080&width=960 960w, //fittes.ca/cdn/shop/files/Fittes_PrimateRd_17_-_HR_photoshopped.webp?v=1788979080&width=1200 1200w, //fittes.ca/cdn/shop/files/Fittes_PrimateRd_17_-_HR_photoshopped.webp?v=1788979080&width=1400 1400w" width="1400" height="1400" loading="lazy" sizes="(min-width: 990px) 55vw, 100vw"> 12038</figure><figure class="ss__figure" data-index="6"><img src="//fittes.ca/cdn/shop/files/1-FlushAccessPanel_Luxe__Lifestyle1_f4d44b28-1161-4
12038cbd-9bfd-f71874cb1e74.png?v=1754022088&width=1400" alt="Painted drywall access panel concealing plumbing shut-off valves" srcset="//fittes.ca/cdn/shop/files/1-FlushAccessPanel_Luxe__Lifestyle1_f4d44b28-1161-4cbd-9bfd-f71874cb1e74.png?v=1754022088&width=480 480w, //fittes.ca/cdn/shop/files/1-FlushAccessPanel_Luxe__Lifestyle1_f4d44b28-1161-4cbd-9bfd-f71874cb1e74.png?v=1754022088&width=720 720w, //fittes.ca/cdn/shop/files/1-FlushAccessPanel_Luxe__Lifestyle1_f4d44b28-1161-4cbd-9bfd-f71874cb1e74.png?v=1754022088&width=960 960w, //fittes.ca/cdn/shop/files/1-FlushAccessPanel_Luxe__Lifestyle1_f4d44b28-1161-4cbd-9bfd-f71874cb1e74.png?v=1754022088&width=1200 1200w, //fittes.ca/cdn/shop/files/1-FlushAccessPanel_Luxe__Lifestyle1_f4d44b28-1161-4cbd-9bfd-f71874cb1e74.png?v=1754022088&width=1400 1400w" width="1400" height="1400" loading="lazy" sizes="(min-width: 990px) 55vw, 100vw"> 12039</figure><span class="ss__counter" aria-hidden="true"></span> 12040 </div> 12041 12042 <div class="ss__content"> 12043 <ul class="ss__list" role="list"><li class="ss__item" > 12044 <input 12045 type="radio" 12046 class="ss__radio" 12047 name="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD" 12048 id="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-1" 12049 checked 12050 > 12051 12052 <label class="ss__trigger" for="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-1"> 12053 <span class="ss__num" aria-hidden="true">01</span> 12054 <h3 class="ss__card-title">Recessed Floor Registers</h3> 12055 </label> 12056 12057 <div class="ss__panel"> 12058 <div class="ss__panel-inner"> 12059 <p class="ss__text">Sits level with your finished floor, so only a slim air channel is visible. No raised grille to catch a toe or collect dust. Works under hardwood, tile, vinyl plank, carpet and polished concrete.</p><a class="ss__link" href="/collections/floor" data-ss-link> 12060 Shop floor vents 12061 <svg viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 12062 <path d="M4.80469 13.9355H22.0148M22.0148 13.9355C22.0148 13.9355 17.1365 10.7272 16.1452 8.06592M22.0148 13.9355C22.0148 13.9355 17.7022 16.95 16.1452 19.805" stroke="currentColor" stroke-width="2.17391" stroke-linecap="square"/> 12063 </svg> 12064 <span class="visually-hidden">Recessed Floor Registers</span> 12065 </a></div> 12066 </div> 12067 </li><li class="ss__item" > 12068 <input 12069 type="radio" 12070 class="ss__radio" 12071 name="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD" 12072 id="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-2" 12073 12074 > 12075 12076 <label class="ss__trigger" for="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-2"> 12077 <span class="ss__num" aria-hidden="true">02</span> 12078 <h3 class="ss__card-title">Grille-Free Air Returns</h3> 12079 </label> 12080 12081 <div class="ss__panel"> 12082 <div class="ss__panel-inner"> 12083 <p class="ss__text">Return-air grilles are the largest visual interruption on most walls. Ours replaces them with a paintable plate that carries your colour or wallpaper across the opening. Full airflow, no stamped metal.</p><a class="ss__link" href="/collections/wall-vent" data-ss-link> 12084 Shop wall and ceiling vents 12085 <svg viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 12086 <path d="M4.80469 13.9355H22.0148M22.0148 13.9355C22.0148 13.9355 17.1365 10.7272 16.1452 8.06592M22.0148 13.9355C22.0148 13.9355 17.7022 16.95 16.1452 19.805" stroke="currentColor" stroke-width="2.17391" stroke-linecap="square"/> 12087 </svg>
12088 <span class="visually-hidden">Grille-Free Air Returns</span> 12089 </a></div> 12090 </div> 12091 </li><li class="ss__item" > 12092 <input 12093 type="radio" 12094 class="ss__radio" 12095 name="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD" 12096 id="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-3" 12097 12098 > 12099 12100 <label class="ss__trigger" for="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-3"> 12101 <span class="ss__num" aria-hidden="true">03</span> 12102 <h3 class="ss__card-title">Bathroom Exhaust, Upgraded</h3> 12103 </label> 12104 12105 <div class="ss__panel"> 12106 <div class="ss__panel-inner"> 12107 <p class="ss__text">The builder-grade fan grille is the last thing anyone updates and the easiest thing to fix. A low-profile cover paints out to match the ceiling, making it one of the fastest wins in any bathroom renovation.</p><a class="ss__link" href="/collections/exhaust-mounts" data-ss-link> 12108 Shop exhaust mounts 12109 <svg viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 12110 <path d="M4.80469 13.9355H22.0148M22.0148 13.9355C22.0148 13.9355 17.1365 10.7272 16.1452 8.06592M22.0148 13.9355C22.0148 13.9355 17.7022 16.95 16.1452 19.805" stroke="currentColor" stroke-width="2.17391" stroke-linecap="square"/> 12111 </svg> 12112 <span class="visually-hidden">Bathroom Exhaust, Upgraded</span> 12113 </a></div> 12114 </div> 12115 </li><li class="ss__item" > 12116 <input 12117 type="radio" 12118 class="ss__radio" 12119 name="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD" 12120 id="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-4" 12121 12122 > 12123 12124 <label class="ss__trigger" for="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-4"> 12125 <span class="ss__num" aria-hidden="true">04</span> 12126 <h3 class="ss__card-title">Match Your Material</h3> 12127 </label> 12128 12129 <div class="ss__panel"> 12130 <div class="ss__panel-inner"> 12131 <p class="ss__text">Every plate is designed to be finished in place. Paint it your wall colour, run wallpaper straight across it, or drop a flooring offcut into a floor vent tray so the grain runs uninterrupted. One product line, any material palette.</p></div> 12132 </div> 12133 </li><li class="ss__item" > 12134 <input 12135 type="radio" 12136 class="ss__radio" 12137 name="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD" 12138 id="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-5" 12139 12140 > 12141 12142 <label class="ss__trigger" for="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-5"> 12143 <span class="ss__num" aria-hidden="true">05</span> 12144 <h3 class="ss__card-title">Shadow-Line Baseboards</h3> 12145 </label> 12146 12147 <div class="ss__panel"> 12148 <div class="ss__panel-inner"> 12149 <p class="ss__text">Recessed baseboard sets the trim into the wall plane rather than on top of it. An integrated drywall bead guarantees a parallel seam, turning a specialty carpentry detail into a routine install.</p><a class="ss__link" href="/products/flush-trim-mount-lite" data-ss-link> 12150 Shop trim mounts 12151 <svg viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 12152 <path d="M4.80469 13.9355H22.0148M22.0148 13.9355C22.0148 13.9355 17.1365 10.7272 16.1452 8.06592M22.0148 13.9355C22.0148 13.9355 17.7022 16.95 16.1452 19.805" stroke="currentColor" stroke-width="2.17391" stroke-linecap="square"/> 12153 </svg>
12154 <span class="visually-hidden">Shadow-Line Baseboards</span> 12155 </a></div> 12156 </div> 12157 </li><li class="ss__item" > 12158 <input 12159 type="radio" 12160 class="ss__radio" 12161 name="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD" 12162 id="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-6" 12163 12164 > 12165 12166 <label class="ss__trigger" for="ss-template--28630587998578__seamless_spaces_accord_Lz6fGD-6"> 12167 <span class="ss__num" aria-hidden="true">06</span> 12168 <h3 class="ss__card-title">Concealed Access</h3> 12169 </label> 12170 12171 <div class="ss__panel"> 12172 <div class="ss__panel-inner"> 12173 <p class="ss__text">Shut-off valves, breakers and junction boxes need to be reachable, not visible. A removable centre plate paints or papers to match the surrounding wall, so serviceability stays intact and the surface stays unbroken.</p><a class="ss__link" href="/products/flush-access-panel-luxe-1" data-ss-link> 12174 Shop access panels 12175 <svg viewBox="0 0 27 27" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"> 12176 <path d="M4.80469 13.9355H22.0148M22.0148 13.9355C22.0148 13.9355 17.1365 10.7272 16.1452 8.06592M22.0148 13.9355C22.0148 13.9355 17.7022 16.95 16.1452 19.805" stroke="currentColor" stroke-width="2.17391" stroke-linecap="square"/> 12177 </svg> 12178 <span class="visually-hidden">Concealed Access</span> 12179 </a></div> 12180 </div> 12181 </li></ul> 12182 </div> 12183 </div> 12184 </section> 12185 </div> 12186</div>
12186<script type="application/ld+json"> 12187 { 12188 "@context": "https://schema.org", 12189 "@type": "ItemList", 12190 "name": "Details that disappear","description": "Fittes makes vent covers, access doors, shadow-line baseboards and bathroom hardware designed to finish level with the surrounding surface. Paint them, paper them, or match them to your flooring and tile.","itemListOrder": "https://schema.org/ItemListUnordered", 12191 "numberOfItems": 6, 12192 "itemListElement": [{ 12193 "@type": "ListItem", 12194 "position": 1, 12195 "item": { 12196 "@type": "WebPage", 12197 "name": "Recessed Floor Registers", 12198 "description": "Sits level with your finished floor, so only a slim air channel is visible. No raised grille to catch a toe or collect dust. Works under hardwood, tile, vinyl plank, carpet and polished concrete." 12199, "url": "https:\/\/fittes.ca\/collections\/floor" 12200, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/Flush_Floor_Vent_Luxe_-_Lifestyle.webp?v=1782744011\u0026width=1200" 12201} 12202 },{ 12203 "@type": "ListItem", 12204 "position": 2, 12205 "item": { 12206 "@type": "WebPage", 12207 "name": "Grille-Free Air Returns", 12208 "description": "Return-air grilles are the largest visual interruption on most walls. Ours replaces them with a paintable plate that carries your colour or wallpaper across the opening. Full airflow, no stamped metal." 12209, "url": "https:\/\/fittes.ca\/collections\/wall-vent" 12210, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/flush-wall-vent-lite-plus-white-living-room.webp?v=1785943078\u0026width=1200" 12211} 12212 },{ 12213 "@type": "ListItem", 12214 "position": 3, 12215 "item": { 12216 "@type": "WebPage", 12217 "name": "Bathroom Exhaust, Upgraded", 12218 "description": "The builder-grade fan grille is the last thing anyone updates and the easiest thing to fix. A low-profile cover paints out to match the ceiling, making it one of the fastest wins in any bathroom renovation." 12219, "url": "https:\/\/fittes.ca\/collections\/exhaust-mounts" 12220, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/flush-exhaust-mount-red-paint-bathroom.webp?v=1785943174\u0026width=1200" 12221} 12222 },{ 12223 "@type": "ListItem", 12224 "position": 4, 12225 "item": { 12226 "@type": "WebPage", 12227 "name": "Match Your Material", 12228 "description": "Every plate is designed to be finished in place. Paint it your wall colour, run wallpaper straight across it, or drop a flooring offcut into a floor vent tray so the grain runs uninterrupted. One product line, any material palette." 12229, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/Flush_Wall_Vent_Lite_-_Lifestyle.webp?v=1782744267\u0026width=1200" 12230} 12231 },{ 12232 "@type": "ListItem", 12233 "position": 5, 12234 "item": { 12235 "@type": "WebPage", 12236 "name": "Shadow-Line Baseboards", 12237 "description": "Recessed baseboard sets the trim into the wall plane rather than on top of it. An integrated drywall bead guarantees a parallel seam, turning a specialty carpentry detail into a routine install." 12238, "url": "https:\/\/fittes.ca\/products\/flush-trim-mount-lite" 12239, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/Fittes_PrimateRd_17_-_HR_photoshopped.webp?v=1788979080\u0026width=1200" 12240} 12241 },{ 12242 "@type": "ListItem", 12243 "position": 6, 12244 "item": { 12245 "@type": "WebPage", 12246 "name": "Concealed Access", 12247 "description": "Shut-off valves, breakers and junction boxes need to be reachable, not visible. A removable centre plate paints or papers to match the surrounding wall, so serviceability stays intact and the surface stays unbroken." 12248, "url": "https:\/\/fittes.ca\/products\/flush-access-panel-luxe-1" 12249, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/1-FlushAccessPanel_Luxe__Lifestyle1_f4d44b28-1161-4cbd-9bfd-f71874cb1e74.png?v=1754022088\u0026width=1200" 12250} 12251 }] 12252} 12253</script>
12253 12254
12255<script> 12256 /* Progressive enhancement only: keeps links inside collapsed panels out of 12257 the tab order. The section is fully functional without this. */ 12258 (function () { 12259 var section = document.getElementById('shopify-section-template--28630587998578__seamless_spaces_accord_Lz6fGD'); 12260 if (!section) return; 12261 12262 var items = section.querySelectorAll('.ss__item'); 12263 12264 function sync() { 12265 items.forEach(function (item) { 12266 var radio = item.querySelector('.ss__radio'); 12267 var link = item.querySelector('[data-ss-link]'); 12268 if (!radio || !link) return; 12269 if (radio.checked) { 12270 link.removeAttribute('tabindex'); 12271 } else { 12272 link.setAttribute('tabindex', '-1'); 12273 } 12274 }); 12275 } 12276 12277 section.addEventListener('change', function (e) { 12278 if (e.target && e.target.classList.contains('ss__radio')) sync(); 12279 }); 12280 12281 sync(); 12282 })(); 12283</script>
12283 12284 12285</section><section id="shopify-section-template--28630587998578__as_ohomepage_yifhLp" class="shopify-section section-as-seen-on"><div class="as-seen-on-carousel" id="as-seen-on-template--28630587998578__as_ohomepage_yifhLp"><div class="as-seen-on-title-wrapper as-seen-on-title-wrapper--center"><h2 class="as-seen-on-title-inner h1">As Seen On</h2></div><div class="carousel-wrapper"> 12286 <div class="carousel-viewport"> 12287 <div class="carousel-track"><div class="logo-item" ><span class="logo-frame" style="padding: 0px 0;"><img 12288 src="//fittes.ca/cdn/shop/files/daily-mail-logo-svg-vector.svg?v=1777314434&width=600" 12289 srcset="//fittes.ca/cdn/shop/files/daily-mail-logo-svg-vector.svg?v=1777314434&width=300 300w, 12290 //fittes.ca/cdn/shop/files/daily-mail-logo-svg-vector.svg?v=1777314434&width=600 600w, 12291 //fittes.ca/cdn/shop/files/daily-mail-logo-svg-vector.svg?v=1777314434&width=900 900w" 12292 sizes="175px" 12293 alt="Logo" 12294 loading="lazy" 12295 decoding="async" 12296 width="2500" 12297 height="2500" 12298 style="transform: scale(1.35);" 12299 ></span></div><div class="logo-item" ><span class="logo-frame" style="padding: 0px 0;"><img 12300 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/3_84f39d07-f22f-4a48-92b6-84fcf28c9450.png?v=1743055839" 12301 alt="Property Brothers" 12302 loading="lazy" 12303 decoding="async" 12304 width="175" 12305 height="64" 12306 style="transform: scale(1.0);" 12307 ></span></div><div class="logo-item" ><span class="logo-frame" style="padding: 0px 0;"><img 12308 src="https://cdn.shopify.com/s/files/1/0522/3373/2256/files/5_3caaaf72-f1e1-4a68-9945-f80a9435fcd8.png?v=1734362217" 12309 alt="House & Home" 12310 loading="lazy" 12311 decoding="async" 12312 width="175" 12313 height="64" 12314 style="transform: scale(1.0);" 12315 ></span></div><div class="logo-item" ><span class="logo-frame" style="padding: 0px 0;"><img 12316 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/4_972b1bd4-cbf5-4cf5-b686-76c01f33c1d9_1.jpg?v=1749577926" 12317 alt="Architectural Digest" 12318 loading="lazy" 12319 decoding="async" 12320 width="175" 12321 height="64" 12322 style="transform: scale(1.0);" 12323 ></span></div><div class="logo-item" ><span class="logo-frame" style="padding: 0px 0;"><img 12324 src="https://cdn.shopify.com/s/files/1/0522/3373/2256/files/6_331cb9bd-81dc-4026-8c91-5d028c2c036f.png?v=1734362217" 12325 alt="Holmes 911" 12326 loading="lazy" 12327 decoding="async" 12328 width="175" 12329 height="64" 12330 style="transform: scale(1.0);" 12331 ></span></div><div class="logo-item" ><span class="logo-frame" style="padding: 0px 0;"><img 12332 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/dwell-logo-png_seeklogo-482948.png?v=1752087956" 12333 alt="Dwell" 12334 loading="lazy" 12335 decoding="async" 12336 width="175" 12337 height="64" 12338 style="transform: scale(1.0);" 12339 ></span></div><div class="logo-item" ><span class="logo-frame" style="padding: 0px 0;"><img 12340 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/remodelista-logo.png?v=1752087951" 12341 alt="Remodelista" 12342 loading="lazy" 12343 decoding="async" 12344 width="175" 12345 height="64" 12346 style="transform: scale(1.0);" 12347 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12348 src="//fittes.ca/cdn/shop/files/daily-mail-logo-svg-ve
12348ctor.svg?v=1777314434&width=600" 12349 srcset="//fittes.ca/cdn/shop/files/daily-mail-logo-svg-vector.svg?v=1777314434&width=300 300w, 12350 //fittes.ca/cdn/shop/files/daily-mail-logo-svg-vector.svg?v=1777314434&width=600 600w, 12351 //fittes.ca/cdn/shop/files/daily-mail-logo-svg-vector.svg?v=1777314434&width=900 900w" 12352 sizes="175px" 12353 alt="Logo" 12354 loading="lazy" 12355 decoding="async" 12356 width="2500" 12357 height="2500" 12358 style="transform: scale(1.35);" 12359 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12360 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/3_84f39d07-f22f-4a48-92b6-84fcf28c9450.png?v=1743055839" 12361 alt="Property Brothers" 12362 loading="lazy" 12363 decoding="async" 12364 width="175" 12365 height="64" 12366 style="transform: scale(1.0);" 12367 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12368 src="https://cdn.shopify.com/s/files/1/0522/3373/2256/files/5_3caaaf72-f1e1-4a68-9945-f80a9435fcd8.png?v=1734362217" 12369 alt="House & Home" 12370 loading="lazy" 12371 decoding="async" 12372 width="175" 12373 height="64" 12374 style="transform: scale(1.0);" 12375 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12376 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/4_972b1bd4-cbf5-4cf5-b686-76c01f33c1d9_1.jpg?v=1749577926" 12377 alt="Architectural Digest" 12378 loading="lazy" 12379 decoding="async" 12380 width="175" 12381 height="64" 12382 style="transform: scale(1.0);" 12383 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12384 src="https://cdn.shopify.com/s/files/1/0522/3373/2256/files/6_331cb9bd-81dc-4026-8c91-5d028c2c036f.png?v=1734362217" 12385 alt="Holmes 911" 12386 loading="lazy" 12387 decoding="async" 12388 width="175" 12389 height="64" 12390 style="transform: scale(1.0);" 12391 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12392 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/dwell-logo-png_seeklogo-482948.png?v=1752087956" 12393 alt="Dwell" 12394 loading="lazy" 12395 decoding="async" 12396 width="175" 12397 height="64" 12398 style="transform: scale(1.0);" 12399 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12400 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/remodelista-logo.png?v=1752087951" 12401 alt="Remodelista" 12402 loading="lazy" 12403 decoding="async" 12404 width="175" 12405 height="64" 12406 style="transform: scale(1.0);" 12407 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12408 src="//fittes.ca/cdn/shop/files/daily-mail-logo-svg-vector.svg?v=1777314434&width=600" 12409 srcset="//fittes.ca/cdn/shop/files/daily-mail-logo-svg-vector.svg?v=1777314434&width=300 300w, 12410 //fittes.ca/cdn/shop/files/daily-mail-logo-svg-vector.svg?v=1777314434&width=600 600w, 12411 //fittes.ca/cdn/shop/files/daily-mail-logo-svg-ve
12411ctor.svg?v=1777314434&width=900 900w" 12412 sizes="175px" 12413 alt="Logo" 12414 loading="lazy" 12415 decoding="async" 12416 width="2500" 12417 height="2500" 12418 style="transform: scale(1.35);" 12419 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12420 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/3_84f39d07-f22f-4a48-92b6-84fcf28c9450.png?v=1743055839" 12421 alt="Property Brothers" 12422 loading="lazy" 12423 decoding="async" 12424 width="175" 12425 height="64" 12426 style="transform: scale(1.0);" 12427 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12428 src="https://cdn.shopify.com/s/files/1/0522/3373/2256/files/5_3caaaf72-f1e1-4a68-9945-f80a9435fcd8.png?v=1734362217" 12429 alt="House & Home" 12430 loading="lazy" 12431 decoding="async" 12432 width="175" 12433 height="64" 12434 style="transform: scale(1.0);" 12435 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12436 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/4_972b1bd4-cbf5-4cf5-b686-76c01f33c1d9_1.jpg?v=1749577926" 12437 alt="Architectural Digest" 12438 loading="lazy" 12439 decoding="async" 12440 width="175" 12441 height="64" 12442 style="transform: scale(1.0);" 12443 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12444 src="https://cdn.shopify.com/s/files/1/0522/3373/2256/files/6_331cb9bd-81dc-4026-8c91-5d028c2c036f.png?v=1734362217" 12445 alt="Holmes 911" 12446 loading="lazy" 12447 decoding="async" 12448 width="175" 12449 height="64" 12450 style="transform: scale(1.0);" 12451 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12452 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/dwell-logo-png_seeklogo-482948.png?v=1752087956" 12453 alt="Dwell" 12454 loading="lazy" 12455 decoding="async" 12456 width="175" 12457 height="64" 12458 style="transform: scale(1.0);" 12459 ></span></div><div class="logo-item" aria-hidden="true" ><span class="logo-frame" style="padding: 0px 0;"><img 12460 src="https://cdn.shopify.com/s/files/1/0117/1210/2462/files/remodelista-logo.png?v=1752087951" 12461 alt="Remodelista" 12462 loading="lazy" 12463 decoding="async" 12464 width="175" 12465 height="64" 12466 style="transform: scale(1.0);" 12467 ></span></div></div> 12468 </div> 12469 </div></div> 12470 12471<style data-shopify> 12472 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp { 12473 --aso-logo-width-desktop: 175px; 12474 --aso-logo-width-tablet: 130px; 12475 --aso-logo-width-mobile: 145px; 12476 --aso-logo-count: 7; 12477 --aso-scroll-duration: 14s; 12478 --aso-underline-color: #d32f2f; 12479 --aso-title-color: #000000; 12480 12481 /* ===== PADDING LADDER â identical to Seamless Spaces / Reviews Carousel, 12482 so all three section headings share one left edge down the page ===== */ 12483 --content-padding: 20px; 12484 12485 /* Full bleed. max-width lives on the inner boxes below so this
12485section's 12486 box model is identical to Seamless Spaces and Reviews, where the 12487 constrained element is also the one carrying --content-padding. */ 12488 width: 100%; 12489 margin: 20px auto 20px; 12490 padding: 0; 12491 box-sizing: border-box; 12492 } 12493 12494 @media (min-width: 750px) { 12495 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp { 12496 --content-padding: calc(2.5rem + 30px); 12497 } 12498 } 12499 @media (min-width: 990px) { 12500 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp { 12501 --content-padding: calc(2.5rem + 40px); 12502 } 12503 } 12504 @media (min-width: 1200px) { 12505 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp { 12506 --content-padding: calc(2.5rem + 50px); 12507 } 12508 } 12509 12510 /* ===== TITLE BLOCK ===== */ 12511 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-title-wrapper { 12512 max-width: 1420px; 12513 margin: 0 auto 20px; 12514 padding-left: var(--content-padding); 12515 padding-right: var(--content-padding); 12516 box-sizing: border-box; 12517 } 12518 12519 @media (min-width: 750px) { 12520 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-title-wrapper { 12521 margin-bottom: 40px; 12522 } 12523 } 12524 12525 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-title-wrapper--center { 12526 text-align: center; 12527 } 12528 12529 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-eyebrow { 12530 font-size: 1.2rem; 12531 font-weight: 500; 12532 letter-spacing: 0.08em; 12533 text-transform: uppercase; 12534 color: #f73308; 12535 margin: 0; 12536 } 12537 12538 /* No font-family, no font-size, no font-weight: the .h1 class and the 12539 theme's heading settings govern all three, exactly as they do in the 12540 Seamless Spaces and Reviews sections. */ 12541 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-title-inner { 12542 margin: 10px 0 0; 12543 letter-spacing: -0.01em; 12544 position: relative; 12545 display: inline-block; 12546 font-size: calc(var(--font-heading-scale, 1) * 3.2rem); 12547 color: var(--aso-title-color); 12548 } 12549 12550 @media (min-width: 750px) { 12551 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-title-inner { 12552 margin-top: 20px; 12553 font-size: calc(var(--font-heading-scale, 1) * 4.0rem); 12554 } 12555 } 12556 12557 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-intro { 12558 margin: 12px 0 0; 12559 max-width: 62ch; 12560 font-size: 1.5rem; 12561 line-height: 1.5; 12562 opacity: 0.85; 12563 } 12564 12565 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-title-wrapper--center .as-seen-on-intro { 12566 margin-left: auto; 12567 margin-right: auto; 12568 } 12569 12570 @media (min-width: 750px) { 12571 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-intro { 12572 font-size: 1.6rem; 12573 } 12574 }#as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-title-inner::after { 12575 content: ""; 12576 position: absolute; 12577 bottom: -5px; 12578 left: 0; 12579 width: 56px; 12580 height: 3px; 12581 background: var(--aso-underline-color); 12582 } 12583 12584 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-title-wrapper--center .as-seen-on-title-inner::after { 12585 left: 35%; 12586 width: 30%; 12587 }/* ===== CAROUSEL ===== */ 12588 /* IMPORTANT: overflow clips at the PADDING edge, not the content edge, so 12589 padding and overflow:hidden cannot live on the same element â the logos 12590 would render straight through the padding and cut off at the outer edge. 12591 The wrapper holds the gutters; the viewport inside it does the clipping, 12592 so the cut-off lands on exactly the same line as the card edges in the 12593 Seamless Spaces and Reviews sections at every breakpoint. */ 12594 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .carousel-wrapper { 12595 position: relative; 12596 width: 100%; 12597 max-width: 1420px; 12598 margin: 0 auto; 12599 padding: 0 calc(var(--content-padding) + 0px); 12600 box-sizing: border-box; 12601 } 12602 12603 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .carousel-viewport { 12604 overflow: hidden; 12605 position: relative; 12606 width: 100%; 12607 } 12608 12609 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .carousel-track { 12610 display: flex; 12611 width: max-content; 12612 animation: aso-scroll-template--28630587998578__as_ohomepage_yifhLp var(--aso-scroll-duration) linear infinite; 12613 } 12614 12615 @keyframes aso-scroll-template--28630587998578__as_ohomepage_yifhLp { 12616 0% { transform: translateX(0); } 12617 100% { transform: translateX(calc(-1 * var(--aso-logo-width-desktop) * var(--aso-logo-count))); } 12618 } 12619 12620 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .logo-item { 12621 flex: 0 0 auto; 12622 width: var(--aso-logo-width-desktop); 12623 display: flex; 12624 justify-content: center;
12625 align-items: center; 12626 padding: 0 10px; 12627 box-sizing: border-box; 12628 } 12629 12630 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .logo-item a { 12631 display: flex; 12632 justify-content: center; 12633 align-items: center; 12634 width: 100%; 12635 height: 100%; 12636 } 12637 12638 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .logo-frame { 12639 display: flex; 12640 justify-content: center; 12641 align-items: center; 12642 width: 100%; 12643 height: 64px; 12644 box-sizing: border-box; 12645 overflow: hidden; 12646 } 12647 12648 /* width/height attributes on the <img> reserve layout space before the 12649 bitmap arrives. These auto rules mean the FINAL rendered size is still 12650 driven by the intrinsic image dimensions clamped to the frame, so adding 12651 the attributes cannot distort or resize any logo. */ 12652 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .logo-item img { 12653 max-width: 100%; 12654 max-height: 100%; 12655 width: auto; 12656 height: auto; 12657 object-fit: contain; 12658 transform-origin: center center; 12659 image-rendering: -webkit-optimize-contrast; 12660 } 12661 12662 /* Placeholder shown only in the theme editor when a block has no image 12663 and no fallback URL. Explicitly sized so it does not reflow either. */ 12664 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .logo-frame .placeholder-svg { 12665 width: 100%; 12666 height: 100%; 12667 max-width: 100%; 12668 max-height: 100%; 12669 display: block; 12670 }#as-seen-on-template--28630587998578__as_ohomepage_yifhLp .carousel-viewport:hover .carousel-track { 12671 animation-play-state: paused; 12672 }@media (prefers-reduced-motion: reduce) { 12673 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .carousel-track { 12674 animation: none; 12675 } 12676 } 12677 12678 @media (max-width: 991px) { 12679 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .carousel-track { 12680 animation-name: aso-scroll-tablet-template--28630587998578__as_ohomepage_yifhLp; 12681 } 12682 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .logo-item { 12683 width: var(--aso-logo-width-tablet); 12684 padding: 0 8px; 12685 } 12686 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .logo-frame { 12687 height: 44px; 12688 } 12689 } 12690 12691 @keyframes aso-scroll-tablet-template--28630587998578__as_ohomepage_yifhLp { 12692 0% { transform: translateX(0); } 12693 100% { transform: translateX(calc(-1 * var(--aso-logo-width-tablet) * var(--aso-logo-count))); } 12694 } 12695 12696 @media (max-width: 768px) { 12697 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .logo-frame { 12698 height: 64px; 12699 } 12700 } 12701 12702 @media (max-width: 480px) { 12703 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp { 12704 margin: 15px auto; 12705 width: 100%; 12706 } 12707 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .as-seen-on-title-wrapper { 12708 margin-bottom: 20px; 12709 } 12710 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .carousel-track { 12711 animation-name: aso-scroll-mobile-template--28630587998578__as_ohomepage_yifhLp; 12712 } 12713 #as-seen-on-template--28630587998578__as_ohomepage_yifhLp .logo-item { 12714 width: var(--aso-logo-width-mobile); 12715 } 12716 } 12717 12718 @keyframes aso-scroll-mobile-template--28630587998578__as_ohomepage_yifhLp { 12719 0% { transform: translateX(0); } 12720 100% { transform: translateX(calc(-1 * var(--aso-logo-width-mobile) * var(--aso-logo-count))); } 12721 } 12722</style> 12723 12724</section><section id="shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3" class="shopify-section section"><style data-shopify>/* ========== SHARED PADDING LADDER ========== */ 12725 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 { 12726 --content-padding: 20px; 12727 --slide-gap: 20px; 12728 --nav-offset: 10px; 12729 --card-radius: 0px; 12730 --eyebrow-color: #e73c3e; 12731 --star-color: #e73c3e; 12732 --meta-color: #8a8a8a; 12733 } 12734 @media (min-width: 750px) { 12735 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 { 12736 --content-padding: calc(2.5rem + 30px); 12737 --slide-gap: 33px; 12738 --nav-offset: 15px; 12739 } 12740 } 12741 @media (min-width: 990px) { 12742 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 { --content-padding: calc(2.5rem + 40px); } 12743 } 12744 @media (min-width: 1200px) { 12745 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 { --content-padding: calc(2.5rem + 50px); } 12746 } 12747 12748 .reviews-template--28630587998578__seamless_spaces_reviews_reKBU3-padding { 12749 padding-top: 27px; 12750 padding-bottom: 27px; 12751 } 12752 @media (min-width: 750px) { 12753 .reviews-template--28630587998578__seamless_spaces_reviews_reKBU3-padding { 12754 padding-top: 36px; 12755 padding-bottom: 36px; 12756 } 12757 } 12758 12759 /* ========== HEADER ========== */ 12760 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__header { 12761 max-width: 1420px; 12762 margin: 0 auto 20px; 12763 padding-left: var(--content-padding); 12764 padding-right: var(--content-padding); 12765 box-sizing: border-box; 12766 } 12767 12768 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__eyebrow { 12769 font-size: 1.2rem; 12770 font-weight: 500; 12771 letter-spacing: 0.08em; 12772 text-transform: uppercase; 12773 color: var(--eyebrow-color); 12774 margin: 0; 12775 } 12776 12777 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__title { 12778 margin: 10px 0 0; 12779 letter-spacing: -0.01em; 12780 font-size: calc(var(--font-heading-scale, 1) * 3.2rem); 12781 } 12782 12783 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__intro { 12784 margin: 12px 0 0; 12785 max-width: 62ch; 12786 font-size: 1.5rem; 12787 line-height: 1.5; 12788 opacity: 0.85; 12789 } 12790 12791 @media (min-width: 750px) { 12792 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__header { margin-bottom: 40px; } 12793 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__title { 12794 margin-top: 20px; 12795 font-size: calc(var(--font-heading-scale, 1) * 4.0rem); 12796 } 12797 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__intro { font-size: 1.6rem; } 12798 } 12799 12800 /* ========== CAROUSEL SHELL ========== */ 12801 /* The right gutter lives on the viewport, not on the scroller. A scroll 12802 container's padding is part of its scrollport, so a right padding on the 12803 track would render the next card inside it â that was the sliver of card 12804 five visible on wide screens. With the gutter here, anything past the 12805 track's content edge is clipped by overflow-x. */ 12806 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__viewport { 12807 position: relative; 12808 max-width: 1420px; 12809 margin: 0 auto; 12810 padding-right: var(--content-padding); 12811 box-sizing: border-box; 12812 } 12813 12814 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__track { 12815 display: flex; 12816 align-items: stretch; 12817 list-style: none; 12818 margin: 0;
12819 gap: var(--slide-gap); 12820 overflow-x: auto; 12821 overflow-y: hidden; 12822 box-sizing: border-box; 12823 padding-left: var(--content-padding); 12824 padding-right: 0; 12825 padding-bottom: 6px; 12826 scroll-snap-type: x mandatory; 12827 scroll-padding-left: var(--content-padding); 12828 scroll-behavior: smooth; 12829 -webkit-overflow-scrolling: touch; 12830 scrollbar-width: none; 12831 -ms-overflow-style: none; 12832 } 12833 12834 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__track::-webkit-scrollbar { display: none; } 12835 12836 @media (prefers-reduced-motion: reduce) { 12837 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__track { scroll-behavior: auto; } 12838 } 12839 12840 /* ========== CARD ========== */ 12841 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card { 12842 flex: 0 0 auto; 12843 box-sizing: border-box; 12844 scroll-snap-align: start; 12845 position: relative; 12846 width: calc((100% - var(--slide-gap)) / 1.25); 12847 margin: 0; 12848 display: flex; 12849 flex-direction: column; 12850 background: rgba(0,0,0,0); 12851 } 12852 12853 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card > article { 12854 display: flex; 12855 flex-direction: column; 12856 height: 100%; 12857 } 12858 12859 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card:has(.reviews__card-link) { 12860 cursor: pointer; 12861 } 12862 12863 @media (min-width: 600px) { 12864 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card { width: calc((100% - var(--slide-gap)) / 1.9); } 12865 } 12866 @media (min-width: 750px) { 12867 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card { width: calc((100% - (var(--slide-gap) * 2)) / 2.5); } 12868 } 12869 @media (min-width: 990px) { 12870 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card { width: calc((100% - (var(--slide-gap) * 2)) / 3); } 12871 } 12872 @media (min-width: 1200px) { 12873 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card { width: calc((100% - (var(--slide-gap) * 3)) / 4); } 12874 } 12875 12876 /* ========== IMAGE ========== */ 12877 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__media { 12878 display: block; 12879 width: 100%; 12880 overflow: hidden; 12881 border-radius: var(--card-radius); 12882 background: rgba(var(--color-foreground), 0.04); 12883 aspect-ratio: 3 / 4; 12884 } 12885 12886 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__media img, 12887 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__media svg { 12888 width: 100%; 12889 height: 100%; 12890 object-fit: cover; 12891 display: block; 12892 transition: transform 0.5s cubic-bezier(0.22, 0.61, 0.36, 1); 12893 } 12894 12895 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card:hover .reviews__media img { 12896 transform: scale(1.03); 12897 } 12898 12899 @media (prefers-reduced-motion: reduce) { 12900 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__media img { transition: none; } 12901 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card:hover .reviews__media img { transform: none; } 12902 } 12903 12904 /* ========== BODY ========== */ 12905 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__body { 12906 padding-top: 14px; 12907 display: flex; 12908 flex-direction: column; 12909 flex: 1 1 auto; 12910 } 12911 12912 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__product { 12913 margin: 0 0 8px; 12914 font-size: 1.3rem; 12915 line-height: 1.35; 12916 color: var(--meta-color); 12917 letter-spacing: 0.01em; 12918 } 12919 12920 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__stars { 12921 display: inline-flex; 12922 gap: 3px; 12923 margin-bottom: 10px; 12924 color: var(--star-color); 12925 } 12926 12927 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__stars svg { 12928 width: 15px; 12929 height: 15px; 12930 display: block; 12931 } 12932 12933 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__stars .is-empty { opacity: 0.22; } 12934 12935 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__headline { 12936 margin: 0 0 8px; 12937 font-size: 1.6rem; 12938 line-height: 1.3; 12939 letter-spacing: -0.01em; 12940 } 12941 12942 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__quote { 12943 margin: 0; 12944 padding: 0; 12945 border: 0; 12946 quotes: none; 12947 } 12948 12949 /* ---- Line clamp ---- 12950 Clipped, not hidden. The full text remains in the DOM and in innerText, 12951 so crawlers and answer engines read the whole review. */ 12952 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__quote p { 12953 margin: 0; 12954 font-size: 1.5rem; 12955 line-height: 1.6; 12956 opacity: 0.85; 12957 display: -webkit-box; 12958 -webkit-box-orient: vertical; 12959 -webkit-line-clamp: 4; 12960 line-clamp: 4; 12961 overflow: hidden; 12962 } 12963 12964 @media (min-width: 750px) { 12965 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__headline { font-size: 1.8rem; } 12966 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__quote p { font-size: 1.6rem; } 12967 } 12968 12969 /* Expanded state */ 12970 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__expand:checked ~ .reviews__quote p { 12971 -webkit-line-clamp: unset; 12972 line-clamp: unset; 12973 display: block; 12974 overflow: visible; 12975 } 12976 12977 /* The checkbox itself: off-screen but operable, never display:none */ 12978 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__expand { 12979 position: absolute; 12980 width: 1px; 12981 height: 1px; 12982 margin: 0; 12983 padding: 0; 12984 border: 0; 12985 clip: rect(0 0 0 0); 12986 clip-path: inset(50%); 12987 overflow: hidden; 12988 white-space: nowrap; 12989 } 12990 12991 /* ---- See more / See less control ---- 12992 z-index lifts it above the full-card link overlay so the click toggles 12993 the quote instead of navigating to the product page. */ 12994 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__more { 12995 position: relative; 12996 z-index: 2;
12997 align-self: flex-start; 12998 margin-top: 8px; 12999 padding: 2px 0; 13000 font-size: 1.3rem; 13001 line-height: 1.4; 13002 color: inherit; 13003 cursor: pointer; 13004 text-decoration: underline; 13005 text-underline-offset: 0.25em; 13006 text-decoration-thickness: 1px; 13007 opacity: 0.75; 13008 transition: opacity 0.2s ease; 13009 } 13010 13011 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__more:hover { opacity: 1; } 13012 13013 /* Label text swaps with state */ 13014 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__more .is-less { display: none; } 13015 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__expand:checked ~ .reviews__more .is-more { display: none; } 13016 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__expand:checked ~ .reviews__more .is-less { display: inline; } 13017 13018 /* Set by JS on cards whose text fits within the clamp */ 13019 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__more[hidden] { display: none; } 13020 13021 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__expand:focus-visible ~ .reviews__more { 13022 outline: 2px solid currentColor; 13023 outline-offset: 3px; 13024 opacity: 1; 13025 } 13026 13027 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__verified { 13028 display: inline-flex; 13029 align-items: center; 13030 gap: 5px; 13031 margin-top: auto; 13032 padding-top: 14px; 13033 font-size: 1.1rem; 13034 letter-spacing: 0.05em; 13035 text-transform: uppercase; 13036 color: var(--meta-color); 13037 } 13038 13039 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__verified svg { 13040 width: 12px; 13041 height: 12px; 13042 flex-shrink: 0; 13043 } 13044 13045 /* ========== WHOLE-CARD CLICK TARGET ========== 13046 One <a> per card wrapping the product name, so the internal anchor text 13047 is the product being reviewed. Its ::after overlay covers the card. */ 13048 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card-link { 13049 color: inherit; 13050 text-decoration: none; 13051 } 13052 13053 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card-link::after { 13054 content: ""; 13055 position: absolute; 13056 inset: 0; 13057 z-index: 1; 13058 } 13059 13060 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card:hover .reviews__card-link { 13061 text-decoration: underline; 13062 text-underline-offset: 0.2em; 13063 text-decoration-thickness: 1px; 13064 } 13065 13066 /* Keyboard focus only. :focus-within also fires on mouse clicks, which put 13067 an outline on the card whenever See more or See less was pressed and left 13068 it there until the next click elsewhere. :has(:focus-visible) restricts 13069 the ring to keyboard navigation. */ 13070 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card:has(:focus-visible) { 13071 outline: 2px solid currentColor; 13072 outline-offset: 4px; 13073 } 13074 13075 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__card-link:focus { outline: none; } 13076 13077 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__track:focus-visible { 13078 outline: 2px solid currentColor; 13079 outline-offset: 2px; 13080 } 13081 13082 /* ========== NAVIGATION ========== */ 13083 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__nav { 13084 width: 50px; 13085 height: 50px; 13086 background: #fff; 13087 border: 0; 13088 padding: 0; 13089 border-radius: 50px; 13090 opacity: 0.7; 13091 transition: opacity 0.3s; 13092 top: 30%; 13093 box-shadow: 0px 7px 20px rgba(0, 0, 0, 0.06); 13094 z-index: 10; 13095 position: absolute; 13096 cursor: pointer; 13097 display: none; 13098 align-items: center; 13099 justify-content: center; 13100 font-family: inherit; 13101 } 13102 13103 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__nav:hover { opacity: 1; } 13104 13105 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__nav[disabled] { 13106 opacity: 0 !important; 13107 pointer-events: none; 13108 visibility: hidden; 13109 } 13110 13111 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__nav--prev { left
13111: calc(var(--content-padding) - 60px); } 13112 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__nav--next { right: calc(var(--content-padding) - 60px); } 13113 13114 @media (min-width: 750px) { 13115 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__nav { display: flex; } 13116 } 13117 13118 @media (min-width: 1500px) { 13119 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__nav--prev { left: calc(var(--content-padding) - 70px); } 13120 #shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3 .reviews__nav--next { right: calc(var(--content-padding) - 70px); } 13121 }</style><svg width="0" height="0" style="position:absolute" aria-hidden="true" focusable="false"> 13122 <symbol id="reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3" viewBox="0 0 24 24"> 13123 <path fill="currentColor" d="M12 1.6l3.09 6.9 7.41.72-5.55 5.02 1.6 7.36L12 17.9l-6.55 3.7 1.6-7.36L1.5 9.22l7.41-.72L12 1.6z"/> 13124 </symbol> 13125 <symbol id="reviews-check-template--28630587998578__seamless_spaces_reviews_reKBU3" viewBox="0 0 24 24"> 13126 <path fill="currentColor" d="M12 1a11 11 0 1 0 0 22 11 11 0 0 0 0-22zm5.2 8.3l-6.1 6.1a1 1 0 0 1-1.42 0L6.8 12.5a1 1 0 1 1 1.4-1.4l2.2 2.16 5.4-5.4a1 1 0 0 1 1.4 1.44z"/> 13127 </symbol> 13128</svg> 13129 13130<div class="color-scheme-1 gradient isolate"> 13131 <div class="reviews-template--28630587998578__seamless_spaces_reviews_reKBU3-padding"> 13132 <section class="reviews" aria-labelledby="reviews-title-template--28630587998578__seamless_spaces_reviews_reKBU3"> 13133 <header class="reviews__header"><p class="reviews__eyebrow">Reviews</p><h2 id="reviews-title-template--28630587998578__seamless_spaces_reviews_reKBU3" class="reviews__title h1"> 13134 What homeowners and contractors say 13135 </h2><p class="reviews__intro">Verified reviews from homeowners, designers and trade professionals who have installed Fittes registers, air returns, exhaust covers and access panels.</p></header> 13136 13137 <div class="reviews__viewport"> 13138 <button type="button" class="reviews__nav reviews__nav--prev" data-reviews-prev aria-label="Previous reviews" disabled> 13139 <svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 27 27" fill="none" aria-hidden="true" focusable="false"> 13140 <path d="M22.1953 13.9355H4.98519M4.98519 13.9355C4.98519 13.9355 9.86348 10.7272 10.8548 8.06592M4.98519 13.9355C4.98519 13.9355 9.29778 16.95 10.8548 19.805" stroke="#1E1E1E" stroke-width="2.17391" stroke-linecap="square"/> 13141 </svg> 13142 </button> 13143 13144 <ul class="reviews__track" data-reviews-track role="list" tabindex="0" aria-label="What homeowners and contractors say"><li class="reviews__card" > 13145 <article> 13146 <span class="reviews__media"><img src="//fittes.ca/cdn/shop/files/Luxe_Vent_FAQ_267b84c8-3a3d-4d77-8502-8423407e558a.webp?v=1785942315&width=1200" alt="Luxe-Wall-Vent-White-Living" srcset="//fittes.ca/cdn/shop/files/Luxe_Vent_FAQ_267b84c8-3a3d-4d77-8502-8423407e558a.webp?v=1785942315&width=360 360w, //fittes.ca/cdn/shop/files/Luxe_Vent_FAQ_267b84c8-3a3d-4d77-8502-8423407e558a.webp?v=1785942315&width=480 480w, //fittes.ca/cdn/shop/files/Luxe_Vent_FAQ_267b84c8-3a3d-4d77-8502-8423407e558a.webp?v=1785942315&width=640 640w, //fittes.ca/cdn/shop/files/Luxe_Vent_FAQ_267b84c8-3a3d-4d77-8502-8423407e558a.webp?v=1785942315&width=800 800w, //fittes.ca/cdn/shop/files/Luxe_Vent_FAQ_267b84c8-3a3d-4d77-8502-8423407e558a.webp?v=1785942315&width=1000 1000w, //fittes.ca/cdn/shop/files/Luxe_Vent_FAQ_267b84c8-3a3d-4d77-8502-8423407e558a.webp?v=1785942315&width=1200 1200w" width="1200" height="1200" loading="eager" fetchpriority="high" sizes="(min-width: 1200px) 340px, (min-width: 990px) 31vw, (min-width: 750px) 38vw, 76vw"> 13147</span> 13148 13149 <div class="reviews__body"><p class="reviews__product"><a class="reviews__card-link" href="/products/flush-wall-vent-luxe">Flush Wall Vent [Luxe]</a></p><div class="reviews__stars" role="img" aria-label="Rated 5 out of 5 stars"><svg class="" aria-hidden="true" focusable="false"> 13150 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13151 </svg><svg class="" aria-hidden="true" focusable="false"> 13152 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13153 </svg><svg class="" aria-hidden="true" focusable="false"> 13154 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13155 </svg><svg class="" aria-hidden="true" focusable="false"> 13156 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13157 </svg><svg class="" aria-hidden="true" focusable="false"> 13158 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13159 </svg></div><h3 class="reviews__headline">"Smooth Operator"</h3><input 13160 type="checkbox" 13161 class="reviews__expand" 13162 id="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-1" 13163 aria-label="Show the full review" 13164 > 13165 13166 <blockquote class="reviews__quote"> 13167 <p data-review-text>"Just installed Luxe, Flush Wall Vents in my clients home and I love the look! The flush design is perfect for a clean install and the ability to paint them, keeps the transitions looking clean. The installer
13167s were even commenting how easy they were to mud in and want them for their own homes. I will be using these as my new 'standard' in all my interior design projects!"</p> 13168 </blockquote> 13169 13170 <label class="reviews__more" for="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-1" data-review-more> 13171 <span class="is-more">See more</span> 13172 <span class="is-less">See less</span> 13173 </label> 13174 13175 <span class="reviews__verified"> 13176 <svg aria-hidden="true" focusable="false"><use href="#reviews-check-template--28630587998578__seamless_spaces_reviews_reKBU3"></use></svg> 13177 Verified Purchaser 13178 </span> 13179 </div> 13180 </article> 13181 </li><li class="reviews__card" > 13182 <article> 13183 <span class="reviews__media"><img src="//fittes.ca/cdn/shop/files/Bathroom-exhaust-vent-seamless.webp?v=1785942387&width=1200" alt="Bathroom-exhaust-vent-shower-niche-modern" srcset="//fittes.ca/cdn/shop/files/Bathroom-exhaust-vent-seamless.webp?v=1785942387&width=360 360w, //fittes.ca/cdn/shop/files/Bathroom-exhaust-vent-seamless.webp?v=1785942387&width=480 480w, //fittes.ca/cdn/shop/files/Bathroom-exhaust-vent-seamless.webp?v=1785942387&width=640 640w, //fittes.ca/cdn/shop/files/Bathroom-exhaust-vent-seamless.webp?v=1785942387&width=800 800w, //fittes.ca/cdn/shop/files/Bathroom-exhaust-vent-seamless.webp?v=1785942387&width=1000 1000w, //fittes.ca/cdn/shop/files/Bathroom-exhaust-vent-seamless.webp?v=1785942387&width=1200 1200w" width="1200" height="1308" loading="eager" fetchpriority="high" sizes="(min-width: 1200px) 340px, (min-width: 990px) 31vw, (min-width: 750px) 38vw, 76vw"> 13184</span> 13185 13186 <div class="reviews__body"><p class="reviews__product"><a class="reviews__card-link" href="/products/flush-exhaust-mount-lite">Flush Exhaust Mount [Lite]</a></p><div class="reviews__stars" role="img" aria-label="Rated 5 out of 5 stars"><svg class="" aria-hidden="true" focusable="false"> 13187 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13188 </svg><svg class="" aria-hidden="true" focusable="false"> 13189 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13190 </svg><svg class="" aria-hidden="true" focusable="false"> 13191 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13192 </svg><svg class="" aria-hidden="true" focusable="false"> 13193 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13194 </svg><svg class="" aria-hidden="true" focusable="false"> 13195 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13196 </svg></div><h3 class="reviews__headline">"No more ugly plastic grate"</h3><input 13197 type="checkbox" 13198 class="reviews__expand" 13199 id="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-2" 13200 aria-label="Show the full review" 13201 > 13202 13203 <blockquote class="reviews__quote"> 13204 <p data-review-text>"Can't believe no one has thought of this until now. As a designer I'm always looking to remove unsightly necessities. No more looking up at that ugly/plastic grate. I will be recommending these in every bathroom in the future. Really is a no brainer!"</p> 13205 </blockquote> 13206 13207 <label class="reviews__more" for="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-2" data-review-more> 13208 <span class="is-more">See more</span> 13209 <span class="is-less">See less</span> 13210 </label> 13211 13212 <span class="reviews__verified"> 13213 <svg aria-hidden="true" focusable="false"><use href="#reviews-check-template--28630587998578__seamless_spaces_reviews_reKBU3"></use></svg> 13214 Verified Purchaser 13215 </span> 13216 </div> 13217 </article> 13218 </li><li class="reviews__card" > 13219 <article>
13220 <span class="reviews__media"><img src="//fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=1200" alt="Flush Floor Vent [Lite]" srcset="//fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=360 360w, //fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=480 480w, //fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=640 640w, //fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=800 800w, //fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=1000 1000w, //fittes.ca/cdn/shop/files/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184&width=1200 1200w" width="1200" height="1200" loading="lazy" sizes="(min-width: 1200px) 340px, (min-width: 990px) 31vw, (min-width: 750px) 38vw, 76vw"> 13221</span> 13222 13223 <div class="reviews__body"><p class="reviews__product"><a class="reviews__card-link" href="/products/flush-floor-vent-lite">Flush Floor Vent [Lite]</a></p><div class="reviews__stars" role="img" aria-label="Rated 5 out of 5 stars"><svg class="" aria-hidden="true" focusable="false"> 13224 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13225 </svg><svg class="" aria-hidden="true" focusable="false"> 13226 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13227 </svg><svg class="" aria-hidden="true" focusable="false"> 13228 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13229 </svg><svg class="" aria-hidden="true" focusable="false"> 13230 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13231 </svg><svg class="" aria-hidden="true" focusable="false"> 13232 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13233 </svg></div><h3 class="reviews__headline">"The way vents should be!"</h3><input 13234 type="checkbox" 13235 class="reviews__expand" 13236 id="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-3" 13237 aria-label="Show the full review" 13238 > 13239 13240 <blockquote class="reviews__quote"> 13241 <p data-review-text>"I am a contractor and recently purchased a Fittes vent to upgrade the finish of a bathroom remodel. Not only was I impressed by the quality and look of the vent, my clients loved it. Fittes vents will be my go to moving forward. Keep up the great work."</p> 13242 </blockquote> 13243 13244 <label class="reviews__more" for="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-3" data-review-more> 13245 <span class="is-more">See more</span> 13246 <span class="is-less">See less</span> 13247 </label> 13248 13249 <span class="reviews__verified"> 13250 <svg aria-hidden="true" focusable="false"><use href="#reviews-check-template--28630587998578__seamless_spaces_reviews_reKBU3"></use></svg> 13251 Verified Purchaser 13252 </span> 13253 </div> 13254 </article> 13255 </li><li class="reviews__card" > 13256 <article> 13257 <span class="reviews__media"><img src="//fittes.ca/cdn/shop/files/Before_After_Ads_Alt1_Story_Your_Story.webp?v=1785942526&width=1200" alt="Flush-Luxe-vent-pink-wall-paper" srcset="//fittes.ca/cdn/shop/files/Before_After_Ads_Alt1_Story_Your_Story.webp?v=1785942526&width=360 360w, //fittes.ca/cdn/shop/files/Before_After_Ads_Alt1_Story_Your_Story.webp?v=1785942526&width=480 480w, //fittes.ca/cdn/shop/files/Before_After_Ads_Alt1_Story_Your_Story.webp?v=1785942526&width=640 640w, //fittes.ca/cdn/shop/files/Before_After_Ads_Alt1_Story_Your_Story.webp?v=1785942526&width=800 800w, //fittes.ca/cdn/shop/files/Before_After_Ads_Alt1_Story_Your_Story.webp?v=1785942526&width=1000 1000w, //fittes.ca/cdn/shop/files/Before_After_Ads_Alt1_Story_Your_Story.webp?v=1785942526&width=1200 1200w" width="1200" height="1100" loading="lazy" fetchpriority="auto" sizes="(min-width: 1200px) 340px, (min-width: 990px) 31vw, (min-width: 750px) 38vw, 76vw"> 13258</span> 13259 13260 <div class="reviews__body"><p class="reviews__product"><a class="reviews__card-link" href="/products/flush-wall-vent-luxe">Flush Wall Vent [Luxe]</a></p><div class="reviews__stars" role="img" aria-label="Rated 5 out of 5 stars"><svg class="" aria-hidden="true" focusable="false"> 13261 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13262 </svg><svg class="" aria-hidden="true" focusable="false"> 13263 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13264 </svg><svg class="" aria-hidden="true" focusable="false"> 13265 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13266 </svg><svg class="" aria-hidden="true" focusable="false"> 13267 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13268 </svg><svg class="" aria-hidden="true" focusable="false"> 13269 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13270 </svg></div><h3 class="reviews__headline">"Makes a room"</h3><input 13271 type="checkbox" 13272 class="reviews__expand" 13273 id="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-4" 13274 aria-label="Show the full review" 13275 > 13276 13277 <blockquote class="reviews__quote"> 13278 <p data-review-text>"i got the large size to replace 2 ugly duct access vents. They turned an eyesore in the room to a feature of the room. They are now a conversation piece when we have guests. Such a simple idea that has so much impact on the design of a space."</p> 13279 </blockquote> 13280 13281 <label class="reviews__more" for="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-4" data-review-more>
13282 <span class="is-more">See more</span> 13283 <span class="is-less">See less</span> 13284 </label> 13285 13286 <span class="reviews__verified"> 13287 <svg aria-hidden="true" focusable="false"><use href="#reviews-check-template--28630587998578__seamless_spaces_reviews_reKBU3"></use></svg> 13288 Verified Purchaser 13289 </span> 13290 </div> 13291 </article> 13292 </li><li class="reviews__card" > 13293 <article> 13294 <span class="reviews__media"><img src="//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1_6280502d-1316-455e-9940-c2e36e6eaa37.jpg?v=1754022061&width=1200" alt="Flush-Wall-Vent-Lite-Plus-White-Room-Modern" srcset="//fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1_6280502d-1316-455e-9940-c2e36e6eaa37.jpg?v=1754022061&width=360 360w, //fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1_6280502d-1316-455e-9940-c2e36e6eaa37.jpg?v=1754022061&width=480 480w, //fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1_6280502d-1316-455e-9940-c2e36e6eaa37.jpg?v=1754022061&width=640 640w, //fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1_6280502d-1316-455e-9940-c2e36e6eaa37.jpg?v=1754022061&width=800 800w, //fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1_6280502d-1316-455e-9940-c2e36e6eaa37.jpg?v=1754022061&width=1000 1000w, //fittes.ca/cdn/shop/files/1_-_Flush_Wall_Vent_Lite___Lifestyle_1_6280502d-1316-455e-9940-c2e36e6eaa37.jpg?v=1754022061&width=1200 1200w" width="1200" height="1200" loading="lazy" fetchpriority="auto" sizes="(min-width: 1200px) 340px, (min-width: 990px) 31vw, (min-width: 750px) 38vw, 76vw"> 13295</span> 13296 13297 <div class="reviews__body"><p class="reviews__product"><a class="reviews__card-link" href="/products/flush-wall-vent-lite-plus">Flush Wall Vent [Lite+]</a></p><div class="reviews__stars" role="img" aria-label="Rated 5 out of 5 stars"><svg class="" aria-hidden="true" focusable="false"> 13298 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13299 </svg><svg class="" aria-hidden="true" focusable="false"> 13300 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13301 </svg><svg class="" aria-hidden="true" focusable="false"> 13302 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13303 </svg><svg class="" aria-hidden="true" focusable="false"> 13304 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13305 </svg><svg class="" aria-hidden="true" focusable="false"> 13306 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13307 </svg></div><h3 class="reviews__headline">"Imagine building a great looking space then messing it up on the last day with a blah vent cover."</h3><input 13308 type="checkbox" 13309 class="reviews__expand" 13310 id="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-5" 13311 aria-label="Show the full review" 13312 > 13313 13314 <blockquote class="reviews__quote"> 13315 <p data-review-text>"The look is unmatched, it certainly takes planning a bit more work than a standard cover but itâs totally worth it to bring the look we were going for home"</p> 13316 </blockquote> 13317 13318 <label class="reviews__more" for="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-5" data-review-more> 13319 <span class="is-more">See more</span> 13320 <span class="is-less">See less</span> 13321 </label> 13322 13323 <span class="reviews__verified"> 13324 <svg aria-hidden="true" focusable="false"><use href="#reviews-check-template--28630587998578__seamless_spaces_reviews_reKBU3"></use></svg> 13325 Verified Purchaser 13326 </span> 13327 </div> 13328 </article> 13329 </li><li class="reviews__card" > 13330 <article>
13331 <span class="reviews__media"><img src="//fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=1200" alt="Flush Wall Vent [Lite]" srcset="//fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=360 360w, //fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=480 480w, //fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=640 640w, //fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=800 800w, //fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=1000 1000w, //fittes.ca/cdn/shop/files/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170&width=1200 1200w" width="1200" height="1200" loading="lazy" sizes="(min-width: 1200px) 340px, (min-width: 990px) 31vw, (min-width: 750px) 38vw, 76vw"> 13332</span> 13333 13334 <div class="reviews__body"><p class="reviews__product"><a class="reviews__card-link" href="/products/flush-wall-vent-lite">Flush Wall Vent [Lite]</a></p><div class="reviews__stars" role="img" aria-label="Rated 5 out of 5 stars"><svg class="" aria-hidden="true" focusable="false"> 13335 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13336 </svg><svg class="" aria-hidden="true" focusable="false"> 13337 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13338 </svg><svg class="" aria-hidden="true" focusable="false"> 13339 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13340 </svg><svg class="" aria-hidden="true" focusable="false"> 13341 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13342 </svg><svg class="" aria-hidden="true" focusable="false"> 13343 <use href="#reviews-star-template--28630587998578__seamless_spaces_reviews_reKBU3"></use> 13344 </svg></div><h3 class="reviews__headline">"Fittes vents are amazing"</h3><input 13345 type="checkbox" 13346 class="reviews__expand" 13347 id="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-6" 13348 aria-label="Show the full review" 13349 > 13350 13351 <blockquote class="reviews__quote"> 13352 <p data-review-text>"I am updating a home from the 80s, and the Fittes vents give it a very clean, modern look. They are so easy to install and just look amazing."</p> 13353 </blockquote> 13354 13355 <label class="reviews__more" for="review-expand-template--28630587998578__seamless_spaces_reviews_reKBU3-6" data-review-more> 13356 <span class="is-more">See more</span> 13357 <span class="is-less">See less</span> 13358 </label> 13359 13360 <span class="reviews__verified"> 13361 <svg aria-hidden="true" focusable="false"><use href="#reviews-check-template--28630587998578__seamless_spaces_reviews_reKBU3"></use></svg> 13362 Verified Purchaser 13363 </span> 13364 </div> 13365 </article> 13366 </li></ul> 13367 13368 <button type="button" class="reviews__nav reviews__nav--next" data-reviews-next aria-label="Next reviews"> 13369 <svg xmlns="http://www.w3.org/2000/svg" width="27" height="27" viewBox="0 0 27 27" fill="none" aria-hidden="true" focusable="false"> 13370 <path d="M4.80469 13.9355H22.0148M22.0148 13.9355C22.0148 13.9355 17.1365 10.7272 16.1452 8.06592M22.0148 13.9355C22.0148 13.9355 17.7022 16.95 16.1452 19.805" stroke="#1E1E1E" stroke-width="2.17391" stroke-linecap="square"/> 13371 </svg> 13372 </button> 13373 </div> 13374 </section> 13375 </div> 13376</div>
13376<script type="application/ld+json"> 13377 { 13378 "@context": "https://schema.org", 13379 "@type": "ItemList", 13380 "name": "What homeowners and contractors say", 13381 "numberOfItems": 6, 13382 "itemListElement": [{ 13383 "@type": "ListItem", 13384 "position": 1, 13385 "item": { 13386 "@type": "Review","name": "\"Smooth Operator\"","reviewBody": "\"Just installed Luxe, Flush Wall Vents in my clients home and I love the look! The flush design is perfect for a clean install and the ability to paint them, keeps the transitions looking clean. The installers were even commenting how easy they were to mud in and want them for their own homes. I will be using these as my new 'standard' in all my interior design projects!\"", 13387 "author": { "@type": "Person", "name": "Verified Purchaser" }, 13388 "reviewRating": { 13389 "@type": "Rating", 13390 "ratingValue": 5, 13391 "bestRating": 5, 13392 "worstRating": 1 13393 }, "itemReviewed": { 13394 "@type": "Product", 13395 "name": "Flush Wall Vent [Luxe]", 13396 "brand": { "@type": "Brand", "name": "Fittes ð" }, "url": "https:\/\/fittes.ca\/products\/flush-wall-vent-luxe" 13397, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/Luxe_Vent_FAQ_267b84c8-3a3d-4d77-8502-8423407e558a.webp?v=1785942315\u0026width=1200" 13398}} 13399 },{ 13400 "@type": "ListItem", 13401 "position": 2, 13402 "item": { 13403 "@type": "Review","name": "\"No more ugly plastic grate\"","reviewBody": "\"Can't believe no one has thought of this until now. As a designer I'm always looking to remove unsightly necessities. No more looking up at that ugly\/plastic grate. I will be recommending these in every bathroom in the future. Really is a no brainer!\"", 13404 "author": { "@type": "Person", "name": "Verified Purchaser" }, 13405 "reviewRating": { 13406 "@type": "Rating", 13407 "ratingValue": 5, 13408 "bestRating": 5, 13409 "worstRating": 1 13410 }, "itemReviewed": { 13411 "@type": "Product", 13412 "name": "Flush Exhaust Mount [Lite]", 13413 "brand": { "@type": "Brand", "name": "Fittes ð" }, "url": "https:\/\/fittes.ca\/products\/flush-exhaust-mount-lite" 13414, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/Bathroom-exhaust-vent-seamless.webp?v=1785942387\u0026width=1200" 13415}} 13416 },{ 13417 "@type": "ListItem", 13418 "position": 3, 13419 "item": { 13420 "@type": "Review","name": "\"The way vents should be!\"","reviewBody": "\"I am a contractor and recently purchased a Fittes vent to upgrade the finish of a bathroom remodel. Not only was I impressed by the quality and look of the vent, my clients loved it. Fittes vents will be my go to moving forward. Keep up the great work.\"", 13421 "author": { "@type": "Person", "name": "Verified Purchaser" }, 13422 "reviewRating": { 13423 "@type": "Rating", 13424 "ratingValue": 5, 13425 "bestRating": 5, 13426 "worstRating": 1 13427 }, "itemReviewed": { 13428 "@type": "Product", 13429 "name": "Flush Floor Vent [Lite]", 13430 "brand": { "@type": "Brand", "name": "Fittes ð" }, "url": "https:\/\/fittes.ca\/products\/flush-floor-vent-lite" 13431, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/1-FlushFloorVent_Lite__Lifestyle1.jpg?v=1754022184\u0026width=1200" 13432}} 13433 },{ 13434 "@type": "ListItem", 13435 "position": 4, 13436 "item": { 13437 "@type": "Review","name": "\"Makes a room\"","reviewBody": "\"i got the large size to replace 2 ugly duct access vents. They turned an eyesore in the room to a feature of the room. They are now a conversation piece when we have guests. Such a simple idea that has so much impact on the design of a space.\"", 13438 "author": { "@type": "Person", "name": "Verified Purchaser" }, 13439 "reviewRating": { 13440 "@type": "Rating", 13441 "ratingValue": 5, 13442 "bestRating": 5, 13443 "worstRating": 1 13444 }, "itemReviewed": { 13445 "@type": "Product", 13446 "name": "Flush Wall Vent [Luxe]", 13447 "brand": { "@type": "Brand", "name": "Fittes ð" }, "url": "https:\/\/fittes.ca\/products\/flush-wall-vent-luxe" 13448, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/Before_After_Ads_Alt1_Story_Your_Story.webp?v=1785942526\u0026width=1200" 13449}} 13450 },{ 13451 "@type": "ListItem", 13452 "position": 5, 13453 "item": { 13454 "@type": "Review","name": "\"Imagine building a great looking space then messing it up on the last day with a blah vent cover.\"","reviewBody": "\"The look is unmatched, it certainly takes planning a bit more work than a standard cover but itâs totally worth it to bring the look we were going for home\"", 13455 "author": { "@type": "Person", "name": "Verified Purchaser" }, 13456 "reviewRating": { 13457 "@type": "Rating", 13458 "ratingValue": 5, 13459 "bestRating": 5, 13460 "worstRating": 1 13461 }, "itemReviewed": { 13462 "@type": "Product", 13463 "name": "Flush Wall Vent [Lite+]", 13464 "brand": { "@type": "Brand", "name": "Fittes ð" }, "url": "https:\/\/fittes.ca\/products\/flush-wall-vent-lite-plus" 13465, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/1_-_Flush_Wall_Vent_Lite___Lifestyle_1_6280502d-1316-455e
13465-9940-c2e36e6eaa37.jpg?v=1754022061\u0026width=1200" 13466}} 13467 },{ 13468 "@type": "ListItem", 13469 "position": 6, 13470 "item": { 13471 "@type": "Review","name": "\"Fittes vents are amazing\"","reviewBody": "\"I am updating a home from the 80s, and the Fittes vents give it a very clean, modern look. They are so easy to install and just look amazing.\"", 13472 "author": { "@type": "Person", "name": "Verified Purchaser" }, 13473 "reviewRating": { 13474 "@type": "Rating", 13475 "ratingValue": 5, 13476 "bestRating": 5, 13477 "worstRating": 1 13478 }, "itemReviewed": { 13479 "@type": "Product", 13480 "name": "Flush Wall Vent [Lite]", 13481 "brand": { "@type": "Brand", "name": "Fittes ð" }, "url": "https:\/\/fittes.ca\/products\/flush-wall-vent-lite" 13482, "image": "https:\/\/fittes.ca\/cdn\/shop\/files\/1-FlushWallVent_Lite__Lifestyle1.jpg?v=1754022170\u0026width=1200" 13483}} 13484 }] 13485} 13486</script>
13486 13487
13488<script> 13489 (function () { 13490 var section = document.getElementById('shopify-section-template--28630587998578__seamless_spaces_reviews_reKBU3'); 13491 if (!section) return; 13492 13493 /* ---------- See more: hide the toggle where the text already fits ---------- 13494 Progressive enhancement. Without this script every card shows the 13495 toggle and it still works â the clamp and the checkbox are pure CSS. */ 13496 var cards = section.querySelectorAll('.reviews__card'); 13497 13498 function measure() { 13499 cards.forEach(function (card) { 13500 var text = card.querySelector('[data-review-text]'); 13501 var more = card.querySelector('[data-review-more]'); 13502 var box = card.querySelector('.reviews__expand'); 13503 if (!text || !more || !box) return; 13504 13505 // Only measure in the clamped state, otherwise heights always match 13506 var wasOpen = box.checked; 13507 if (wasOpen) box.checked = false; 13508 13509 var overflows = text.scrollHeight > text.clientHeight + 2; 13510 13511 if (wasOpen) box.checked = true; 13512 13513 if (overflows) { 13514 more.removeAttribute('hidden'); 13515 } else { 13516 more.setAttribute('hidden', ''); 13517 box.checked = false; 13518 } 13519 }); 13520 } 13521 13522 // Fonts change line breaks, so re-measure once they have loaded 13523 if (document.fonts && document.fonts.ready) { 13524 document.fonts.ready.then(measure); 13525 } 13526 13527 var resizeTimer; 13528 window.addEventListener('resize', function () { 13529 clearTimeout(resizeTimer); 13530 resizeTimer = setTimeout(measure, 150); 13531 }); 13532 13533 measure(); 13534 13535 /* ---------- Carousel arrows ---------- */ 13536 var track = section.querySelector('[data-reviews-track]'); 13537 var prev = section.querySelector('[data-reviews-prev]'); 13538 var next = section.querySelector('[data-reviews-next]'); 13539 if (!track || !prev || !next) return; 13540 13541 function step() { 13542 var card = track.querySelector('.reviews__card'); 13543 if (!card) return track.clientWidth; 13544 var styles = getComputedStyle(track); 13545 var gap = parseFloat(styles.columnGap || styles.gap) || 0; 13546 return card.getBoundingClientRect().width + gap; 13547 } 13548 13549 function sync() { 13550 var max = track.scrollWidth - track.clientWidth; 13551 prev.disabled = track.scrollLeft <= 1; 13552 next.disabled = track.scrollLeft >= max - 1; 13553 } 13554 13555 prev.addEventListener('click', function () { 13556 track.scrollBy({ left: -step(), behavior: 'smooth' }); 13557 }); 13558 13559 next.addEventListener('click', function () { 13560 track.scrollBy({ left: step(), behavior: 'smooth' }); 13561 }); 13562 13563 var ticking = false; 13564 track.addEventListener('scroll', function () { 13565 if (ticking) return; 13566 ticking = true; 13567 window.requestAnimationFrame(function () { sync(); ticking = false; }); 13568 }, { passive: true }); 13569 13570 window.addEventListener('resize', sync); 13571 sync(); 13572 })(); 13573</script>
13573 13574 13575 13576</section><section id="shopify-section-template--28630587998578__slideshow_gYbghc" class="shopify-section section"><link href="//fittes.ca/cdn/shop/t/139/assets/section-image-banner.css?v=124819179385751388401788881714" rel="stylesheet" type="text/css" media="all" /> 13577<link href="//fittes.ca/cdn/shop/t/139/assets/component-slider.css?v=14039311878856620671788881635" rel="stylesheet" type="text/css" media="all" /> 13578<link href="//fittes.ca/cdn/shop/t/139/assets/component-slideshow.css?v=76964923311900879251788881635" rel="stylesheet" type="text/css" media="all" /> 13579<style data-shopify>@media screen and (max-width: 749px) { 13580 13581 #Slider-template--28630587998578__slideshow_gYbghc .banner__buttons { 13582 order: 3; 13583 } 13584 #Slider-template--28630587998578__slideshow_gYbghc .banner__buttons .button { 13585 background: #e73c3e; 13586 color: #fff; 13587 } 13588 #Slider-template--28630587998578__slideshow_gYbghc .banner__buttons .button::before, 13589 #Slider-template--28630587998578__slideshow_gYbghc .banner__buttons .button::after { 13590 content: unset; 13591 } 13592 #Slider-template--28630587998578__slideshow_gYbghc .banner__buttons { 13593 margin-top: 1.6rem; 13594 } 13595 #Slider-template--28630587998578__slideshow_gYbghc .banner__content { 13596 align-items: flex-start; 13597 } 13598 .slider-buttons { 13599 right: 50% !important; 13600 transform: translateX(50%) !important; 13601 border: none !important; 13602 } 13603 .slider-button { 13604 width: 50px !important; 13605 height: 50px !important; 13606 } 13607 .slider-button:not([disabled]):hover { 13608 color: #e73c3e !important; 13609 } 13610 #Slider-template--28630587998578__slideshow_gYbghc .slideshow__text.banner__box { 13611 height: 100%; 13612 justify-content: flex-start; 13613 } 13614 #Slider-template--28630587998578__slideshow_gYbghc .banner--large:not(.banner--mobile-bottom):not(.banner--adapt) .banner__content{ 13615 min-height:60rem; 13616 } 13617} 13618 13619 @media screen and (min-width: 750px) { 13620 #Slider-template--28630587998578__slideshow_gYbghc::before, 13621 #Slider-template--28630587998578__slideshow_gYbghc .media::before { 13622 padding-bottom: Liquid error (sections/slideshow line 64): divided by 0%; 13623 content: ''; 13624 display: block; 13625 } 13626 } 13627 13628 #Slider-template--28630587998578__slideshow_gYbghc .video_template--28630587998578__slideshow_gYbghc{ 13629 object-fit: cover; 13630 } 13631 #Slider-template--28630587998578__slideshow_gYbghc .slider-buttons { 13632 border: none; 13633 }</style><slideshow-component 13634 class="hw slider-mobile-gutter" 13635 role="region" 13636 aria-roledescription="Carousel" 13637 aria-label="Slideshow about our brand" 13638><div 13639 class="slideshow banner banner--adapt_image grid grid--1-col slider slider--everywhere slideshow--placeholder scroll-trigger animate--fade-in" 13640 id="Slider-template--28630587998578__slideshow_gYbghc" 13641 aria-live="polite" 13642 aria-atomic="true" 13643 data-autoplay="false" 13644 data-speed="5" 13645 ></div></slideshow-component> 13646<style> #shopify-section-template--28630587998578__slideshow_gYbghc .banner__text p {font-family: lora;} </style></section> 13647 </main> 13648 13649 <!-- BEGIN sections: footer-group --> 13650<section id="shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg" class="shopify-section shopify-section-group-footer-group section-benefits-banner"><style> 13651 #shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-banner { 13652 --icon-size: 90px; 13653 background: #EFF1ED; 13654 color: #000000; 13655 padding: 48px clamp(1rem, 6vw, 4rem) 48px; 13656 display: grid; 13657 grid-template-columns: repeat(4, minmax(0, 1fr)); 13658 gap: 2rem 1.5rem; 13659 align-items: start; 13660 text-align: center; 13661 box-sizing: border-box; 13662 margin: 0; 13663 list-style: none; 13664 }#shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-banner { 13665 width: 100vw; 13666 margin-left: calc(50% - 50vw); 13667 margin-right: calc(50% - 50vw); 13668 }#shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-banner { 13669 content-visibility: auto; 13670 contain-intrinsic-size: auto 250px; 13671 }#shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-item { 13672 margin: 0; 13673 min-width: 0; 13674 } 13675 13676 #shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-icon { 13677 height: var(--icon-size); 13678 display: flex; 13679 align-items: center; 13680 justify-content: center; 13681 } 13682 13683 #shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-icon img, 13684 #shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-icon svg { 13685 max-height: 100%; 13686 max-width: 100%; 13687 width: auto; 13688 height: auto; 13689 display: block; 13690 } 13691 13692 #shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-item p { 13693 margin: 1.5rem 0 0; 13694 font-family: var(--font-heading-family, var(--font-body-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif)); 13695 font-weight: 700; 13696 font-size: 1.4rem; 13697 line-height: 1.3; 13698 text-wrap: balance; 13699 } 13700 13701 #shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-link { 13702 display: block; 13703 text-decoration: none; 13704 color: inherit; 13705 } 13706 #shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-link:hover p { 13707 text-decoration: underline; 13708 } 13709 13710 @media (max-width: 749px) { 13711 #shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-banner { 13712 grid-template-columns: repeat(2, minmax(0, 1fr)); 13713 gap: 2rem 1rem; 13714 padding-left: 1.5rem; 13715 padding-right: 1.5rem; 13716 contain-intrinsic-size: auto 436px; 13717 } 13718 #shopify-section-sections--28630589571442__footerbenefitsbanner_R8iXTg .benefits-item p { 13719 font-size: 1.3rem; 13720 margin-top: 1rem; 13721 } 13722 } 13723</style><ul class="benefits-banner" ><li class="benefits-item" ><div class="benefits-icon"><img src="//fittes.ca/cdn/shop/files/Earn_Clean_1.webp?v=1784903904&width=180" 13724 srcset="//fittes.ca/cdn/shop/files/Earn_Clean_1.webp?v=1784903904&width=90 1x, //fittes.ca/cdn/shop/files/Earn_Clean_1.webp?v=1784903904&width=180 2x, //fittes.ca/cdn/shop/files/Earn_Clean_1.webp?v=1784903904&width=270 3x" 13725 alt="Earn and Save Every Time" 13726 width="90" 13727 height="90" 13728 loading="lazy" 13729 fetchpriority="low" 13730 decoding="async"></div><p>Earn and Save Every Time</p></li><li class="benefits-item" ><div class="benefits-icon"><img src="//fittes.ca/cdn/shop/files/3year_1.webp?v=1784903922&width=180" 13731 srcset="//fittes.ca/cdn/shop/files/3year_1.webp?v=1784903922&width=90 1x, //fittes.ca/cdn/shop/files/3year_1.webp?v=1784903922&width=180 2x, //fittes.ca/cdn/shop/files/3year_1.webp?v=1784903922&width=270 3x" 13732 alt="3 Year Warranty"
13733 width="90" 13734 height="90" 13735 loading="lazy" 13736 fetchpriority="low" 13737 decoding="async"></div><p>3 Year Warranty</p></li><li class="benefits-item" ><div class="benefits-icon"><img src="//fittes.ca/cdn/shop/files/365_days.webp?v=1784903939&width=180" 13738 srcset="//fittes.ca/cdn/shop/files/365_days.webp?v=1784903939&width=90 1x, //fittes.ca/cdn/shop/files/365_days.webp?v=1784903939&width=180 2x, //fittes.ca/cdn/shop/files/365_days.webp?v=1784903939&width=270 3x" 13739 alt="365 Days to Return" 13740 width="90" 13741 height="90" 13742 loading="lazy" 13743 fetchpriority="low" 13744 decoding="async"></div><p>365 Days to Return</p></li><li class="benefits-item" ><div class="benefits-icon"><img src="//fittes.ca/cdn/shop/files/north_america.webp?v=1784903965&width=180" 13745 srcset="//fittes.ca/cdn/shop/files/north_america.webp?v=1784903965&width=90 1x, //fittes.ca/cdn/shop/files/north_america.webp?v=1784903965&width=180 2x, //fittes.ca/cdn/shop/files/north_america.webp?v=1784903965&width=270 3x" 13746 alt="Made in North America" 13747 width="90" 13748 height="90" 13749 loading="lazy" 13750 fetchpriority="low" 13751 decoding="async"></div><p>Made in North America</p></li></ul></section><div id="shopify-section-sections--28630589571442__footer" class="shopify-section shopify-section-group-footer-group"><style data-shopify>.footer { 13752 margin-top: 0px; 13753 } 13754 13755 .section-sections--28630589571442__footer-padding { 13756 padding-top: 27px; 13757 padding-bottom: 27px; 13758 } 13759 13760 @media screen and (min-width: 750px) { 13761 .footer { 13762 margin-top: 0px; 13763 } 13764 13765 .section-sections--28630589571442__footer-padding { 13766 padding-top: 36px; 13767 padding-bottom: 36px; 13768 } 13769 }</style><style> 13770 .footer__main-content { 13771 display: grid; 13772 grid-template-columns: 1fr; 13773 gap: 3rem; 13774 max-width: var(--page-width); 13775 margin: 0 auto; 13776 padding: 0 3rem 0 5rem; 13777 } 13778 13779 .footer__menu-column { 13780 display: flex; 13781 flex-direction: column; 13782 } 13783 13784 .footer__menu-heading { 13785 font-size: 1.65rem; 13786 font-weight: 500; 13787 letter-spacing: 0.02em; 13788 margin: 0 0 2rem; 13789 } 13790 13791 .footer__menu-list { 13792 list-style: none; 13793 padding: 0; 13794 margin: 0; 13795 display: flex; 13796 flex-direction: column; 13797 gap: 1rem; 13798 } 13799 13800 .footer__menu-link { 13801 color: rgba(var(--color-foreground), 1); 13802 text-decoration: none; 13803 font-size: 1.54rem; 13804 transition: color 0.2s ease; 13805 } 13806 13807 .footer__menu-link:hover { 13808 color: rgb(var(--color-foreground)); 13809 } 13810 13811 .footer__newsletter-section { 13812 display: flex; 13813 flex-direction: column; 13814 } 13815 13816 .footer__newsletter-heading { 13817 font-size: 1.65rem; 13818 font-weight: 500; 13819 letter-spacing: 0.02em; 13820 margin: 0 0 2rem; 13821 } 13822 13823 .footer__newsletter-form { 13824 position: relative; 13825 margin-bottom: 2.5rem; 13826 } 13827 13828 .footer__newsletter-input { 13829 width: 100%; 13830 background: transparent; 13831 border: none; 13832 border-bottom: 1px solid rgba(var(--color-foreground), 0.5); 13833 padding: 1rem 4rem 1rem 0; 13834 font-size: 1.54rem; 13835 color: rgb(var(--color-foreground)); 13836 outline: none; 13837 transition: border-bottom-color 0.2s ease; 13838 } 13839 13840 .footer__newsletter-input::placeholder { 13841 color: rgba(var(--color-foreground), 0.6); 13842 } 13843 13844 .footer__newsletter-input:focus { 13845 border-bottom-color: rgb(var(--color-foreground)); 13846 } 13847 13848 .footer__newsletter-button { 13849 position: absolute; 13850 right: 0; 13851 top: 50%; 13852 transform: translateY(-50%); 13853 background: transparent; 13854 border: none; 13855 padding: 0.5rem; 13856 cursor: pointer; 13857 color: rgb(var(--color-foreground)); 13858 } 13859 13860 .footer__newsletter-button svg { 13861 width: 2.2rem; 13862 height: 2.2rem; 13863 } 13864 13865 /* Newsletter error/success messages (self-contained; error color comes from form__message in base.css) */ 13866 .footer__newsletter-form .newsletter-form__message { 13867 display: flex; 13868 align-items: center; 13869 gap: 0.5rem; 13870 margin-top: 1rem; 13871 font-size: 1.3rem; 13872 line-height: 1.4; 13873 } 13874 13875 .footer__newsletter-form .newsletter-form__message--success { 13876 color: rgb(var(--color-foreground)); 13877 } 13878 13879 .footer__social-icons { 13880 display: flex; 13881 gap: 1.5rem; 13882 margin-top: 1rem; 13883 } 13884 13885 .footer__social-link { 13886 display: flex; 13887 align-items: center; 13888 justify-content: center; 13889 color: rgb(var(--color-foreground)); 13890 text-decoration: none; 13891 transition: opacity 0.2s ease; 13892 } 13893 13894 .footer__social-link:hover { 13895 opacity: 0.7; 13896 } 13897 13898 .footer__social-link svg { 13899 width: 2.4rem; 13900 height: 2.4rem; 13901 } 13902 13903 .footer__logo-column { 13904 display: flex; 13905 align-items: flex-end; 13906 justify-content: flex-end; 13907 align-self: stretch; 13908 } 13909 13910 .footer__logo { 13911 width: 100%; 13912 max-width: 20rem; 13913 height: auto; 13914 } 13915 13916 .footer__logo img { 13917 width: 100%; 13918 height: auto; 13919 display: block; 13920 } 13921 13922 .footer__bottom-bar { 13923 border-top: 1px solid rgba(var(--color-foreground), 1); 13924 margin-top: 4rem; 13925 padding-top: 2.5rem; 13926 max-width: var(--page-width); 13927 margin-left: auto; 13928 margin-right: auto; 13929 padding-left: 5rem; 13930 padding-right: 3rem; 13931 } 13932 13933 .footer__bottom-content { 13934 display: flex; 13935 flex-direction: column; 13936 gap: 1.5rem; 13937 } 13938 13939 .footer__bottom-links { 13940 display: flex; 13941 align-items: center; 13942 } 13943 13944 .footer__bottom-links-list { 13945 display: flex; 13946 flex-wrap: wrap; 13947 align-items: center; 13948 gap: 0; 13949 list-style: none; 13950 padding: 0; 13951 margin: 0; 13952 } 13953 13954 .footer__bottom-links-item { 13955 display: flex; 13956 align-items: center; 13957 } 13958 13959 .footer__bottom-links-item:not(:last-child)::after { 13960 content: "|"; 13961 color: rgba(var(--color-foreground), 0.5); 13962 padding: 0 1.2rem; 13963 font-size: 1.43rem; 13964 } 13965 13966 .footer__bottom-link { 13967 color: rgba(var(--color-foreground), 1); 13968 text-decoration: none; 13969 font-size: 1.43rem; 13970 transition: color 0.2s ease; 13971 } 13972 13973 .footer__bottom-link:hover { 13974 color: rgb(var(--color-foreground)); 13975 } 13976
13977 .footer__copyright-row { 13978 margin-top: 1.5rem; 13979 } 13980 13981 .footer__copyright { 13982 font-size: 1.43rem; 13983 color: rgba(var(--color-foreground), 1); 13984 display: flex; 13985 align-items: center; 13986 line-height: 1; 13987 } 13988 13989 /* Smile launcher â persistent transition so fade works BOTH directions */ 13990 .smile-transition-ready { 13991 transition: opacity 0.3s ease-in-out !important; 13992 } 13993 13994 /* Smile launcher â hide when overlapping footer */ 13995 .smile-hidden-over-footer { 13996 opacity: 0 !important; 13997 pointer-events: none !important; 13998 } 13999 14000 /* Ensure the iframe itself can't capture clicks when parent is hidden */ 14001 .smile-hidden-over-footer iframe { 14002 pointer-events: none !important; 14003 } 14004 14005 /* Desktop layout */ 14006 @media screen and (min-width: 990px) { 14007 .footer__main-content { 14008 grid-template-columns: 1fr 1fr 1.5fr 1fr; 14009 gap: 3rem; 14010 align-items: start; 14011 } 14012 } 14013 14014 /* Tablet and mobile layouts */ 14015 @media screen and (max-width: 989px) { 14016 .footer__main-content { 14017 grid-template-columns: 1fr 1fr; 14018 gap: 3rem; 14019 } 14020 14021 .footer__menu-column { 14022 order: 2; 14023 } 14024 14025 .footer__newsletter-section { 14026 grid-column: 1 / -1; 14027 order: 1; 14028 } 14029 14030 .footer__logo-column { 14031 grid-column: 1 / -1; 14032 justify-content: flex-start; 14033 margin-top: 2rem; 14034 order: 3; 14035 } 14036 14037 .footer__logo { 14038 max-width: 10rem; 14039 } 14040 } 14041 14042 @media screen and (max-width: 749px) { 14043 .footer__main-content { 14044 padding: 0 2rem 0 2.5rem; 14045 gap: 2rem; 14046 } 14047 14048 .footer__bottom-bar { 14049 margin-top: 3rem; 14050 padding-top: 2rem; 14051 padding-left: 2.5rem; 14052 padding-right: 2rem; 14053 } 14054 14055 .footer__bottom-links-item:not(:last-child)::after { 14056 padding: 0 0.75rem; 14057 } 14058 14059 .footer__social-link svg { 14060 width: 2.2rem; 14061 height: 2.2rem; 14062 } 14063 } 14064</style> 14065 14066<footer class="footer color-scheme-6a78ef8d-1d91-48a0-9209-c3a4f3707bce gradient section-sections--28630589571442__footer-padding"><div class="footer__main-content"> 14067 <!-- Menu columns --><div class="footer__menu-column" ><div class="footer__menu-heading"><strong>Shop</strong></div><ul class="footer__menu-list"><li> 14068 <a href="/collections/wall-vent" class="footer__menu-link">Wall / Ceiling Vents</a> 14069 </li><li> 14070 <a href="/collections/floor" class="footer__menu-link">Floor Vents</a> 14071 </li><li> 14072 <a href="/collections/mounts" class="footer__menu-link">Mounts</a> 14073 </li><li> 14074 <a href="/collections/accessories" class="footer__menu-link">Accessories</a> 14075 </li><li> 14076 <a href="/collections/all" class="footer__menu-link">Shop All</a> 14077 </li></ul> 14078 </div><div class="footer__menu-column" ><div class="footer__menu-heading"><strong>Help</strong></div><ul class="footer__menu-list"><li> 14079 <a href="/pages/contact" class="footer__menu-link">Contact Us</a> 14080 </li><li> 14081 <a href="/pages/returns-exchanges" class="footer__menu-link">Returns + Exchanges</a> 14082 </li><li> 14083 <a href="/pages/customize-materials" class="footer__menu-link">Customize Materials</a> 14084 </li><li> 14085 <a href="/pages/warranty" class="footer__menu-link">Warranty</a> 14086 </li><li> 14087 <a href="/pages/faq" class="footer__menu-link">FAQ</a> 14088 </li></ul> 14089 </div><!-- Newsletter section --> 14090 <div class="footer__newsletter-section"><div class="footer__newsletter-heading"><strong>Join our newsletter</strong></div><form method="post" action="/contact#ContactFooter" id="ContactFooter" accept-charset="UTF-8" class="footer__newsletter-form"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /><input type="hidden" name="contact[tags]" value="newsletter"> 14091 <input 14092 id="NewsletterForm--sections--28630589571442__footer" 14093 type="email" 14094 name="contact[email]" 14095 class="footer__newsletter-input" 14096 value="" 14097 aria-required="true" 14098 autocorrect="off" 14099 autocapitalize="off" 14100 autocomplete="email" 14101 14102 placeholder="Email Address" 14103 required 14104 > 14105 <button type="submit" class="footer__newsletter-button" aria-label="Subscribe"> 14106 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 14107 <line x1="5" y1="12" x2="19" y2="12"></line> 14108 <polyline points="12 5 19 12 12 19"></polyline> 14109 </svg> 14110 </button></form><div class="footer__social-icons"><a href="https://www.facebook.com/fittes/" class="footer__social-link" aria-label="Facebook (opens in new tab)" target="_blank" rel="noopener noreferrer"> 14111 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path></svg> 14112 </a><a href="https://x.com/fittesco" class="footer__social-link" aria-label="X (Twitter) (opens in new tab)" target="_blank" rel="noopener noreferrer"> 14113 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"></path></svg> 14114 </a><a href="https://www.instagram.com/fittes/" class="footer__social-link" aria-label="Instagram (opens in new tab)" target="_blank" rel="noopener noreferrer"> 14115 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line></svg> 14116 </a><a href="https://www.youtube.com/channel/UC6Z3b0jfeKE3KaOuTxUrEog/featured" class="footer__social-link" aria-label="YouTube (opens in new tab)" target="_blank" rel="noopener noreferrer"> 14117 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"></path></svg> 14118 </a><a href="https://www.tiktok.com/@fittesofficial" class="footer__social-link" aria-label="TikTok (opens in new tab)" target="_blank" rel="noopener noreferrer"> 14119 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M19.59 6.69a4.83 4.83 0 0 1-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 0 1-5.2 1.74 2.89 2.89 0 0 1 2.31-4.64 2.93 2.93 0 0 1 .88.13V9.4a6.84 6.84 0 0 0-1-.05A6.33 6.33 0 0 0 5 20.1a6.34
141196.34 0 0 0 10.86-4.43v-7a8.16 8.16 0 0 0 4.77 1.52v-3.4a4.85 4.85 0 0 1-1-.1z"></path></svg> 14120 </a><a href="https://ca.pinterest.com/fittesofficial/" class="footer__social-link" aria-label="Pinterest (opens in new tab)" target="_blank" rel="noopener noreferrer"> 14121 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0a12 12 0 0 0-4.37 23.17c-.1-.94-.2-2.4.04-3.44l1.4-5.96s-.37-.74-.37-1.82c0-1.7 1-2.97 2.23-2.97 1.05 0 1.56.79 1.56 1.74 0 1.06-.68 2.64-1.03 4.11-.29 1.24.62 2.25 1.84 2.25 2.2 0 3.9-2.33 3.9-5.7 0-2.97-2.14-5.05-5.2-5.05-3.54 0-5.61 2.65-5.61 5.4 0 1.07.41 2.22.93 2.85a.37.37 0 0 1 .09.36l-.35 1.4c-.05.23-.18.28-.42.17-1.56-.73-2.53-3-2.53-4.84 0-3.94 2.86-7.56 8.26-7.56 4.34 0 7.7 3.09 7.7 7.22 0 4.31-2.72 7.79-6.5 7.79-1.27 0-2.46-.66-2.87-1.44l-.78 2.98c-.28 1.1-1.05 2.47-1.56 3.31A12 12 0 1 0 12 0z"></path></svg> 14122 </a><a href="https://www.linkedin.com/company/fittes/" class="footer__social-link" aria-label="LinkedIn (opens in new tab)" target="_blank" rel="noopener noreferrer"> 14123 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"></path></svg> 14124 </a></div></div> 14125 14126 <!-- Logo column --><div class="footer__logo-column"> 14127 <div class="footer__logo"> 14128 <img 14129 src="//fittes.ca/cdn/shop/files/Mask_group_2.png?v=1743054521&width=400" 14130 alt="Fittes ð" 14131 width="200" 14132 height="118" 14133 loading="lazy" 14134 > 14135 </div> 14136 </div></div> 14137 14138 <!-- Bottom bar --> 14139 <div class="footer__bottom-bar"> 14140 <div class="footer__bottom-content"><div class="footer__bottom-links"> 14141 <ul class="footer__bottom-links-list"><li class="footer__bottom-links-item"> 14142 <a href="/pages/privacy-policy" class="footer__bottom-link">Privacy Policy</a> 14143 </li><li class="footer__bottom-links-item"> 14144 <a href="/pages/terms-of-service" class="footer__bottom-link">Terms of Service</a> 14145 </li><li class="footer__bottom-links-item"> 14146 <a href="/pages/patents-1" class="footer__bottom-link">Patents</a> 14147 </li></ul> 14148 </div></div> 14149 14150 <div class="footer__copyright-row"> 14151 <span class="footer__copyright">Copyright © 2026 Fittes ð.</span> 14152 </div> 14153 </div> 14154 14155
14155<script> 14156 (function () { 14157 if (!('IntersectionObserver' in window)) return; 14158 14159 var HIDDEN_CLASS = 'smile-hidden-over-footer'; 14160 var TRANSITION_CLASS = 'smile-transition-ready'; 14161 var intersectionObserver = null; 14162 var mutationObserver = null; 14163 var smileElements = []; 14164 14165 function findSmileElements() { 14166 var found = []; 14167 14168 // Known container IDs Smile has used across themes 14169 ['smile-ui-lite-container', 'smile-ui-container'].forEach(function (id) { 14170 var el = document.getElementById(id); 14171 if (el && found.indexOf(el) === -1) found.push(el); 14172 }); 14173 14174 // Fallback: locate the launcher iframe by title and grab a sensible container 14175 var iframe = document.querySelector( 14176 'iframe[title*="loyalty program" i], iframe[title*="Smile" i], iframe[title*="Rewards" i]' 14177 ); 14178 if (iframe) { 14179 var container = 14180 iframe.closest('[id*="smile" i]') || 14181 iframe.closest('[class*="smile" i]') || 14182 iframe.parentElement; 14183 if (container && found.indexOf(container) === -1) found.push(container); 14184 } 14185 14186 return found; 14187 } 14188 14189 function setupObserver() { 14190 var footer = document.querySelector('.footer'); 14191 if (!footer) return false; 14192 14193 smileElements = findSmileElements(); 14194 if (smileElements.length === 0) return false; 14195 14196 // Apply the transition class permanently so fade works in BOTH directions 14197 smileElements.forEach(function (el) { 14198 el.classList.add(TRANSITION_CLASS); 14199 }); 14200 14201 if (intersectionObserver) intersectionObserver.disconnect(); 14202 14203 intersectionObserver = new IntersectionObserver( 14204 function (entries) { 14205 var isVisible = entries[0].isIntersecting; 14206 smileElements.forEach(function (el) { 14207 el.classList.toggle(HIDDEN_CLASS, isVisible); 14208 }); 14209 }, 14210 { rootMargin: '0px', threshold: 0.01 } 14211 ); 14212 14213 intersectionObserver.observe(footer); 14214 return true; 14215 } 14216 14217 function init() { 14218 // Try immediately â works if Smile already injected 14219 if (setupObserver()) return; 14220 14221 // Otherwise watch for Smile to inject itself 14222 mutationObserver = new MutationObserver(function () { 14223 if (setupObserver()) { 14224 mutationObserver.disconnect(); 14225 mutationObserver = null; 14226 } 14227 }); 14228 mutationObserver.observe(document.body, { childList: true, subtree: true }); 14229 14230 // Give up after 15s so we're not watching forever 14231 setTimeout(function () { 14232 if (mutationObserver) { 14233 mutationObserver.disconnect(); 14234 mutationObserver = null; 14235 } 14236 }, 15000); 14237 } 14238 14239 if ('requestIdleCallback' in window) { 14240 requestIdleCallback(init, { timeout: 1000 }); 14241 } else { 14242 setTimeout(init, 500); 14243 } 14244 })(); 14245 </script>
14245 14246</footer> 14247 14248 14249</div> 14250<!-- END sections: footer-group --> 14251 14252 <ul hidden> 14253 <li id="a11y-refresh-page-message">Choosing a selection results in a full page refresh.</li> 14254 <li id="a11y-new-window-message">Opens in a new window.</li> 14255 </ul> 14256 14257
14257<script> 14258 window.shopUrl = 'https://fittes.ca' 14259 window.routes = { 14260 cart_add_url: '/cart/add', 14261 cart_change_url: '/cart/change', 14262 cart_update_url: '/cart/update', 14263 cart_url: '/cart', 14264 predictive_search_url: '/search/suggest' 14265 } 14266 14267 window.cartStrings = { 14268 error: `There was an error while updating your cart. Please try again.`, 14269 quantityError: `You can only add [quantity] of this item to your cart.` 14270 } 14271 14272 window.variantStrings = { 14273 addToCart: `Add to cart`, 14274 soldOut: `Sold out`, 14275 unavailable: `Unavailable`, 14276 unavailable_with_option: `[value] - Unavailable` 14277 } 14278 14279 window.quickOrderListStrings = { 14280 itemsAdded: `[quantity] items added`, 14281 itemAdded: `[quantity] item added`, 14282 itemsRemoved: `[quantity] items removed`, 14283 itemRemoved: `[quantity] item removed`, 14284 viewCart: `View cart`, 14285 each: `[money]/ea`, 14286 min_error: `This item has a minimum of [min]`, 14287 max_error: `This item has a maximum of [max]`, 14288 step_error: `You can only add this item in increments of [step]` 14289 } 14290 14291 window.accessibilityStrings = { 14292 imageAvailable: `Image [index] is now available in gallery view`, 14293 shareSuccess: `Link copied to clipboard`, 14294 pauseSlideshow: `Pause slideshow`, 14295 playSlideshow: `Play slideshow`, 14296 recipientFormExpanded: `Gift card recipient form expanded`, 14297 recipientFormCollapsed: `Gift card recipient form collapsed`, 14298 countrySelectorSearchCount: `[count] countries/regions found` 14299 } 14300 </script>
14300<script src="//fittes.ca/cdn/shop/t/139/assets/predictive-search.js?v=100525875448097398651788881701" defer="defer"></script>
14300<script src="//fittes.ca/cdn/shop/t/139/assets/cart-drawer.js?v=169981311261118214701788881617" defer="defer"></script>
14300<link href="//fittes.ca/cdn/shop/t/139/assets/swiper-bundle.min.css?v=39633872178562917471788881719" rel="stylesheet" type="text/css" media="all" /> 14301 14302 14303 14304 14305 <style> @media (min-width: 1200px) {.product-card-wrapper .card--media .card__inner .card__content {height: auto; width: 23vw; } .product-card-wrapper .card--media .card__inner .card__media > img {height: auto; width: 23vw; } .page-width {padding: 0rem !important; }} @media (max-width: 768px) {.product-card-wrapper .card--media .card__inner .card__content {height: auto; width: 43vw; } .product-card-wrapper .card--media .card__inner .card__media > img {height: auto; width: 43vw; }} @media screen and (min-width: 750px) {.section-template--23517284663663__product-grid-padding {padding-right: 4rem; }} @media screen and (min-width: 750px) {.facets-vertical .facets-wrapper {padding-left: 1.5rem; padding-right: 1.5rem; }} @media screen and (min-width: 750px) {.card--standard > .card__content {padding: 1rem; } .facets-vertical-sort {margin-left: 4% !important; } .banner__content.banner__content--middle-center {margin-left: 4%; }} .page-width {margin: 0 auto;} .list-item-content {display: grid !important;} </style> 14306<div id="shopify-block-AamtXSzloQkRZWXVoN__5483944384444890901" class="shopify-block shopify-app-block">
14306<script> 14307 // Cart extensions 14308 window.pickystory = window.pickystory || {} 14309 const tryParseJSON = encoded => { 14310 try { 14311 return JSON.parse(encoded) 14312 } catch { 14313 return null 14314 } 14315 }; 14316 window.pickystory.widgetSettings = { 14317 pickyCart: { 14318 enabled: 'true' === 'true', 14319 buttonReplacing: { 14320 selector: tryParseJSON('null'), 14321 }, 14322 counterReplacing: { 14323 selector: tryParseJSON('null'), 14324 template: tryParseJSON('"${count} items"'), 14325 }, 14326 popupHiding: { 14327 style: tryParseJSON('null'), 14328 }, 14329 customHtmlSlot: "\u003cscript\u003e\n(() =\u003e {\n \/* Script 1: UI fixes + hide duplicate PDP product in FBT + stable show\/hide 2nd vs 3rd item (no flicker) *\/\n\n if (window.__FBT_TITLE_BASIC_V1__) return;\n window.__FBT_TITLE_BASIC_V1__ = true;\n\n\n\/\/ --- Scope: run everywhere EXCEPT these product pages ---\nconst EXCLUDE_PATHS = [\n '\/products\/flush-exhaust-mount-luxe',\n '\/products\/whisperceiling®-dcâ¢-ventilation-fan-110-130-150-cfm',\n '\/products\/flush-exhaust-mount-lite',\n '\/products\/whispervalue®-dcâ¢-ideal-single-multi-family-solution-50-80-or-100-cfm'\n];\n\n\/\/ normalize pathname to be safe with â¢\/® (some browsers keep them encoded)\nconst normalizePath = (p) =\u003e {\n const raw = (p || '').split('?')[0].replace(\/\\\/$\/, '');\n let decoded = raw;\n try { decoded = decodeURIComponent(raw); } catch (_) {}\n return { raw, decoded };\n};\n\nconst shouldRunHere = () =\u003e {\n const { raw, decoded } = normalizePath(location.pathname);\n\n return !EXCLUDE_PATHS.some((ex) =\u003e {\n const exNorm = normalizePath(ex);\n \/\/ match either encoded or decoded forms + allow trailing stuff like variant params\n return raw.startsWith(exNorm.raw) || decoded.startsWith(exNorm.decoded);\n });\n};\n\nif (!shouldRunHere()) return;\n\n\n\n\n const SEL = {\n \/\/ FBT\n fbtRoot: '.picky-fbt-inline__content',\n fbtItem: '.picky-fbt-inline__item',\n fbtTitleInner: '.picky-product-card__title [class*=\"_inner_\"]',\n\n \/\/ PDP title (your selector)\n pdpTitle: '.product__title.small-hide',\n\n \/\/ FBT Wrapper\n wrapperInner: '.picky-fbt-inline__content [class*=\"_wrapperInner_\"]',\n\n \/\/ Separators\n sepAny: '[class*=\"_separator_\"], ._separator_',\n\n \/\/ State\n preorderBtn: '.restock-rocket-preorder-button, .product-form__buttons .restock-rocket-preorder-button',\n\n \/\/ Triggers\n productForm: 'form[action^=\"\/cart\/add\"]',\n productInfo: '.product__info-container'\n };\n\n \/\/ 1) Always hide separators via CSS\n (() =\u003e {\n const style = document.createElement('style');\n style.textContent = `\n ${SEL.fbtRoot} ${SEL.sepAny} {\n display: none !important;\n pointer-events: none !important;\n visibility: hidden !important;\n }\n .picky-fbt-inline__content [class*=\"_wrapperInner_\"]{\n justify-content: center !important;\n }\n\n \/* Remove the checkmark AND reclaim its space *\/\n .picky-fbt-inline__content .picky-product-card__checker {\n display: none !important;\n }\n\n \/* If the card reserves left space for the checker, remove it *\/\n .picky-fbt-inline__content .picky-product-card {\n padding-left: 0 !important;\n margin-left: 0 !important;\n }\n\n \/* If the card is grid-based and reserves a first column (common in widgets), collapse it *\/\n .picky-fbt-inline__content .picky-product-card {\n grid-template-columns: 1fr !important;\n }\n `;\n document.head.appendChild(style);\n })();\n\n const clean = (s) =\u003e\n (s || '')\n .replace(\/\\u00A0\/g, ' ')\n .replace(\/\\s+\/g, ' ')\n .trim();\n\n const firstLine = (s) =\u003e\n (s || '')\n .replace(\/\\u00A0\/g, ' ')\n .split('\\n')\n .map(l =\u003e clean(l))\n .filter(Boolean)[0] || '';\n\n \/\/ IMPORTANT: exact matching but normalized (spaces\/case\/nbsp\/newline)\n const normTitle = (s) =\u003e clean(firstLine(s)).toLowerCase();\n\n const isVisible = (el) =\u003e {\n if (!el) return false;\n const cs = getComputedStyle(el);\n if (cs.display === 'none' || cs.visibility === 'hidden' || cs.opacity === '0') return false;\n return el.getClientRects().length \u003e 0;\n };\n\n const resetHides = (root) =\u003e {\n root\n .querySelectorAll(`${SEL.fbtItem}[data-fbt-hidden=\"1\"], ${SEL.fbtItem}[data-fbt-show=\"0\"]`)\n .forEach((it) =\u003e {\n it.style.removeProperty('display');\n it.removeAttribute('data-fbt-hidden');\n it.removeAttribute('data-fbt-show');\n });\n };\n\n const hide = (el, attr) =\u003e {\n if (!el) return;\n el.style.setProperty('display', 'none', 'important');\n el.setAttribute(attr, '1');\n };\n\n const show = (el) =\u003e {\n if (!el) return;\n el.style.removeProperty('display');\n el.setAttribute('data-fbt-show', '1');\n };\n\n const hideSepsRuntime = (root) =\u003e {\n if (!root) return;
14329\n root.querySelectorAll(SEL.sepAny).forEach((el) =\u003e {\n el.style.setProperty('display', 'none', 'important');\n el.style.setProperty('pointer-events', 'none', 'important');\n el.style.setProperty('visibility', 'hidden', 'important');\n });\n };\n\n const isPreorderActive = () =\u003e {\n const btn = document.querySelector(SEL.preorderBtn);\n return isVisible(btn);\n };\n\n const hidePdpItemInFbtByTitle = (items) =\u003e {\n const pdpTitleEl = document.querySelector(SEL.pdpTitle);\n const pdpT = normTitle(pdpTitleEl?.textContent || pdpTitleEl?.innerText || '');\n if (!pdpT) return;\n\n for (const it of items) {\n const tEl = it.querySelector(SEL.fbtTitleInner);\n const t = normTitle(tEl?.textContent || tEl?.innerText || '');\n if (t \u0026\u0026 t === pdpT) {\n hide(it, 'data-fbt-hidden');\n return;\n }\n }\n };\n\n const run = () =\u003e {\n const root = document.querySelector(SEL.fbtRoot);\n if (!root) return;\n\n hideSepsRuntime(root);\n resetHides(root);\n\n const items = [...root.querySelectorAll(SEL.fbtItem)];\n if (items.length \u003c 3) return;\n\n hidePdpItemInFbtByTitle(items);\n\n const remaining = items.filter(it =\u003e it.getAttribute('data-fbt-hidden') !== '1');\n if (remaining.length \u003c 2) return;\n\n const other = remaining[0];\n const compC = remaining[remaining.length - 1];\n\n const preorder = isPreorderActive();\n\n if (preorder) {\n show(other);\n hide(compC, 'data-fbt-show');\n } else {\n hide(other, 'data-fbt-show');\n show(compC);\n }\n };\n\n let raf = 0;\n const tick = () =\u003e {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(run);\n };\n\n const tickSoon = () =\u003e {\n tick();\n setTimeout(tick, 120);\n setTimeout(tick, 320);\n };\n\n const attach = () =\u003e {\n const root = document.querySelector(SEL.fbtRoot);\n if (!root) return false;\n\n tickSoon();\n\n const moFbt = new MutationObserver(() =\u003e tickSoon());\n moFbt.observe(root, { subtree: true, childList: true, attributes: true });\n\n document.addEventListener('change', (e) =\u003e {\n if (e.target?.closest(SEL.productForm) || e.target?.closest(SEL.productInfo)) tickSoon();\n }, true);\n\n document.addEventListener('click', (e) =\u003e {\n if (e.target?.closest(SEL.productInfo)) tickSoon();\n }, true);\n\n const form = document.querySelector(SEL.productForm) || document.querySelector(SEL.productInfo);\n if (form) {\n const moForm = new MutationObserver(() =\u003e tickSoon());\n moForm.observe(form, { subtree: true, childList: true, attributes: true });\n }\n\n const _push = history.pushState;\n const _replace = history.replaceState;\n history.pushState = function () { _push.apply(this, arguments); tickSoon(); };\n history.replaceState = function () { _replace.apply(this, arguments); tickSoon(); };\n window.addEventListener('popstate', tickSoon);\n\n return true;\n };\n\n if (attach()) return;\n\n const boot = new MutationObserver(() =\u003e {\n if (attach()) boot.disconnect();\n });\n boot.observe(document.documentElement, { childList: true, subtree: true });\n setTimeout(() =\u003e boot.disconnect(), 15000);\n})();\n\n\n(() =\u003e {\n \/* Script 2 (stable)*\/\n\n if (window.__FBT_SYNC_DAWN_ONECHECK_V2__) return;\n window.__FBT_SYNC_DAWN_ONECHECK_V2__ = true;\n\n\n\n\/\/ --- Scope: run everywhere EXCEPT these product pages ---\nconst EXCLUDE_PATHS = [\n '\/products\/flush-exhaust-mount-luxe',\n '\/products\/whisperceiling®-dcâ¢-ventilation-fan-110-130-150-cfm',\n '\/products\/flush-exhaust-mount-lite',\n '\/products\/whispervalue®-dcâ¢-ideal-single-multi-family-solution-50-80-or-100-cfm'\n];\n\n\/\/ normalize pathname to be safe with â¢\/® (some browsers keep them encoded)\nconst normalizePath = (p) =\u003e {\n const raw = (p || '').split('?')[0].replace(\/\\\/$\/, '');\n let decoded = raw;\n try { decoded = decodeURIComponent(raw); } catch (_) {}\n return { raw, decoded };\n};\n\nconst shouldRunHere = () =\u003e {\n const { raw, decoded } = normalizePath(location.pathname);\n\n return !EXCLUDE_PATHS.some((ex) =\u003e {\n const exNorm = normalizePath(ex);\n \/\/ match either encoded or decoded forms + allow trailing stuff like variant params\n return raw.startsWith(exNorm.raw) || decoded.startsWith(exNorm.decoded);\n });\n};\n\nif (!shouldRunHere()) return;\n\n\n\n\n const SEL = {\n fbtRoot: '.picky-fbt-inline__content',\n fbtItem: '.picky-fbt-inline__item',\n fbtOption: '.picky-option[data-option-name]',\n fbtPill: 'button.picky-pill__item',\n checker: '.picky-product-card__checker',\n\n pdpFieldset: 'fieldset.product-form__input',\n pdpLegend: 'legend.form__label',\n pdpRadio: 'input[type=\"radio\"]'\n };\n\n const clean = (s) =\u003e (s || '').replace(\/\\u00A0\/g, ' ').replace(\/\\s+\/g, ' ').trim();\n const key = (s) =\u003e clean(s).toLowerCase();\n\n const simulate = (el) =\u003e {\n if (!el) return false;\n const o = { bubbles: true, cancelable: true, composed: true, view: window };\n try { el.dispatchEvent(new PointerEvent('pointerdown', o)); } catch(_) {}\n try { el.dispatchEvent(new MouseEvent('mousedown', o)); } catch(_) {}\n try { el.dispatchEvent(new MouseEvent('mouseup', o)); } catch(_) {}\n try { el.dispatchEvent(new MouseEvent('click', o)); } catch(_) {}\n try { el.click(); } catch(_) {}\n return true;\n };\n\n \/\/ --- DAWN: lock focus scroll (culprit in trace) ---\n const withDawnNoJump = (fn) =\u003e {\n const x = window.scrollX;\n const y = window.scrollY;
14329\n\n const oldFocus = HTMLElement.prototype.focus;\n const oldSIV = Element.prototype.scrollIntoView;\n\n HTMLElement.prototype.focus = function (opts) {\n try {\n const next = (opts \u0026\u0026 typeof opts === 'object')\n ? { ...opts, preventScroll: true }\n : { preventScroll: true };\n return oldFocus.call(this, next);\n } catch (_) {\n return oldFocus.call(this);\n }\n };\n\n Element.prototype.scrollIntoView = function () {};\n\n const restore = () =\u003e {\n HTMLElement.prototype.focus = oldFocus;\n Element.prototype.scrollIntoView = oldSIV;\n };\n\n try {\n fn();\n } finally {\n setTimeout(restore, 900);\n requestAnimationFrame(() =\u003e window.scrollTo(x, y));\n setTimeout(() =\u003e window.scrollTo(x, y), 30);\n setTimeout(() =\u003e window.scrollTo(x, y), 120);\n setTimeout(() =\u003e window.scrollTo(x, y), 260);\n setTimeout(() =\u003e window.scrollTo(x, y), 520);\n }\n };\n \/\/ ------------------------------------------------\n\n const isSelectedPill = (pill) =\u003e pill?.getAttribute('data-option-value-is-selected') === 'true';\n const isAvailablePill = (pill) =\u003e {\n const v = pill?.getAttribute('data-option-value-is-available');\n return v ? v === 'true' : true;\n };\n\n const getChecker = (item) =\u003e item?.querySelector?.(SEL.checker) || null;\n const isCheckerChecked = (checker) =\u003e\n !!checker \u0026\u0026 (checker.getAttribute('aria-checked') === 'true' || checker.className.includes('_checker_checked_'));\n\n const clickChecker = (checker) =\u003e {\n if (!checker) return;\n try { checker.click(); } catch (_) {}\n };\n\n \/\/ Visible items (Script 1 hides the rest)\n const getVisibleFbtItems = () =\u003e {\n const root = document.querySelector(SEL.fbtRoot);\n if (!root) return [];\n return [...root.querySelectorAll(SEL.fbtItem)].filter(it =\u003e {\n if (it.getAttribute('data-fbt-hidden') === '1') return false;\n if (it.getAttribute('data-fbt-conditional-hidden') === '1') return false;\n if (getComputedStyle(it).display === 'none') return false;\n return true;\n });\n };\n\n \/\/ enforce exactly one checked item (the visible one)\n const enforceSingleVisibleChecked = () =\u003e {\n const root = document.querySelector(SEL.fbtRoot);\n if (!root) return;\n\n const items = [...root.querySelectorAll(SEL.fbtItem)];\n if (!items.length) return;\n\n const visible = getVisibleFbtItems();\n const keep = visible[0] || null;\n\n for (const it of items) {\n const c = getChecker(it);\n const checked = isCheckerChecked(c);\n if (!keep || it !== keep) {\n if (checked) clickChecker(c);\n }\n }\n\n if (keep) {\n const c = getChecker(keep);\n if (c \u0026\u0026 !isCheckerChecked(c)) clickChecker(c);\n }\n };\n\n const enforceSoon = () =\u003e {\n enforceSingleVisibleChecked();\n setTimeout(enforceSingleVisibleChecked, 60);\n setTimeout(enforceSingleVisibleChecked, 200);\n };\n\n \/\/ Visible swap detection (by visible titles)\n let lastVisibleSig = '';\n const getVisibleSig = () =\u003e {\n const items = getVisibleFbtItems();\n if (!items.length) return '(none)';\n return items\n .map(it =\u003e clean(it.querySelector('.picky-product-card__title [class*=\"_inner_\"]')?.textContent || ''))\n .join('|');\n };\n\n const findPillInItem = (itemEl, optName, valueName) =\u003e {\n const opt = [...itemEl.querySelectorAll(SEL.fbtOption)]\n .find(o =\u003e key(o.getAttribute('data-option-name')) === key(optName));\n if (!opt) return null;\n\n const v = clean(valueName);\n const byAttr = opt.querySelector(`${SEL.fbtPill}[data-option-value-name=\"${CSS.escape(v)}\"]`);\n if (byAttr) return byAttr;\n\n const pills = [...opt.querySelectorAll(SEL.fbtPill)];\n return pills.find(b =\u003e clean(b.textContent) === v) || null;\n };\n\n \/\/ PDP option discovery\n const getActiveFormId = () =\u003e {\n const radios = [...document.querySelectorAll(`${SEL.pdpFieldset} ${SEL.pdpRadio}[form]`)];\n const ids = [...new Set(radios.map(r =\u003e r.getAttribute('form')).filter(
14329Boolean))];\n for (const id of ids) {\n const form = document.getElementById(id);\n if (form \u0026\u0026 form.offsetParent !== null) return id;\n }\n return ids[0] || null;\n };\n\n const getPdpFieldsets = () =\u003e {\n const formId = getActiveFormId();\n const all = [...document.querySelectorAll(SEL.pdpFieldset)];\n if (!formId) return all;\n return all.filter(fs =\u003e fs.querySelector(`${SEL.pdpRadio}[form=\"${CSS.escape(formId)}\"]`));\n };\n\n const getPdpSelections = () =\u003e {\n const out = Object.create(null);\n getPdpFieldsets().forEach(fs =\u003e {\n const name = clean(fs.querySelector(SEL.pdpLegend)?.textContent);\n if (!name) return;\n const checked = fs.querySelector(`${SEL.pdpRadio}:checked`);\n if (!checked) return;\n out[key(name)] = clean(checked.value);\n });\n return out;\n };\n\n \/\/ KEEP (not used anymore but harmless if left here)\n const setPdpOption_NoJump = (optName, optValue) =\u003e {\n \/\/ Intentionally unused (FBT -\u003e PDP removed)\n return false;\n };\n\n \/\/ ---- Sync control ----\n let fromPdp = false;\n let fromFbt = false;\n\n let lastAppliedKey = '';\n let syncTimer = 0;\n const SYNC_DELAY = 120;\n\n \/\/ Trusted click gating\n let lastTrustedPill = null;\n let lastTrustedPillAt = 0;\n const TRUST_WINDOW_MS = 900;\n\n const clearTrusted = () =\u003e {\n lastTrustedPill = null;\n lastTrustedPillAt = 0;\n };\n\n const applyPdpToFbtNow = () =\u003e {\n if (fromFbt) return;\n\n const items = getVisibleFbtItems();\n if (!items.length) return;\n\n const sel = getPdpSelections();\n const curKey = JSON.stringify(sel);\n\n if (curKey \u0026\u0026 curKey === lastAppliedKey) {\n enforceSoon();\n return;\n }\n\n fromPdp = true;\n\n try {\n Object.keys(sel).forEach(optKey =\u003e {\n const val = sel[optKey];\n items.forEach(item =\u003e {\n const pill = findPillInItem(item, optKey, val);\n if (!pill) return;\n if (!isAvailablePill(pill)) return;\n if (isSelectedPill(pill)) return;\n simulate(pill);\n });\n });\n\n lastAppliedKey = curKey;\n\n setTimeout(enforceSoon, 0);\n setTimeout(enforceSoon, 120);\n setTimeout(enforceSoon, 300);\n } finally {\n setTimeout(() =\u003e { fromPdp = false; }, 180);\n }\n };\n\n const schedulePdpToFbtSync = () =\u003e {\n clearTimeout(syncTimer);\n syncTimer = setTimeout(applyPdpToFbtNow, SYNC_DELAY);\n };\n\n \/\/ â
CHANGED: trusted FBT selection no longer changes PDP\n const onFbtSelectedTrusted = (_pill) =\u003e {\n \/\/ Do nothing to PDP.\n \/\/ Only keep our âone visible checkedâ rule after the widget updates.\n setTimeout(enforceSoon, 0);\n setTimeout(enforceSoon, 120);\n setTimeout(enforceSoon, 300);\n };\n\n const attach = () =\u003e {\n const fbt = document.querySelector(SEL.fbtRoot);\n if (!fbt || !fbt.querySelector(SEL.fbtPill)) return false;\n\n enforceSoon();\n schedulePdpToFbtSync();\n\n fbt.addEventListener('pointerdown', (e) =\u003e {\n const p = e.target?.closest?.(SEL.fbtPill);\n if (e.isTrusted) {\n lastTrustedPill = p || null;\n lastTrustedPillAt = Date.now();\n }\n }, true);\n\n const moPills = new MutationObserver((muts) =\u003e {\n if (fromPdp) return;\n\n for (const m of muts) {\n if (m.type !== 'attributes') continue;\n if (m.attributeName !== 'data-option-value-is-selected') continue;\n\n const el = m.target;\n if (!(el instanceof Element)) continue;\n if (!el.matches(SEL.fbtPill)) continue;\n\n if (el.getAttribute('data-option-value-is-selected') === 'true') {\n const now = Date.now();\n const isTrustedPick =\n !!lastTrustedPill \u0026\u0026\n (el === lastTrustedPill) \u0026\u0026\n (now - lastTrustedPillAt \u003c= TRUST_WINDOW_MS);\n\n clearTrusted();\n\n if (isTrustedPick) onFbtSelectedTrusted(el);\n break;\n }\n }\n });\n\n moPills.observe(fbt, {\n subtree: true,\n attributes: true,\n attributeFilter: ['data-option-value-is-selected']\n });\n\n lastVisibleSig = getVisibleSig();\n\n const moVisible = new MutationObserver((muts) =\u003e {\n if (fromPdp || fromFbt) return;\n\n let relevant = false;\n for (const m of muts) {\n if (m.type !== 'attributes') continue;\n const t = m.target;\n if (!(t instanceof Element)) continue;\n if (!t.matches(SEL.fbtItem)) continue;\n\n if (\n m.attributeName === 'style' ||\n m.attributeName === 'data-fbt-hidden' ||\n m.attributeName === 'data-fbt-conditional-hidden'\n ) {\n relevant = true;\n break;\n }\n }\n if (!relevant) return;\n\n const sig = getVisibleSig();\n if (sig \u0026\u0026 sig !== lastVisibleSig) {\n lastVisibleSig = sig;\n\n clearTrusted();\n\n lastAppliedKey = '';\n schedulePdpToFbtSync();\n\n enforceSoon();\n } else {\n enforceSoon();\n }\n });\n\n moVisible.observe(fbt, {\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'data-fbt-hidden', 'data-fbt-conditional-hidden']\n });\n\n document.addEventListener('change', (e) =\u003e {\n if (fromFbt) return;\n const t = e.target;\n if (t \u0026\u0026 t.matches(`${SEL.pdpFieldset} ${SEL.pdpRadio}`)) {\n clearTrusted();\n schedulePdpToFbtSync();\n enforceSoon();\n }\n }, true);\n\n document.addEventListener('click', (e) =\u003e {\n if (fromFbt) return;\n const lbl = e.target?.closest?.(`${SEL.pdpFieldset} label[for]`);\n if (lbl) {\n clearTrusted();\n schedulePdpToFbtSync();\n enforceSoon();\n }\n }, true);\n\n return true;\n };\n\n if (attach()) return;\n\n const boot = new MutationObserver(() =\u003e {\n if (attach()) boot.disconnect();\n });\n boot.observe(document.documentElement, { childList: true, subtree: true });\n setTimeout(() =\u003e boot.disconnect(), 15000);\n})();\n\n\n\/*Script 3*\/\n(() =\u003e {\n if (window.__FBT_INLINE_TOTAL_PRICE_V1__) return;\n window.__FBT_INLINE_TOTAL_PRICE_V1__ = true;\n\n\n\n\/\/ --- Scope: run everywhere EXCEPT these product pages ---\nconst EXCLUDE_PATHS = [\n '\/products\/flush-exhaust-mount-luxe',\n '\/products\/whisperceiling®-dcâ¢-ventilation-fan-110-130-150-cfm',\n '\/products\/flush-exhaust-mount-lite',\n '\/products\/whispervalue®-dcâ¢-ideal-single-multi-family-solution-50-80-or-100-cfm'\n];\n\n\/\/ normalize pathname to be safe with â¢\/® (some browsers keep them encoded)\nconst normalizePath
14329= (p) =\u003e {\n const raw = (p || '').split('?')[0].replace(\/\\\/$\/, '');\n let decoded = raw;\n try { decoded = decodeURIComponent(raw); } catch (_) {}\n return { raw, decoded };\n};\n\nconst shouldRunHere = () =\u003e {\n const { raw, decoded } = normalizePath(location.pathname);\n\n return !EXCLUDE_PATHS.some((ex) =\u003e {\n const exNorm = normalizePath(ex);\n \/\/ match either encoded or decoded forms + allow trailing stuff like variant params\n return raw.startsWith(exNorm.raw) || decoded.startsWith(exNorm.decoded);\n });\n};\n\nif (!shouldRunHere()) return;\n\n\n\n\n const SEL = {\n root: '.picky-fbt-inline__content',\n\n \/\/ Hide these\n pricesWrap: '.picky-product-card__footer .picky-product-card__prices-wrapper',\n totals: '.picky-totals',\n\n \/\/ â
Price source you want\n cardPrice: '.picky-product-card__price',\n\n \/\/ Button + insertion point\n btn: '.picky-button.picky-fbt-inline__button',\n btnContent: '.picky-button.picky-fbt-inline__button .picky-button__content',\n btnTextSpan: '.picky-button.picky-fbt-inline__button .picky-button__content span'\n };\n\n \/\/ 1) CSS: hide the two price blocks + tiny spacing style for the inline price\n (() =\u003e {\n const style = document.createElement('style');\n style.textContent = `\n ${SEL.root} ${SEL.pricesWrap},\n ${SEL.root} ${SEL.totals} {\n display: none !important;\n }\n\n .fbt-inline-total-price {\n white-space: nowrap;\n margin-left: 8px;\n opacity: 0.9;\n }\n\n .picky-widget.picky-fbt-inline .picky-totals {\n display: none;\n }\n\n .fbt-inline-total-price__sep {\n margin: 0 8px;\n opacity: 0.6;\n }\n `;\n document.head.appendChild(style);\n })();\n\n const clean = (s) =\u003e (s || '').replace(\/\\u00A0\/g, ' ').replace(\/\\s+\/g, ' ').trim();\n const firstLine = (s) =\u003e\n (s || '')\n .replace(\/\\u00A0\/g, ' ')\n .split('\\n')\n .map(l =\u003e clean(l))\n .filter(Boolean)[0] || '';\n\n const isVisible = (el) =\u003e {\n if (!el) return false;\n const cs = getComputedStyle(el);\n if (cs.display === 'none' || cs.visibility === 'hidden') return false;\n return el.getClientRects().length \u003e 0;\n };\n\n const getVisibleFbtItem = (root) =\u003e {\n const items = [...root.querySelectorAll('.picky-fbt-inline__item')];\n return items.find(it =\u003e {\n if (it.getAttribute('data-fbt-hidden') === '1') return false;\n if (it.getAttribute('data-fbt-conditional-hidden') === '1') return false;\n if (getComputedStyle(it).display === 'none') return false;\n return isVisible(it);\n }) || null;\n };\n\n \/\/ â
NEW: read the exact price text from .picky-product-card__price (no formatting)\n const getTotalPrice = () =\u003e {\n const root = document.querySelector(SEL.root);\n if (!root) return '';\n\n \/\/ 1) Preferred: the price inside the VISIBLE item\n const visItem = getVisibleFbtItem(root);\n const cardPriceEl = visItem?.querySelector(SEL.cardPrice) || null;\n const cardPriceText = firstLine(cardPriceEl?.textContent || cardPriceEl?.innerText || '');\n if (cardPriceText) return cardPriceText;\n\n \/\/ 2) Fallback: any card price in widget (if visibility detection fails)\n const anyCardPriceEl = root.querySelector(SEL.cardPrice);\n const anyCardPriceText = firstLine(anyCardPriceEl?.textContent || anyCardPriceEl?.innerText || '');\n if (anyCardPriceText) return anyCardPriceText;\n\n \/\/ 3) Fallbacks (only if needed)\n const totalsEl = root.querySelector(SEL.totals);\n const totalsText = firstLine(totalsEl?.textContent || '');\n if (totalsText) return totalsText;\n\n const wrapEl = root.querySelector(SEL.pricesWrap);\n const wrapText = firstLine(wrapEl?.textContent || '');\n if (wrapText) return wrapText;\n\n return '';\n };\n\n const ensureInlinePrice = () =\u003e {\n const btn = document.querySelector(SEL.btn);\n const content = document.querySelector(SEL.btnContent);\n if (!btn || !content) return;\n\n const price = getTotalPrice();\n if (!price) return;\n\n \/\/ Find or create our inline node\n let node = btn.querySelector('.fbt-inline-total-price');\n if (!node) {\n node = document.createElement('span');\n node.className = 'fbt-inline-total-price';\n\n const sep = document.createElement('span');\n sep.className = 'fbt-inline-total-price__sep';\n sep.textContent = '|';\n\n const priceSpan = document.createElement('span');\n priceSpan.className = 'fbt-inline-total-price__value';\n\n node.appendChild(sep);\n node.appendChild(priceSpan);
14329\n\n \/\/ Insert right after \".picky-button__content span\"\n const textSpan = btn.querySelector(SEL.btnTextSpan);\n if (textSpan \u0026\u0026 textSpan.parentNode) {\n textSpan.insertAdjacentElement('afterend', node);\n } else {\n content.appendChild(node);\n }\n }\n\n const priceValue = node.querySelector('.fbt-inline-total-price__value');\n if (priceValue) priceValue.textContent = ` ${price}`;\n };\n\n const runSoon = () =\u003e {\n ensureInlinePrice();\n setTimeout(ensureInlinePrice, 80);\n setTimeout(ensureInlinePrice, 240);\n };\n\n const attach = () =\u003e {\n const root = document.querySelector(SEL.root);\n if (!root) return false;\n\n runSoon();\n\n const mo = new MutationObserver(() =\u003e runSoon());\n mo.observe(root, { subtree: true, childList: true, attributes: true, characterData: true });\n\n return true;\n };\n\n if (attach()) return;\n\n const boot = new MutationObserver(() =\u003e {\n if (attach()) boot.disconnect();\n });\n boot.observe(document.documentElement, { childList: true, subtree: true });\n setTimeout(() =\u003e boot.disconnect(), 15000);\n})();\n\n\n\n\/*Script 4*\/\n(() =\u003e {\n \/\/ Exclude these product pages\n const EXCLUDE_PATHS = [\n '\/products\/flush-exhaust-mount-luxe',\n '\/products\/whisperceiling®-dcâ¢-ventilation-fan-110-130-150-cfm',\n '\/products\/flush-exhaust-mount-lite',\n '\/products\/whispervalue®-dcâ¢-ideal-single-multi-family-solution-50-80-or-100-cfm'\n ];\n\n const normalizePath = (p) =\u003e {\n const raw = (p || '').split('?')[0].replace(\/\\\/$\/, '');\n let decoded = raw;\n try { decoded = decodeURIComponent(raw); } catch (_) {}\n return { raw, decoded };\n };\n\n const shouldInject = () =\u003e {\n const { raw, decoded } = normalizePath(location.pathname);\n return !EXCLUDE_PATHS.some((ex) =\u003e {\n const exNorm = normalizePath(ex);\n return raw.startsWith(exNorm.raw) || decoded.startsWith(exNorm.decoded);\n });\n };\n\n if (!shouldInject()) return;\n\n \/\/ Only apply if FBT exists on the page\n const hasFbt = () =\u003e !!document.querySelector('.picky-widget.picky-fbt-inline, .picky-fbt-inline__content');\n\n const inject = () =\u003e {\n if (document.getElementById('amplify-fbt-css-v1')) return;\n const style = document.createElement('style');\n style.id = 'amplify-fbt-css-v1';\n style.textContent = `\n \/*FBT widget*\/\n .picky-fbt-inline__item { width: 100%; }\n\n .picky-widget.picky-fbt-inline [class*=\"_wrapperInner_\"] {\n min-width: 100%;\n padding: 0;\n overflow: hidden;\n }\n\n .picky-widget.picky-fbt-inline [class*=\"_bundle_\"] {\n padding-left: 0;\n padding-right: 0;\n }\n\n .picky-fbt-inline__item .picky-product-card { flex-direction: row; }\n\n .picky-fbt-inline__item .picky-product-card .picky-product-card__image { width: 190px; }\n\n .picky-widget.picky-fbt-inline .picky-header .picky-header__title { text-align: left; }\n\n .picky-fbt-inline__item .picky-product-card__checker {\n position: relative;\n top: 0;\n margin-right: 10px;\n }\n\n .picky-fbt-inline__item .picky-pill__item:before { border-radius: 4px; }\n `;\n document.head.appendChild(style);\n };\n\n \/\/ Inject immediately if possible, or wait a moment for the widget to render\n if (hasFbt()) inject();\n else {\n const mo = new MutationObserver(() =\u003e {\n if (hasFbt()) {\n inject();\n mo.disconnect();\n }\n });\n mo.observe(document.documentElement, { childList: true, subtree: true });\n setTimeout(() =\u003e mo.disconnect(), 15000);\n }\n})();\n\u003c\/script\u003e", 14330 enableProductPreviewDrawer: true, 14331 enableSocialSharing: true, 14332 }, 14333 productCard: { 14334 enableTitleLinks: true 14335 }, 14336 14337 enableStorySessionDiscounts: 'false' !== 'false', 14338 enableBundleButton: 'true' === 'true', 14339 14340 enablePqBndStories: true, 14341 collectionPageProductCardSelector: tryParseJSON('null'), 14342 enableComboPriceOnCollectionPages: true, 14343 }; 14344 14345 window.pickystory.strings = {}; 14346 14347 window.pickystory.translations = {"buyXGetYTag":"Buy 1 Get ${gifts_number}
14347 Free","cartShareCTA":"Share cart","cartShareLinkCopied":"Link copied!","cartTitle":"Cart","checkout":"Checkout","discountApplyButton":"Apply","discountClearButton":"Clear","discountTitle":"Enter discount code","noteTitle":"Add note","pickyCartGroupingHideItems":"Hide ${number} items","pickyCartGroupingShowItems":"Show ${number} items","recommendedAddButton":"Add","recommendedForCart":"Recommended for your cart","total":"Total:"} 14348</script>
14348 14349 14350 14351 14352 14353<!-- BEGIN app snippet: amplify-widget2 -->
14354<script defer src="https://widget2-cdn.pickystory.com/widget2/latest/pickystory-widget2.min.js"></script>
14354 14355<!-- END app snippet --> 14356 14357<!-- BEGIN app snippet: global-theme-settings -->
14357<script data-amplify="global-settings-json-data" type="application/json"> 14358{ 14359 "settings": {"enablePickyStoryBranding":true,"enableSwitchingLanguages":false,"enableLocalizeCurrency":true,"enableCompactVariantPicker":false,"bundleDiscountTitle":"AMPLIFY-DISCOUNT","quantityBreaksDiscountTitle":"PICKY-VOLUME-DISCOUNT","bundleNoteDescription":"Bundle â${bundle_name}â (group ${purchased_bundle_id})","bundleNotePrefix":"Part of","displayBundleNoteOnChildProducts":true,"redirectFromBuilderInlineProductPageToScenario":true,"displayShopifyCompareAtPriceOnByobProduct":false,"showByobSectionsOpenedByDefault":false,"variantPickerLook":"Pills","showProductCardImagesWithoutVariant":true,"productCardImagesAspectRatioHeight":7,"productCardImagesAspectRatioWidth":5,"enableWidgetSDK":false}, 14360 "amplifyTheme": {"settings":{"showProductCardLabels":true,"showProductQuantityInput":true,"showProductCardImagesWithoutVariant":true,"widgetsHeaderAlignment":"Left","widgetsCtaAlignment":"Bottom","variantPickerLook":"Pills","variantColorPickerLook":"Dropdown","showSelectedSwatchLabel":false,"enableOptionTitleDisplay":false}
14360,"styles":{"themeBackgroundColor":"#FFFFFF","themeColor":"#1B1C30","themeAccentBackgroundColor":"#e73c3eff","themeAccentColor":"#FFFFFF","themeFontFamily":"Sans-serif","themeBorderRadiusScale":0,"productCardNameFontSizeScale":1,"productCardNameFontWeightScale":1,"productCardNameColor":null,"productCardImagesAspectRatioHeight":7,"productCardImagesAspectRatioWidth":5,"productCardTotalPriceFontSizeScale":1,"productCardTotalPriceFontWeightScale":1,"productCardTotalPriceColor":null,"productComparePriceFontSizeScale":1,"productComparePriceFontWeightScale":1,"productComparePriceColor":null,"productCheckboxBackgroundColor":null,"productCheckboxColor":null,"widgetsHeaderFontSizeScale":1,"widgetsHeaderFontWeightScale":1,"widgetsHeaderColor":null,"widgetsSubHeaderFontSizeScale":1,"widgetsSubHeaderFontWeightScale":1,"widgetsSubHeaderColor":null,"widgetsCtaFontSizeScale":1,"widgetsCtaFontWeightScale":1,"widgetsCtaBackgroundColor":null,"widgetsCtaColor":null,"widgetsCheckboxBackgroundColor":null,"widgetsCheckboxColor":null,"widgetsPriceFontSizeScale":1,"widgetsPriceFontWeightScale":1,"widgetsPriceColor":null,"widgetsDiscountPriceFontSizeScale":1,"widgetsDiscountPriceFontWeightScale":1,"widgetsDiscountPriceColor":null,"swatchesSizeScale":1,"swatchesBorderRadiusScale":1,"swatchesBorderWidthScale":0.25,"selectedSwatchLabelSizeScale":1,"pillsSizeScale":1.25,"pillsBorderRadiusScale":0.25,"pillsBorderWidthScale":0.125,"themeCustomCss":".picky-widget,\n.picky-widget.picky-cart,\n.picky-recommendations__content,\n.picky-widget.picky-bnd-pdp,\n.picky-widget.picky-byob-bundle.picky-byob-pdp,\n.picky-widget .picky-upsell-bundle,\n.picky-widget.picky-byob-bundle.picky-byob-inline,\n.picky-widget.picky-qb-bundle,\n.picky-widget.picky-fbt-inline .picky-fbt-inline__content,\n.picky-widget .picky-button,\n.picky-widget .picky-totals__title,\n.picky-widget .picky-totals__price,\n.picky-title.picky-reacted-product__title,\n.picky-title.picky-product-card__title,\n.picky-product-card__prices-wrapper .picky-product-card__price,\n.picky-upsell-bundle__content,\n.picky-subscriptions__item,\nselect,\n.picky-pill__item,\n.picky-add-discount-field__button,\n.picky-add-note-field__button {\nfont-family: Outfit;\n}\n\n\n.picky-widget.picky-cart .picky-button,\n.picky-fbt-inline__button:before,\n.picky-fbt-inline {\nbackground: #E73C3E;\n--ps-theme-accent-background-color: #E73C3E;\n}\n\n\/*Variants on different themes*\/\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]),\nbody.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]) {\n border: 1px solid #12121240 !important;\n box-sizing: border-box !important;\n}\n\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:hover:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]),\nbody.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:hover:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]) {\n border-color: #000 !important;\n}\n\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:not([class*=\"_selected_\"])::before,\nbody.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:not([class*=\"_selected_\"])::before {\n content: none !important;\n}\n\nbody.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]) {\n border: 1px solid #444444 !important;\n box-sizing: border-box !important;\n}\n\nbody.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:hover:not([class*=\"_disabled_\"]):not([class*=\"_selected_\"]) {\n border-color: #E73C3E !important;\n}\n\nbody.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:not([class*=\"_selected_\"])::before {\n content: none !important;\n}\n\/*End of Variants on different themes*\/\n\n\n\n.picky-fbt-inline__item .picky-pill__item {\nborder-radius: 5px;\nmin-width: fit-content;\nmin-height: fit-content;\npadding: 8px 15px 8px 15px;\n}\n\n.picky-fbt-inline__item .picky-pill__item [class*=\"_content_\"] {\nfont-size: 14px;\n}\n\n.picky-fbt-inline__item [class*=\"_selected_\"].picky-pill__item:before {\nborder-radius: 4px;\nbackground-color: transparent;\nborder-color: #E73C3E;\n}\n\n.picky-fbt-inline__item [class*=\"_selected_\"].picky-pill__item {\nbackground-color: transparent;\n}\n\n.picky-widget.picky-fbt-inline .picky-fbt-inline__footer {\nmax-width: 100% !important;\n}\n\n\/*End of FBT widget*\/\n\n\/*Cart*\/\n\n.picky-cart__footer .picky-powered-by {\ndisplay: none;\n}\n\n.picky-cart__header .picky-cart__title {\nfont-family: Outfit;
14360\nfont-weight: 700;\ncolor: black;\n}\n\n.picky-recommendations__content .picky-recommendations__title {\nfont-family: Outfit;\nfont-weight: 600;\ncolor: black;\n}\n\n.picky-product-card__title,\n.picky-cart-item__title,\n.picky-add-discount-field__button *,\n.picky-add-note-field__button *,\n.picky-product-card__price,\n.picky-totals__price {\ncolor: black;\n}\n\n.picky-cart__footer [class*=\"_integration_\"] {\ndisplay: none;\n}\n\n.picky-recommendations__content [class*=\"_detailed_\"] {\ngap: calc(var(--ps-indents) * 20px);\n}\n\n.picky-recommendations__content .picky-product-card__image {\nmin-width: 100%;\n}\n\n\/*End of Cart*\/\n\n\/*Buttons*\/\n\n.picky-button,\n.picky-button:before {\nanimation: none !important;\ntransform: none !important;\n border: 1px solid #E73C3E; \/* ring stays original color *\/\n background: #E73C3E;\n border-radius: 8px; \n transition: background-color .15s ease, filter .15s ease;\n background-clip: padding-box;\n}\n\n.picky-button:hover:before {\n background: #d13436;\n}\n\n\/*End of Buttons*\/\n\n\n\/*Changing FBT backgrounds based on theme background color*\/\nbody.gradient.theme--product- .picky-widget.picky-fbt-inline [class*=\"_bundle_\"],\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-widget.picky-fbt-inline [class*=\"_bundle_\"] {\nbackground: white !important;\ncolor: black !important;\n}\n\nbody.gradient.theme--product- .picky-fbt-inline__item [class*=\"_selected_\"].picky-pill__item,\nbody.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item,\nbody.gradient.theme--product- .picky-header__title,\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item [class*=\"_selected_\"].picky-pill__item,\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item,\nbody.gradient.theme--product-floor-vents-luxe-colour .picky-header__title {\nbackground-color: transparent;\nbackground: transparent;\ncolor: black;\n}\n\/*End of Changing FBT backgrounds based on theme background color*\/"}} 14361} 14362</script>
14362 14363 14364 14365 <style data-amplify-widget-styles> 14366 .picky-widget { 14367 --ps-theme-font-family: Sans-serif; 14368 --ps-theme-color: #1B1C30; 14369 --ps-theme-background-color: #FFFFFF; 14370 --ps-theme-accent-color: #FFFFFF; 14371 --ps-theme-accent-background-color: #e73c3eff; 14372 --ps-theme-product-card-name-font-size-scale: 1; 14373 --ps-theme-product-card-name-font-weight-scale: 1; 14374 --ps-theme-widgets-header-font-size-scale: 1; 14375 --ps-theme-widgets-header-font-weight-scale: 1; 14376 --ps-theme-widgets-sub-header-font-size-scale: 1; 14377 --ps-theme-widgets-sub-header-font-weight-scale: 1; 14378 --ps-theme-widgets-cta-font-size-scale: 1; 14379 --ps-theme-widgets-cta-font-weight-scale: 1; 14380 --ps-theme-swatches-size-scale: 1; 14381 --ps-theme-swatches-radius-scale: 1; 14382 --ps-theme-swatches-border-scale: 0.25; 14383 --ps-theme-pills-size-scale: 1.25; 14384 --ps-theme-pills-radius-scale: 0.25; 14385 --ps-theme-pills-border-scale: 0.125; 14386 } 14387 .picky-widget, 14388.picky-widget.picky-cart, 14389.picky-recommendations__content, 14390.picky-widget.picky-bnd-pdp, 14391.picky-widget.picky-byob-bundle.picky-byob-pdp, 14392.picky-widget .picky-upsell-bundle, 14393.picky-widget.picky-byob-bundle.picky-byob-inline, 14394.picky-widget.picky-qb-bundle, 14395.picky-widget.picky-fbt-inline .picky-fbt-inline__content, 14396.picky-widget .picky-button, 14397.picky-widget .picky-totals__title, 14398.picky-widget .picky-totals__price, 14399.picky-title.picky-reacted-product__title, 14400.picky-title.picky-product-card__title, 14401.picky-product-card__prices-wrapper .picky-product-card__price, 14402.picky-upsell-bundle__content, 14403.picky-subscriptions__item, 14404select, 14405.picky-pill__item, 14406.picky-add-discount-field__button, 14407.picky-add-note-field__button { 14408font-family: Outfit; 14409} 14410 14411 14412.picky-widget.picky-cart .picky-button, 14413.picky-fbt-inline__button:before, 14414.picky-fbt-inline { 14415background: #E73C3E; 14416--ps-theme-accent-background-color: #E73C3E; 14417} 14418 14419/*Variants on different themes*/ 14420body.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:not([class*="_disabled_"]):not([class*="_selected_"]), 14421body.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:not([class*="_disabled_"]):not([class*="_selected_"]) { 14422 border: 1px solid #12121240 !important; 14423 box-sizing: border-box !important; 14424} 14425 14426body.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:hover:not([class*="_disabled_"]):not([class*="_selected_"]), 14427body.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:hover:not([class*="_disabled_"]):not([class*="_selected_"]) { 14428 border-color: #000 !important; 14429} 14430 14431body.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item:not([class*="_selected_"])::before, 14432body.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item:not([class*="_selected_"])::before { 14433 content: none !important; 14434} 14435 14436body.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:not([class*="_disabled_"]):not([class*="_selected_"]) { 14437 border: 1px solid #444444 !important; 14438 box-sizing: border-box !important; 14439} 14440 14441body.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:hover:not([class*="_disabled_"]):not([class*="_selected_"]) { 14442 border-color: #E73C3E !important; 14443} 14444 14445body.gradient.theme--product-Blackout .picky-fbt-inline__item .picky-pill__item:not([class*="_selected_"])::before { 14446 content: none !important; 14447} 14448/*End of Variants on different themes*/ 14449 14450 14451 14452.picky-fbt-inline__item .picky-pill__item { 14453border-radius: 5px; 14454min-width: fit-content; 14455min-height: fit-content; 14456padding: 8px 15px 8px 15px; 14457} 14458 14459.picky-fbt-inline__item .picky-pill__item [class*="_content_"] { 14460font-size: 14px; 14461} 14462 14463.picky-fbt-inline__item [class*="_selected_"].picky-pill__item:before { 14464border-radius: 4px; 14465background-color: transparent; 14466border-color: #E73C3E; 14467} 14468 14469.picky-fbt-inline__item [class*="_selected_"].picky-pill__item { 14470background-color: transparent; 14471} 14472 14473.picky-widget.picky-fbt-inline .picky-fbt-inline__footer { 14474max-width: 100% !important; 14475} 14476 14477/*End of FBT widget*/ 14478 14479/*Cart*/ 14480 14481.picky-cart__footer .picky-powered-by { 14482display: none; 14483} 14484 14485.picky-cart__header .picky-cart__title { 14486font-family: Outfit;
14487font-weight: 700; 14488color: black; 14489} 14490 14491.picky-recommendations__content .picky-recommendations__title { 14492font-family: Outfit; 14493font-weight: 600; 14494color: black; 14495} 14496 14497.picky-product-card__title, 14498.picky-cart-item__title, 14499.picky-add-discount-field__button *, 14500.picky-add-note-field__button *, 14501.picky-product-card__price, 14502.picky-totals__price { 14503color: black; 14504} 14505 14506.picky-cart__footer [class*="_integration_"] { 14507display: none; 14508} 14509 14510.picky-recommendations__content [class*="_detailed_"] { 14511gap: calc(var(--ps-indents) * 20px); 14512} 14513 14514.picky-recommendations__content .picky-product-card__image { 14515min-width: 100%; 14516} 14517 14518/*End of Cart*/ 14519 14520/*Buttons*/ 14521 14522.picky-button, 14523.picky-button:before { 14524animation: none !important; 14525transform: none !important; 14526 border: 1px solid #E73C3E; /* ring stays original color */ 14527 background: #E73C3E; 14528 border-radius: 8px; 14529 transition: background-color .15s ease, filter .15s ease; 14530 background-clip: padding-box; 14531} 14532 14533.picky-button:hover:before { 14534 background: #d13436; 14535} 14536 14537/*End of Buttons*/ 14538 14539 14540/*Changing FBT backgrounds based on theme background color*/ 14541body.gradient.theme--product- .picky-widget.picky-fbt-inline [class*="_bundle_"], 14542body.gradient.theme--product-floor-vents-luxe-colour .picky-widget.picky-fbt-inline [class*="_bundle_"] { 14543background: white !important; 14544color: black !important; 14545} 14546 14547body.gradient.theme--product- .picky-fbt-inline__item [class*="_selected_"].picky-pill__item, 14548body.gradient.theme--product- .picky-fbt-inline__item .picky-pill__item, 14549body.gradient.theme--product- .picky-header__title, 14550body.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item [class*="_selected_"].picky-pill__item, 14551body.gradient.theme--product-floor-vents-luxe-colour .picky-fbt-inline__item .picky-pill__item, 14552body.gradient.theme--product-floor-vents-luxe-colour .picky-header__title { 14553background-color: transparent; 14554background: transparent; 14555color: black; 14556} 14557/*End of Changing FBT backgrounds based on theme background color*/ 14558 </style> 14559 14560<!-- END app snippet --> 14561 14562 14563 14564 14565
14566<script data-amplify="sxgy-json-data" type="application/json"> 14567 { 14568 "story": { 14569 "labels": {} 14570 } 14571 } 14572</script>
14572 14573 14574 14575</div><div id="shopify-block-ARExFU25Wa0dyOGZGU__6251270934270006384" class="shopify-block shopify-app-block">
14575<script> 14576 console.log("Stape gtm: 1.0.4"); 14577 window.lsData = {}; 14578 window.dataLayer = window.dataLayer || []; 14579 window.addEventListener("message", (event) => { 14580 if (event.data?.event) { 14581 window.dataLayer.push(event.data); 14582 } 14583 }); 14584 window.dataShopStape = { 14585 shop: "fittes.ca", 14586 shopId: "11712102462", 14587 } 14588</script>
14588 14589 14590 14591 14592 14593 14594 14595
14595<script> 14596 console.log("â ï¸ User not logged in"); 14597 window.localStorage.removeItem('customerShopStape'); 14598 </script>
14598 14599 14600 14601 14602
14603<script> 14604 window.currentShopifyMarketStapeId = null; 14605 window.currentShopifyMarketStapeCode = null; 14606 try { 14607 window.currentShopifyMarketStapeId = "2088304828"; 14608 window.currentShopifyMarketStapeCode = "US"; 14609 // Checkout doesn't render theme app extension blocks, so this is the 14610 // only place the market/country code is ever set. Persisting it here 14611 // lets checkout-side field mapping (country_market_code) fall back to 14612 // the last known value instead of coming up empty. 14613 localStorage.setItem('marketShopStape', JSON.stringify({ 14614 id: window.currentShopifyMarketStapeId, 14615 code: window.currentShopifyMarketStapeCode 14616 })); 14617 } catch (error) { 14618 console.error("â Stape Error:", error); 14619 } 14620</script>
14620 14621 14622 14623 14624 14625 14626</div><div id="shopify-block-AK0h3cTVsZkRtSWZvY__back-in-stock-restock-alerts-4bb73be2-b7c2-4870-949f-c528145452a3" class="shopify-block shopify-app-block"><link rel="preconnect" href="https://app.restockrocket.io" crossorigin><link rel="preconnect" href="https://ariavent.myshopify.com" crossorigin><!-- Config and setup JS -->
14627<script id="RestockRocketConfig"> 14628 window._RestockRocketConfig = window._RestockRocketConfig || {} 14629 window._RestockRocket = window._RestockRocket || {} 14630 window._Stoq = window._RestockRocket 14631 window._StoqConfig = window._RestockRocketConfig 14632 try { window._RestockRocket.inlineRanAt = performance.now(); } catch (e) { } 14633 function normalizeLocale(locale) { 14634 if (!locale || locale.trim() === '') { 14635 return ''; 14636 } 14637 return locale.toString().toLowerCase().replace(/-/g, '_'); 14638 } 14639 14640 window._RestockRocketConfig.locale = 'en'; 14641 window._RestockRocketConfig.normalizedLocale = normalizeLocale('en'); 14642 window._RestockRocketConfig.shop = 'ariavent.myshopify.com'; 14643 window._RestockRocketConfig.pageType = 'index'; 14644 window._RestockRocketConfig.liquidRenderedAt = 1791450974;window._RestockRocketConfig.marketId = 2088304828;window._RestockRocketConfig.countryName = 'United States'; 14645 window._RestockRocketConfig.countryIsoCode = 'US';window._RestockRocketConfig.languageIsoCode = 'en';window._RestockRocketConfig.cartInventoryQuantity = {}; 14646 if (!window._RestockRocketConfig.cartToken) { 14647 try { 14648 const m = document.cookie.match(/(?:^|;\s*)cart=([^;]+)/); 14649 if (m && m[1]) window._RestockRocketConfig.cartToken = decodeURIComponent(m[1]); 14650 } catch (e) { } 14651 } 14652window._RestockRocketConfig.cachedSettings = {"id":39375,"shop_id":39311,"currency":"CAD","created_at":"2025-08-06T18:16:54.852Z","updated_at":"2026-10-08T00:38:41.575Z","enable_app":true,"enable_signup_widget":true,"storefront_button_text":"Notify me when available","storefront_button_text_color":"#FFFFFF","storefront_button_background_color":"#202223","storefront_form_header":"Notify me","storefront_form_description":"Get a notification as soon as this product is back in stock by signing up below!","storefront_form_button_text":"Notify me when available","storefront_form_button_text_color":"#FFFFFF","storefront_form_button_background_color":"#202223","storefront_form_terms":"You'll only receive notifications for this product.","storefront_form_error":"Please enter a valid email address","storefront_form_success":"Thank you! We will notify you when the product is available.","enable_powered_by":false,"show_button_on_preorder":true,"sms_enabled":true,"email_enabled":true,"storefront_button_disable_tag":"rocket-hide","theme_config":{"disableDebugLoggingForNonPreorderItem":false},"storefront_form_email_placeholder":"Email address","storefront_form_phone_placeholder":"Phone number","storefront_form_phone_label":"Phone number","storefront_form_email_label":"Email","storefront_form_phone_error":"Please enter a valid phone number","storefront_form_customer_name_placeholder":"Name","storefront_form_customer_name_error":"Please enter your name","storefront_form_did_you_mean_error":"Did you mean %{suggested_email}? Or use %{current_email}","form_customer_name_enabled":false,"form_customer_name_required":false,"css_config":"","js_config":"","collect_promotion_consent":true,"storefront_form_promotion_consent_label":"Notify me about other news, sales, discounts & offers too","show_button_on_collection":false,"sms_default_country":"ca","sms_allowed_countries":[],"sms_restrict_country":false,"sms_default_channel":true,"optin_required":false,"optin_custom_domain_enabled":false,"optin_success_text":"Registration confirmed! You'll receive an alert when the product is restocked.","storefront_button_border_radius":0,"storefront_button_disable_tag_hides_button":true,"storefront_button_disable_tag_enabled":false,"quantity_required":false,"storefront_form_quantity_label":"Quantity","enable_alerts":true,"sms_allowed":true,"email_allowed":true,"collect_promotion_consent_default":true,"insert_button_after_selector":".product-form__submit","insert_button_after_selector_type":"afterend","storefront_button_position_type":"specific","storefront_form_duplicate_error":"You've already subscribed for alerts to this product.","storefront_mixed_cart_error":"Preorders must be purchased
14652separately from regular items. Please complete your current order first, or clear your cart to continue.","storefront_error_heading":"Error","default_locale":"en","collection_page_button_text_color":"#FFFFFF","collection_page_button_background_color":"#202223","show_button_if_any_out_of_stock":false,"show_button_if_any_variant_out_of_stock_collection":false,"show_button_on_index":false,"insert_button_after_selector_collection":".card__inner","insert_button_after_selector_index":".card__inner","push_enabled":false,"push_allowed":false,"storefront_form_push_label":"Push","storefront_form_push_description":"Click 'Allow' to be notified via push notification","storefront_form_push_error":"Permission rejected! Please review notification settings and try again","storefront_font_family":"Outfit","insert_button_after_selector_collection_type":"afterend","show_channel_selector":false,"storefront_form_empty_error":"Please fill in one or more of the options above","storefront_form_push_input":"Send notification to your browser","insert_button_after_selector_page":".card__inner","show_button_on_page":false,"insert_button_after_selector_search":".card__inner","show_button_on_search":false,"app_proxy_path_prefix":"/apps/restockrocket-production","collection_link_selector":".full-unstyled-link","index_link_selector":"","page_link_selector":"","search_link_selector":"","collection_check_link_visibility":true,"collection_buttons_container":"#product-grid","index_buttons_container":"","page_buttons_container":"","search_buttons_container":"","extension_enable_url_variant_detection":true,"extension_enable_value_variant_detection":true,"extension_value_variant_selector":"[name='id']","resubscribe_text":"This product is out of stock. Get notified when it's restocked again by entering your details below!","preorder_enabled":true,"preorder_buy_button_selector":".shopify-payment-button","preorder_add_to_cart_button_selector":".product-form__submit","preorder_badge_selector":".price__container","preorder_button_out_of_stock_text":"Out of stock","preorder_button_add_to_cart_text":"Add to cart","preorder_form_selector":"product-form form[action*=\"/cart/add\"]","preorder_collection_enabled":true,"preorder_collection_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_index_enabled":false,"preorder_index_form_selector":"form[action*=\"/cart/add\"]","preorder_index_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_page_enabled":false,"preorder_page_form_selector":"form[action*=\"/cart/add\"]","preorder_page_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_search_enabled":false,"preorder_search_form_selector":"form[action*=\"/cart/add\"]","preorder_search_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_collection_badge_selector":".card__inner","preorder_index_badge_selector":".card__inner","preorder_page_badge_selector":".card__inner","preorder_search_badge_selector":".card__inner","preorder_badge_selector_type":"afterend","preorder_collection_badge_selector_type":"afterend","preorder_button_child_selector":"span","preorder_button_disclaimer_insert_selector":".product-form__submit","preorder_button_disclaimer_insert_selector_type":"afterend","preorder_payment_insert_selector":".product-form__submit","preorder_payment_insert_selector_type":"beforebegin","preorder_price_container_selector":".price__container","preorder_price_container_selector_insert_type":"afterend","preorder_terms_insert_selector":"","preorder_terms_insert_selector_type":"afterend","preorder_original_price_selector":".price__regular .price-item--regular","preorder_price_format":"{{amount}} {{currency}}","show_badge_if_any_variant_is_preorder":false,"enable_console_debug":false,"inline_form_enabled":true,"inline_form_selector":".product-form__buttons","inline_form_selector_type":"afterend","storefront_form_prefill_customer":true,"storefront_form_show_image":false,"storefront_form_text_color":"#202223","storefront_form_background_color":"#FFFFFF","storefront_form_border_radius":0,"market_setup_type":"multiple_markets","shopify_app_id":5940125,"preorder_progress_bar_insert_selector":"","preorder_progress_bar_insert_selector_type":"beforebegin","countdown_timer_insert_selector":"","countdown_timer_insert_selector_type":"afterend","configure_notify_me_enabled":false,"restock_note_insert_selector":null,"restock_note_insert_selector_type":"afterend","restock_note_background_color":"#f3f4f6","restock_note_text_color":"#202223","restock_note_border_radius":4,"preorder_modal_continue_button_text":"Continue","preorder_modal_cancel_button_text":"Cancel","meta_pixel_enabled":false,"meta_pixel_id":null,"cache":true,"cached_at":"2026-10-08T00:38:41.680Z","multi_language_enabled":false,"translation_locale":"en","disable_refresh_on_stale_liquid":false,"api_host":"https://ext.stoqapp.com"};window._RestockRocketConfig.storefrontAccessToken = "d30b93cba5c5b20104f7382ac4ebeecd"; 14653 window._RestockRocketConfig.metafieldNamespace = 'restockrocket_production'; 14654 window._RestockRocketConfig.storefrontApiVersion = '2026-07';window._RestockRocketConfig.cachedPreorderVariantIds = {"preorder_variant_ids":[42306650243260,44007728087228,51849725247858,52294891995506,52557491011954,60771950330226,61247613927794,62117973918066],"updated_at":"2026-10-08T09:03:34Z","market_locations_enabled":false,"market_id":2088272060,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null,"bulk_operation":true};window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedOutOfStockVariantIds = {"out_of_stock_variant_ids":[42306650243260,44007728087228,51849725247858,52294891995506,52557491011954,60771950330226,61247613927794,62117973918066],"updated_at":"2026-10-08T08:46:31Z","market_locations_enabled":false,"market_id":0,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null};window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2026-10-08T08:56:39Z","shopify_market_id":2088304828,"market_locations_enabled":false}; 14655 window._RestockRocketConfig.cachedVariantPreorderLimitsMarketKey = "variant_preorder_limits_for_market_2088304828";window._RestockRocketConfig.cachedVariantShippingTexts = {"variant_shipping_texts":{},"updated_at":"2026-10-08T08:56:39Z","shopify_market_id":2088304828,"market_locations_enabled":false}; 14656 window._RestockRocketConfig.cachedVariantShippingTextsMarketKey = "variant_shipping_texts_for_market_2088304828"; 14657window._RestockRocketConfig.sellingPlans = [];(function() { 14658 const cachedData = {"plans":[{"shopify_selling_plan_group_id":78343668082,"shopify_selling_plan_id":691027476850,"enabled":true,"variant_ids":[51849725247858,42946179006652,42511099265212,43177643147452,52294891995506,61247613927794,62117973918066,42306650243260,60771950330226,52557491011954,44007728087228],"product_variants_source":"all","name":"â ï¸ On Backorder","preorder_button_text":"On Backorder â Reserve Now","preorder_button_description":"This item is currently out of stock. Backordered items will ship separately when restocked.\n\nLook for something similar? Chat with us live â our team can confirm a match and provide an alternative.","preorder_button_description_enabled":true,"preorder_button_description_background_color":"#ebebeb","preorder_button_description_text_color":"#E73C3E","preorder_button_description_border_radius":10,"preorder_button_description_show_quantity_limit":false,"preorder_button_description_quantity_limit_suffix":" units available for preorder","preorder_button_description_shipping_text_prefix":"Shipping: ","delivery_exact_time":null,"delivery_after_n_intervals":0,"delivery_at":"2025-08-11T16:20:07.486Z","delivery_type":"unknown","quantity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":false,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":false,"shipping_text":"ASAP","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":"0.0","pricing_percentage":"0.0","discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":false,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":false,"custom_line_item_property_text":"{{ disclaimer }}","preorder_button_text_color":"#ffffff","preorder_button_background_color":"#1F1F1F","preorder_button_colors_enabled":true,"markets_enabled":false,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":true,"payment_options":[{"billing_type":"no_remaining_balance","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","billing_at":"2025-08-11T16:20:07.486Z","billing_after_n_intervals":0,"billing_after_interval_type":"day","pricing_type":"no_discount","pricing_amount":"0.0","pricing_percentage":"0.0","billing_title":"Full payment","billing_description":null,"discount_text":"Save {{ discount }}","shopify_selling_plan_id":691027476850,"is_default":true,"type":"full","translations":{}}],"require_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","disable_button_until_acknowledged":false,"acknowledgement_line_item_property_enabled":false,"acknowledgement_line_item_property_text":"Preorder Terms Accepted","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2026-10-02T15:13:55.000Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased
14658separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"batches_enabled":false,"preorder_batches":[]}],"disabled_plan_ids":[691027050866,691026035058],"has_in_stock_offer":false,"has_preorder_offer":true,"read_flags":{"enable_storefront_product_reads":true,"enable_storefront_integrations_read":true,"enable_storefront_selling_plans_read":true,"enable_storefront_in_stock_ids_read":false,"enable_storefront_preorder_ids_read":false},"cached_at":"2026-10-07T21:02:33Z"}; 14659 14660 if (cachedData && typeof cachedData === 'object' && cachedData.cached_at) { 14661 window._RestockRocketConfig.readFlags = cachedData.read_flags || {}; 14662 const oldPlans = window._RestockRocketConfig.sellingPlans; 14663 const maxUpdatedAt = Array.isArray(oldPlans) && oldPlans.length > 0 14664 ? oldPlans.reduce(function(max, plan) { 14665 if (plan.updated_at) { 14666 const planDate = new Date(plan.updated_at); 14667 const maxDate = max ? new Date(max) : null; 14668 return (!maxDate || (planDate && !isNaN(planDate) && planDate > maxDate)) ? plan.updated_at : max; 14669 } 14670 return max; 14671 }, '') 14672 : null; 14673 const cachedDate = new Date(cachedData.cached_at); 14674 const maxDate = maxUpdatedAt ? new Date(maxUpdatedAt) : null; 14675 const useCached = !maxUpdatedAt || (cachedDate && !isNaN(cachedDate) && (!maxDate || cachedDate > maxDate)); 14676 14677 if (useCached) { 14678 if (Array.isArray(cachedData.plans)) { 14679 window._RestockRocketConfig.sellingPlans = cachedData.plans; 14680 window._RestockRocketConfig.disabledSellingPlanIds = cachedData.disabled_plan_ids || []; 14681 console.debug('[RR] Using selling plans from cachedSellingPlans (cached_at: ' + cachedData.cached_at + ')'); 14682 } 14683 } else { 14684 window._RestockRocketConfig.disabledSellingPlanIds = []; 14685 console.debug('[RR] Using selling plans from old format (max updated_at: ' + maxUpdatedAt + ')'); 14686 } 14687 } 14688 })();window._RestockRocketConfig.enabledNotifyMeVariantIds = [51898328940914,52358043107698,52493907591538,20652030427198,20793342787646,52358081806706,43177643049148,43684960600252,61247636046194,61247566020978,42007196795068,42511099396284,52358081839474,51898329039218,51898329071986,51647165333874,20652038357054,43177643081916,43177643212988,43177652027580,42045981950140,51854038860146,52358081741170,61247610749298,20652036849726,20652033146942,42886103859388,42946179039420,41675735990460,41786072006844,41786072072380,41786072039612,43463715094716,43463715127484,44007734182076,42923404853436,42923404886204,43684964434108,42531409789116,40320285212860,52312711168370,42511099330748,42886097567932,42531409821884,42910519820476,42886097600700,51898328547698,44079394717884,43010871918780,20652035997758,42085189189820,42511099363516,38128298164412,31903133204542,42946179006652,42511099297980,20651640225854,42886114869436,42085188174012,20651640324158,20793228558398,20793232588862,42511099429052,42946179072188,20652038488126,39820780011708,42511099461820,31681364590654,52312533238130,42198266904764,43010899148988,41786071974076,42511099527356,52358081773938,51647167988082,42442853580988,51647168348530,42514579652796,42198266937532,39716440867004,44114744246460,42923410620604,44007728087228,42923410653372,42923410686140,42394760052924,43463814316220,51849722790258,41675422007484,38128356491452,38128358359228,42511300788412,52557489439090,51898328351090,51898327728498,51898327794034,52497703436658,42594045296828,42394771194044,43886211072188,42412785664188,43886211039420,42394771226812,51898302267762,51898329170290,51898329268594,60854050750834,60854050816370,43177643147452,43177643180220,43177643245756,43177643278524,42045981982908,43463813234876,42394762281148,43177643114684,52358043140466,52358043009394,42511099265212,52557495075186,51898329203058,42059057955004,52498416370034,42492709699772,20793231769662,20652011257918,20652011388990,52557489471858,52493906837874,42531409756348,52493908574578,42594044707004,42685940007100,429195
1468855170492,20652038455358,42531349954748,41675730026684,42306650243260,38128319398076,42531409854652,42511317827772,42492718874812,51898329137522,42860472991932,43177651863740,43177651896508,43177651994812,43177651830972,43177651962044,42514579587260,42531455566012,52498348769650,52357985894770,60854051406194,52497726243186,42048824705212,52498374721906,52294891995506,51898329334130,52557486227826,52493908509042,52557490979186,51898329465202,43177651798204,43177651929276,42923404820668,42442853613756,42511300821180,52358069780850,20652038291518,42394760020156,42412785631420,42685952590012,31636970995774,31636977877054,37682880676028,37682882117820,60854051537266,20650500227134,51898328875378,51898328973682,61247569232242,42531409887420,20651640356926,52358043042162,52358043074930,52498402804082,60854050849138,60854051176818,37682881102012,43463730823356,60854050914674,60854050881906,41744695918780,52557491011954,60854051012978,60854050980210,44114744213692,43463730790588,60854051078514,20651640258622,60854050718066,61247546851698,60854050783602,60854050652530,60854050685298,60854050947442,60854051570034,60854051045746,60854051275122,60854051209586,60854051242354,60854051307890,60854051340658,60854051373426,60854051438962,60854051111282,60854051504498,60854051471730,60854051144050,52557495468402,52557486031218,52542864556402,61247543607666,61247543640434,61247556452722,61247546818930,61247550030194,61247556354418,61247569265010,61247556387186,61247565955442,61247585026418,61247588303218,61247588335986,61247585059186,61247585091954,61247588270450,61247588368754,61247591547250,61247591580018,61247591612786,61247594922354,61247604392306,61247604425074,61247613927794,61247636013426,61247566053746,61247639257458,61247632834930,52542863933810,52557495042418,51849725247858,60771950330226,61247639224690,61247556419954,42490429079740,51898329235826,52557495501170];window._RestockRocketConfig.disabledNotifyMeVariantIds = [];window._RestockRocketConfig.backInStockTemplates = [];window._RestockRocketConfig.restockNotes = {};window._RestockRocketConfig.integrations = [{"id":"b5a1a61c-10e2-4922-aecc-894afa44f09b","shop_id":39311,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article","blog"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hijack","css_config":null,"js_config":null,"created_at":"2025-08-06T18:25:14.251Z","updated_at":"2025-08-06T18:25:14.251Z"},{"id":"b0a3369a-89f1-4b05-80b5-b5a449c94432","shop_id":39311,"enabled":true,"page_types":["collection"],"configuration":{"quickBuyModalSelector":".quick-add-modal[open]","quickBuyOpenFormSelector":"form[action=\"/cart/add\"]","quickBuyModalOpenDuration":1500,"quickBuyModalOpenInterval":250,"quickBuyOpenButtonSelector":".quick-add","quickBuyBadgeInsertSelector":".price","quickBuyPriceInsertSelector":".price","quickBuyVariantInputSelector":"[name=\"id\"]","quickBuyOriginalPriceSelector":".price--regular","quickBuyPaymentInsertSelector":".product-form__buttons","quickBuyModalBuyButtonSelector":".shopify-payment-button","quickBuyNotifyMeInsertSelector":".product-form__buttons","quickBuyBadgeInsertSelectorType":"afterend","quickBuyPriceInsertSelectorType":"beforeend","quickBuyDisclaimerInsertSelector":".product-form__buttons","quickBuyModalProductInputSelector":"[name=\"product-id\"]","quickBuyPaymentInsertSelectorType":"beforebegin","quickBuyNotifyMeInsertSelectorType":"afterend","quickBuyDisclaimerInsertSelectorType":"afterend","quickBuyModalAddToCartButtonSelector":"[name=\"add\"]","quickBuyModalOpenButtonSetupInterval":250,"quickBuyModalShowPreorderButtonDelay":0,"quickBuyModalAddToCartButtonTextSelector":"span"},"type":"quick_buy","css_config":null,"js_config":null,"created_at":"2025-08-11T19:32:45.843Z","updated_at":"2025-08-11T19:36:44.922Z"}]; 14689 try { 14690 var _sqCfg = window._RestockRocketConfig; 14691 var _sqPlanEnabled = Array.isArray(_sqCfg.sellingPlans) && 14692 _sqCfg.sellingPlans.some(function (p) { return p && p.enabled; }); 14693 var _sqPreCount = ((_sqCfg.cachedPreorderVariantIds && 14694 _sqCfg.cachedPreorderVariantIds.preorder_variant_ids) || []).length; 14695 _sqCfg.preordersConfigured = !!(_sqPlanEnabled && _sqPreCount); 14696 } catch (e) { } 14697 try { 14698 var _sqc = window._RestockRocketConfig; 14699 var _sqOn = !(_sqc.cachedSettings && _sqc.cachedSettings.block_accelerated_checkout === false); 14700 var _sqPre = (_sqc.cachedPreorderVariantIds && 14701 _sqc.cachedPreorderVariantIds.preorder_variant_ids) || []; 14702 var _sqArm = false;
14703 if (_sqOn && _sqc.preordersConfigured) { 14704 if (_sqc.pageType === 'product' && _sqc.product && _sqc.product.variants) { 14705 _sqArm = _sqc.product.variants.some(function (v) { return _sqPre.indexOf(Number(v.id)) !== -1; }); 14706 } else { 14707 _sqArm = (_sqc.integrations || []).some(function (i) { 14708 return i && i.type === 'featured_product' && i.enabled && 14709 Array.isArray(i.page_types) && i.page_types.indexOf(_sqc.pageType) !== -1; 14710 }); 14711 } 14712 } 14713 if (_sqArm && document.documentElement) { 14714 _sqc.acceleratedGateArmed = true; 14715 document.documentElement.classList.add('stoq-buy-now-pending'); 14716 setTimeout(function () { 14717 document.documentElement.classList.remove('stoq-buy-now-pending'); 14718 }, 6000); 14719 } 14720 } catch (e) { } 14721 14722 window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/01a10b23-799c-7a38-a052-ddf9175946a6/restockrocket-1-600/assets/restockrocket-product.js' 14723 window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/01a10b23-799c-7a38-a052-ddf9175946a6/restockrocket-1-600/assets/restockrocket-collection.js' 14724 window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/01a10b23-799c-7a38-a052-ddf9175946a6/restockrocket-1-600/assets/restockrocket-product-bis.js' 14725 window._RestockRocketConfig.scriptUrlCollectionBis = 'https://cdn.shopify.com/extensions/01a10b23-799c-7a38-a052-ddf9175946a6/restockrocket-1-600/assets/restockrocket-collection-bis.js' 14726 window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1) 14727 window._RestockRocketConfig.host = (window._RestockRocketConfig.cachedSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://app.restockrocket.io' 14728 try { 14729 const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); 14730 window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVersionMatch[1]) || ''; 14731 } catch (e) { 14732 window._RestockRocketConfig.appVersion = ''; 14733 } 14734 const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; 14735 const LIQUID_CACHE_MAX_AGE = 15 * 60; 14736 const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; 14737 if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { 14738 console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); 14739 window._RestockRocketConfig.isLiquidCacheFresh = true; 14740 window._RestockRocketConfig.liquidCacheAge = null; 14741 } else { 14742 const now = Math.floor(Date.now() / 1000); 14743 const liquidCacheAge = now - liquidRenderedAt; 14744 window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge); 14745 if (liquidCacheAge < 0) { 14746 console.debug(`STOQ - Client clock appears ahead of server by ${Math.abs(Math.round(liquidCacheAge / 60))} minutes, assuming cache fresh`); 14747 window._RestockRocketConfig.isLiquidCacheFresh = true; 14748 } else if (liquidCacheAge <= LIQUID_CACHE_MAX_AGE) { 14749 console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`); 14750 window._RestockRocketConfig.isLiquidCacheFresh = true; 14751 } else { 14752 console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`); 14753 window._RestockRocketConfig.isLiquidCacheFresh = false; 14754 } 14755 } 14756 14757 function checkSettingsExpiry(settings) { 14758 try { 14759 if (!settings || !settings.updated_at) { 14760 console.debug('STOQ - Invalid settings data structure'); 14761 return null; 14762 } 14763 14764 if (!settings.cache) { 14765 console.debug('STOQ - settings caching disabled'); 14766 return null; 14767 } 14768 if (settings.multi_language_enabled) { 14769 if (!settings.translations) { 14770 console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh'); 14771 return null; 14772 } 14773 if (window._RestockRocketConfig.normalizedLocale && 14774 !Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) { 14775 console.debug('STOQ - locale not explicitly translated, will use default language from cache'); 14776 } 14777 } 14778 14779 const updatedAt = new Date(settings.updated_at); 14780 if (isNaN(updatedAt.getTime())) { 14781 console.debug('STOQ - Invalid updated_at date format in settings'); 14782 return null; 14783 } 14784 14785 const age = Date.now() - updatedAt.getTime(); 14786 if (age < SETTINGS_CACHE_DURATION) { 14787 console.debug('STOQ - settings changed recently, skipping cache'); 14788 return null; 14789 } 14790 14791 return settings; 14792 } catch (error) { 14793 console.debug('STOQ - Error checking settings cache:', error); 14794 return null; 14795 } 14796 } 14797 14798 function createRestockRocketContainer() { 14799 const restockRocketContainer = document.createElement('div'); 14800 restockRocketContainer.id = 'restock-rocket'; 14801 document.body.appendChild(restockRocketContainer); 14802 } 14803 14804 function createRestockRocketScript(scriptUrl) { 14805 const restockRocketScriptElement = document.createElement('script'); 14806 restockRocketScriptElement.setAttribute('defer', 'defer'); 14807 restockRocketScriptElement.src = scriptUrl; 14808 document.body.appendChild(restockRocketScriptElement); 14809 } 14810 14811 createRestockRocketContainer() 14812 14813 console.debug('STOQ - extension activated') 14814 try { 14815 const _stoqInitConfig = window._RestockRocketConfig; 14816 const _stoqDetectedVariantIds = (_stoqInitConfig.product && Array.isArray(_stoqInitConfig.product.variants)
14816) 14817 ? _stoqInitConfig.product.variants.map(function(v) { return v.id }) 14818 : []; 14819 const _stoqSelectedVariantId = _stoqInitConfig.selected_variant_id; 14820 var _stoqPageSeq = 0; 14821 try { 14822 _stoqPageSeq = (parseInt(window.sessionStorage.getItem('_stoq_pls') || '0', 10) || 0) + 1; 14823 window.sessionStorage.setItem('_stoq_pls', String(_stoqPageSeq)); 14824 } catch (e) { } 14825 Shopify?.analytics?.publish?.('stoq_initialized', { 14826 cart_token: _stoqInitConfig.cartToken || '', 14827 page_url: window.location.href, 14828 page_type: _stoqInitConfig.pageType || '', 14829 shop_domain: _stoqInitConfig.shop || '', 14830 market_id: _stoqInitConfig.marketId || '', 14831 country_code: _stoqInitConfig.countryIsoCode || '', 14832 detected_variant_ids: _stoqDetectedVariantIds, 14833 selected_variant_id: _stoqSelectedVariantId || '', 14834 page_load_seq: _stoqPageSeq, 14835 liquid_rendered_at: _stoqInitConfig.liquidRenderedAt || 0, 14836 app_version: _stoqInitConfig.appVersion || '', 14837 liquid_cache_age: _stoqInitConfig.liquidCacheAge, 14838 inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '', 14839 inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId], 14840 }); 14841 } catch (e) { 14842 console.debug('STOQ - stoq_initialized publish failed:', e); 14843 } 14844 try { 14845 var _sqTrack = window._RestockRocketConfig; 14846 if (_sqTrack.preordersConfigured) { 14847 document.addEventListener('click', function (e) { 14848 try { 14849 var t = e.target; 14850 if (!t || !t.closest) return; 14851 var host = t.closest('.shopify-payment-button, shopify-payment-terms'); 14852 if (!host) return; 14853 var channel = host.matches && host.matches('shopify-payment-terms') 14854 ? 'shop_pay_installments' : 'buy_now'; 14855 var form = host.closest('form'); 14856 var vidEl = form && form.querySelector('[name="id"]'); 14857 var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || ''; 14858 var _sqVidNum = Number(variantId); 14859 var _sqPlan = null; 14860 var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : []; 14861 var _sqMktId = Number(_sqTrack.marketId); 14862 var _sqForVariant = function (pl) { 14863 return pl && pl.enabled && Array.isArray(pl.variant_ids) && 14864 pl.variant_ids.indexOf(_sqVidNum) !== -1; 14865 }; 14866 _sqPlans.forEach(function (pl) { 14867 if (!_sqPlan && _sqForVariant(pl) && pl.markets_enabled && 14868 Array.isArray(pl.shopify_market_ids) && 14869 pl.shopify_market_ids.indexOf(_sqMktId) !== -1) { _sqPlan = pl; } 14870 }); 14871 if (!_sqPlan) { 14872 _sqPlans.forEach(function (pl) { 14873 if (!_sqPlan && _sqForVariant(pl) && !pl.markets_enabled) { _sqPlan = pl; } 14874 }); 14875 } 14876 Shopify?.analytics?.publish?.('stoq_accelerated_checkout_clicked', { 14877 variant_id: variantId, 14878 product_id: (_sqTrack.product && _sqTrack.product.id) || '', 14879 channel: channel, 14880 market_id: _sqTrack.marketId || '', 14881 country_code: _sqTrack.countryIsoCode || '', 14882 page_type: _sqTrack.pageType || '', 14883 cart_token: _sqTrack.cartToken || '', 14884 page_url: (window.location && window.location.href) || '', 14885 properties: { 14886 is_preorder_variant: (function () { 14887 var vid = Number(variantId); 14888 var has = function (a) { return Array.isArray(a) && a.indexOf(vid) !== -1; }; 14889 return has(_sqTrack.preorderVariantIds) || 14890 has(_sqTrack.cachedPreorderVariantIds && 14891 _sqTrack.cachedPreorderVariantIds.preorder_variant_ids); 14892 })(), 14893 in_enabled_plan: !!_sqPlan, 14894 is_instock_variant: (function () { 14895 var has = function (a) { return Array.isArray(a) && a.indexOf(_sqVidNum) !== -1; }; 14896 return has(_sqTrack.inStockVariantIds) || 14897 has(_sqTrack.cachedInStockVariantIds && 14898 _sqTrack.cachedInStockVariantIds.in_stock_variant_ids); 14899 })(), 14900 enrolled_plan_id: (_sqPlan && (_sqPlan.shopify_selling_plan_id || _sqPlan.shopify_selling_plan_group_id)) || '', 14901 enrolled_plan_provider: (_sqPlan && _sqPlan.inventory_provider) || '', 14902 block_enabled: !(_sqTrack.cachedSettings && _sqTrack.cachedSettings.block_accelerated_checkout === false), 14903 gate_armed: !!_sqTrack.acceleratedGateArmed, 14904 gate_active_at_click: !!(document.documentElement && 14905 document.documentElement.classList.contains('stoq-buy-now-pending')), 14906 blocked: (function () { 14907 try { 14908 var rr = window._RestockRocket; 14909 return !!(rr && typeof rr.willBlockAcceleratedCl
14909ick === 'function' && 14910 rr.willBlockAcceleratedClick(e)); 14911 } catch (err) { return false; } 14912 })(), 14913 }, 14914 }); 14915 } catch (err) { } 14916 }, true); 14917 } 14918 } catch (e) { } 14919 function applyTranslations(settings) { 14920 try { 14921 if (!settings || !settings.multi_language_enabled) { 14922 return settings; 14923 } 14924 14925 if (!settings.translations) { 14926 console.debug('STOQ - No translations found, skipping translation'); 14927 return settings; 14928 } 14929 14930 const normalizedLocale = window._RestockRocketConfig.normalizedLocale; 14931 const translations = settings.translations; 14932 14933 if (!normalizedLocale) { 14934 console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {})); 14935 delete settings.translations; 14936 return settings; 14937 } 14938 14939 console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`); 14940 14941 const translatedFields = translations[normalizedLocale]; 14942 if (translatedFields && typeof translatedFields === 'object') { 14943 Object.keys(translatedFields).forEach(function(key) { 14944 const value = translatedFields[key]; 14945 if (value !== null && value !== undefined && value !== '') { 14946 settings[key] = value; 14947 } 14948 }); 14949 } else { 14950 console.debug('STOQ - No translated fields found for locale:', normalizedLocale); 14951 } 14952 14953 delete settings.translations; 14954 return settings; 14955 } catch (e) { 14956 console.debug('STOQ - error applying translations:', e); 14957 return settings; 14958 } 14959 } 14960 function setupCartSellingPlanUpdater(settings) { 14961 window.addEventListener('stoq:inventory-data-loaded', function(event) { 14962 console.debug('STOQ - Inventory data loaded, updating cart selling plans'); 14963 if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) { 14964 window._RestockRocket.updateCartSellingPlans() 14965 .then(hasUpdates => { 14966 if (hasUpdates) { 14967 console.debug('STOQ - cart selling plans updated successfully'); 14968 } else { 14969 console.debug('STOQ - no cart selling plan updates needed'); 14970 } 14971 }) 14972 .catch(error => { 14973 console.error('STOQ - error updating cart selling plans:', error); 14974 }); 14975 } 14976 }); 14977 } 14978 function storefrontGraphql(query, variables) { 14979 const cfg = window._RestockRocketConfig; 14980 if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) { 14981 return Promise.reject(new Error('Storefront API unavailable')); 14982 } 14983 return fetch( 14984 `https://${cfg.shop}/api/${cfg.storefrontApiVersion}/graphql.json`, 14985 { 14986 method: 'POST', 14987 headers: { 14988 'Content-Type': 'application/json', 14989 'X-Shopify-Storefront-Access-Token': cfg.storefrontAccessToken, 14990 }, 14991 body: JSON.stringify({ query: query, variables: variables }), 14992 } 14993 ) 14994 .then(function(response) { 14995 if (!response.ok) { throw new Error('Storefront API HTTP ' + response.status); } 14996 return response.json(); 14997 }) 14998 .then(function(body) { 14999 if (body && body.errors && body.errors.length) { 15000 throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', ')); 15001 } 15002 return body && body.data; 15003 }); 15004 } 15005 function fetchStorefrontShopMetafield(key) { 15006 const cfg = window._RestockRocketConfig; 15007 const query = 'query StoqShopMetafield($namespace: String!, $key: String!) { shop { metafield(namespace: $namespace, key: $key) { value } } }'; 15008 return storefrontGraphql(query, { namespace: cfg.metafieldNamespace, key: key }) 15009 .then(function(data) { 15010 const value = data && data.shop && data.shop.metafield && data.shop.metafield.value; 15011 if (!value) { throw new Error('Storefront API returned no ' + key + ' metafield value'); } 15012 return JSON.parse(value); 15013 }); 15014 } 15015 (function loadStorefrontSettings() { 15016 const cfg = window._RestockRocketConfig; 15017 if (!cfg.storefrontAccessToken || cfg.disableStorefrontApi === true) return; 15018 function run() { 15019 // The live-settings read is one more shop-level metafield fetch, so it 15020 // shares fetchStorefrontShopMetafield with the integrations/selling_plans 15021 // reads rather than re-issuing the same query + parse. 15022 fetchStorefrontShopMetafield('settings') 15023 .then(function(settings) { 15024 cfg.storefrontSettings = settings; 15025 console.debug('STOQ - stored live settings from Storefront API on config.storefrontSettings'); 15026 }) 15027 .catch(function(e) { 15028 console.debug('STOQ - Storefront settings fetch failed (non-fatal):', e && e.message); 15029 }); 15030 } 15031 15032 if (typeof window.requestIdleCallback === 'function') { 15033 window.requestIdleCallback(run, { timeout: 5000 }); 15034 } else { 15035 setTimeout(run, 0); 15036 } 15037 })(); 15038 const cachedSettings = window._RestockRocketConfig.cachedSettings; 15039 const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null; 15040 15041 if (validCachedSettings) { 15042 console.debug('STOQ - using cached settings'); 15043 initializeScripts(validCachedSettings); 15044 } else { 15045 console.debug('STOQ - fetching fresh settings'); 15046 const headers = { 15047 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 15048 'ngrok-skip-browser-warning': 'skip' 15049 }; 15050 15051 if (window.Shopify?.theme?.role === 'main') { 15052 headers['X-Shopify-Theme-Schema-Name'] = window.Shopify.theme.schema_name; 15053 headers['X-Shopify-Theme-Schema-Version'] = window.Shopify.theme.schema_version; 15054 headers['X-Shopify-Theme-Store-Id'] = window.Shopify.theme.theme_store_id; 15055 } 15056 15057 fetch( 15058 `${window._RestockRocketConfig.host}/api/v1/setting.json?translation_locale=${window._RestockRocketConfig.normalizedLocale}`, 15059 { headers } 15060 ) 15061 .then(function(response) { 15062 if (!response.ok) { 15063 throw new Error('Network response was not ok'); 15064 } 15065 return response.json(); 15066 }) 15067 .then(function(settings) { 15068 initializeScripts(settings); 15069 }) 15070 .catch(function(error) { 15071 if (cachedSettings) { 15072 console.debug('STOQ - using expired cached settings as fallback'); 15073 initializeScripts(cachedSettings); 15074 } else { 15075 console.error('STOQ - failed to load settings:', error); 15076 } 15077 }) 15078 .catch(function(e) { 15079 console.error(e) 15080 }) 15081 } 15082 15083 function fetchEmbedConfig(endpoint, apply) { 15084 return fetch( 15085 `${window._RestockRocketConfig.host}/api/v1/embed/${endpoint}.json`, 15086 { 15087 headers: { 15088 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 15089 'ngrok-skip-browser-warning': 'skip' 15090 } 15091 } 15092 ) 15093 .then(function(response) { 15094 if (!response.ok) throw new Error(`Failed to fetch ${endpoint}`); 15095 return response.json(); 15096 }) 15097 .then(function(data) {
15098 try { 15099 apply(data); 15100 } catch (applyError) { 15101 console.error('STOQ - apply failed for ' + endpoint + ':', applyError); 15102 throw applyError; 15103 } 15104 }) 15105 .catch(function(error) { 15106 console.debug(`STOQ - using cached ${endpoint}:`, error.message); 15107 }); 15108 } 15109 function refreshShopConfig(source) { 15110 const cfg = window._RestockRocketConfig; 15111 const viaEmbed = function() { return fetchEmbedConfig(source.endpoint, source.apply); }; 15112 const flagOn = !!cfg.readFlags && cfg.readFlags[source.flag] === true; 15113 if (!flagOn || source.embedOnly === true) { return viaEmbed(); } 15114 15115 return fetchStorefrontShopMetafield(source.metafieldKey) 15116 .then(function(value) { 15117 if (!source.isValid(value)) { throw new Error(source.metafieldKey + ' metafield is not a valid ' + source.endpoint + ' payload'); } 15118 source.apply(value); 15119 console.debug('STOQ - refreshed ' + source.endpoint + ' from the Storefront API'); 15120 }) 15121 .catch(function(error) { 15122 console.debug('STOQ - Storefront ' + source.endpoint + ' read failed, using embed:', error.message); 15123 return viaEmbed(); 15124 }); 15125 } 15126 function refreshIntegrations() { 15127 const cfg = window._RestockRocketConfig; 15128 return refreshShopConfig({ 15129 endpoint: 'integrations', 15130 metafieldKey: 'integrations', 15131 flag: 'enable_storefront_integrations_read', 15132 isValid: function(value) { return Array.isArray(value); }, 15133 apply: function(data) { 15134 cfg.integrations = data; 15135 } 15136 }); 15137 } 15138 function refreshSellingPlans(embedOnly) { 15139 const cfg = window._RestockRocketConfig; 15140 return refreshShopConfig({ 15141 embedOnly: embedOnly === true, 15142 endpoint: 'selling_plans', 15143 metafieldKey: 'cachedSellingPlans', 15144 flag: 'enable_storefront_selling_plans_read', 15145 isValid: function(value) { return !!value && Array.isArray(value.plans); }, 15146 apply: function(data) { 15147 cfg.sellingPlans = data.plans; 15148 cfg.disabledSellingPlanIds = data.disabled_plan_ids || []; 15149 if (data && data.read_flags && typeof data.read_flags === 'object' && !Array.isArray(data.read_flags)) { 15150 cfg.readFlags = data.read_flags; 15151 } 15152 } 15153 }); 15154 } 15155 15156 function initializeScripts(settings) { 15157 settings = applyTranslations(settings); 15158 window._RestockRocketConfig.settings = settings; 15159 console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`); 15160 const forceEmbedSellingPlans = settings.force_embed_selling_plans === true; 15161 const staleRefresh = !window._RestockRocketConfig.isLiquidCacheFresh && !settings.disable_refresh_on_stale_liquid; 15162 if (forceEmbedSellingPlans || staleRefresh) { 15163 console.debug('STOQ - refreshing selling_plans' + (staleRefresh ? ' + integrations (Liquid cache stale)' : ' (force_embed_selling_plans)')); 15164 const refreshes = [refreshSellingPlans(forceEmbedSellingPlans)]; 15165 if (staleRefresh) { refreshes.push(refreshIntegrations()); } 15166 Promise.race([ 15167 Promise.all(refreshes), 15168 new Promise(function(resolve) { setTimeout(resolve, 1000); }) 15169 ]).then(function() { loadScripts(settings); }); 15170 return; 15171 } 15172 15173 loadScripts(settings); 15174 } 15175 15176 function loadScripts(settings) { 15177 setupCartSellingPlanUpdater(settings); 15178 15179 if(settings.enable_app) { 15180 const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { 15181 return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); 15182 }) 15183 const hasEnabledOffer = Array.isArray(window._RestockRocketConfig.sellingPlans) 15184 && window._RestockRocketConfig.sellingPlans.some(function(plan) { return plan && plan.enabled; }); 15185 const hasDisabledPlanIds = Array.isArray(window._RestockRocketConfig.disabledSellingPlanIds) 15186 && window._RestockRocketConfig.disabledSellingPlanIds.length > 0; 15187 const usePreorderBuild = settings.preorder_enabled || hasEnabledOffer || hasDisabledPlanIds; 15188 15189 const collectionScriptUrl = usePreorderBuild 15190 ? window._RestockRocketConfig.scriptUrlCollection 15191 : window._RestockRocketConfig.scriptUrlCollectionBis; 15192 const productScriptUrl = usePreorderBuild 15193 ? window._RestockRocketConfig.scriptUrlProduct 15194 : window._RestockRocketConfig.scriptUrlProductBis; 15195 15196 const pageType = window._RestockRocketConfig.pageType; 15197 const collectionPageTypes = ['collection', 'index', 'search', 'page']; 15198
15199 if(collectionPageTypes.indexOf(pageType) !== -1 && (settings[`show_button_on_${pageType}`] || settings[`preorder_${pageType}_enabled`])) { 15200 createRestockRocketScript(collectionScriptUrl); 15201 } else if(pageType === 'product') { 15202 createRestockRocketScript(productScriptUrl); 15203 } else if(hijackIntegration) { 15204 createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); 15205 } else if(usePreorderBuild) { 15206 createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); 15207 } else { 15208 console.debug(`STOQ - no scripts enabled for ${pageType}`); 15209 } 15210 const appLoadedEvent = new CustomEvent('stoq:loaded', { 15211 detail: { 15212 pageType: window._RestockRocketConfig.pageType, 15213 enabled: settings.enable_app, 15214 settings: settings, 15215 preorderEnabled: settings.preorder_enabled 15216 } 15217 }); 15218 console.debug('STOQ - dispatching app loaded event'); 15219 window.dispatchEvent(appLoadedEvent); 15220 } 15221 } 15222</script>
15222<style id="RestockRocketStyle">html.stoq-buy-now-pending .shopify-payment-button{pointer-events:none!important}</style> 15223 15224 15225</div><div id="shopify-block-AR2FMSW9nNERWcU9kV__6174324309569838175" class="shopify-block shopify-app-block"> 15226 15227 15228<div class="smile-shopify-init" 15229 data-channel-key="channel_Qg084F1gphccKB010erN8BQL" 15230 15231></div> 15232 15233 15234</div><div id="shopify-block-ARVZGby9xRG9peXNVY__8746983209849429782" class="shopify-block shopify-app-block">
15234<script type="module" src="https://cdn.shopify.com/extensions/01a11a42-f57c-7aa4-86ea-84d575224241/dealeasy-289/assets/dealeasy-widgets.esm.js" defer></script>
15234 15235
15236<script> 15237 var dealeasyPublicAccessToken = '3ad6d6f01c27097bb7762c159fb2295f' || ''; 15238 var dealeasyUsingTranslatedHandles = false || false; 15239 var dealeasyPublicApiVersion = "2026-07"; 15240 15241 window.dealeasyProduct = { 15242 id: 'gid://shopify/Product/' + '', 15243 handle: '' 15244 }; 15245 15246 var editableQtySelector = '' === "true"; 15247 var minimizeFreeGiftTitle = '' === "true"; 15248 var isRtlLanguageStore = '' === "true"; 15249 var discountRoundingMethod = '';</script>
15249 15250 15251 15252 15253 15254<!-- BEGIN app snippet: custom-css --><style></style><!-- END app snippet --> 15255<!-- BEGIN app snippet: custom-script -->
15255<script></script>
15255<!-- END app snippet --> 15256 15257 15258
15258<script></script>
15258 15259<style></style> 15260 15261 15262 15263</div><div id="shopify-block-Aa3UrMW9IZE1TVFNUQ__5537102726230261467" class="shopify-block shopify-app-block"> 15264 15265 15266 <!-- BEGIN app snippet: quiz-popup-styles --><style> 15267 #quiz-container { 15268 position: fixed; 15269 top: 0; 15270 left: 0; 15271 width: 100%; 15272 height: 100%; 15273 display: flex; 15274 flex-direction: column; 15275 justify-content: center; 15276 align-items: center; 15277 background: rgba(0, 0, 0, 0.5); 15278 z-index: var(--quiz-z-index, 100); 15279 overflow: auto; 15280 touch-action: manipulation; 15281 } 15282 #quiz-container .quiz-content { 15283 position: relative; 15284 border-radius: 8px; 15285 box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); 15286 z-index: var(--quiz-content-z-index, 101); 15287 max-height: 100%; 15288 overflow: auto; 15289 background: white; 15290 touch-action: manipulation; 15291 } 15292 #quiz-container .close-btn { 15293 position: absolute; 15294 top: 10px; 15295 right: 10px; 15296 background: none; 15297 border: none; 15298 font-size: 32px; 15299 cursor: pointer; 15300 z-index: var(--close-btn-z-index, 102); 15301 margin-left: auto; 15302 color: var(--close-btn-color, #777777); 15303 line-height: 32px; 15304 } 15305 body.revenuehunt-popup-open .react-dropdown-select-dropdown { 15306 z-index: var(--quiz-dropdown-z-index, 103) !important; 15307 } 15308</style> 15309<!-- END app snippet --> 15310 <!-- BEGIN app snippet: quiz-global-vars -->
15310<script> 15311 if (!window.quizUrls) window.quizUrls = {}; 15312 15313 window.quizUrls['quiz_6jRk3l'] = "https:\/\/cdn.shopify.com\/s\/files\/1\/0117\/1210\/2462\/files\/quiz-6jRk3l.json?v=1777035196"; 15314 15315 15316 if (!window.quiz_locale) { 15317 window.quiz_locale = 'en' 15318 } 15319 if (!window.quiz_country) { 15320 window.quiz_country = 'US' 15321 } 15322 if (!window.quiz_currency) { 15323 window.quiz_currency = '${{amount}} CAD' 15324 } 15325 if (!window.quiz_market_id) { 15326 window.quiz_market_id = 'gid://shopify/Market/2088304828' 15327 } 15328</script>
15328 15329<!-- END app snippet --> 15330 <!-- BEGIN app snippet: quiz-renderer-script -->
15330<script type="module" src="https://cdn.shopify.com/extensions/01a11ac7-4734-7248-af65-43709269384f/revenuehunt-202/assets/quiz-renderer.js" defer></script>
15330<!-- END app snippet --> 15331 <!-- BEGIN app snippet: quiz-popup-setup --><!-- BEGIN app snippet: quiz-url-functions -->
15331<script> 15332 /** 15333 * Quiz URL Functions 15334 * 15335 * Single source of truth for quiz URL parsing and clearing. 15336 */ 15337 (function() { 15338 if (window.revenueHuntQuizUrl && window.revenueHuntQuizUrl.__initialized) { 15339 return; 15340 } 15341 15342 window.revenueHuntQuizUrl = { 15343 __initialized: true, 15344 15345 isQuizHash: function(hash) { 15346 return ( 15347 hash === '#quiz' || 15348 /^#quiz-[A-Za-z0-9]+$/.test(hash) || 15349 /^#response-[A-Za-z0-9]+$/.test(hash) 15350 ); 15351 }, 15352 15353 getQuizKey: function(hash, defaultQuizKey) { 15354 if (!this.isQuizHash(hash)) return null; 15355 15356 const hashTarget = String(hash || '').replace(/^#/, ''); 15357 15358 if (hashTarget === 'quiz') { 15359 return defaultQuizKey; 15360 } 15361 15362 if (hashTarget.startsWith('quiz-')) { 15363 return 'quiz_' + hashTarget.substring(5); 15364 } 15365 15366 if (hashTarget.startsWith('response-')) { 15367 return hashTarget; 15368 } 15369 15370 return null; 15371 }, 15372 15373 getTarget: function(hash, search, defaultQuizKey) {
15374 const hashTarget = this.getQuizKey(hash, defaultQuizKey); 15375 if (hashTarget) return hashTarget; 15376 15377 const responseId = new URLSearchParams(String(search || '')).get('response_id'); 15378 if (responseId && /^[A-Za-z0-9]+$/.test(responseId)) { 15379 return 'response-' + responseId; 15380 } 15381 15382 return null; 15383 }, 15384 15385 clear: function() { 15386 const url = new URL(window.location.href); 15387 let changed = false; 15388 15389 if (this.isQuizHash(url.hash)) { 15390 url.hash = ''; 15391 changed = true; 15392 } 15393 15394 if (url.searchParams.has('response_id')) { 15395 url.searchParams.delete('response_id'); 15396 changed = true; 15397 } 15398 15399 if (changed) { 15400 window.history.replaceState(window.history.state, '', url.toString()); 15401 } 15402 }, 15403 }; 15404 })(); 15405</script>
15405 15406<!-- END app snippet --> 15407<!-- BEGIN app snippet: quiz-popup-functions -->
15407<script> 15408 /** 15409 * Popup Functions 15410 * 15411 * Shared, setting-free quiz popup behavior. 15412 * Individual theme extension instances register their own popup config with 15413 * window.revenueHuntQuizPopup.register(config), then open by instance id. 15414 * 15415 * Popup extensions are intentionally singleton: only one #quiz-container 15416 * exists at a time. Multiple instances can register configs, but opening a 15417 * popup replaces the current popup unless the caller chooses another policy. 15418 * 15419 * Used by: automatic popup, link popup, chat button 15420 */ 15421 (function() { 15422 if (window.revenueHuntQuizPopup && window.revenueHuntQuizPopup.__initialized) { 15423 return; 15424 } 15425 15426 function getConfig(instanceId) { 15427 return window.revenueHuntQuizPopup.configs[String(instanceId)] || null; 15428 } 15429 15430 function applyPopupStyles(quizContainer, quizContent, config) { 15431 const zIndex = parseInt(config.zIndex || 100, 10); 15432 const width = parseInt(config.width || 100, 10); 15433 const height = parseInt(config.height || 100, 10); 15434 15435 quizContainer.style.setProperty('--quiz-z-index', zIndex); 15436 quizContainer.style.setProperty('--quiz-content-z-index', zIndex + 1); 15437 quizContainer.style.setProperty('--close-btn-z-index', zIndex + 2); 15438 quizContainer.style.setProperty('--close-btn-color', config.closeColor || '#777777'); 15439 15440 // Quiz dropdowns are portaled to document.body, outside #quiz-container. 15441 // Keep this one popup-open body variable so portaled dropdowns stay above the modal. 15442 document.body.style.setProperty('--quiz-dropdown-z-index', zIndex + 3); 15443 15444 quizContent.style.width = `${width}%`; 15445 quizContent.style.height = `${height}%`; 15446 } 15447 15448 function markPopupShown(quizKey) { 15449 // Only mark the popup as shown when the key already targets a quiz (not for response hashes) 15450 if (typeof quizKey === 'string' && quizKey.startsWith('quiz_')) { 15451 window.revenueHuntSetStorage('revenuehunt-popup-already-shown-' + quizKey, true, 1); 15452 } 15453 } 15454 15455 window.revenueHuntQuizPopup = { 15456 __initialized: true, 15457 configs: {}, 15458 15459 register: function(config) { 15460 if (!config || !config.instanceId) return; 15461 15462 this.configs[String(config.instanceId)] = { 15463 instanceId: String(config.instanceId), 15464 source: config.source || 'popup', 15465 width: config.width || 100, 15466 height: config.height || 100, 15467 zIndex: config.zIndex || 100, 15468 closeColor: config.closeColor || '#777777', 15469 }; 15470 }, 15471 15472 close: function(options) { 15473 const settings = options || {}; 15474 const quizContainer = document.getElementById('quiz-container'); 15475 15476 if (quizContainer) { 15477 quizContainer.remove(); 15478 } 15479 15480 document.body.classList.remove('revenuehunt-popup-open'); 15481 document.body.style.removeProperty('--quiz-dropdown-z-index'); 15482 15483 if (settings.clearHash !== false && window.revenueHuntQuizUrl) { 15484 window.revenueHuntQuizUrl.clear(); 15485 } 15486 }, 15487 15488 getContainer: function(instanceId) { 15489 const owner = String(instanceId); 15490 const containers = document.querySelectorAll('[data-popup-owner]'); 15491 15492 for (let i = 0; i < containers.length; i += 1) { 15493 if (containers[i].dataset.popupOwner === owner) { 15494 return containers[i]; 15495 } 15496 } 15497 15498 return null; 15499 }, 15500 15501 resize: function(instanceId) { 15502 const config = getConfig(instanceId); 15503 const quizContainer = this.getContainer(instanceId); 15504 const quizContent = quizContainer && quizContainer.querySelector('.quiz-content'); 15505 15506 if (!config || !quizContainer || !quizContent) return; 15507 15508 applyPopupStyles(quizContainer, quizContent, config); 15509 }, 15510 15511 open: function(instanceId, quizKey, options) { 15512 const config = getConfig(instanceId); 15513 if (!config) return null; 15514 15515 const settings = options || {}; 15516 15517 const existingQuizContainer = document.getElementById('quiz-container'); 15518 if (existingQuizContainer) { 15519 if (settings.ifOpen === 'mark-shown') { 15520 markPopupShown(quizKey); 15521 return null; 15522 } 15523
15524 existingQuizContainer.remove(); 15525 } 15526 15527 markPopupShown(quizKey); 15528 15529 const popupRenderId = `popup-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`; 15530 const quizContainer = document.createElement('div'); 15531 quizContainer.id = 'quiz-container'; 15532 // `needsclick` opts out of FastClick, which legacy Shopify themes (e.g. Brooklyn) bundle in 15533 // theme.js. FastClick collides with the renderer's own touch handler on iOS and swallows the 15534 // first taps until a refresh. 15535 quizContainer.className = 'quiz-container needsclick'; 15536 quizContainer.dataset.quizInstanceId = popupRenderId; 15537 quizContainer.dataset.popupOwner = config.instanceId; 15538 quizContainer.dataset.popupSource = config.source; 15539 if (settings.openedBy) { 15540 quizContainer.dataset.openedBy = settings.openedBy; 15541 } 15542 quizContainer.style.display = 'flex'; 15543 document.body.classList.add('revenuehunt-popup-open'); 15544 15545 const quizContent = document.createElement('div'); 15546 quizContent.className = 'quiz-content needsclick'; 15547 applyPopupStyles(quizContainer, quizContent, config); 15548 15549 const closeButton = document.createElement('button'); 15550 closeButton.className = 'close-btn'; 15551 closeButton.setAttribute('aria-label', 'Close quiz'); 15552 15553 const closeIcon = document.createElement('span'); 15554 closeIcon.textContent = 'Ã'; 15555 closeButton.appendChild(closeIcon); 15556 15557 const quizRenderer = document.createElement('quiz-renderer'); 15558 quizRenderer.setAttribute('data-quiz-instance-id', popupRenderId); 15559 quizRenderer.setAttribute('target', String(quizKey)); 15560 quizRenderer.setAttribute('type', 'modal'); 15561 quizRenderer.setAttribute('aria-label', 'Quiz'); 15562 quizRenderer.setAttribute( 15563 'over-plan-at', 15564 "", 15565 ); 15566 quizRenderer.setAttribute( 15567 'execute-custom-features', 15568 'true', 15569 ); 15570 quizRenderer.setAttribute('myshopify-domain', "ariavent.myshopify.com"); 15571 15572 quizContent.appendChild(closeButton); 15573 quizContent.appendChild(quizRenderer); 15574 quizContainer.appendChild(quizContent); 15575 document.body.appendChild(quizContainer); 15576 15577 closeButton.addEventListener('click', function () { 15578 window.revenueHuntQuizPopup.close(); 15579 }); 15580 15581 quizContainer.addEventListener('click', function (event) { 15582 if (event.target === quizContainer) { 15583 window.revenueHuntQuizPopup.close(); 15584 } 15585 }); 15586 15587 return quizContainer; 15588 }, 15589 }; 15590 15591 window.revenueHuntCloseQuizContainer = function(options) { 15592 window.revenueHuntQuizPopup.close(options); 15593 }; 15594 })(); 15595</script>
15595 15596<!-- END app snippet --> 15597<!-- BEGIN app snippet: quiz-popup-config -->
15597<script> 15598 (function() { 15599 if (!window.revenueHuntQuizPopup) return; 15600 15601 window.revenueHuntQuizPopup.register({ 15602 instanceId: "link-popup-Aa3UrMW9IZE1TVFNUQ__5537102726230261467", 15603 source: "link-popup", 15604 width: "100", 15605 height: "100", 15606 zIndex: 100, 15607 closeColor: "#777777", 15608 }); 15609 })(); 15610</script>
15610 15611<!-- END app snippet --> 15612<!-- END app snippet --> 15613 <!-- BEGIN app snippet: quiz-storage-helpers -->
15613<script> 15614 /** 15615 * Storage Helpers 15616 * 15617 * Provides localStorage utilities with automatic expiration. 15618 * Used to track popup display state, greeting/notification dismissals, etc. 15619 * 15620 * Functions: 15621 * - revenueHuntGetStorage(name): Get value, returns null if expired 15622 * - revenueHuntSetStorage(name, value, days): Set value with expiration 15623 */ 15624 window.revenueHuntGetStorage = function(name) { 15625 try { 15626 const itemStr = localStorage.getItem(name); 15627 if (!itemStr) { 15628 return null; 15629 } 15630 const item = JSON.parse(itemStr); 15631 if (Date.now() > item.expiry) { 15632 localStorage.removeItem(name); 15633 return null; 15634 } 15635 return item.value; 15636 } catch (e) { 15637 console.warn('Failed to get localStorage:', e); 15638 return null; 15639 } 15640 }; 15641 15642 window.revenueHuntSetStorage = function(name, value, days) { 15643 try { 15644 const expiry = Date.now() + (days * 24 * 60 * 60 * 1000); 15645 const data = { 15646 value: value, 15647 expiry: expiry 15648 }; 15649 localStorage.setItem(name, JSON.stringify(data)); 15650 } catch (e) { 15651 console.warn('Failed to set localStorage:', e); 15652 } 15653 }; 15654</script>
15654<!-- END app snippet --> 15655 <!-- BEGIN app snippet: quiz-block-priority -->
15655<script> 15656 /** 15657 * Block Priority System 15658 * 15659 * Ensures only ONE quiz extension of each type activates per page. 15660 * Priority: First block > First global 15661 * 15662 * Use cases: 15663 * - Multiple blocks of same type: Only first block runs 15664 * - Multiple globals of same type: Only first global runs (if no blocks) 15665 * - Mix of block + global: Only block runs, global is skipped 15666 */ 15667 15668 // Registry for synchronous block registration (works before document.body exists) 15669 window.revenueHuntBlockRegistry = window.revenueHuntBlockRegistry || {}; 15670 15671 /** 15672 * Registers a block extension 15673 * Uses JS variable instead of DOM to support synchronous registration before document.body exists 15674 * @param {string} type - Extension type (e.g., 'link-popup', 'chat-button', 'automatic-popup') 15675 * @returns {boolean} - True if registered successfully, false if already registered 15676 */ 15677 window.revenueHuntRegisterBlock = function(type) { 15678 if (window.revenueHuntBlockRegistry[type]) { 15679 return false; 15680 } 15681 window.revenueHuntBlockRegistry[type] = true; 15682 return true; 15683 }; 15684 15685 /** 15686 * Checks if a block extension is active 15687 * @param {string} type - Extension type 15688 * @returns {boolean} - True if block extension is active 15689 */ 15690 window.revenueHuntIsBlockActive = function(type) { 15691 return !!window.revenueHuntBlockRegistry[type]; 15692 }; 15693 15694 /** 15695 * Registers a global extension 15696 * @param {string} type - Extension type 15697 * @returns {boolean} - True if registered successfully, false if already registered 15698 */ 15699 window.revenueHuntRegisterGlobal = function(type) { 15700 const globalMarkerId = 'revenuehunt-' + type + '-global-active'; 15701 if (document.getElementById(globalMarkerId)) { 15702 return false; 15703 } 15704 const marker = document.createElement('div'); 15705 marker.id = globalMarkerId; 15706 marker.style.display = 'none'; 15707 document.body.appendChild(marker); 15708 return true; 15709 }; 15710</script>
15710<!-- END app snippet --> 15711 <!-- BEGIN app snippet: quiz-link-quiz-script -->
15711<script> 15712 /** 15713 * Link Popup Quiz Script 15714 * 15715 * Handles quiz popups triggered by quiz/response hashes or a response_id query parameter. 15716 * Also handles direct URL navigation (e.g., /page#quiz or /page?response_id={id}). 15717 * 15718 * Priority system: 15719 * - Block extensions: Register and exit if already registered 15720 * - Global extensions: Exit if block exists OR already registered 15721 */ 15722 document.addEventListener('DOMContentLoaded', function() { 15723 const isBlock = false; 15724 15725 if (isBlock) { 15726 if (!window.revenueHuntRegisterBlock('link-popup')) { 15727 return; 15728 } 15729 } else { 15730 if (window.revenueHuntIsBlockActive('link-popup')) { 15731 return; 15732 } 15733 if (!window.revenueHuntRegisterGlobal('link-popup')) { 15734 return; 15735 } 15736 } 15737 15738 const defaultQuizKey = 'quiz_6jRk3l'; 15739 const popupInstanceId = "link-popup-Aa3UrMW9IZE1TVFNUQ__5537102726230261467"; 15740 15741 function getActiveRenderer() { 15742 const quizContainer = document.getElementById('quiz-container'); 15743 return quizContainer && quizContainer.querySelector('quiz-renderer'); 15744 } 15745 15746 function syncQuizPopupWithUrl() { 15747 const target = window.revenueHuntQuizUrl.getTarget( 15748 window.location.hash, 15749 window.location.search, 15750 defaultQuizKey, 15751 ); 15752 const quizContainer = document.getElementById('quiz-container'); 15753 15754 if (!target) { 15755 if ( 15756 quizContainer && 15757 quizContainer.dataset.openedBy === 'url' && 15758 window.revenueHuntQuizPopup 15759 ) { 15760 window.revenueHuntQuizPopup.close({ clearHash: false }); 15761 } 15762 return; 15763 } 15764 15765 const activeRenderer = getActiveRenderer(); 15766 const activeTarget = activeRenderer && activeRenderer.getAttribute('target'); 15767 15768 if ( 15769 quizContainer && 15770 quizContainer.dataset.openedBy === 'url' && 15771 quizContainer.dataset.popupOwner === popupInstanceId && 15772 activeTarget === target 15773 ) { 15774 return; 15775 } 15776 15777 window.revenueHuntQuizPopup.open(popupInstanceId, target, { openedBy: 'url' }); 15778 } 15779 15780 syncQuizPopupWithUrl(); 15781 window.addEventListener('hashchange', syncQuizPopupWithUrl); 15782 window.addEventListener('popstate', syncQuizPopupWithUrl); 15783 15784 if(window.addEventListener) { 15785 window.addEventListener('message', function(event) { 15786 const data = event.data; 15787 const quizContainer = window.revenueHuntQuizPopup && window.revenueHuntQuizPopup.getContainer(popupInstanceId); 15788 const quizContent = quizContainer && quizContainer.querySelector('.quiz-content'); 15789 const activeRenderer = quizContent && quizContent.querySelector('quiz-renderer'); 15790 const activeInstanceId = activeRenderer && activeRenderer.getAttribute('data-quiz-instance-id'); 15791 15792 if ( 15793 !data || 15794 typeof data !== 'object' || 15795 data.channel !== 'revenuehunt:quiz-renderer' || 15796 data.source !== 'quiz-renderer' || 15797 data.type !== 'isResult' || 15798 !quizContent || 15799 !activeInstanceId || 15800 data.instanceId !== activeInstanceId 15801 ) { 15802 return; 15803 } 15804 15805 window.revenueHuntQuizPopup.resize(popupInstanceId); 15806 }); 15807 } 15808 }); 15809</script>
15809 15810<!-- END app snippet --> 15811 15812 15813 15814</div>
15814<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
15814 15815</body> 15816</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.